зеркало из https://github.com/microsoft/git.git
show-branch: use commit-slab for commit-name instead of commit->util
It's done so that commit->util can be removed. See more explanation in the commit that removes commit->util. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
8fd79a7304
Коммит
60855a5343
|
@ -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(&name_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(&name_slab, commit);
|
||||
if (!name) {
|
||||
name = xmalloc(sizeof(*name));
|
||||
*commit_name_slab_at(&name_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, &pretty);
|
||||
|
@ -660,6 +673,8 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
|
|||
OPT_END()
|
||||
};
|
||||
|
||||
init_commit_name_slab(&name_slab);
|
||||
|
||||
git_config(git_show_branch_config, NULL);
|
||||
|
||||
/* If nothing is specified, try the default first */
|
||||
|
|
Загрузка…
Ссылка в новой задаче