diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2007-05-21 03:20:25 -0400 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-05-21 23:56:28 -0700 |
commit | 23615708e2abef5c293ddee9335950161a038133 (patch) | |
tree | ae1e929a1ebc5342b977ad6a8dedf82376eebecb /builtin-name-rev.c | |
parent | 302b9282c9ddfcc704ca759bdc98c1d5f75eba2f (diff) | |
download | git-23615708e2abef5c293ddee9335950161a038133.tar.gz git-23615708e2abef5c293ddee9335950161a038133.tar.xz |
Teach git-describe how to run name-rev
Often users want to know not which tagged version a commit came
after, but which tagged version a commit is contained within.
This latter task is the job of git-name-rev, but most users are
looking to git-describe to do the job.
Junio suggested we make `git describe --contains` run the correct
tool, `git name-rev`, and that's exactly what we do here. The output
of name-rev was adjusted slightly through the new --name-only option,
allowing describe to execv into name-rev and maintain its current
output format.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'builtin-name-rev.c')
-rw-r--r-- | builtin-name-rev.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/builtin-name-rev.c b/builtin-name-rev.c index ef1638590..a639e2fed 100644 --- a/builtin-name-rev.c +++ b/builtin-name-rev.c @@ -83,6 +83,7 @@ copy_data: struct name_ref_data { int tags_only; + int name_only; const char *ref_filter; }; @@ -110,6 +111,10 @@ static int name_ref(const char *path, const unsigned char *sha1, int flags, void if (!prefixcmp(path, "refs/heads/")) path = path + 11; + else if (data->tags_only + && data->name_only + && !prefixcmp(path, "refs/tags/")) + path = path + 10; else if (!prefixcmp(path, "refs/")) path = path + 5; @@ -149,7 +154,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) { struct object_array revs = { 0, 0, NULL }; int as_is = 0, all = 0, transform_stdin = 0; - struct name_ref_data data = { 0, NULL }; + struct name_ref_data data = { 0, 0, NULL }; git_config(git_default_config); @@ -165,6 +170,9 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) if (!strcmp(*argv, "--")) { as_is = 1; continue; + } else if (!strcmp(*argv, "--name-only")) { + data.name_only = 1; + continue; } else if (!strcmp(*argv, "--tags")) { data.tags_only = 1; continue; @@ -263,14 +271,17 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) struct object * obj = get_indexed_object(i); if (!obj) continue; - printf("%s %s\n", sha1_to_hex(obj->sha1), get_rev_name(obj)); + if (!data.name_only) + printf("%s ", sha1_to_hex(obj->sha1)); + printf("%s\n", get_rev_name(obj)); } } else { int i; - for (i = 0; i < revs.nr; i++) - printf("%s %s\n", - revs.objects[i].name, - get_rev_name(revs.objects[i].item)); + for (i = 0; i < revs.nr; i++) { + if (!data.name_only) + printf("%s ", revs.objects[i].name); + printf("%s\n", get_rev_name(revs.objects[i].item)); + } } return 0; |