shithub: plan9front

Download patch

ref: a2a0717c99ab60bc0d7814fa22230013f9347c22
parent: 74912993de657a9885d4c1f95ebf64b0c7d5083f
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Jun 5 23:29:57 EDT 2021

git/send: allow the remote to have refs that we don't

It's not fatal for someone else to push a branch
with objects that we don't have. We should deal
with it gracefully, and act as though it doesn't
exist.

--- a/sys/src/cmd/git/send.c	Sat Jun  5 22:07:57 2021
+++ b/sys/src/cmd/git/send.c	Sat Jun  5 23:29:57 2021
@@ -121,7 +121,7 @@
 	int nours, ntheirs, nmap;
 	char buf[Pktmax], *sp[3];
 	Hash h, *theirs, *ours;
-	Object *a, *b, *p;
+	Object *a, *b, *p, *o;
 	char **refs;
 	Capset cs;
 	Map *map, *m;
@@ -155,9 +155,12 @@
 		theirs = earealloc(theirs, ntheirs+1, sizeof(Hash));
 		if(hparse(&theirs[ntheirs], sp[0]) == -1)
 			sysfatal("invalid hash %s", sp[0]);
-		if((idx = findkey(map, nmap, sp[1])) != -1)
-			map[idx].theirs = theirs[ntheirs];
-		ntheirs++;
+		if((o = readobject(theirs[ntheirs])) != nil){
+			if((idx = findkey(map, nmap, sp[1])) != -1)
+				map[idx].theirs = theirs[ntheirs];
+			ntheirs++;
+			unref(o);
+		}
 	}
 
 	if(writephase(c) == -1)