Skip to content

Commit

Permalink
log-tree: make name_decoration hash static
Browse files Browse the repository at this point in the history
In the previous commit, we made add_name_decoration global
so that adders would not have to access the hash directly.
We now make the hash itself static so that callers _have_ to
add through our function, making sure that all additions go
through a single point.  To do this, we have to add one more
accessor function: a way to lookup entries in the hash.

Since the only caller doesn't actually look at the returned
value, but rather only asks whether there is a decoration or
not, we could provide only a boolean "has_name_decoration".
That would allow us to make "struct name_decoration" local
to log-tree, as well.

However, it's unlikely to cause any maintainability harm
making the actual data public, and this interface is more
flexible if we need to look at decorations from other parts
of the code in the future.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Aug 26, 2014
1 parent 662174d commit 2608c24
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 5 deletions.
2 changes: 1 addition & 1 deletion commit.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ extern int save_commit_buffer;
extern const char *commit_type;

/* While we can decorate any object with a name, it's only used for commits.. */
extern struct decoration name_decoration;
struct name_decoration {
struct name_decoration *next;
int type;
Expand All @@ -45,6 +44,7 @@ enum decoration_type {
};

void add_name_decoration(enum decoration_type type, const char *name, struct object *obj);
const struct name_decoration *get_name_decoration(const struct object *obj);

struct commit *lookup_commit(const unsigned char *sha1);
struct commit *lookup_commit_reference(const unsigned char *sha1);
Expand Down
11 changes: 8 additions & 3 deletions log-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include "sequencer.h"
#include "line-log.h"

struct decoration name_decoration = { "object names" };
static struct decoration name_decoration = { "object names" };

static char decoration_colors[][COLOR_MAXLEN] = {
GIT_COLOR_RESET,
Expand Down Expand Up @@ -83,6 +83,11 @@ void add_name_decoration(enum decoration_type type, const char *name, struct obj
res->next = add_decoration(&name_decoration, obj, res);
}

const struct name_decoration *get_name_decoration(const struct object *obj)
{
return lookup_decoration(&name_decoration, obj);
}

static int add_ref_decoration(const char *refname, const unsigned char *sha1, int flags, void *cb_data)
{
struct object *obj;
Expand Down Expand Up @@ -177,13 +182,13 @@ void format_decorations(struct strbuf *sb,
int use_color)
{
const char *prefix;
struct name_decoration *decoration;
const struct name_decoration *decoration;
const char *color_commit =
diff_get_color(use_color, DIFF_COMMIT);
const char *color_reset =
decorate_get_color(use_color, DECORATION_NONE);

decoration = lookup_decoration(&name_decoration, &commit->object);
decoration = get_name_decoration(&commit->object);
if (!decoration)
return;
prefix = " (";
Expand Down
2 changes: 1 addition & 1 deletion revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ static int rev_compare_tree(struct rev_info *revs,
* If we are simplifying by decoration, then the commit
* is worth showing if it has a tag pointing at it.
*/
if (lookup_decoration(&name_decoration, &commit->object))
if (get_name_decoration(&commit->object))
return REV_TREE_DIFFERENT;
/*
* A commit that is not pointed by a tag is uninteresting
Expand Down

0 comments on commit 2608c24

Please sign in to comment.