Browse Source

name-ref: factor out name shortening logic from name_ref()

The logic will be used in a new codepath for showing exact matches.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Junio C Hamano 12 years ago
parent
commit
9608a190c0
  1. 19
      builtin/name-rev.c

19
builtin/name-rev.c

@ -96,6 +96,17 @@ static int subpath_matches(const char *path, const char *filter) @@ -96,6 +96,17 @@ static int subpath_matches(const char *path, const char *filter)
return -1;
}

static const char *name_ref_abbrev(const char *refname, int shorten_unambiguous)
{
if (shorten_unambiguous)
refname = shorten_unambiguous_ref(refname, 0);
else if (!prefixcmp(refname, "refs/heads/"))
refname = refname + 11;
else if (!prefixcmp(refname, "refs/"))
refname = refname + 5;
return refname;
}

struct name_ref_data {
int tags_only;
int name_only;
@ -134,13 +145,7 @@ static int name_ref(const char *path, const unsigned char *sha1, int flags, void @@ -134,13 +145,7 @@ static int name_ref(const char *path, const unsigned char *sha1, int flags, void
if (o && o->type == OBJ_COMMIT) {
struct commit *commit = (struct commit *)o;

if (can_abbreviate_output)
path = shorten_unambiguous_ref(path, 0);
else if (!prefixcmp(path, "refs/heads/"))
path = path + 11;
else if (!prefixcmp(path, "refs/"))
path = path + 5;

path = name_ref_abbrev(path, can_abbreviate_output);
name_rev(commit, xstrdup(path), 0, 0, deref);
}
return 0;

Loading…
Cancel
Save