summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-11-01 07:38:41 -0700
committerJunio C Hamano <gitster@pobox.com>2013-11-01 07:38:41 -0700
commitc167b76a6249ed0eb4bedd11c5852b2818c276f7 (patch)
treefd7f4fc5986a5733b08901118cff2d2d78b6e5c0
parent583736c0bcf09adaa5621b142d8e43c22354041b (diff)
parentb74cf648036af764a176898763a0ec066a77a92f (diff)
downloadgit-c167b76a6249ed0eb4bedd11c5852b2818c276f7.tar.gz
Merge branch 'jk/for-each-ref-skip-parsing'
* jk/for-each-ref-skip-parsing: for-each-ref: avoid loading objects to print %(objectname)
-rw-r--r--builtin/for-each-ref.c29
-rwxr-xr-xt/t6300-for-each-ref.sh4
2 files changed, 24 insertions, 9 deletions
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 1d4083c2dd..d096051b15 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -205,6 +205,22 @@ static void *get_obj(const unsigned char *sha1, struct object **obj, unsigned lo
return buf;
}
+static int grab_objectname(const char *name, const unsigned char *sha1,
+ struct atom_value *v)
+{
+ if (!strcmp(name, "objectname")) {
+ char *s = xmalloc(41);
+ strcpy(s, sha1_to_hex(sha1));
+ v->s = s;
+ return 1;
+ }
+ if (!strcmp(name, "objectname:short")) {
+ v->s = xstrdup(find_unique_abbrev(sha1, DEFAULT_ABBREV));
+ return 1;
+ }
+ return 0;
+}
+
/* See grab_values */
static void grab_common_values(struct atom_value *val, int deref, struct object *obj, void *buf, unsigned long sz)
{
@@ -225,15 +241,8 @@ static void grab_common_values(struct atom_value *val, int deref, struct object
v->ul = sz;
v->s = s;
}
- else if (!strcmp(name, "objectname")) {
- char *s = xmalloc(41);
- strcpy(s, sha1_to_hex(obj->sha1));
- v->s = s;
- }
- else if (!strcmp(name, "objectname:short")) {
- v->s = xstrdup(find_unique_abbrev(obj->sha1,
- DEFAULT_ABBREV));
- }
+ else if (deref)
+ grab_objectname(name, obj->sha1, v);
}
}
@@ -676,6 +685,8 @@ static void populate_value(struct refinfo *ref)
}
continue;
}
+ else if (!deref && grab_objectname(name, ref->objectname, v))
+ continue;
else
continue;
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index 752f5cb7d0..da5fb6c917 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -58,6 +58,8 @@ test_atom head parent ''
test_atom head numparent 0
test_atom head object ''
test_atom head type ''
+test_atom head '*objectname' ''
+test_atom head '*objecttype' ''
test_atom head author 'A U Thor <author@example.com> 1151939924 +0200'
test_atom head authorname 'A U Thor'
test_atom head authoremail '<author@example.com>'
@@ -91,6 +93,8 @@ test_atom tag parent ''
test_atom tag numparent ''
test_atom tag object '67a36f10722846e891fbada1ba48ed035de75581'
test_atom tag type 'commit'
+test_atom tag '*objectname' '67a36f10722846e891fbada1ba48ed035de75581'
+test_atom tag '*objecttype' 'commit'
test_atom tag author ''
test_atom tag authorname ''
test_atom tag authoremail ''