diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2014-03-11 19:59:46 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-03-11 13:32:10 -0700 |
commit | b790e0f67cd97f29b72cb9007632b0329e5eebec (patch) | |
tree | 4c35abd01b4207524fe87a85334c3d65bf755abe /builtin | |
parent | 16216b6ab1073b7aaa8225c32208758e6ea16629 (diff) | |
download | git-b790e0f67cd97f29b72cb9007632b0329e5eebec.tar.gz git-b790e0f67cd97f29b72cb9007632b0329e5eebec.tar.xz |
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 <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/pack-objects.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 541667f10..c2c093a33 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) 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)) |