path: root/builtin/pack-objects.c
diff options
authorNguyễn Thái Ngọc Duy <>2014-03-11 12:59:46 (GMT)
committerJunio C Hamano <>2014-03-11 20:32:10 (GMT)
commitb790e0f67cd97f29b72cb9007632b0329e5eebec (patch)
tree4c35abd01b4207524fe87a85334c3d65bf755abe /builtin/pack-objects.c
parent16216b6ab1073b7aaa8225c32208758e6ea16629 (diff)
upload-pack: send shallow info over stdin to pack-objects
Before cdab485 (upload-pack: delegate rev walking in shallow fetch to pack-objects - 2013-08-16) upload-pack does not write to the source repository. cdab485 starts to write $GIT_DIR/shallow_XXXXXX if it's a shallow fetch, so the source repo must be writable. git:// servers do not need write access to repos and usually don't have it, which means cdab485 breaks shallow clone over git:// Instead of using a temporary file as the media for shallow points, we can send them over stdin to pack-objects as well. Prepend shallow SHA-1 with --shallow so pack-objects knows what is what. Signed-off-by: Nguyễn Thái Ngọc Duy <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'builtin/pack-objects.c')
1 files changed, 10 insertions, 0 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 541667f..c2c093a 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -2358,6 +2358,9 @@ static void get_object_list(int ac, const char **av)
save_commit_buffer = 0;
setup_revisions(ac, av, &revs, NULL);
+ /* make sure shallows are read */
+ is_repository_shallow();
while (fgets(line, sizeof(line), stdin) != NULL) {
int len = strlen(line);
if (len && line[len - 1] == '\n')
@@ -2369,6 +2372,13 @@ static void get_object_list(int ac, const char **av)
+ if (starts_with(line, "--shallow ")) {
+ unsigned char sha1[20];
+ if (get_sha1_hex(line + 10, sha1))
+ die("not an SHA-1 '%s'", line + 10);
+ register_shallow(sha1);
+ continue;
+ }
die("not a rev '%s'", line);
if (handle_revision_arg(line, &revs, flags, REVARG_CANNOT_BE_FILENAME))