shithub: git9

Download patch

ref: 9ec38f3162c5c7f1a7fe136bab160e76df13a7ba
parent: f5805c3552dd00a6018f8440c1a4c8aa6755fd03
author: Ori Bernstein <ori@eigenstate.org>
date: Thu Oct 17 10:37:20 EDT 2019

Skip packing data if the other side has the commit.

diff: cannot open a/test//null: file does not exist: 'a/test//null'
--- a/fetch.c
+++ b/fetch.c
@@ -160,6 +160,7 @@
 		getfields(buf, sp, nelem(sp), 1, " \t\n\r");
 		if(strstr(sp[1], "^{}"))
 			continue;
+		print("sp[1]: %s\n", sp[1]);
 		if(fetchbranch && !branchmatch(sp[1], fetchbranch))
 			continue;
 		if(refsz == nref + 1){
--- a/pull
+++ b/pull
@@ -11,6 +11,7 @@
 	url=$3
 	dir=$4
 
+	echo git/fetch  -b $branch -u $upstream $url
 	fetch=`"{git/fetch  -b $branch -u $upstream $url |[2]  tr '\x0d' '\x0a'}
 	st=$status
 	if(! ~ $st ''){
@@ -39,11 +40,6 @@
 	exit usage
 }
 
-branch=`{awk '$1=="branch"{print $2}' < /mnt/git/ctl}
-remote=()
-incoming=()
-checkout='true'
-upstream=origin
 
 if(! cd `{git/conf -r}){
 	echo 'not in git repository' >[1=2]
@@ -50,6 +46,11 @@
 	exit notgit
 }
 git/fs
+branch=refs/`{git/branch}
+remote=()
+incoming=()
+checkout='true'
+upstream=origin
 
 while(~ $1 -*){
 	switch($1){
--- a/send.c
+++ b/send.c
@@ -287,7 +287,7 @@
 int
 sendpack(int fd)
 {
-	int i, n, r, nupd, nsp, updating;
+	int i, n, r, nupd, nsp, sendpack;
 	char buf[Pktmax], *sp[3];
 	Update *upd, *u;
 	Object *a, *b;
@@ -313,7 +313,7 @@
 	}
 
 	r = 0;
-	updating = 0;
+	sendpack = 0;
 	for(i = 0; i < nupd; i++){
 		u = &upd[i];
 		a = readobject(u->theirs);
@@ -321,7 +321,7 @@
 		if(!force && !hasheq(&u->theirs, &Zhash) && (a == nil || ancestor(a, b) != a)){
 			fprint(2, "remote has diverged\n");
 			werrstr("force needed");
-			updating=0;
+			sendpack=0;
 			r = -1;
 			break;
 		}
@@ -352,10 +352,15 @@
 		}
 		if(writepkt(fd, buf, n) == -1)
 			sysfatal("unable to send update pkt");
-		updating = 1;
+		/*
+		 * If we're rolling back with a force push, the other side already
+		 * has our changes. There's no need to send a pack if that's the case.
+		 */
+		if(!ancestor(b, a))
+			sendpack = 1;
 	}
 	flushpkt(fd);
-	if(updating){
+	if(sendpack){
 		if(writepack(fd, upd, nupd) == -1)
 			return -1;