{"thread":{"id":"13749","subject":"[PATCH 2/3] Make \"git-remote prune\" delete refs according to fetch specs","startedAt":"2008-06-01T03:58:05Z","lastAt":"2008-06-01T03:58:05Z","messageCount":1,"participants":["Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"78267","messageId":"20080601035805.GB32176@spearce.org","threadId":"13749","inReplyTo":null,"subject":"[PATCH 2/3] Make \"git-remote prune\" delete refs according to fetch specs","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-01T03:58:05Z","receivedAt":"2008-06-01T03:58:05Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"A remote may be configured to fetch into tracking branches that\ndo not match the remote name.  For example a user may have created\nextra remotes that will fetch to the same tracking branch namespace,\nbut from different URLs:\n\n  [remote \"origin\"]\n\turl = git://git.kernel.org/pub/scm/git/git.git\n    fetch = refs/heads/*:refs/remotes/origin/*\n\n  [remote \"alt\"]\n\turl = git://repo.or.cz/alt-git.git\n    fetch = refs/heads/*:refs/remotes/origin/*\n\nWhen running `git remote prune alt` we expect stale branches to\nbe removed from \"refs/remotes/origin/*\" and not from the unused\nnamespace of \"refs/remotes/alt/*\".\n\nSigned-off-by: Shawn O. Pearce <spearce@spearce.org>\n---\n builtin-remote.c  |   21 ++-------------------\n t/t5505-remote.sh |   18 ++++++++++++++++++\n 2 files changed, 20 insertions(+), 19 deletions(-)\n\ndiff --git a/builtin-remote.c b/builtin-remote.c\nindex c76fe2e..e5cfc88 100644\n--- a/builtin-remote.c\n+++ b/builtin-remote.c\n@@ -419,27 +419,10 @@ static int show_or_prune(int argc, const char **argv, int prune)\n \t\t\t\t\tstates.remote->name);\n \n \t\tif (prune) {\n-\t\t\tstruct strbuf buf;\n-\t\t\tint prefix_len;\n-\n-\t\t\tstrbuf_init(&buf, 0);\n-\t\t\tif (states.remote->fetch_refspec_nr == 1 &&\n-\t\t\t\t\tstates.remote->fetch->pattern &&\n-\t\t\t\t\t!strcmp(states.remote->fetch->src,\n-\t\t\t\t\t\tstates.remote->fetch->dst))\n-\t\t\t\t/* handle --mirror remote */\n-\t\t\t\tstrbuf_addstr(&buf, \"refs/heads/\");\n-\t\t\telse\n-\t\t\t\tstrbuf_addf(&buf, \"refs/remotes/%s/\", *argv);\n-\t\t\tprefix_len = buf.len;\n-\n \t\t\tfor (i = 0; i < states.stale.nr; i++) {\n-\t\t\t\tstrbuf_setlen(&buf, prefix_len);\n-\t\t\t\tstrbuf_addstr(&buf, states.stale.items[i].path);\n-\t\t\t\tresult |= delete_ref(buf.buf, NULL);\n+\t\t\t\tconst char *refname = states.stale.items[i].util;\n+\t\t\t\tresult |= delete_ref(refname, NULL);\n \t\t\t}\n-\n-\t\t\tstrbuf_release(&buf);\n \t\t\tgoto cleanup_states;\n \t\t}\n \ndiff --git a/t/t5505-remote.sh b/t/t5505-remote.sh\nindex a37b6f5..0d7ed1f 100755\n--- a/t/t5505-remote.sh\n+++ b/t/t5505-remote.sh\n@@ -164,6 +164,24 @@ test_expect_success 'add --mirror && prune' '\n \t git rev-parse --verify refs/heads/side)\n '\n \n+test_expect_success 'add alt && prune' '\n+\t(mkdir alttst &&\n+\t cd alttst &&\n+\t git init &&\n+\t git remote add -f origin ../one &&\n+\t git config remote.alt.url ../one &&\n+\t git config remote.alt.fetch \"+refs/heads/*:refs/remotes/origin/*\") &&\n+\t(cd one &&\n+\t git branch -m side side2) &&\n+\t(cd alttst &&\n+\t git rev-parse --verify refs/remotes/origin/side &&\n+\t ! git rev-parse --verify refs/remotes/origin/side2 &&\n+\t git fetch alt &&\n+\t git remote prune alt &&\n+\t ! git rev-parse --verify refs/remotes/origin/side &&\n+\t git rev-parse --verify refs/remotes/origin/side2)\n+'\n+\n cat > one/expect << EOF\n   apis/master\n   apis/side\n-- \n1.5.6.rc0.158.g7c7a1\n"}]}