Re: [PATCH v2 11/14] show-branch: use commit-slab for commit-name instead of commit->util

2018-05-18 Thread Duy Nguyen
On Mon, May 14, 2018 at 8:45 AM, Junio C Hamano  wrote:
> Nguyễn Thái Ngọc Duy   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 
>> ---
>>  builtin/show-branch.c | 39 +++
>>  1 file changed, 27 insertions(+), 12 deletions(-)
>
> Looks obviously correct.
>
> Another place we could use commit-slab in this program, which I
> think is a more interesting application, is to use it to store a
> bitmask with runtime-computed width to replace those object->flags
> bits, which will allow us to lift the MAX_REVS limitation.

Interesting. I have a feeling paint_down() from shallow.c might be
reusable. Anyway I don't have enough interest in this command to
actually fix this so I'll just make a TODO note in case people need
something to do and grep for them in the code.
-- 
Duy


Re: [PATCH v2 11/14] show-branch: use commit-slab for commit-name instead of commit->util

2018-05-14 Thread Junio C Hamano
Nguyễn Thái Ngọc Duy   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 
> ---
>  builtin/show-branch.c | 39 +++
>  1 file changed, 27 insertions(+), 12 deletions(-)

Looks obviously correct.  

Another place we could use commit-slab in this program, which I
think is a more interesting application, is to use it to store a
bitmask with runtime-computed width to replace those object->flags
bits, which will allow us to lift the MAX_REVS limitation.

Thanks.


[PATCH v2 11/14] show-branch: use commit-slab for commit-name 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/show-branch.c | 39 +++
 1 file changed, 27 insertions(+), 12 deletions(-)

diff --git a/builtin/show-branch.c b/builtin/show-branch.c
index 6c2148b71d..29d15d16d2 100644
--- a/builtin/show-branch.c
+++ b/builtin/show-branch.c
@@ -7,6 +7,7 @@
 #include "argv-array.h"
 #include "parse-options.h"
 #include "dir.h"
+#include "commit-slab.h"
 
 static const char* show_branch_usage[] = {
 N_("git show-branch [-a | --all] [-r | --remotes] [--topo-order | 
--date-order]\n"
@@ -59,15 +60,27 @@ struct commit_name {
int generation; /* how many parents away from head_name */
 };
 
+define_commit_slab(commit_name_slab, struct commit_name *);
+static struct commit_name_slab name_slab;
+
+static struct commit_name *commit_to_name(struct commit *commit)
+{
+   return *commit_name_slab_at(_slab, commit);
+}
+
+
 /* Name the commit as nth generation ancestor of head_name;
  * we count only the first-parent relationship for naming purposes.
  */
 static void name_commit(struct commit *commit, const char *head_name, int nth)
 {
struct commit_name *name;
-   if (!commit->util)
-   commit->util = xmalloc(sizeof(struct commit_name));
-   name = commit->util;
+
+   name = *commit_name_slab_at(_slab, commit);
+   if (!name) {
+   name = xmalloc(sizeof(*name));
+   *commit_name_slab_at(_slab, commit) = name;
+   }
name->head_name = head_name;
name->generation = nth;
 }
@@ -79,8 +92,8 @@ static void name_commit(struct commit *commit, const char 
*head_name, int nth)
  */
 static void name_parent(struct commit *commit, struct commit *parent)
 {
-   struct commit_name *commit_name = commit->util;
-   struct commit_name *parent_name = parent->util;
+   struct commit_name *commit_name = commit_to_name(commit);
+   struct commit_name *parent_name = commit_to_name(parent);
if (!commit_name)
return;
if (!parent_name ||
@@ -94,12 +107,12 @@ static int name_first_parent_chain(struct commit *c)
int i = 0;
while (c) {
struct commit *p;
-   if (!c->util)
+   if (!commit_to_name(c))
break;
if (!c->parents)
break;
p = c->parents->item;
-   if (!p->util) {
+   if (!commit_to_name(p)) {
name_parent(c, p);
i++;
}
@@ -122,7 +135,7 @@ static void name_commits(struct commit_list *list,
/* First give names to the given heads */
for (cl = list; cl; cl = cl->next) {
c = cl->item;
-   if (c->util)
+   if (commit_to_name(c))
continue;
for (i = 0; i < num_rev; i++) {
if (rev[i] == c) {
@@ -148,9 +161,9 @@ static void name_commits(struct commit_list *list,
struct commit_name *n;
int nth;
c = cl->item;
-   if (!c->util)
+   if (!commit_to_name(c))
continue;
-   n = c->util;
+   n = commit_to_name(c);
parents = c->parents;
nth = 0;
while (parents) {
@@ -158,7 +171,7 @@ static void name_commits(struct commit_list *list,
struct strbuf newname = STRBUF_INIT;
parents = parents->next;
nth++;
-   if (p->util)
+   if (commit_to_name(p))
continue;
switch (n->generation) {
case 0:
@@ -271,7 +284,7 @@ static void show_one_commit(struct commit *commit, int 
no_name)
 {
struct strbuf pretty = STRBUF_INIT;
const char *pretty_str = "(unavailable)";
-   struct commit_name *name = commit->util;
+   struct commit_name *name = commit_to_name(commit);
 
if (commit->object.parsed) {
pp_commit_easy(CMIT_FMT_ONELINE, commit, );
@@ -660,6 +673,8 @@ int cmd_show_branch(int ac, const char **av, const char 
*prefix)
OPT_END()
};
 
+   init_commit_name_slab(_slab);
+
git_config(git_show_branch_config, NULL);
 
/* If nothing is specified, try the default first */
-- 
2.17.0.705.g3525833791