diff options
author | Martin von Zweigbergk <martin.von.zweigbergk@gmail.com> | 2011-09-01 20:50:34 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-09-11 21:39:56 -0700 |
commit | 60e5eee0f1a70e09f28d1e55b3aaddb59eeea887 (patch) | |
tree | 288bbe70fc5574c3a21a3de90c53e7cffa4ef2b1 | |
parent | remote: write correct fetch spec when renaming remote 'remote' (diff) | |
download | tgif-60e5eee0f1a70e09f28d1e55b3aaddb59eeea887.tar.xz |
remote: "rename o foo" should not rename ref "origin/bar"
When renaming a remote called 'o' using 'git remote rename o foo', git
should also rename any remote-tracking branches for the remote. This
does happen, but any remote-tracking branches starting with
'refs/remotes/o', such as 'refs/remotes/origin/bar', will also be
renamed (to 'refs/remotes/foorigin/bar' in this case).
Fix it by simply matching one more character, up to the slash
following the remote name.
Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin/remote.c | 2 | ||||
-rwxr-xr-x | t/t5505-remote.sh | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/builtin/remote.c b/builtin/remote.c index af96849dc9..180da895be 100644 --- a/builtin/remote.c +++ b/builtin/remote.c @@ -580,7 +580,7 @@ static int read_remote_branches(const char *refname, unsigned char orig_sha1[20]; const char *symref; - strbuf_addf(&buf, "refs/remotes/%s", rename->old); + strbuf_addf(&buf, "refs/remotes/%s/", rename->old); if (!prefixcmp(refname, buf.buf)) { item = string_list_append(rename->remote_branches, xstrdup(refname)); symref = resolve_ref(refname, orig_sha1, 1, &flag); diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh index 36c807c608..15186c8cbf 100755 --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@ -651,6 +651,16 @@ test_expect_success 'rename a remote with name part of fetch spec' ' ' +test_expect_success 'rename a remote with name prefix of other remote' ' + + git clone one four.three && + (cd four.three && + git remote add o git://example.com/repo.git && + git remote rename o upstream && + test "$(git rev-parse origin/master)" = "$(git rev-parse master)") + +' + cat > remotes_origin << EOF URL: $(pwd)/one Push: refs/heads/master:refs/heads/upstream |