Skip to content

Commit

Permalink
Teach @{-1} to git merge
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Feb 14, 2009
1 parent 8415d5c commit c9717ee
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
15 changes: 12 additions & 3 deletions builtin-merge.c
Original file line number Diff line number Diff line change
Expand Up @@ -356,9 +356,14 @@ static void merge_name(const char *remote, struct strbuf *msg)
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)
Expand All @@ -371,7 +376,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
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> */
Expand Down Expand Up @@ -411,7 +416,8 @@ static void merge_name(const char *remote, struct strbuf *msg)
sha1_to_hex(remote_head->sha1),
truname.buf + 11,
(early ? " (early part)" : ""));
return;
strbuf_release(&truname);
goto cleanup;
}
}

Expand All @@ -432,10 +438,13 @@ static void merge_name(const char *remote, struct strbuf *msg)
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)
Expand Down
23 changes: 23 additions & 0 deletions t/t0100-previous.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,28 @@ test_expect_success 'branch -d @{-12} when there is not enough switches yet' '
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

0 comments on commit c9717ee

Please sign in to comment.