When the "--patch" option is supplied, the patch_update_file function is called, once for each supplied pathspec argument, and then we exit. This commit adds an early return mechanism to the patch_update_pathspec function to prevent spurious line feeds from being echoed when the user passes in pathspecs which match unchanged files. Signed-off-by: Wincent Colaiuta <win@xxxxxxxxxxx> --- git-add--interactive.perl | 35 ++++++++++++++++++++++++++++++++--- 1 files changed, 32 insertions(+), 3 deletions(-) diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 8706528..43a5344 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -1,6 +1,10 @@ #!/usr/bin/perl -w use strict; +use Getopt::Long; + +# command line options +my $patch; sub run_cmd_pipe { if ($^O eq 'MSWin32') { @@ -335,7 +339,8 @@ sub add_untracked_cmd { sub parse_diff { my ($path) = @_; - my @diff = run_cmd_pipe(qw(git diff-files -p --), $path); + my @diff = run_cmd_pipe(qw(git diff-files -p --), $path) + or return undef; my (@hunk) = { TEXT => [] }; for (@diff) { @@ -571,6 +576,7 @@ sub patch_update_pathspec { my ($ix, $num); my $path = shift; my ($head, @hunk) = parse_diff($path); + return unless $head; for (@{$head->{TEXT}}) { print; } @@ -781,6 +787,19 @@ sub check_args { --error-unmatch --with-tree=HEAD --), @ARGV); } +sub usage { + print <<EOT; +git-add--interactive [options] [--] [<filepattern>...] +Options: + -p, --patch Execute the "patch" subcommand and exit +EOT + exit(1); +} + +sub process_options { + GetOptions("patch!" => \$patch) or usage(); +} + sub main_loop { my @cmd = ([ 'status', \&status_cmd, ], [ 'update', \&update_cmd, ], @@ -809,7 +828,17 @@ sub main_loop { } } +process_options(); refresh(); check_args(); -status_cmd(); -main_loop(); +if ($patch) { + print "No filepattern specified: what did you want to patch?\n" + unless @ARGV; + foreach my $pathspec (@ARGV) { + patch_update_pathspec($pathspec); + } +} +else { + status_cmd(); + main_loop(); +} -- 1.5.3.6.886.g3364 - 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