diff options
| -rw-r--r-- | Documentation/technical/pack-protocol.txt | 3 | ||||
| -rwxr-xr-x | t/t5500-fetch-pack.sh | 14 | ||||
| -rw-r--r-- | upload-pack.c | 2 | 
3 files changed, 16 insertions, 3 deletions
diff --git a/Documentation/technical/pack-protocol.txt b/Documentation/technical/pack-protocol.txt index f1a51edf47..b898e97988 100644 --- a/Documentation/technical/pack-protocol.txt +++ b/Documentation/technical/pack-protocol.txt @@ -228,8 +228,7 @@ obtained through ref discovery.  The client MUST write all obj-ids which it only has shallow copies  of (meaning that it does not have the parents of a commit) as  'shallow' lines so that the server is aware of the limitations of -the client's history. Clients MUST NOT mention an obj-id which -it does not know exists on the server. +the client's history.  The client now sends the maximum commit history depth it wants for  this transaction, which is the number of commits it wants from the diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh index d574085696..6133d9ed13 100755 --- a/t/t5500-fetch-pack.sh +++ b/t/t5500-fetch-pack.sh @@ -373,6 +373,20 @@ test_expect_success 'clone shallow with packed refs' '  	test_cmp count8.expected count8.actual  ' +test_expect_success 'fetch in shallow repo unreachable shallow objects' ' +	( +		git clone --bare --branch B --single-branch "file://$(pwd)/." no-reflog && +		git clone --depth 1 "file://$(pwd)/no-reflog" shallow9 && +		cd no-reflog && +		git tag -d TAGB1 TAGB2 && +		git update-ref refs/heads/B B~~ && +		git gc --prune=now && +		cd ../shallow9 && +		git fetch origin && +		git fsck --no-dangling +	) +' +  test_expect_success 'setup tests for the --stdin parameter' '  	for head in C D E F  	do diff --git a/upload-pack.c b/upload-pack.c index bfa6279cc4..127e59a603 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -592,7 +592,7 @@ static void receive_needs(void)  				die("invalid shallow line: %s", line);  			object = parse_object(sha1);  			if (!object) -				die("did not find object for %s", line); +				continue;  			if (object->type != OBJ_COMMIT)  				die("invalid shallow object %s", sha1_to_hex(sha1));  			if (!(object->flags & CLIENT_SHALLOW)) {  | 
