Re: [PATCH v2 04/14] describe: use commit-slab for commit names instead of commit->util

2018-05-13 Thread Junio C Hamano
Nguyễn Thái Ngọc Duy   writes:

> + slot = commit_names_peek(_names, c);
> + n = slot ? *slot : NULL;

Seeing this and the helper in the previous step makes me wonder if
we also want a "peek-and-then-peel" variant that encapsulates this
pattern.  We'll know when we read the series through.

So far looking good.  Thanks.

>   if (n) {
>   if (!tags && !all && n->prio < 2) {
>   unannotated_cnt++;


[PATCH v2 04/14] describe: use commit-slab for commit names instead of commit->util

2018-05-12 Thread Nguyễn Thái Ngọc Duy
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 
---
 builtin/describe.c | 16 +---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/builtin/describe.c b/builtin/describe.c
index b5afc45846..1b6ca42553 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -15,9 +15,12 @@
 #include "run-command.h"
 #include "revision.h"
 #include "list-objects.h"
+#include "commit-slab.h"
 
 #define MAX_TAGS   (FLAG_BITS - 1)
 
+define_commit_slab(commit_names, struct commit_name *);
+
 static const char * const describe_usage[] = {
N_("git describe [] [...]"),
N_("git describe [] --dirty"),
@@ -37,6 +40,7 @@ static struct string_list patterns = STRING_LIST_INIT_NODUP;
 static struct string_list exclude_patterns = STRING_LIST_INIT_NODUP;
 static int always;
 static const char *suffix, *dirty, *broken;
+static struct commit_names commit_names;
 
 /* diff-index command arguments to check if working tree is dirty. */
 static const char *diff_index_args[] = {
@@ -321,11 +325,14 @@ static void describe_commit(struct object_id *oid, struct 
strbuf *dst)
if (!have_util) {
struct hashmap_iter iter;
struct commit *c;
-   struct commit_name *n = hashmap_iter_first(, );
+   struct commit_name *n;
+
+   init_commit_names(_names);
+   n = hashmap_iter_first(, );
for (; n; n = hashmap_iter_next()) {
c = lookup_commit_reference_gently(>peeled, 1);
if (c)
-   c->util = n;
+   *commit_names_at(_names, c) = n;
}
have_util = 1;
}
@@ -336,8 +343,11 @@ static void describe_commit(struct object_id *oid, struct 
strbuf *dst)
while (list) {
struct commit *c = pop_commit();
struct commit_list *parents = c->parents;
+   struct commit_name **slot;
+
seen_commits++;
-   n = c->util;
+   slot = commit_names_peek(_names, c);
+   n = slot ? *slot : NULL;
if (n) {
if (!tags && !all && n->prio < 2) {
unannotated_cnt++;
-- 
2.17.0.705.g3525833791