diff --git a/src/Composer/Package/Loader/RootPackageLoader.php b/src/Composer/Package/Loader/RootPackageLoader.php index a067fa6a8..8db725496 100644 --- a/src/Composer/Package/Loader/RootPackageLoader.php +++ b/src/Composer/Package/Loader/RootPackageLoader.php @@ -179,7 +179,12 @@ class RootPackageLoader extends ArrayLoader return $version; } - return $this->guessHgVersion($config); + $version = $this->guessHgVersion($config); + if (null !== $version) { + return $version; + } + + return $this->guessSvnVersion($config); } } @@ -295,4 +300,29 @@ class RootPackageLoader extends ArrayLoader return $version; } + + private function guessSvnVersion(array $config) + { + // try to fetch current version from svn + if (0 === $this->process->execute('svn info --xml', $output)) { + $trunkPath = isset($config['trunk-path']) ? preg_quote($config['trunk-path'], '#') : 'trunk'; + $branchesPath = isset($config['branches-path']) ? preg_quote($config['branches-path'], '#') : 'branches'; + $tagsPath = isset($config['tags-path']) ? preg_quote($config['tags-path'], '#') : 'tags'; + + $urlPattern = '#.*/('.$trunkPath.'|('.$branchesPath.'|'. $tagsPath .')/(.*))#'; + + if (preg_match($urlPattern, $output, $matches)) { + if (isset($matches[2]) && $branchesPath === $matches[2]) { + // we are in a branches path + $version = $this->versionParser->normalizeBranch($matches[3]); + if ('9999999-dev' === $version) { + $version = 'dev-'.$matches[3]; + } + return $version; + } + + return $this->versionParser->normalize(trim($matches[1])); + } + } + } }