Junio C Hamano <gitster@pobox.com> writes:This shows how the "object transfer ignores grafts" side of the earlier suggestion by Linus would look like to get people started. Totally untested. I threw in for_each_commit_graft() in the patch so that updates to the reachability walker can add otherwise hidden objects, but otherwise it is not used yet. builtin-pack-objects.c | 5 +++++ builtin-send-pack.c | 3 ++- cache.h | 1 + commit.c | 10 ++++++++++ commit.h | 2 ++ environment.c | 1 + upload-pack.c | 1 + 7 files changed, 22 insertions(+), 1 deletions(-) diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 28207d9..53b0b33 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -30,6 +30,7 @@ git-pack-objects [{ -q | --progress | --all-progress }] \n\ [--threads=N] [--non-empty] [--revs [--unpacked | --all]*] [--reflog] \n\ [--stdout | base-name] [--include-tag] \n\ [--keep-unreachable | --unpack-unreachable] \n\ + [--ignore-graft] \n\ [<ref-list | <object-list]"; struct object_entry { @@ -2160,6 +2161,10 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) die("bad %s", arg); continue; } + if (!strcmp(arg, "--ignore-graft")) { + honor_graft = 0; + continue; + } usage(pack_usage); } diff --git a/builtin-send-pack.c b/builtin-send-pack.c index d76260c..d932352 100644 --- a/builtin-send-pack.c +++ b/builtin-send-pack.c @@ -27,6 +27,7 @@ static int pack_objects(int fd, struct ref *refs) */ const char *argv[] = { "pack-objects", + "--ignore-graft", "--all-progress", "--revs", "--stdout", @@ -36,7 +37,7 @@ static int pack_objects(int fd, struct ref *refs) struct child_process po; if (args.use_thin_pack) - argv[4] = "--thin"; + argv[5] = "--thin"; memset(&po, 0, sizeof(po)); po.argv = argv; po.in = -1; diff --git a/cache.h b/cache.h index 188428d..00858f9 100644 --- a/cache.h +++ b/cache.h @@ -435,6 +435,7 @@ extern size_t packed_git_limit; extern size_t delta_base_cache_limit; extern int auto_crlf; extern int fsync_object_files; +extern int honor_graft; enum safe_crlf { SAFE_CRLF_FALSE = 0, diff --git a/commit.c b/commit.c index e2d8624..62cf104 100644 --- a/commit.c +++ b/commit.c @@ -101,6 +101,13 @@ static int commit_graft_pos(const unsigned char *sha1) return -lo - 1; } +void for_each_commit_graft(void (*fn)(struct commit_graft *)) +{ + int i; + for (i = 0; i < commit_graft_nr; i++) + fn(commit_graft[i]); +} + int register_commit_graft(struct commit_graft *graft, int ignore_dups) { int pos = commit_graft_pos(graft->sha1); @@ -196,7 +203,10 @@ static void prepare_commit_graft(void) struct commit_graft *lookup_commit_graft(const unsigned char *sha1) { int pos; + prepare_commit_graft(); + if (!honor_graft) + return NULL; pos = commit_graft_pos(sha1); if (pos < 0) return NULL; diff --git a/commit.h b/commit.h index 2d94d41..8f76dd9 100644 --- a/commit.h +++ b/commit.h @@ -138,4 +138,6 @@ static inline int single_parent(struct commit *commit) return commit->parents && !commit->parents->next; } +void for_each_commit_graft(void (*fn)(struct commit_graft *)); + #endif /* COMMIT_H */ diff --git a/environment.c b/environment.c index 4a88a17..eb8f36d 100644 --- a/environment.c +++ b/environment.c @@ -41,6 +41,7 @@ enum safe_crlf safe_crlf = SAFE_CRLF_WARN; unsigned whitespace_rule_cfg = WS_DEFAULT_RULE; enum branch_track git_branch_track = BRANCH_TRACK_REMOTE; enum rebase_setup_type autorebase = AUTOREBASE_NEVER; +int honor_graft = 1; /* This is set by setup_git_dir_gently() and/or git_default_config() */ char *git_work_tree_cfg; diff --git a/upload-pack.c b/upload-pack.c index b46dd36..d948d64 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -158,6 +158,7 @@ static void create_pack_file(void) die("git-upload-pack: unable to fork git-rev-list"); argv[arg++] = "pack-objects"; + argv[arg++] = "--ignore-graft"; argv[arg++] = "--stdout"; if (!no_progress) argv[arg++] = "--progress"; -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| Renato S. Yamane | Error -71 on device descriptor read/all |
| David Miller | Slow DOWN, please!!! |
| David Woodhouse | [GIT *] Allow request_firmware() to be satisfied from in-kernel, use it in more dr... |
| Kenny Chang | Multicast packet loss |
| Frans Pop | svc: failed to register lockdv1 RPC service (errno 97). |
| Kok, Auke | Re: [PATCH] Add eeprom_bad_csum_allow module option to e1000. |
| David Miller | Re: [GIT]: Networking |
git: | |
