From 340e9606143ec7e59613aa6b1b343c1c5b5f5bfa Mon Sep 17 00:00:00 2001 From: Andrey Utkin Date: Tue, 23 Apr 2013 12:27:52 +0700 Subject: [PATCH] Allow svn repositories to reside deeper than module root --- src/Composer/Repository/Vcs/GitHubDriver.php | 0 src/Composer/Repository/Vcs/HgDriver.php | 0 src/Composer/Repository/Vcs/SvnDriver.php | 35 +++++++++++++++++--- 3 files changed, 30 insertions(+), 5 deletions(-) mode change 100755 => 100644 src/Composer/Repository/Vcs/GitHubDriver.php mode change 100755 => 100644 src/Composer/Repository/Vcs/HgDriver.php mode change 100755 => 100644 src/Composer/Repository/Vcs/SvnDriver.php 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..f38290063 --- 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 $modulePath = '/'; /** * @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['module-path'])) { + $this->modulePath = '/' . trim($this->repoConfig['module-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->buildModuleId( + '/' . $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->buildModuleId( + '/' . $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->buildModuleId( + '/' . $this->branchesPath . '/' . $match[2], + $match[1] + ); } } } @@ -301,4 +312,18 @@ class SvnDriver extends VcsDriver ); } } + + /** + * Build module identifier respecting the module-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 buildModuleId($baseDir, $revision) + { + return rtrim($baseDir, '/') . $this->modulePath . '/@' . $revision; + } } +