Adds a new option 'o' to the 'add -p' command that lets you open and edit the current file. The existing 'e' mode is used to manually edit the hunk. The new 'o' option allows you to open and edit the file without having to quit the loop. The hunks are updated when the editing is done, and the user will be able to review the updated hunks. Without this option you would have to quit the loop, edit the file, and execute 'add -p filename' again. I would appreciate it if you could let me know what you think about this option. I will write more tests if there is any interest at all. Thank you. :) --- Documentation/git-add.txt | 1 + git-add--interactive.perl | 11 ++++++++++- t/t3701-add-interactive.sh | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt index fe5282f..6752eb0 100644 --- a/Documentation/git-add.txt +++ b/Documentation/git-add.txt @@ -312,6 +312,7 @@ patch:: K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk + o - open this file in editor ? - print help + After deciding the fate for all hunks, if there is any hunk diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 77876d4..a44f3b3 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -1175,6 +1175,7 @@ k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk +o - open this file in editor ? - print help EOF } @@ -1359,7 +1360,7 @@ sub patch_update_file { $hunk[$ix]{TYPE} eq 'deletion' ? ' deletion' : ' this hunk'), $patch_mode_flavour{TARGET}, - " [y,n,q,a,d,/$other,?]? "; + " [y,n,q,a,d,o,/$other,?]? "; my $line = prompt_single_character; last unless defined $line; if ($line) { @@ -1378,6 +1379,14 @@ sub patch_update_file { } next; } + elsif ($line =~ /^o/) { + chomp(my $editor = run_cmd_pipe(qw(git var GIT_EDITOR))); + system('sh', '-c', $editor.' "$@"', $editor, $path); + ($head, @hunk) = parse_diff($path); + $num = scalar @hunk; + $ix = 0; + next; + } elsif ($other =~ /g/ && $line =~ /^g(.*)/) { my $response = $1; my $no = $ix > 10 ? $ix - 10 : 0; diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh index deae948..e5dd1c6 100755 --- a/t/t3701-add-interactive.sh +++ b/t/t3701-add-interactive.sh @@ -98,6 +98,12 @@ test_expect_success 'dummy edit works' ' test_cmp expected diff ' +test_expect_success 'dummy open works' ' + (echo o; echo a) | git add -p && + git diff > diff && + test_cmp expected diff +' + test_expect_success 'setup patch' ' cat >patch <<EOF @@ -1,1 +1,4 @@ -- 2.5.0.rc3.2.g6f9504c.dirty -- 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