diff options
author | Junio C Hamano <junkio@cox.net> | 2006-09-27 22:23:12 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-09-27 22:23:12 -0700 |
commit | 2958d9b5dbebeb82e7230bbfd3f421781d90f3f7 (patch) | |
tree | 881c16a7442a1829d8959aee272f50065c53b582 /sha1_name.c | |
parent | 194db7e3bbab9669c511133549e6ae74481c9a4f (diff) | |
parent | 51b2dd4e3f730f6be6c19faf3b4a04caea9e0420 (diff) | |
download | git-2958d9b5dbebeb82e7230bbfd3f421781d90f3f7.tar.gz |
Merge branch 'master' into lj/refs
* master: (72 commits)
runstatus: do not recurse into subdirectories if not needed
grep: fix --fixed-strings combined with expression.
grep: free expressions and patterns when done.
Corrected copy-and-paste thinko in ignore executable bit test case.
An illustration of rev-list --parents --pretty=raw
Allow git-checkout when on a non-existant branch.
gitweb: Decode long title for link tooltips
git-svn: Fix fetch --no-ignore-externals with GIT_SVN_NO_LIB=1
Ignore executable bit when adding files if filemode=0.
Remove empty ref directories that prevent creating a ref.
Use const for interpolate arguments
git-archive: update documentation
Deprecate merge-recursive.py
gitweb: fix over-eager application of esc_html().
Allow '(no author)' in git-svn's authors file.
Allow 'svn fetch' on '(no date)' revisions in Subversion.
git-repack: allow git-repack to run in subdirectory
Remove upload-tar and make git-tar-tree a thin wrapper to git-archive
git-tar-tree: Move code for git-archive --format=tar to archive-tar.c
git-tar-tree: Remove duplicate git_config() call
...
Diffstat (limited to 'sha1_name.c')
-rw-r--r-- | sha1_name.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/sha1_name.c b/sha1_name.c index 84d24c6abf..ed711f2079 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -431,6 +431,26 @@ static int peel_onion(const char *name, int len, unsigned char *sha1) return 0; } +static int get_describe_name(const char *name, int len, unsigned char *sha1) +{ + const char *cp; + + for (cp = name + len - 1; name + 2 <= cp; cp--) { + char ch = *cp; + if (hexval(ch) & ~0377) { + /* We must be looking at g in "SOMETHING-g" + * for it to be describe output. + */ + if (ch == 'g' && cp[-1] == '-') { + cp++; + len -= cp - name; + return get_short_sha1(cp, len, sha1, 1); + } + } + } + return -1; +} + static int get_sha1_1(const char *name, int len, unsigned char *sha1) { int ret, has_suffix; @@ -472,6 +492,12 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1) ret = get_sha1_basic(name, len, sha1); if (!ret) return 0; + + /* It could be describe output that is "SOMETHING-gXXXX" */ + ret = get_describe_name(name, len, sha1); + if (!ret) + return 0; + return get_short_sha1(name, len, sha1, 0); } |