X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=sync-all;h=d89e43954f59d0f6cf333fa3f58da5824f1c2f42;hp=87e3698d5ae9f6c47b9853f0678e3378586eee8f;hb=0cb84f30414275484a23fffeb9d4db1f54808d4f;hpb=90edc9caf6d29b49a484cb0610476aea49d8bad2 diff --git a/sync-all b/sync-all index 87e3698..d89e439 100755 --- a/sync-all +++ b/sync-all @@ -116,12 +116,25 @@ sub warning { } sub scm { + my $dir = shift; my $scm = shift; - - message "== running $scm @_"; + my $pwd; + + if ($dir eq '.') { + message "== running $scm @_"; + } else { + message "== $dir: running $scm @_"; + $pwd = getcwd(); + chdir($dir); + } + system ($scm, @_) == 0 or $ignore_failure or die "$scm failed: $?"; + + if ($dir ne '.') { + chdir($pwd); + } } sub repoexists { @@ -150,6 +163,8 @@ sub scmall { my @scm_args; + my $pwd; + my ($repo_base, $checked_out_tree) = getrepo(); parsePackages; @@ -223,6 +238,15 @@ sub scmall { or ($scm eq "git" and "send-email")); $want_remote_repo = 1; } + elsif ($command =~ /^set-origin$/) { + @scm_args = ("remote", "set-url", "origin", $path); + } + elsif ($command =~ /^fetch$/) { + @scm_args = ("fetch", "origin"); + } + elsif ($command =~ /^new$/) { + @scm_args = ("log", "origin.."); + } else { die "Unknown command: $command"; } @@ -231,19 +255,20 @@ sub scmall { if (repoexists ($scm, $localpath)) { if ($want_remote_repo) { if ($scm eq "darcs") { - scm ($scm, @scm_args, @_, "--repodir=$localpath", $path); + scm (".", $scm, @scm_args, @_, "--repodir=$localpath", $path); } else { # git pull doesn't like to be used with --work-dir - scm ($scm, "--git-dir=$localpath/.git", @scm_args, @_, $path, "master"); + # I couldn't find an alternative to chdir() here + scm ($localpath, $scm, @scm_args, @_, $path, "master"); } } else { # git status *must* be used with --work-dir, if we don't chdir() to the dir - scm ($scm, "--git-dir=$localpath/.git", "--work-tree=$localpath", @scm_args, @_); + scm ($localpath, $scm, @scm_args, @_); } } elsif ($local_repo_unnecessary) { # Don't bother to change directory in this case - scm ($scm, @scm_args, @_); + scm (".", $scm, @scm_args, @_); } elsif ($tag eq "") { message "== Required repo $localpath is missing! Skipping"; @@ -314,7 +339,10 @@ Supported commands: * -- * --complete * --partial + * fetch * send + * set-origin + * new Available package-tags are: END