]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
git: Turn $git_dir into a stack
authorSimon McVittie <smcv@debian.org>
Wed, 28 Dec 2016 18:02:59 +0000 (18:02 +0000)
committerSimon McVittie <smcv@debian.org>
Wed, 11 Jan 2017 19:55:09 +0000 (19:55 +0000)
This will be necessary when we use a secondary working tree to do
reverts without leaving the primary working tree in an inconsistent
state.

(cherry picked from commit 39b8931ad31fe6b48afdc570caa459a0996c2092)

IkiWiki/Plugin/git.pm

index 021ee726cb86b171ef686a6c7fe880d517b0c30e..809f82f52cf645dba69155cda13eabd3700da05c 100644 (file)
@@ -153,13 +153,13 @@ sub genwrapper {
        }
 }
 
-my $git_dir=undef;
-my $prefix=undef;
+my @git_dir_stack;
+my $prefix;
 
 sub in_git_dir ($$) {
-       $git_dir=shift;
+       unshift @git_dir_stack, shift;
        my @ret=shift->();
-       $git_dir=undef;
+       shift @git_dir_stack;
        $prefix=undef;
        return @ret;
 }
@@ -178,13 +178,13 @@ sub safe_git (&@) {
        if (!$pid) {
                # In child.
                # Git commands want to be in wc.
-               if (! defined $git_dir) {
+               if (! @git_dir_stack) {
                        chdir $config{srcdir}
                            or error("cannot chdir to $config{srcdir}: $!");
                }
                else {
-                       chdir $git_dir
-                           or error("cannot chdir to $git_dir: $!");
+                       chdir $git_dir_stack[0]
+                           or error("cannot chdir to $git_dir_stack[0]: $!");
                }
                exec @cmdline or error("Cannot exec '@cmdline': $!");
        }
@@ -919,7 +919,7 @@ sub git_parse_changes {
                                die $@ if $@;
                                my $fh;
                                ($fh, $path)=File::Temp::tempfile(undef, UNLINK => 1);
-                               my $cmd = "cd $git_dir && ".
+                               my $cmd = "cd $git_dir_stack[0] && ".
                                          "git show $detail->{sha1_to} > '$path'";
                                if (system($cmd) != 0) {
                                        error("failed writing temp file '$path'.");