fix 'sync-all pull'
authorSimon Marlow <marlowsd@gmail.com>
Fri, 1 Apr 2011 10:34:19 +0000 (11:34 +0100)
committerSimon Marlow <marlowsd@gmail.com>
Fri, 1 Apr 2011 10:34:19 +0000 (11:34 +0100)
sync-all

index 87e3698..6f786cd 100755 (executable)
--- a/sync-all
+++ b/sync-all
@@ -116,12 +116,25 @@ sub warning {
 }
 
 sub scm {
 }
 
 sub scm {
+    my $dir = shift;
     my $scm = 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: $?";
     system ($scm, @_) == 0
         or $ignore_failure
         or die "$scm failed: $?";
+
+    if ($dir ne '.') {
+        chdir($pwd);
+    }
 }
 
 sub repoexists {
 }
 
 sub repoexists {
@@ -150,6 +163,8 @@ sub scmall {
 
     my @scm_args;
 
 
     my @scm_args;
 
+    my $pwd;
+
     my ($repo_base, $checked_out_tree) = getrepo();
 
     parsePackages;
     my ($repo_base, $checked_out_tree) = getrepo();
 
     parsePackages;
@@ -231,19 +246,20 @@ sub scmall {
             if (repoexists ($scm, $localpath)) {
                 if ($want_remote_repo) {
                     if ($scm eq "darcs") {
             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
                     } 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
                     }
                 } 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
                 }
             }
             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";
             }
             elsif ($tag eq "") {
                 message "== Required repo $localpath is missing! Skipping";