Skip to contentSkip to conversation

git-add--interactive.perl: Add progress counter in the prompt

PATCH Superseded Kunal Tyagi via GitGitGadget 3 participants 11 messages Sep 23, 2019 – Oct 4, 2019

lore
Share & tools
lore
#0 lore raw

cover git-add--interactive.perl: Add progress counter in the prompt

Hi git contributors!

I'm Kunal Tyagi. While I was choosing the relevant patches for a commit using the git add -p command, I found that there was no feedback regarding how many hunks from the current file had been processed and how many were left. So I decided to add a small change to the prompt which basically just displays (${current-hunk-id} + 1/${total-hunks}) before displaying the prompt during user interaction. This patch doesn't account for all total hunks, only per file.

I don't know perl so even this one liner might have mistakes. I did test this locally and hope this works for others. Personally, this change feels helpful to me when I have to separate a long list of changes after an erroneous commit.

On the #git-devel freenode channel, I was informed that @dscho is rewriting git-add in C. If so, perhaps a similar change could be added in the rewrite. I haven't seen his patches in detail so I can't comment if it'll be as trivial as in perl.

Regards Kunal Tyagi

Kunal Tyagi (1):
git-add--interactive.perl: Add progress counter in the prompt

 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

base-commit: 4c86140027f4a0d2caaa3ab4bd8bfc5ce3c11c8a
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-349%2Fkunaltyagi%2Fmaster-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-349/kunaltyagi/master-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/349

Signature · 1 line
gitgitgadget
#1 lore raw

PATCH 1/1 git-add--interactive.perl: Add progress counter in the prompt

From: Kunal Tyagi <[email protected]>

---
 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
