Re: [PATCH] blame: report correct number of lines in progress when using ranges
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 3, 2022, 22:42 UTC
- Message-ID
- <xmqq5ynpu6uv.fsf@gitster.g>
- In-Reply-To
- <20220403165038.52803-1-eantoranz@gmail.com>
Edmundo Carmona Antoranz <eantoranz@gmail.com> writes:
Show 21 quoted lines
> When using ranges, use their sizes as the limit for progress > instead of the size of the full file. > > Before: > $ git blame --progress builtin/blame.c > /dev/null > Blaming lines: 100% (1210/1210), done. > $ git blame --progress -L 100,120 -L 200,300 builtin/blame.c > /dev/null > Blaming lines: 10% (122/1210), done. > $ > > After: > $ ./git blame --progress builtin/blame.c > /dev/null > Blaming lines: 100% (1210/1210), done. > $ ./git blame --progress -L 100,120 -L 200,300 builtin/blame.c > /dev/null > Blaming lines: 100% (122/122), done. > $ > > Signed-off-by: Edmundo Carmona Antoranz <eantoranz@gmail.com> > --- > builtin/blame.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-)
Wow. I am reasonably sure that this was broken since the introduction of the progress meter to "git blame". Thanks for finding and fixing.
Can we have a test, too, or is that too cumbersome to add for some reason?
Thanks.
Show 31 quoted lines
> diff --git a/builtin/blame.c b/builtin/blame.c
> index 8d15b68afc..e33372c56b 100644
> --- a/builtin/blame.c
> +++ b/builtin/blame.c
> @@ -898,6 +898,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
> unsigned int range_i;
> long anchor;
> const int hexsz = the_hash_algo->hexsz;
> + long num_lines = 0;
>
> setup_default_color_by_age();
> git_config(git_blame_config, &output_option);
> @@ -1129,7 +1130,10 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
> for (range_i = ranges.nr; range_i > 0; --range_i) {
> const struct range *r = &ranges.ranges[range_i - 1];
> ent = blame_entry_prepend(ent, r->start, r->end, o);
> + num_lines += (r->end - r->start);
> }
> + if (!num_lines)
> + num_lines = sb.num_lines;
>
> o->suspects = ent;
> prio_queue_put(&sb.commits, o->commit);
> @@ -1158,7 +1162,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
> sb.found_guilty_entry = &found_guilty_entry;
> sb.found_guilty_entry_data = π
> if (show_progress)
> - pi.progress = start_delayed_progress(_("Blaming lines"), sb.num_lines);
> + pi.progress = start_delayed_progress(_("Blaming lines"), num_lines);
>
> assign_blame(&sb, opt);