From: Derrick Stolee <stolee@gmail.com> To: git@vger.kernel.org Cc: gitster@pobox.com, sbeller@google.com, szeder.dev@gmail.com, ramsay@ramsayjones.plus.com, git@jeffhostetler.com, peff@peff.net, Derrick Stolee <dstolee@microsoft.com> Subject: [PATCH v7 14/14] commit-graph: implement "--additive" option Date: Mon, 2 Apr 2018 16:34:27 -0400 Message-ID: <20180402203427.170177-15-dstolee@microsoft.com> (raw) In-Reply-To: <20180402203427.170177-1-dstolee@microsoft.com> From: Derrick Stolee <dstolee@microsoft.com> Teach git-commit-graph to add all commits from the existing commit-graph file to the file about to be written. This should be used when adding new commits without performing garbage collection. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> --- Documentation/git-commit-graph.txt | 10 ++++++++++ builtin/commit-graph.c | 10 +++++++--- commit-graph.c | 17 ++++++++++++++++- commit-graph.h | 3 ++- t/t5318-commit-graph.sh | 10 ++++++++++ 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/Documentation/git-commit-graph.txt b/Documentation/git-commit-graph.txt index 442ac243e6..4c97b555cc 100644 --- a/Documentation/git-commit-graph.txt +++ b/Documentation/git-commit-graph.txt @@ -43,6 +43,9 @@ With the `--stdin-commits` option, generate the new commit graph by walking commits starting at the commits specified in stdin as a list of OIDs in hex, one OID per line. (Cannot be combined with --stdin-packs.) ++ +With the `--append` option, include all commits that are present in the +existing commit-graph file. 'read':: @@ -72,6 +75,13 @@ $ echo <pack-index> | git commit-graph write --stdin-packs $ git show-ref -s | git commit-graph write --stdin-commits ------------------------------------------------ +* Write a graph file containing all commits in the current +* commit-graph file along with those reachable from HEAD. ++ +------------------------------------------------ +$ git rev-parse HEAD | git commit-graph write --stdin-commits --append +------------------------------------------------ + * Read basic information from the commit-graph file. + ------------------------------------------------ diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c index f5fc717b8f..41c4f76caf 100644 --- a/builtin/commit-graph.c +++ b/builtin/commit-graph.c @@ -8,7 +8,7 @@ static char const * const builtin_commit_graph_usage[] = { N_("git commit-graph [--object-dir <objdir>]"), N_("git commit-graph read [--object-dir <objdir>]"), - N_("git commit-graph write [--object-dir <objdir>] [--stdin-packs|--stdin-commits]"), + N_("git commit-graph write [--object-dir <objdir>] [--append] [--stdin-packs|--stdin-commits]"), NULL }; @@ -18,7 +18,7 @@ static const char * const builtin_commit_graph_read_usage[] = { }; static const char * const builtin_commit_graph_write_usage[] = { - N_("git commit-graph write [--object-dir <objdir>] [--stdin-packs|--stdin-commits]"), + N_("git commit-graph write [--object-dir <objdir>] [--append] [--stdin-packs|--stdin-commits]"), NULL }; @@ -26,6 +26,7 @@ static struct opts_commit_graph { const char *obj_dir; int stdin_packs; int stdin_commits; + int append; } opts; static int graph_read(int argc, const char **argv) @@ -94,6 +95,8 @@ static int graph_write(int argc, const char **argv) N_("scan pack-indexes listed by stdin for commits")), OPT_BOOL(0, "stdin-commits", &opts.stdin_commits, N_("start walk at commits listed by stdin")), + OPT_BOOL(0, "append", &opts.append, + N_("include all commits already in the commit-graph file")), OPT_END(), }; @@ -131,7 +134,8 @@ static int graph_write(int argc, const char **argv) pack_indexes, packs_nr, commit_hex, - commits_nr); + commits_nr, + opts.append); return 0; } diff --git a/commit-graph.c b/commit-graph.c index 253bc2213a..1fc63d541b 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -553,7 +553,8 @@ void write_commit_graph(const char *obj_dir, const char **pack_indexes, int nr_packs, const char **commit_hex, - int nr_commits) + int nr_commits, + int append) { struct packed_oid_list oids; struct packed_commit_list commits; @@ -571,10 +572,24 @@ void write_commit_graph(const char *obj_dir, oids.nr = 0; oids.alloc = approximate_object_count() / 4; + if (append) { + prepare_commit_graph_one(obj_dir); + if (commit_graph) + oids.alloc += commit_graph->num_commits; + } + if (oids.alloc < 1024) oids.alloc = 1024; ALLOC_ARRAY(oids.list, oids.alloc); + if (append && commit_graph) { + for (i = 0; i < commit_graph->num_commits; i++) { + const unsigned char *hash = commit_graph->chunk_oid_lookup + + commit_graph->hash_len * i; + hashcpy(oids.list[oids.nr++].hash, hash); + } + } + if (pack_indexes) { struct strbuf packname = STRBUF_INIT; int dirlen; diff --git a/commit-graph.h b/commit-graph.h index fd035101b2..e1d8580c98 100644 --- a/commit-graph.h +++ b/commit-graph.h @@ -40,6 +40,7 @@ void write_commit_graph(const char *obj_dir, const char **pack_indexes, int nr_packs, const char **commit_hex, - int nr_commits); + int nr_commits, + int append); #endif diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh index c28cfb5d7f..a380419b65 100755 --- a/t/t5318-commit-graph.sh +++ b/t/t5318-commit-graph.sh @@ -190,6 +190,16 @@ test_expect_success 'build graph from commits with closure' ' graph_git_behavior 'graph from commits, commit 8 vs merge 1' full commits/8 merge/1 graph_git_behavior 'graph from commits, commit 8 vs merge 2' full commits/8 merge/2 +test_expect_success 'build graph from commits with append' ' + cd "$TRASH_DIRECTORY/full" && + git rev-parse merge/3 | git commit-graph write --stdin-commits --append && + test_path_is_file $objdir/info/commit-graph && + graph_read_expect "10" "large_edges" +' + +graph_git_behavior 'append graph, commit 8 vs merge 1' full commits/8 merge/1 +graph_git_behavior 'append graph, commit 8 vs merge 2' full commits/8 merge/2 + test_expect_success 'setup bare repo' ' cd "$TRASH_DIRECTORY" && git clone --bare --no-local full bare && -- 2.17.0.14.gba1221a8ce
next prev parent reply index Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-02-27 2:32 [PATCH v5 00/13] Serialized Git Commit Graph Derrick Stolee 2018-02-27 2:32 ` [PATCH v5 01/13] commit-graph: add format document Derrick Stolee 2018-02-27 2:32 ` [PATCH v5 02/13] graph: add commit graph design document Derrick Stolee 2018-02-27 2:32 ` [PATCH v5 03/13] commit-graph: create git-commit-graph builtin Derrick Stolee 2018-02-27 2:32 ` [PATCH v5 04/13] csum-file: add CSUM_KEEP_OPEN flag Derrick Stolee 2018-03-12 13:55 ` Derrick Stolee 2018-03-13 21:42 ` Junio C Hamano 2018-03-14 2:26 ` Derrick Stolee 2018-03-14 17:00 ` Junio C Hamano 2018-02-27 2:32 ` [PATCH v5 05/13] commit-graph: implement write_commit_graph() Derrick Stolee 2018-02-27 2:33 ` [PATCH v5 06/13] commit-graph: implement 'git-commit-graph write' Derrick Stolee 2018-02-27 2:33 ` [PATCH v5 07/13] commit-graph: implement git commit-graph read Derrick Stolee 2018-02-27 2:33 ` [PATCH v5 08/13] commit-graph: add core.commitGraph setting Derrick Stolee 2018-02-27 2:33 ` [PATCH v5 09/13] commit-graph: close under reachability Derrick Stolee 2018-02-27 2:33 ` [PATCH v5 10/13] commit: integrate commit graph with commit parsing Derrick Stolee 2018-02-27 2:33 ` [PATCH v5 11/13] commit-graph: read only from specific pack-indexes Derrick Stolee 2018-02-27 20:15 ` Stefan Beller 2018-02-27 2:33 ` [PATCH v5 12/13] commit-graph: build graph from starting commits Derrick Stolee 2018-02-27 2:33 ` [PATCH v5 13/13] commit-graph: implement "--additive" option Derrick Stolee 2018-02-27 18:50 ` [PATCH v5 00/13] Serialized Git Commit Graph Stefan Beller 2018-03-14 19:27 ` [PATCH v6 00/14] " Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 01/14] csum-file: rename hashclose() to finalize_hashfile() Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 02/14] csum-file: refactor finalize_hashfile() method Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 03/14] commit-graph: add format document Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 04/14] graph: add commit graph design document Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 05/14] commit-graph: create git-commit-graph builtin Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 06/14] commit-graph: implement write_commit_graph() Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 07/14] commit-graph: implement 'git-commit-graph write' Derrick Stolee 2018-03-18 13:25 ` Ævar Arnfjörð Bjarmason 2018-03-19 13:12 ` Derrick Stolee 2018-03-19 14:36 ` Ævar Arnfjörð Bjarmason 2018-03-19 18:27 ` Derrick Stolee 2018-03-19 18:48 ` Ævar Arnfjörð Bjarmason 2018-03-14 19:27 ` [PATCH v6 08/14] commit-graph: implement git commit-graph read Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 09/14] commit-graph: add core.commitGraph setting Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 10/14] commit-graph: close under reachability Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 11/14] commit: integrate commit graph with commit parsing Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 12/14] commit-graph: read only from specific pack-indexes Derrick Stolee 2018-03-15 22:50 ` SZEDER Gábor 2018-03-19 13:13 ` Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 13/14] commit-graph: build graph from starting commits Derrick Stolee 2018-03-14 19:27 ` [PATCH v6 14/14] commit-graph: implement "--additive" option Derrick Stolee 2018-03-14 20:10 ` [PATCH v6 00/14] Serialized Git Commit Graph Ramsay Jones 2018-03-14 20:43 ` Junio C Hamano 2018-03-15 17:23 ` Johannes Schindelin 2018-03-15 18:41 ` Junio C Hamano 2018-03-15 21:51 ` Ramsay Jones 2018-03-16 11:50 ` Johannes Schindelin 2018-03-16 17:27 ` Junio C Hamano 2018-03-19 11:41 ` Johannes Schindelin 2018-03-16 16:28 ` Lars Schneider 2018-03-19 13:10 ` Derrick Stolee 2018-03-16 15:06 ` Ævar Arnfjörð Bjarmason 2018-03-16 16:38 ` SZEDER Gábor 2018-03-16 18:33 ` Junio C Hamano 2018-03-16 19:48 ` SZEDER Gábor 2018-03-16 20:06 ` Jeff King 2018-03-16 20:19 ` Jeff King 2018-03-19 12:55 ` Derrick Stolee 2018-03-20 1:17 ` Derrick Stolee 2018-03-16 20:49 ` Jeff King 2018-04-02 20:34 ` [PATCH v7 " Derrick Stolee 2018-04-02 20:34 ` [PATCH v7 01/14] csum-file: rename hashclose() to finalize_hashfile() Derrick Stolee 2018-04-02 20:34 ` [PATCH v7 02/14] csum-file: refactor finalize_hashfile() method Derrick Stolee 2018-04-07 22:59 ` Jakub Narebski 2018-04-02 20:34 ` [PATCH v7 03/14] commit-graph: add format document Derrick Stolee 2018-04-07 23:49 ` Jakub Narebski 2018-04-02 20:34 ` [PATCH v7 04/14] graph: add commit graph design document Derrick Stolee 2018-04-08 11:06 ` Jakub Narebski 2018-04-02 20:34 ` [PATCH v7 05/14] commit-graph: create git-commit-graph builtin Derrick Stolee 2018-04-02 20:34 ` [PATCH v7 06/14] commit-graph: implement write_commit_graph() Derrick Stolee 2018-04-02 20:34 ` [PATCH v7 07/14] commit-graph: implement git-commit-graph write Derrick Stolee 2018-04-08 11:59 ` Jakub Narebski 2018-04-02 20:34 ` [PATCH v7 08/14] commit-graph: implement git commit-graph read Derrick Stolee 2018-04-02 21:33 ` Junio C Hamano 2018-04-03 11:49 ` Derrick Stolee 2018-04-08 12:59 ` Jakub Narebski 2018-04-02 20:34 ` [PATCH v7 09/14] commit-graph: add core.commitGraph setting Derrick Stolee 2018-04-08 13:39 ` Jakub Narebski 2018-04-02 20:34 ` [PATCH v7 10/14] commit-graph: close under reachability Derrick Stolee 2018-04-02 20:34 ` [PATCH v7 11/14] commit: integrate commit graph with commit parsing Derrick Stolee 2018-04-02 20:34 ` [PATCH v7 12/14] commit-graph: read only from specific pack-indexes Derrick Stolee 2018-04-02 20:34 ` [PATCH v7 13/14] commit-graph: build graph from starting commits Derrick Stolee 2018-04-08 13:50 ` Jakub Narebski 2018-04-02 20:34 ` Derrick Stolee [this message] 2018-04-05 8:27 ` [PATCH v7 14/14] commit-graph: implement "--additive" option SZEDER Gábor 2018-04-10 12:55 ` [PATCH v8 00/14] Serialized Git Commit Graph Derrick Stolee 2018-04-10 12:55 ` [PATCH v8 01/14] csum-file: rename hashclose() to finalize_hashfile() Derrick Stolee 2018-04-10 12:55 ` [PATCH v8 02/14] csum-file: refactor finalize_hashfile() method Derrick Stolee 2018-04-10 12:55 ` [PATCH v8 03/14] commit-graph: add format document Derrick Stolee 2018-04-10 19:10 ` Stefan Beller 2018-04-10 19:18 ` Derrick Stolee 2018-04-11 20:58 ` Jakub Narebski 2018-04-12 11:28 ` Derrick Stolee 2018-04-13 22:07 ` Jakub Narebski 2018-04-10 12:55 ` [PATCH v8 04/14] graph: add commit graph design document Derrick Stolee 2018-04-15 22:48 ` Jakub Narebski 2018-04-10 12:55 ` [PATCH v8 05/14] commit-graph: create git-commit-graph builtin Derrick Stolee 2018-04-10 12:56 ` [PATCH v8 06/14] commit-graph: implement write_commit_graph() Derrick Stolee 2018-04-10 12:56 ` [PATCH v8 07/14] commit-graph: implement git-commit-graph write Derrick Stolee 2018-04-10 12:56 ` [PATCH v8 08/14] commit-graph: implement git commit-graph read Derrick Stolee 2018-04-14 22:15 ` Jakub Narebski 2018-04-15 3:26 ` Eric Sunshine 2018-04-10 12:56 ` [PATCH v8 09/14] commit-graph: add core.commitGraph setting Derrick Stolee 2018-04-14 18:33 ` Jakub Narebski 2018-04-10 12:56 ` [PATCH v8 10/14] commit-graph: close under reachability Derrick Stolee 2018-04-10 12:56 ` [PATCH v8 11/14] commit: integrate commit graph with commit parsing Derrick Stolee 2018-04-10 12:56 ` [PATCH v8 12/14] commit-graph: read only from specific pack-indexes Derrick Stolee 2018-04-10 12:56 ` [PATCH v8 13/14] commit-graph: build graph from starting commits Derrick Stolee 2018-04-10 12:56 ` [PATCH v8 14/14] commit-graph: implement "--append" option Derrick Stolee
Reply instructions: You may reply publically to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180402203427.170177-15-dstolee@microsoft.com \ --to=stolee@gmail.com \ --cc=dstolee@microsoft.com \ --cc=git@jeffhostetler.com \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=peff@peff.net \ --cc=ramsay@ramsayjones.plus.com \ --cc=sbeller@google.com \ --cc=szeder.dev@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
git@vger.kernel.org mailing list mirror (one of many) Archives are clonable: git clone --mirror https://public-inbox.org/git git clone --mirror http://ou63pmih66umazou.onion/git git clone --mirror http://czquwvybam4bgbro.onion/git git clone --mirror http://hjrcffqmbrq6wope.onion/git Newsgroups are available over NNTP: nntp://news.public-inbox.org/inbox.comp.version-control.git nntp://ou63pmih66umazou.onion/inbox.comp.version-control.git nntp://czquwvybam4bgbro.onion/inbox.comp.version-control.git nntp://hjrcffqmbrq6wope.onion/inbox.comp.version-control.git nntp://news.gmane.org/gmane.comp.version-control.git note: .onion URLs require Tor: https://www.torproject.org/ or Tor2web: https://www.tor2web.org/ AGPL code for this site: git clone https://public-inbox.org/ public-inbox