upload-pack: send shallow info over stdin to pack-objects
Beforecdab485(upload-pack: delegate rev walking in shallow fetch to pack-objects - 2013-08-16) upload-pack does not write to the source repository.cdab485starts 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 meanscdab485breaks 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 <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
16216b6ab1
commit
b790e0f67c
@ -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)
|
||||
flags ^= UNINTERESTING;
|
||||
continue;
|
||||
}
|
||||
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))
|
||||
|
||||
Reference in New Issue
Block a user