aboutsummaryrefslogtreecommitdiff
path: root/builtin-checkout.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-01-28 15:00:27 -0800
committerJunio C Hamano <gitster@pobox.com>2009-01-28 15:00:27 -0800
commit8712b3cdb0495f5a56b91cd67e2697412447a886 (patch)
tree98dafb9b4f38617d73ef59c9085e01ee727af729 /builtin-checkout.c
parentcd956c73a2cce6613a6cd19df6ccb9ff1b08f79a (diff)
parent73ff1a131b340633b2ec2a0e68490de721448f56 (diff)
downloadgit-8712b3cdb0495f5a56b91cd67e2697412447a886.tar.gz
git-8712b3cdb0495f5a56b91cd67e2697412447a886.tar.xz
Merge branch 'tr/previous-branch'
* tr/previous-branch: t1505: remove debugging cruft Simplify parsing branch switching events in reflog Introduce for_each_recent_reflog_ent(). interpret_nth_last_branch(): plug small memleak Fix reflog parsing for a malformed branch switching entry Fix parsing of @{-1}@{1} interpret_nth_last_branch(): avoid traversing the reflog twice checkout: implement "-" abbreviation, add docs and tests sha1_name: support @{-N} syntax in get_sha1() sha1_name: tweak @{-N} lookup checkout: implement "@{-N}" shortcut name for N-th last branch Conflicts: sha1_name.c
Diffstat (limited to 'builtin-checkout.c')
-rw-r--r--builtin-checkout.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/builtin-checkout.c b/builtin-checkout.c
index 6cdb320ae..20b34ce6e 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -351,8 +351,16 @@ struct branch_info {
static void setup_branch_path(struct branch_info *branch)
{
struct strbuf buf = STRBUF_INIT;
- strbuf_addstr(&buf, "refs/heads/");
- strbuf_addstr(&buf, branch->name);
+ int ret;
+
+ if ((ret = interpret_nth_last_branch(branch->name, &buf))
+ && ret == strlen(branch->name)) {
+ branch->name = xstrdup(buf.buf);
+ strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
+ } else {
+ strbuf_addstr(&buf, "refs/heads/");
+ strbuf_addstr(&buf, branch->name);
+ }
branch->path = strbuf_detach(&buf, NULL);
}
@@ -661,6 +669,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
arg = argv[0];
has_dash_dash = (argc > 1) && !strcmp(argv[1], "--");
+ if (!strcmp(arg, "-"))
+ arg = "@{-1}";
+
if (get_sha1(arg, rev)) {
if (has_dash_dash) /* case (1) */
die("invalid reference: %s", arg);