1
0
Fork 0

make sure "svn info" output is parsed in a x-platform way

pull/7040/head
Markus Staab 2018-01-15 09:35:49 +01:00 committed by Jordi Boggiano
parent 9bc83d698e
commit e67a559db9
1 changed files with 10 additions and 3 deletions

View File

@ -173,14 +173,21 @@ class SvnDownloader extends VcsDownloader
{
if (preg_match('{.*@(\d+)$}', $fromReference) && preg_match('{.*@(\d+)$}', $toReference)) {
// retrieve the svn base url from the checkout folder
$command = sprintf('svn info %s | grep ^URL:', ProcessExecutor::escape($path));
$command = sprintf('svn info --non-interactive --xml %s', ProcessExecutor::escape($path));
if (0 !== $this->process->execute($command, $output, $path)) {
throw new \RuntimeException(
'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()
);
}
// parse info line like 'URL: https://example.com/my/svn/url'
list ($prefix, $baseUrl) = explode(" ", $output, 2);
$urlPattern = '#<url>(.*)</url>#';
if (preg_match($urlPattern, $output, $matches)) {
$baseUrl = $matches[1];
} else {
throw new \RuntimeException(
'Unable to determine svn url for path '. $path
);
}
// strip paths from references and only keep the actual revision
$fromRevision = preg_replace('{.*@(\d+)$}', '$1', $fromReference);