diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2013-05-07 17:04:31 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-05-08 12:13:12 -0700 |
commit | cdfd94837b27c220f70f032b596ea993d195488f (patch) | |
tree | a3b5f7b61e29f5c0c011b1712ae77c9d9945d746 /sha1_name.c | |
parent | 7a0a49a7ca787433255280b66e7652b56f7beb6e (diff) | |
download | git-cdfd94837b27c220f70f032b596ea993d195488f.tar.gz |
Add new @ shortcut for HEAD
Typing 'HEAD' is tedious, especially when we can use '@' instead.
The reason for choosing '@' is that it follows naturally from the
ref@op syntax (e.g. HEAD@{u}), except we have no ref, and no
operation, and when we don't have those, it makes sens to assume
'HEAD'.
So now we can use 'git show @~1', and all that goody goodness.
Until now '@' was a valid name, but it conflicts with this idea, so
let's make it invalid. Probably very few people, if any, used this name.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'sha1_name.c')
-rw-r--r-- | sha1_name.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/sha1_name.c b/sha1_name.c index f60c951234..4428df19a7 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -972,6 +972,17 @@ int get_sha1_mb(const char *name, unsigned char *sha1) return st; } +/* parse @something syntax, when 'something' is not {.*} */ +static int interpret_empty_at(const char *name, int namelen, int len, struct strbuf *buf) +{ + if (len || name[1] == '{') + return -1; + + strbuf_reset(buf); + strbuf_add(buf, "HEAD", 4); + return 1; +} + static int reinterpret(const char *name, int namelen, int len, struct strbuf *buf) { /* we have extra data, which might need further processing */ @@ -1032,9 +1043,15 @@ int interpret_branch_name(const char *name, struct strbuf *buf) cp = strchr(name, '@'); if (!cp) return -1; + + len = interpret_empty_at(name, namelen, cp - name, buf); + if (len > 0) + return reinterpret(name, namelen, len, buf); + tmp_len = upstream_mark(cp, namelen - (cp - name)); if (!tmp_len) return -1; + len = cp + tmp_len - name; cp = xstrndup(name, cp - name); upstream = branch_get(*cp ? cp : NULL); |