]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
git: write proposed attachment to temp file without going via system()
authorSimon McVittie <smcv@debian.org>
Wed, 28 Dec 2016 19:35:14 +0000 (19:35 +0000)
committerSimon McVittie <smcv@debian.org>
Wed, 28 Dec 2016 21:32:12 +0000 (21:32 +0000)
IkiWiki/Plugin/git.pm

index 333b4ac87ca434c67fbd5960c24a5ba506b7991b..0ee49416ba95b4891b7e5deb42f7ff08502f4e36 100644 (file)
@@ -221,6 +221,11 @@ sub safe_git {
                        chdir $git_dir_stack[0]
                            or error("cannot chdir to $git_dir_stack[0]: $!");
                }
                        chdir $git_dir_stack[0]
                            or error("cannot chdir to $git_dir_stack[0]: $!");
                }
+
+               if ($params{stdout}) {
+                       open(STDOUT, '>&', $params{stdout}) or error("Cannot reopen stdout: $!");
+               }
+
                exec @{$params{cmdline}} or error("Cannot exec '@{$params{cmdline}}': $!");
        }
        # In parent.
                exec @{$params{cmdline}} or error("Cannot exec '@{$params{cmdline}}': $!");
        }
        # In parent.
@@ -958,11 +963,11 @@ sub git_parse_changes {
                                die $@ if $@;
                                my $fh;
                                ($fh, $path)=File::Temp::tempfile(undef, UNLINK => 1);
                                die $@ if $@;
                                my $fh;
                                ($fh, $path)=File::Temp::tempfile(undef, UNLINK => 1);
-                               my $cmd = "cd $git_dir_stack[0] && ".
-                                         "git show $detail->{sha1_to} > '$path'";
-                               if (system($cmd) != 0) {
-                                       error("failed writing temp file '$path'.");
-                               }
+                               safe_git(
+                                       error_handler => sub { error("failed writing temp file '$path': ".shift."."); },
+                                       stdout => $fh,
+                                       cmdline => ['git', 'show', $detail->{sha1_to}],
+                               );
                        }
 
                        push @rets, {
                        }
 
                        push @rets, {