Re: Am I doing something wrong?
It turns out to be a stupid off-by-one error in http-fetch.c. The objects/info/packs file has the following:
$ cat objects/info/packs
P pack-46ff81b11ed16ed38caa4aada913cb08c00185b2.pack
P pack-05f611b3b8198b262acdf678584d365f8e879aec.pack
P pack-740c99c0be6734adbd130737dec2608dc4682761.pack
$The code that parses this in http-fetch had an off-by-one, and incorrectly thought that the last entry was incomplete. This problem did not surface earlier, because objects/info/packs file used to have other information after all the P lines, but http-fetch was not interested in was skipping them. The latest update-server-info stopped producing those extra lines.
As a band-aid, I just ran this command at the server that public ones mirror from:
$ echo >>objects/info/packs
The change seems to have mirrored out already, and my "broken" client before the attached patch successfully fetches from there, so hopefully things would work OK for you as well.
I also have to add some code to server-info.c, to append an empty after objects/info/packs file to work around this bug in the deployed http clients.
Thanks for your help in diagnosing and fixing this problem.
-- >8 -- [PATCH] http-fetch.c: fix objects/info/pack parsing.
It failed to register the last pack mentioned in the objects/info/packs file. Also it had an independent overrun error.
Signed-off-by: Junio C Hamano <junkio@cox.net>
--- git diff
diff --git a/http-fetch.c b/http-fetch.c
index ad59f1c..3cd6ef9 100644
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -658,7 +658,7 @@ static int fetch_indices(struct alt_base
switch (data[i]) {
case 'P':
i++;
- if (i + 52 < buffer.posn &&
+ if (i + 52 <= buffer.posn &&
!strncmp(data + i, " pack-", 6) &&
!strncmp(data + i + 46, ".pack\n", 6)) {
get_sha1_hex(data + i + 6, sha1);
@@ -667,7 +667,7 @@ static int fetch_indices(struct alt_base
break;
}
default:
- while (data[i] != '\n')
+ while (i < buffer.posn && data[i] != '\n')
i++;
}
i++;
Compilation finished at Wed Dec 21 11:40:06