Tim Henigan <tim.henigan@xxxxxxxxx> writes: > + foreach my $path (keys %submodule) { > + if (defined $submodule{$path}{left}) { > + open(SUBMOD, ">$ldir/$path") or die $!; > + print(SUBMOD "Subproject commit $submodule{$path}{left}"); > + close(SUBMOD); > + } > + if (defined $submodule{$path}{right}) { > + open(SUBMOD, ">$rdir/$path") or die $!; > + print(SUBMOD "Subproject commit $submodule{$path}{right}"); > + close(SUBMOD); Could you please use modern Perl, and use lexical filehandles instead of globs, and 3-arg version of 'open', i.e. + open my $submod_fh, ">", "$ldir/$path" or die $!; + print $submod_fh "Subproject commit $submodule{$path}{left}"; + close $submod_fh; > +if (defined($dirdiff)) { > + my ($a, $b) = setup_dir_diff(); > + if (defined($extcmd)) { > + system("$extcmd $a $b"); > + } else { > + $ENV{GIT_DIFFTOOL_DIRDIFF} = 'true'; > + system("git difftool--helper $a $b"); > + } > + # TODO: if the diff including working copy files and those > + # files were modified during the diff, then the changes > + # should be copied back to the working tree > +} else { > + if (defined($prompt)) { > + $ENV{GIT_DIFFTOOL_PROMPT} = 'true'; > + } > + elsif (defined($no_prompt)) { > + $ENV{GIT_DIFFTOOL_NO_PROMPT} = 'true'; > + } > + > + $ENV{GIT_PAGER} = ''; > + $ENV{GIT_EXTERNAL_DIFF} = 'git-difftool--helper'; > + git_cmd_try { Git::command_noisy(('diff', @ARGV)) } 'exit code %d'; > +} Why you use 'system' (and not in list form which does not require escaping shell characters) instead of git_cmd_try for first "git difftool--helper" invocation? Is $extcmd and resultof setup_dir_diff() to be treated as shell snippet, and used in string form of 'system' without escaping shell metacharacters (like ' ' in filename)? -- Jakub Narebski -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html