{"thread":{"id":"57679","subject":"[PATCH v4] blame: report correct number of lines in progress when using ranges","startedAt":"2022-04-06T19:38:53Z","lastAt":"2022-04-06T19:38:53Z","messageCount":1,"participants":["Edmundo Carmona Antoranz"],"isPatch":true,"patchVersion":4,"patchTotal":null},"messages":[{"id":"453209","messageId":"20220406181320.16911-1-eantoranz@gmail.com","threadId":"57679","inReplyTo":null,"subject":"[PATCH v4] blame: report correct number of lines in progress when using ranges","fromName":"Edmundo Carmona Antoranz","fromEmail":"eantoranz@gmail.com","sentAt":"2022-04-06T18:13:20Z","receivedAt":"2022-04-06T19:38:53Z","isPatch":true,"sender":{"key":"eantoranz@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1491018?v=4"},"body":"When using ranges, use the range sizes as the limit for progress\ninstead of the size of the full file.\n\nBefore:\n$ git blame --progress builtin/blame.c > /dev/null\nBlaming lines: 100% (1210/1210), done.\n$ git blame --progress -L 100,120 -L 200,300 builtin/blame.c > /dev/null\nBlaming lines:  10% (122/1210), done.\n$\n\nAfter:\n$ ./git blame --progress builtin/blame.c > /dev/null\nBlaming lines: 100% (1210/1210), done.\n$ ./git blame --progress -L 100,120 -L 200,300 builtin/blame.c > /dev/null\nBlaming lines: 100% (122/122), done.\n$\n\nSigned-off-by: Edmundo Carmona Antoranz <eantoranz@gmail.com>\n---\n builtin/blame.c     |  6 +++++-\n t/annotate-tests.sh | 40 ++++++++++++++++++++++++++++++++++++++++\n 2 files changed, 45 insertions(+), 1 deletion(-)\n\ndiff --git a/builtin/blame.c b/builtin/blame.c\nindex 8d15b68afc..e33372c56b 100644\n--- a/builtin/blame.c\n+++ b/builtin/blame.c\n@@ -898,6 +898,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)\n \tunsigned int range_i;\n \tlong anchor;\n \tconst int hexsz = the_hash_algo->hexsz;\n+\tlong num_lines = 0;\n \n \tsetup_default_color_by_age();\n \tgit_config(git_blame_config, &output_option);\n@@ -1129,7 +1130,10 @@ int cmd_blame(int argc, const char **argv, const char *prefix)\n \tfor (range_i = ranges.nr; range_i > 0; --range_i) {\n \t\tconst struct range *r = &ranges.ranges[range_i - 1];\n \t\tent = blame_entry_prepend(ent, r->start, r->end, o);\n+\t\tnum_lines += (r->end - r->start);\n \t}\n+\tif (!num_lines)\n+\t\tnum_lines = sb.num_lines;\n \n \to->suspects = ent;\n \tprio_queue_put(&sb.commits, o->commit);\n@@ -1158,7 +1162,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)\n \tsb.found_guilty_entry = &found_guilty_entry;\n \tsb.found_guilty_entry_data = &pi;\n \tif (show_progress)\n-\t\tpi.progress = start_delayed_progress(_(\"Blaming lines\"), sb.num_lines);\n+\t\tpi.progress = start_delayed_progress(_(\"Blaming lines\"), num_lines);\n \n \tassign_blame(&sb, opt);\n \ndiff --git a/t/annotate-tests.sh b/t/annotate-tests.sh\nindex 09e86f9ba0..cc01d89150 100644\n--- a/t/annotate-tests.sh\n+++ b/t/annotate-tests.sh\n@@ -56,6 +56,10 @@ check_count () {\n \t' \"$@\" <actual\n }\n \n+get_progress_result () {\n+\ttr '\\015' '\\012' | tail -n 1\n+}\n+\n test_expect_success 'setup A lines' '\n \techo \"1A quick brown fox jumps over the\" >file &&\n \techo \"lazy dog\" >>file &&\n@@ -604,3 +608,39 @@ test_expect_success 'blame -L X,-N (non-numeric N)' '\n test_expect_success 'blame -L ,^/RE/' '\n \ttest_must_fail $PROG -L1,^/99/ file\n '\n+\n+test_expect_success 'blame progress on a full file' '\n+\tcat >expect <<-\\EOF &&\n+\tBlaming lines: 100% (10/10), done.\n+\tEOF\n+\n+\tGIT_PROGRESS_DELAY=0 \\\n+\tgit blame --progress hello.c 2>stderr &&\n+\n+\tget_progress_result <stderr >actual &&\n+\ttest_cmp expect actual\n+'\n+\n+test_expect_success 'blame progress on a single range' '\n+\tcat >expect <<-\\EOF &&\n+\tBlaming lines: 100% (4/4), done.\n+\tEOF\n+\n+\tGIT_PROGRESS_DELAY=0 \\\n+\tgit blame --progress -L 3,6 hello.c 2>stderr &&\n+\n+\tget_progress_result <stderr >actual &&\n+\ttest_cmp expect actual\n+'\n+\n+test_expect_success 'blame progress on multiple ranges' '\n+\tcat >expect <<-\\EOF &&\n+\tBlaming lines: 100% (7/7), done.\n+\tEOF\n+\n+\tGIT_PROGRESS_DELAY=0 \\\n+\tgit blame --progress -L 3,6 -L 8,10 hello.c 2>stderr &&\n+\n+\tget_progress_result <stderr >actual &&\n+\ttest_cmp expect actual\n+'\n-- \n2.35.1\n\n"}]}