From: Simon McVittie Date: Wed, 28 Dec 2016 18:02:59 +0000 (+0000) Subject: git: Turn $git_dir into a stack X-Git-Tag: debian/3.20120629.2+deb7u2~22 X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/d63cdb37dafe631968d000068f37edaea8018066?ds=inline git: Turn $git_dir into a stack 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) --- diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm index 021ee726c..809f82f52 100644 --- a/IkiWiki/Plugin/git.pm +++ b/IkiWiki/Plugin/git.pm @@ -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'.");