So HEAD@{0}~0^0 is too much to type, but we can remove '^0', and we can remove '~0', and we can remove 'HEAD', but we can't remove '{0}'? This patch allows 'HEAD@' to be the same as 'HEAD@{0}', and similarly with 'master@'. So we can type '@' instead of 'HEAD@', or rather 'HEAD'. So now we can use 'git show @~1', and all that goody goodness. Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- People have complained about the lack of a HEAD shortcut before, and some proposals have been made, but I think this one is a clean trick in accordance with our current syntax. Documentation/revisions.txt | 3 +++ sha1_name.c | 8 +++++++- t/t1503-rev-parse-verify.sh | 9 +++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt index d477b3f..6315ce5 100644 --- a/Documentation/revisions.txt +++ b/Documentation/revisions.txt @@ -58,6 +58,9 @@ the '$GIT_DIR/refs' directory or from the '$GIT_DIR/packed-refs' file. While the ref name encoding is unspecified, UTF-8 is preferred as some output processing may assume ref names in UTF-8. +'@':: + '@' alone is a shortcut for 'HEAD' + '<refname>@\{<date>\}', e.g. 'master@\{yesterday\}', 'HEAD@\{5 minutes ago\}':: A ref followed by the suffix '@' with a date specification enclosed in a brace diff --git a/sha1_name.c b/sha1_name.c index 3820f28..d7c3d6f 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -437,11 +437,15 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1) static const char *warn_msg = "refname '%.*s' is ambiguous."; char *real_ref = NULL; int refs_found = 0; - int at, reflog_len; + int at, reflog_len, empty_at; if (len == 40 && !get_sha1_hex(str, sha1)) return 0; + empty_at = len && str[len-1] == '@'; + if (empty_at) + len = len-1; + /* basic@{time or number or -number} format to query ref-log */ reflog_len = at = 0; if (len && str[len-1] == '}') { @@ -475,6 +479,8 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1) refs_found = dwim_ref("HEAD", 4, sha1, &real_ref); } else if (reflog_len) refs_found = dwim_log(str, len, sha1, &real_ref); + else if (!len && empty_at) + refs_found = dwim_ref("HEAD", 4, sha1, &real_ref); else refs_found = dwim_ref(str, len, sha1, &real_ref); diff --git a/t/t1503-rev-parse-verify.sh b/t/t1503-rev-parse-verify.sh index 813cc1b..426c63f 100755 --- a/t/t1503-rev-parse-verify.sh +++ b/t/t1503-rev-parse-verify.sh @@ -115,4 +115,13 @@ test_expect_success 'master@{n} for various n' ' test_must_fail git rev-parse --verify master@{$Np1} ' +test_expect_success 'empty @' ' + rev_hash=$(git rev-parse --verify @) && + test "$rev_hash" = "$HASH4" && + rev_hash=$(git rev-parse --verify HEAD@) && + test "$rev_hash" = "$HASH4" && + rev_hash=$(git rev-parse --verify master@) && + test "$rev_hash" = "$HASH4" +' + test_done -- 1.8.2.1.1031.g2ee5873 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html