SZEDER Gábor <[email protected]> writes:
> When attempting to blame a non-existing path, git should show an error
> message like this:
>
> $ git blame e83c51633 -- nonexisting-file
> fatal: no such path nonexisting-file in e83c51633
>
> Since the recent commit 835c49f7d (blame: rework methods that
> determine 'final' commit, 2017-05-24) the revision name is either
> missing or some scrambled characters are shown instead. The reason is
> that the revision name must be duplicated, because it is invalidated
> when the pending objects array is cleared in the meantime, but this
> commit dropped the duplication.
>
> Restore the duplication of the revision name in the affected functions
> (find_single_final() and find_single_initial()).
>
> Signed-off-by: SZEDER Gábor <[email protected]>
> ---
Thanks.
I vaguely recall we had the same breakage in the code that was
already fixed long time ago; that's a strange coincidence if the
js/blame-lib topic reintroduced the same bug ;-).
Will queue.
>
> Use xstrdup_or_null() in the first hunk.
>
> blame.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/blame.c b/blame.c
> index 91e26e93e..f575e9cbf 100644
> --- a/blame.c
> +++ b/blame.c
> @@ -1663,7 +1663,7 @@ static struct commit *find_single_final(struct rev_info
> *revs,
> name = revs->pending.objects[i].name;
> }
> if (name_p)
> - *name_p = name;
> + *name_p = xstrdup_or_null(name);
> return found;
> }
>
> @@ -1735,7 +1735,7 @@ static struct commit *find_single_initial(struct
> rev_info *revs,
> die("No commit to dig up from?");
>
> if (name_p)
> - *name_p = name;
> + *name_p = xstrdup(name);
> return found;
> }
>
> @@ -1843,6 +1843,8 @@ void setup_scoreboard(struct blame_scoreboard *sb,
> const char *path, struct blam
>
> if (orig)
> *orig = o;
> +
> + free((char *)final_commit_name);
> }