Browse Source

Merge pull request #4417 from sroze/path-repository-store-relative-path

Path repository store relative path
Jordi Boggiano 9 years ago
parent
commit
013a748cb9

+ 16 - 5
src/Composer/Downloader/PathDownloader.php

@@ -33,16 +33,27 @@ class PathDownloader extends FileDownloader
         $this->filesystem->removeDirectory($path);
 
         $this->io->writeError(sprintf(
-            '  - Installing <info>%s</info> (<comment>%s</comment>) from %s',
+            '  - Installing <info>%s</info> (<comment>%s</comment>)',
             $package->getName(),
-            $package->getFullPrettyVersion(),
-            $package->getDistUrl()
+            $package->getFullPrettyVersion()
         ));
 
+        $url = $package->getDistUrl();
+        if (!file_exists($url) || !is_dir($url)) {
+            throw new \RuntimeException(sprintf(
+                'Path "%s" is not found',
+                $path
+            ));
+        }
+
         try {
-            $fileSystem->symlink($package->getDistUrl(), $path);
+            $fileSystem->symlink($url, $path);
+            $this->io->writeError(sprintf('    Symlinked from %s', $url));
         } catch (IOException $e) {
-            $fileSystem->mirror($package->getDistUrl(), $path);
+            $fileSystem->mirror($url, $path);
+            $this->io->writeError(sprintf('    Mirrored from %s', $url));
         }
+
+        $this->io->writeError('');
     }
 }

+ 16 - 7
src/Composer/Repository/PathRepository.php

@@ -60,7 +60,7 @@ class PathRepository extends ArrayRepository
     /**
      * @var string
      */
-    private $path;
+    private $url;
 
     /**
      * @var ProcessExecutor
@@ -81,7 +81,7 @@ class PathRepository extends ArrayRepository
         }
 
         $this->loader = new ArrayLoader();
-        $this->path = realpath(rtrim($repoConfig['url'], '/')) . '/';
+        $this->url = $repoConfig['url'];
         $this->process = new ProcessExecutor($io);
         $this->versionGuesser = new VersionGuesser($config, $this->process, new VersionParser());
 
@@ -97,27 +97,36 @@ class PathRepository extends ArrayRepository
     {
         parent::initialize();
 
-        $composerFilePath = $this->path.'composer.json';
+        $path = $this->getPath();
+        $composerFilePath = $path.'composer.json';
         if (!file_exists($composerFilePath)) {
-            throw new \RuntimeException(sprintf('No `composer.json` file found in path repository "%s"', $this->path));
+            throw new \RuntimeException(sprintf('No `composer.json` file found in path repository "%s"', $path));
         }
 
         $json = file_get_contents($composerFilePath);
         $package = JsonFile::parseJson($json, $composerFilePath);
         $package['dist'] = array(
             'type' => 'path',
-            'url' => $this->path,
+            'url' => $this->url,
             'reference' => '',
         );
 
         if (!isset($package['version'])) {
-            $package['version'] = $this->versionGuesser->guessVersion($package, $this->path) ?: 'dev-master';
+            $package['version'] = $this->versionGuesser->guessVersion($package, $path) ?: 'dev-master';
         }
-        if (is_dir($this->path.'/.git') && 0 === $this->process->execute('git log -n1 --pretty=%H', $output, $this->path)) {
+        if (is_dir($path.'/.git') && 0 === $this->process->execute('git log -n1 --pretty=%H', $output, $path)) {
             $package['dist']['reference'] = trim($output);
         }
 
         $package = $this->loader->load($package);
         $this->addPackage($package);
     }
+
+    /**
+     * @return string
+     */
+    private function getPath()
+    {
+        return realpath(rtrim($this->url, '/')) . '/';
+    }
 }