git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sina Siadat <siadat@gmail.com>
To: git@vger.kernel.org
Cc: Sina Siadat <siadat@gmail.com>
Subject: [PATCH] git-add-interactive: edit current file in editor
Date: Tue, 28 Jul 2015 04:11:22 +0430	[thread overview]
Message-ID: <1438040482-4599-1-git-send-email-siadat@gmail.com> (raw)

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

             reply	other threads:[~2015-07-27 23:41 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-27 23:41 Sina Siadat [this message]
2015-07-28  5:12 ` [PATCH] git-add-interactive: edit current file in editor Jacob Keller
2015-07-29 19:05 ` Eric Sunshine

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1438040482-4599-1-git-send-email-siadat@gmail.com \
    --to=siadat@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).