summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 8415d5c)
raw | patch | inline | side by side (parent: 8415d5c)
author | Junio C Hamano <gitster@pobox.com> | |
Sat, 14 Feb 2009 07:26:12 +0000 (23:26 -0800) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Sat, 14 Feb 2009 07:46:42 +0000 (23:46 -0800) |
1.6.2 will have @{-1} syntax advertised as "usable anywhere you can use
a branch name". However, "git merge @{-1}" did not work.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
a branch name". However, "git merge @{-1}" did not work.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-merge.c | patch | blob | history | |
t/t0100-previous.sh | patch | blob | history |
diff --git a/builtin-merge.c b/builtin-merge.c
index 885fad9bba1310e6ed8424f9d4b481e066760a9b..6d2160d0a3db1705d1372029dfa24752d453c8ec 100644 (file)
--- a/builtin-merge.c
+++ b/builtin-merge.c
struct object *remote_head;
unsigned char branch_head[20], buf_sha[20];
struct strbuf buf = STRBUF_INIT;
+ struct strbuf bname = STRBUF_INIT;
const char *ptr;
int len, early;
+ len = strlen(remote);
+ if (interpret_nth_last_branch(remote, &bname) == len)
+ remote = bname.buf;
+
memset(branch_head, 0, sizeof(branch_head));
remote_head = peel_to_type(remote, 0, NULL, OBJ_COMMIT);
if (!remote_head)
if (!hashcmp(remote_head->sha1, branch_head)) {
strbuf_addf(msg, "%s\t\tbranch '%s' of .\n",
sha1_to_hex(branch_head), remote);
- return;
+ goto cleanup;
}
/* See if remote matches <name>^^^.. or <name>~<number> */
sha1_to_hex(remote_head->sha1),
truname.buf + 11,
(early ? " (early part)" : ""));
- return;
+ strbuf_release(&truname);
+ goto cleanup;
}
}
strbuf_remove(&line, ptr-line.buf+1, 13);
strbuf_addbuf(msg, &line);
strbuf_release(&line);
- return;
+ goto cleanup;
}
strbuf_addf(msg, "%s\t\tcommit '%s'\n",
sha1_to_hex(remote_head->sha1), remote);
+cleanup:
+ strbuf_release(&buf);
+ strbuf_release(&bname);
}
static int git_merge_config(const char *k, const char *v, void *cb)
diff --git a/t/t0100-previous.sh b/t/t0100-previous.sh
index db51b421d6dc5370d847ea74433f3df196f225f8..315b9b3f10cfae0186afca6f8024d73cce0a19e2 100755 (executable)
--- a/t/t0100-previous.sh
+++ b/t/t0100-previous.sh
git rev-parse --verify refs/heads/master
'
+test_expect_success 'merge @{-1}' '
+ git checkout A &&
+ test_commit B &&
+ git checkout A &&
+ test_commit C &&
+ git branch -f master B &&
+ git branch -f other &&
+ git checkout other &&
+ git checkout master &&
+ git merge @{-1} &&
+ git cat-file commit HEAD | grep "Merge branch '\''other'\''"
+'
+
+test_expect_success 'merge @{-1} when there is not enough switches yet' '
+ git reflog expire --expire=now &&
+ git checkout -f master &&
+ git reset --hard B &&
+ git branch -f other C &&
+ git checkout other &&
+ git checkout master &&
+ test_must_fail git merge @{-12}
+'
+
test_done