diff options
Diffstat (limited to 'upload-pack.c')
-rw-r--r-- | upload-pack.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/upload-pack.c b/upload-pack.c index a3c52f691d..01de944a0a 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -17,7 +17,7 @@ static const char upload_pack_usage[] = "git upload-pack [--strict] [--timeout=<n>] <dir>"; -/* bits #0..7 in revision.h, #8..10 in commit.c */ +/* Remember to update object flag allocation in object.h */ #define THEY_HAVE (1u << 11) #define OUR_REF (1u << 12) #define WANTED (1u << 13) @@ -70,6 +70,14 @@ static ssize_t send_client_data(int fd, const char *data, ssize_t sz) return sz; } +static int write_one_shallow(const struct commit_graft *graft, void *cb_data) +{ + FILE *fp = cb_data; + if (graft->nr_parent == -1) + fprintf(fp, "--shallow %s\n", sha1_to_hex(graft->sha1)); + return 0; +} + static void create_pack_file(void) { struct child_process pack_objects; @@ -81,12 +89,10 @@ static void create_pack_file(void) const char *argv[12]; int i, arg = 0; FILE *pipe_fd; - const char *shallow_file = NULL; if (shallow_nr) { - shallow_file = setup_temporary_shallow(NULL); argv[arg++] = "--shallow-file"; - argv[arg++] = shallow_file; + argv[arg++] = ""; } argv[arg++] = "pack-objects"; argv[arg++] = "--revs"; @@ -114,6 +120,9 @@ static void create_pack_file(void) pipe_fd = xfdopen(pack_objects.in, "w"); + if (shallow_nr) + for_each_commit_graft(write_one_shallow, pipe_fd); + for (i = 0; i < want_obj.nr; i++) fprintf(pipe_fd, "%s\n", sha1_to_hex(want_obj.objects[i].item->sha1)); @@ -791,7 +800,7 @@ int main(int argc, char **argv) packet_trace_identity("upload-pack"); git_extract_argv0_path(argv[0]); - read_replace_refs = 0; + check_replace_refs = 0; for (i = 1; i < argc; i++) { char *arg = argv[i]; |