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 <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html