summaryrefslogtreecommitdiff
path: root/sys/src/cmd/git/send.c
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2023-04-17 21:11:47 +0000
committerOri Bernstein <ori@eigenstate.org>2023-04-17 21:11:47 +0000
commit4d901d1e4165085cda5b574b44e1cc51be50abf8 (patch)
treed8a0e4163181158207d0546c69b9bc42a397570d /sys/src/cmd/git/send.c
parentdd676b5a4fa19fcbe608598e73e3ee6b5bd5ad84 (diff)
git/send: correctly delete branches with no local mirror
Diffstat (limited to 'sys/src/cmd/git/send.c')
-rw-r--r--sys/src/cmd/git/send.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/src/cmd/git/send.c b/sys/src/cmd/git/send.c
index 1188a71fa..e83d6866f 100644
--- a/sys/src/cmd/git/send.c
+++ b/sys/src/cmd/git/send.c
@@ -75,9 +75,11 @@ readours(Hash **tailp, char ***refp)
sysfatal("smprint: %r");
if((idx = findref(ref, nu, r)) == -1)
idx = nu++;
+ else
+ free(ref[idx]);
assert(idx < nremoved + nbranch);
memcpy(&tail[idx], &Zhash, sizeof(Hash));
- free(r);
+ ref[idx] = r;
}
dprint(1, "nu: %d\n", nu);
for(i = 0; i < nu; i++)
@@ -184,7 +186,10 @@ sendpack(Conn *c)
p = nil;
if(a != nil && b != nil)
p = ancestor(a, b);
- if(!force && !hasheq(&m->theirs, &Zhash) && (a == nil || p != a)){
+ if(!force
+ && !hasheq(&m->theirs, &Zhash)
+ && !hasheq(&m->ours, &Zhash)
+ && (a == nil || p != a)){
fprint(2, "remote has diverged\n");
werrstr("remote diverged");
flushpkt(c);