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