git-add--interactive.perl +1 -1
index c20ae9e210..3951c25a28 100755
@@ -1541,7 +1541,7 @@ sub patch_update_file {
 		for (@{$hunk[$ix]{DISPLAY}}) {
 			print;
 		}
-		print colored $prompt_color,
+		print colored $prompt_color,"(", $ix+1, "/$num) ",
 			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
 
 		my $line = prompt_single_character;
t/t3701-add-interactive.sh +1 -1
index 69991a3168..3a2d9fb607 100755
@@ -314,7 +314,7 @@ test_expect_success C_LOCALE_OUTPUT 'add first line works' '
 	git commit -am "clear local changes" &&
 	git apply patch &&
 	printf "%s\n" s y y | git add -p file 2>error |
-		sed -n -e "s/^Stage this hunk[^@]*\(@@ .*\)/\1/" \
+		sed -n -e "s/^(.*) Stage this hunk[^@]*\(@@ .*\)/\1/" \
 		       -e "/^[-+@ \\\\]"/p  >output &&
 	test_must_be_empty error &&
 	git diff --cached >diff &&
Signature · 1 line
gitgitgadget
#2 lore raw

Hi,

Quoted 3 lines · Kunal Tyagi via GitGitGadget

From: Kunal Tyagi <[email protected]>

Could you move most (if not all) of the explanation from the cover letter (read: the PR description) into the commit message?

The patch looks good, I just have one suggestion:

Quoted 10 lines
---
 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
git-add--interactive.perl +0 -0
index c20ae9e210..3951c25a28 100755

git-add--interactive.perl sub patch_update_file { · line 1544

Quoted 5 lines
git-add--interactive.perl +1 -1
@@ -1541,7 +1541,7 @@ sub patch_update_file {
 		for (@{$hunk[$ix]{DISPLAY}}) {
 			print;
 		}
-		print colored $prompt_color,
+		print colored $prompt_color,"(", $ix+1, "/$num) ",

It would probably make sense to use . rather than ,, the dot is the concatenation operator in Perl.

Thanks,
Johannes

Quoted 19 lines
git-add--interactive.perl +0 -0
 			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
 
 		my $line = prompt_single_character;
t/t3701-add-interactive.sh +1 -2
index 69991a3168..3a2d9fb607 100755
@@ -314,7 +314,7 @@ test_expect_success C_LOCALE_OUTPUT 'add first line works' '
 	git commit -am "clear local changes" &&
 	git apply patch &&
 	printf "%s\n" s y y | git add -p file 2>error |
-		sed -n -e "s/^Stage this hunk[^@]*\(@@ .*\)/\1/" \
+		sed -n -e "s/^(.*) Stage this hunk[^@]*\(@@ .*\)/\1/" \
 		       -e "/^[-+@ \\\\]"/p  >output &&
 	test_must_be_empty error &&
 	git diff --cached >diff &&
--

gitgitgadget

#3 lore raw
In reply to Kunal Tyagi via GitGitGadget

Hi,

Quoted 9 lines · Kunal Tyagi via GitGitGadget

Hi git contributors!

I'm Kunal Tyagi. While I was choosing the relevant patches for a commit using the git add -p command, I found that there was no feedback regarding how many hunks from the current file had been processed and how many were left. So I decided to add a small change to the prompt which basically just displays (${current-hunk-id} + 1/${total-hunks}) before displaying the prompt during user interaction. This patch doesn't account for all total hunks, only per file.

I like this idea!

Quoted 9 lines

I don't know perl so even this one liner might have mistakes. I did test this locally and hope this works for others. Personally, this change feels helpful to me when I have to separate a long list of changes after an erroneous commit.

On the #git-devel freenode channel, I was informed that @dscho is rewriting git-add in C. If so, perhaps a similar change could be added in the rewrite. I haven't seen his patches in detail so I can't comment if it'll be as trivial as in perl.

I bet it will be trivial to implement it in C. Don't let this stop you, your change should go in before built-in add -i.

Thanks,
Johannes

Quoted 18 lines

Regards Kunal Tyagi

Kunal Tyagi (1):
git-add--interactive.perl: Add progress counter in the prompt

 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

base-commit: 4c86140027f4a0d2caaa3ab4bd8bfc5ce3c11c8a
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-349%2Fkunaltyagi%2Fmaster-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-349/kunaltyagi/master-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/349
--
gitgitgadget

#4 lore raw

v2 cover git-add--interactive.perl: Add progress counter in the prompt

In reply to Kunal Tyagi via GitGitGadget

Hi git contributors!

I'm Kunal Tyagi. While I was choosing the relevant patches for a commit using the git add -p command, I found that there was no feedback regarding how many hunks from the current file had been processed and how many were left. So I decided to add a small change to the prompt which basically just displays (${current-hunk-id} + 1/${total-hunks}) before displaying the prompt during user interaction. This patch doesn't account for all total hunks, only per file.

I don't know perl so even this one liner might have mistakes. I did test this locally and hope this works for others. Personally, this change feels helpful to me when I have to separate a long list of changes after an erroneous commit.

On the #git-devel freenode channel, I was informed that @dscho is rewriting git-add in C. If so, perhaps a similar change could be added in the rewrite. I haven't seen his patches in detail so I can't comment if it'll be as trivial as in perl.

Regards Kunal Tyagi

Kunal Tyagi (1):
git-add--interactive.perl: Add progress counter in the prompt

 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

base-commit: 4c86140027f4a0d2caaa3ab4bd8bfc5ce3c11c8a
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-349%2Fkunaltyagi%2Fmaster-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-349/kunaltyagi/master-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/349

Range-diff vs v1:

1: 8edf23f816 ! 1: a9c5906899 git-add--interactive.perl: Add progress counter in the prompt

     @@ -2,6 +2,14 @@
      
          git-add--interactive.perl: Add progress counter in the prompt
      
     +    Adds a feedback regarding how many hunks from the current file have been
     +    processed and total number of hunks
     +    Also included: changes to the test script due to change in expected
     +    output string
     +
     +    Change in UI: displays '(${current-hunk-id} + 1/${total-hunks-in-file})' before
     +    displaying the current prompt during user interaction
     +
          Signed-off-by: Kunal Tyagi <[email protected]>
      
       diff --git a/git-add--interactive.perl b/git-add--interactive.perl
     @@ -12,7 +20,7 @@
       			print;
       		}
      -		print colored $prompt_color,
     -+		print colored $prompt_color,"(", $ix+1, "/$num) ",
     ++		print colored $prompt_color,"(". ($ix+1) ."/$num) ",
       			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
       
       		my $line = prompt_single_character;
Signature · 1 line
gitgitgadget
#5 lore raw

PATCH v2 1/1 git-add--interactive.perl: Add progress counter in the prompt

From: Kunal Tyagi <[email protected]>

Adds a feedback regarding how many hunks from the current file have been processed and total number of hunks
Also included: changes to the test script due to change in expected output string

Change in UI: displays '(${current-hunk-id} + 1/${total-hunks-in-file})' before displaying the current prompt during user interaction

---
 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
git-add--interactive.perl +1 -1
index c20ae9e210..51c30e08cb 100755
@@ -1541,7 +1541,7 @@ sub patch_update_file {
 		for (@{$hunk[$ix]{DISPLAY}}) {
 			print;
 		}
-		print colored $prompt_color,
+		print colored $prompt_color,"(". ($ix+1) ."/$num) ",
 			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
 
 		my $line = prompt_single_character;
t/t3701-add-interactive.sh +1 -1
index 69991a3168..3a2d9fb607 100755
@@ -314,7 +314,7 @@ test_expect_success C_LOCALE_OUTPUT 'add first line works' '
 	git commit -am "clear local changes" &&
 	git apply patch &&
 	printf "%s\n" s y y | git add -p file 2>error |
-		sed -n -e "s/^Stage this hunk[^@]*\(@@ .*\)/\1/" \
+		sed -n -e "s/^(.*) Stage this hunk[^@]*\(@@ .*\)/\1/" \
 		       -e "/^[-+@ \\\\]"/p  >output &&
 	test_must_be_empty error &&
 	git diff --cached >diff &&
Signature · 1 line
gitgitgadget
#6 lore raw
Quoted 2 lines · Kunal Tyagi via GitGitGadget

From: Kunal Tyagi <[email protected]>
Subject: Re: [PATCH v2 1/1] git-add--interactive.perl: Add progress counter in the prompt

Either of these two, perhaps (I'd use the former if I were writing this patch):

add -i: show progress counter in the prompt add -i: add progress counter to the prompt

Give an order to the codebase to "become like so". E.g.

Report how many hunks have been processed and the total number of hunks in the current file in the prompt, and adjust the expected output in some tests.

Signed-off-by ...
Quoted 19 lines

Adds a feedback regarding how many hunks from the current file have been processed and total number of hunks
Also included: changes to the test script due to change in expected output string

Change in UI: displays '(${current-hunk-id} + 1/${total-hunks-in-file})' before displaying the current prompt during user interaction

---
 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
git-add--interactive.perl +0 -0
index c20ae9e210..51c30e08cb 100755

git-add--interactive.perl sub patch_update_file { · line 1544

Quoted 5 lines
git-add--interactive.perl +1 -1
@@ -1541,7 +1541,7 @@ sub patch_update_file {
 		for (@{$hunk[$ix]{DISPLAY}}) {
 			print;
 		}
-		print colored $prompt_color,
+		print colored $prompt_color,"(". ($ix+1) ."/$num) ",

Don't omit space after comma. or around the "." operators---if you want to use "." here, that is. I am not convinced it makes the code better to use ".", though.

	print colored $prompt_color, "(", ($ix+1), "/$num) ",

is probably how I would write this, as I expect those writing Perl would know that elements of a comma separated list fed to 'print' are shown without any extra space in between.

t/t3701-add-interactive.sh test_expect_success C_LOCALE_OUTPUT 'add first line works' ' · line 317

Quoted 13 lines
git-add--interactive.perl +0 -0
 			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
 
 		my $line = prompt_single_character;
t/t3701-add-interactive.sh +1 -1
index 69991a3168..3a2d9fb607 100755
@@ -314,7 +314,7 @@ test_expect_success C_LOCALE_OUTPUT 'add first line works' '
 	git commit -am "clear local changes" &&
 	git apply patch &&
 	printf "%s\n" s y y | git add -p file 2>error |
-		sed -n -e "s/^Stage this hunk[^@]*\(@@ .*\)/\1/" \
+		sed -n -e "s/^(.*) Stage this hunk[^@]*\(@@ .*\)/\1/" \

Shouldn't this pattern be a bit tighter than "(.*)" (i.e. anything can come between paren)?

Quoted 3 lines
t/t3701-add-interactive.sh +0 -0
 		       -e "/^[-+@ \\\\]"/p  >output &&
 	test_must_be_empty error &&
 	git diff --cached >diff &&
#7 lore raw

For completeness: this is what the contributor wrote in
https://github.com/gitgitgadget/git/pull/349#issuecomment-536405428

Thanks for your comments. I've modified the patch and I hope it is more suitable now.

I just used a repl to get the output and sent that as a patch. I don't really know perl (though printf syntax is almost universal).

Cheers
Kunal Tyagi

Quoted 75 lines · Junio C Hamano
Quoted 2 lines · Kunal Tyagi via GitGitGadget

From: Kunal Tyagi <[email protected]>
Subject: Re: [PATCH v2 1/1] git-add--interactive.perl: Add progress counter in the prompt

Either of these two, perhaps (I'd use the former if I were writing this patch):

add -i: show progress counter in the prompt add -i: add progress counter to the prompt

Give an order to the codebase to "become like so". E.g.

Report how many hunks have been processed and the total number of hunks in the current file in the prompt, and adjust the expected output in some tests.

Signed-off-by ...
Quoted 19 lines

Adds a feedback regarding how many hunks from the current file have been processed and total number of hunks
Also included: changes to the test script due to change in expected output string

Change in UI: displays '(${current-hunk-id} + 1/${total-hunks-in-file})' before displaying the current prompt during user interaction

---
 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
git-add--interactive.perl +0 -0
index c20ae9e210..51c30e08cb 100755

git-add--interactive.perl sub patch_update_file { · line 1544

Quoted 5 lines
git-add--interactive.perl +1 -1
@@ -1541,7 +1541,7 @@ sub patch_update_file {
 		for (@{$hunk[$ix]{DISPLAY}}) {
 			print;
 		}
-		print colored $prompt_color,
+		print colored $prompt_color,"(". ($ix+1) ."/$num) ",

Don't omit space after comma. or around the "." operators---if you want to use "." here, that is. I am not convinced it makes the code better to use ".", though.

	print colored $prompt_color, "(", ($ix+1), "/$num) ",

is probably how I would write this, as I expect those writing Perl would know that elements of a comma separated list fed to 'print' are shown without any extra space in between.

t/t3701-add-interactive.sh test_expect_success C_LOCALE_OUTPUT 'add first line works' ' · line 317

Quoted 13 lines
git-add--interactive.perl +0 -0
 			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
 
 		my $line = prompt_single_character;
t/t3701-add-interactive.sh +1 -1
index 69991a3168..3a2d9fb607 100755
@@ -314,7 +314,7 @@ test_expect_success C_LOCALE_OUTPUT 'add first line works' '
 	git commit -am "clear local changes" &&
 	git apply patch &&
 	printf "%s\n" s y y | git add -p file 2>error |
-		sed -n -e "s/^Stage this hunk[^@]*\(@@ .*\)/\1/" \
+		sed -n -e "s/^(.*) Stage this hunk[^@]*\(@@ .*\)/\1/" \

Shouldn't this pattern be a bit tighter than "(.*)" (i.e. anything can come between paren)?

Quoted 3 lines
t/t3701-add-interactive.sh +0 -0
 		       -e "/^[-+@ \\\\]"/p  >output &&
 	test_must_be_empty error &&
 	git diff --cached >diff &&
#8 lore raw

v3 cover git-add--interactive.perl: Add progress counter in the prompt

In reply to Kunal Tyagi via GitGitGadget

Hi git contributors!

I'm Kunal Tyagi. While I was choosing the relevant patches for a commit using the git add -p command, I found that there was no feedback regarding how many hunks from the current file had been processed and how many were left. So I decided to add a small change to the prompt which basically just displays (${current-hunk-id} + 1/${total-hunks}) before displaying the prompt during user interaction. This patch doesn't account for all total hunks, only per file.

I don't know perl so even this one liner might have mistakes. I did test this locally and hope this works for others. Personally, this change feels helpful to me when I have to separate a long list of changes after an erroneous commit.

On the #git-devel freenode channel, I was informed that @dscho is rewriting git-add in C. If so, perhaps a similar change could be added in the rewrite. I haven't seen his patches in detail so I can't comment if it'll be as trivial as in perl.

Regards Kunal Tyagi

Kunal Tyagi (1):
add -i: Show progress counter in the prompt

 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

base-commit: 4c86140027f4a0d2caaa3ab4bd8bfc5ce3c11c8a
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-349%2Fkunaltyagi%2Fmaster-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-349/kunaltyagi/master-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/349

Range-diff vs v2:

1: a9c5906899 ! 1: b351c74a3f git-add--interactive.perl: Add progress counter in the prompt

     @@ -1,14 +1,10 @@
      Author: Kunal Tyagi <[email protected]>
      
     -    git-add--interactive.perl: Add progress counter in the prompt
     +    add -i: Show progress counter in the prompt
      
     -    Adds a feedback regarding how many hunks from the current file have been
     -    processed and total number of hunks
     -    Also included: changes to the test script due to change in expected
     -    output string
     -
     -    Change in UI: displays '(${current-hunk-id} + 1/${total-hunks-in-file})' before
     -    displaying the current prompt during user interaction
     +    Report the current hunk count and total number of hunks for the current
     +    file in the prompt
     +    Adjust the expected output in some tests to account for new data on the prompt
      
          Signed-off-by: Kunal Tyagi <[email protected]>
      
     @@ -20,7 +16,7 @@
       			print;
       		}
      -		print colored $prompt_color,
     -+		print colored $prompt_color,"(". ($ix+1) ."/$num) ",
     ++		print colored $prompt_color, "(", ($ix+1), "/$num) ",
       			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
       
       		my $line = prompt_single_character;
     @@ -33,7 +29,7 @@
       	git apply patch &&
       	printf "%s\n" s y y | git add -p file 2>error |
      -		sed -n -e "s/^Stage this hunk[^@]*\(@@ .*\)/\1/" \
     -+		sed -n -e "s/^(.*) Stage this hunk[^@]*\(@@ .*\)/\1/" \
     ++		sed -n -e "s/^([1-2]\/[1-2]) Stage this hunk[^@]*\(@@ .*\)/\1/" \
       		       -e "/^[-+@ \\\\]"/p  >output &&
       	test_must_be_empty error &&
       	git diff --cached >diff &&
Signature · 1 line
gitgitgadget
#9 lore raw

PATCH v3 1/1 add -i: Show progress counter in the prompt

From: Kunal Tyagi <[email protected]>

Report the current hunk count and total number of hunks for the current file in the prompt
Adjust the expected output in some tests to account for new data on the prompt

---
 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
git-add--interactive.perl +1 -1
index c20ae9e210..52659bb74c 100755
@@ -1541,7 +1541,7 @@ sub patch_update_file {
 		for (@{$hunk[$ix]{DISPLAY}}) {
 			print;
 		}
-		print colored $prompt_color,
+		print colored $prompt_color, "(", ($ix+1), "/$num) ",
 			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
 
 		my $line = prompt_single_character;
t/t3701-add-interactive.sh +1 -1
index 69991a3168..d50e165ca8 100755
@@ -314,7 +314,7 @@ test_expect_success C_LOCALE_OUTPUT 'add first line works' '
 	git commit -am "clear local changes" &&
 	git apply patch &&
 	printf "%s\n" s y y | git add -p file 2>error |
-		sed -n -e "s/^Stage this hunk[^@]*\(@@ .*\)/\1/" \
+		sed -n -e "s/^([1-2]\/[1-2]) Stage this hunk[^@]*\(@@ .*\)/\1/" \
 		       -e "/^[-+@ \\\\]"/p  >output &&
 	test_must_be_empty error &&
 	git diff --cached >diff &&
Signature · 1 line
gitgitgadget
#10 lore raw

Re: [PATCH v3 1/1] add -i: Show progress counter in the prompt

Quoted 11 lines · Kunal Tyagi via GitGitGadget

From: Kunal Tyagi <[email protected]>

Report the current hunk count and total number of hunks for the current file in the prompt
Adjust the expected output in some tests to account for new data on the prompt

---
 git-add--interactive.perl  | 2 +-
 t/t3701-add-interactive.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Thanks; queued.