Revision: 47424
Updated Code
at June 8, 2011 01:35 by jigante
Updated Code
<?php
if (count($argv) !== 4)
{
die("Usage: svnforeigncopy from-repo-url to-repo-url local-checkout-dir\n");
}
$from = $argv[1];
$to = $argv[2];
$local = $argv[3];
echo("Creating $to\n");
mysystem("svn mkdir --parents " . escapeshellarg($to));
echo("Checking out $to\n");
mysystem("svn co " . escapeshellarg($to) . " " . escapeshellarg($local));
echo("Exporting non-external content of $from to $local\n");
mysystem("svn export --force --ignore-externals " . escapeshellarg($from) . " " . escapeshellarg($local));
echo("Checking out $from to $local.tmp without externals so that we can do efficient recursive propgets\n");
mysystem("svn co --ignore-externals " . escapeshellarg($from) . " " . escapeshellarg("$local.tmp"));
echo("Querying svn:externals properties of $from\n");
$externals = simplexml_load_string(stream_get_contents(popen("svn propget --xml --recursive svn:externals " . escapeshellarg("$local.tmp"), "r")));
echo("Querying svn:ignore properties of $from\n");
$ignores = simplexml_load_string(stream_get_contents(popen("svn propget --xml --recursive svn:ignore " . escapeshellarg("$local.tmp"), "r")));
echo("Adding $local contents (necessary before externals can be set)\n");
mysystem("cd " . escapeshellarg($local) . "; svn add *; cd ..");
echo("Applying externals\n");
applyProperties($externals);
echo("Applying ignores\n");
applyProperties($ignores);
echo("Removing $local.tmp");
mysystem("rm -rf " . escapeshellarg("$local.tmp"));
echo("Committing $local\n");
mysystem("svn commit " . escapeshellarg($local));
echo("Updating $local\n");
mysystem("svn update " . escapeshellarg($local));
echo("Done!\n");
function applyProperties($properties)
{
global $local;
foreach ($properties->target as $target)
{
$path = $target['path'];
$path = str_replace("$local.tmp/", "", $path);
foreach ($target->property as $property)
{
$name = $property['name'];
$value = (string) $property;
mysystem("svn propset " . escapeshellarg($name) . " " . escapeshellarg($value) . " " . escapeshellarg("$local/$path"));
}
}
}
function mysystem($cmd)
{
passthru($cmd, $val);
if ($val != 0)
{
die("Command $cmd exited with nonzero exit status $val\n");
}
}
Revision: 47423
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at June 8, 2011 01:34 by jigante
Initial Code
Initial URL
Initial Description
Initial Title
Apostrophe SVN Foreign Copy
Initial Tags
svn, textmate
Initial Language
PHP