@matheusbsbs / matheus-bagliano / commits / 4ebc914c88
Fork 0

builtin-remote: prune remotes correctly that were added with --mirror

This adds special handling for mirror remotes. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Schindelin committed Feb 29, 2008 at 01:46 UTC 4ebc914c880cf724222a6e5097a21a85ed8e5951
2 files changed +29 -3
builtin-remote.c
+13 -3
@@ -396,12 +396,22 @@ static int show_or_prune(int argc, const char **argv, int prune)
396
397 if (prune) {
398 struct strbuf buf;
399 + int prefix_len;
400
401 strbuf_init(&buf, 0);
402 + if (states.remote->fetch_refspec_nr == 1 &&
403 + states.remote->fetch->pattern &&
404 + !strcmp(states.remote->fetch->src,
405 + states.remote->fetch->dst))
406 + /* handle --mirror remote */
407 + strbuf_addstr(&buf, "refs/heads/");
408 + else
409 + strbuf_addf(&buf, "refs/remotes/%s/", *argv);
410 + prefix_len = buf.len;
411 +
412 for (i = 0; i < states.stale.nr; i++) {
402 - strbuf_reset(&buf);
403 - strbuf_addf(&buf, "refs/remotes/%s/%s", *argv,
404 - states.stale.items[i].path);
413 + strbuf_setlen(&buf, prefix_len);
414 + strbuf_addstr(&buf, states.stale.items[i].path);
415 result |= delete_ref(buf.buf, NULL);
416 }
417
t/t5505-remote.sh
+16
@@ -128,4 +128,20 @@ test_expect_success 'prune' '
128 ! git rev-parse refs/remotes/origin/side)
129 '
130
131 +test_expect_success 'add --mirror && prune' '
132 + (mkdir mirror &&
133 + cd mirror &&
134 + git init &&
135 + git remote add --mirror -f origin ../one) &&
136 + (cd one &&
137 + git branch -m side2 side) &&
138 + (cd mirror &&
139 + git rev-parse --verify refs/heads/side2 &&
140 + ! git rev-parse --verify refs/heads/side &&
141 + git fetch origin &&
142 + git remote prune origin &&
143 + ! git rev-parse --verify refs/heads/side2 &&
144 + git rev-parse --verify refs/heads/side)
145 +'
146 +
147 test_done