Nguyễn Thái Ngọc Duy <[email protected]> writes:
> It's done so that commit->util can be removed. See more explanation in
> the commit that removes commit->util.
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <[email protected]>
> ---
> blame.c | 42 +++++++++++++++++++++++++++++++-----------
> blame.h | 2 ++
> builtin/blame.c | 2 +-
> 3 files changed, 34 insertions(+), 12 deletions(-)
>
> diff --git a/blame.c b/blame.c
> index 78c9808bd1..18e8bd996a 100644
> --- a/blame.c
> +++ b/blame.c
> @@ -6,6 +6,24 @@
> #include "diffcore.h"
> #include "tag.h"
> #include "blame.h"
> +#include "commit-slab.h"
> +
> +define_commit_slab(blame_suspects, struct blame_origin *);
> +static struct blame_suspects blame_suspects;
> +
> +struct blame_origin *get_blame_suspects(struct commit *commit)
> +{
> + struct blame_origin **result;
> +
> + result = blame_suspects_peek(&blame_suspects, commit);
> +
> + return result ? *result : NULL;
> +}
> +
> +static void set_blame_suspects(struct commit *commit, struct blame_origin
> *origin)
> +{
> + *blame_suspects_at(&blame_suspects, commit) = origin;
> +}
>
> void blame_origin_decref(struct blame_origin *o)
> {
This makes really a pleasant read. With these helpers in place, the
remainder of this patch becomes mechanical substitution to call
get_blame_suspects when commit->util appears on the RHS of an
expression and set_blame_suspects when commit->util gets assigned.
> @@ -15,12 +33,12 @@ void blame_origin_decref(struct blame_origin *o)
> blame_origin_decref(o->previous);
> free(o->file.ptr);
> /* Should be present exactly once in commit chain */
> - for (p = o->commit->util; p; l = p, p = p->next) {
> + for (p = get_blame_suspects(o->commit); p; l = p, p = p->next) {
> if (p == o) {
> if (l)
> l->next = p->next;
> else
> - o->commit->util = p->next;
> + set_blame_suspects(o->commit, p->next);
> free(o);
> return;
> }