diff --git a/src/Composer/Repository/Vcs/GitHubDriver.php b/src/Composer/Repository/Vcs/GitHubDriver.php old mode 100755 new mode 100644 diff --git a/src/Composer/Repository/Vcs/HgDriver.php b/src/Composer/Repository/Vcs/HgDriver.php old mode 100755 new mode 100644 diff --git a/src/Composer/Repository/Vcs/SvnDriver.php b/src/Composer/Repository/Vcs/SvnDriver.php old mode 100755 new mode 100644 index af42c1f9b..f47722bc4 --- a/src/Composer/Repository/Vcs/SvnDriver.php +++ b/src/Composer/Repository/Vcs/SvnDriver.php @@ -36,6 +36,7 @@ class SvnDriver extends VcsDriver protected $trunkPath = 'trunk'; protected $branchesPath = 'branches'; protected $tagsPath = 'tags'; + protected $packagePath = ''; /** * @var \Composer\Util\Svn @@ -58,6 +59,9 @@ class SvnDriver extends VcsDriver if (isset($this->repoConfig['tags-path'])) { $this->tagsPath = $this->repoConfig['tags-path']; } + if (isset($this->repoConfig['package-path'])) { + $this->packagePath = '/' . trim($this->repoConfig['package-path'], '/'); + } if (false !== ($pos = strrpos($this->url, '/' . $this->trunkPath))) { $this->baseUrl = substr($this->url, 0, $pos); @@ -167,8 +171,10 @@ class SvnDriver extends VcsDriver $line = trim($line); if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) { if (isset($match[1]) && isset($match[2]) && $match[2] !== './') { - $this->tags[rtrim($match[2], '/')] = '/' . $this->tagsPath . - '/' . $match[2] . '@' . $match[1]; + $this->tags[rtrim($match[2], '/')] = $this->buildIdentifier( + '/' . $this->tagsPath . '/' . $match[2], + $match[1] + ); } } } @@ -193,7 +199,10 @@ class SvnDriver extends VcsDriver $line = trim($line); if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) { if (isset($match[1]) && isset($match[2]) && $match[2] === $this->trunkPath . '/') { - $this->branches[$this->trunkPath] = '/' . $this->trunkPath . '/@'.$match[1]; + $this->branches[$this->trunkPath] = $this->buildIdentifier( + '/' . $this->trunkPath, + $match[1] + ); $this->rootIdentifier = $this->branches[$this->trunkPath]; break; } @@ -209,8 +218,10 @@ class SvnDriver extends VcsDriver $line = trim($line); if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) { if (isset($match[1]) && isset($match[2]) && $match[2] !== './') { - $this->branches[rtrim($match[2], '/')] = '/' . $this->branchesPath . - '/' . $match[2] . '@' . $match[1]; + $this->branches[rtrim($match[2], '/')] = $this->buildIdentifier( + '/' . $this->branchesPath . '/' . $match[2], + $match[1] + ); } } } @@ -301,4 +312,18 @@ class SvnDriver extends VcsDriver ); } } + + /** + * Build the identifier respecting "package-path" config option + * + * @param string $baseDir The path to trunk/branch/tag + * @param int $revision The revision mark to add to identifier + * + * @return string + */ + protected function buildIdentifier($baseDir, $revision) + { + return rtrim($baseDir, '/') . $this->packagePath . '/@' . $revision; + } } +