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;
>                       }

Reply via email to