From: jnareb@gmail.com (Jakub Narębski) To: "Abhishek Kumar via GitGitGadget" <gitgitgadget@gmail.com> Cc: git@vger.kernel.org, "Derrick Stolee" <stolee@gmail.com>, "Taylor Blau" <me@ttaylorr.com>, "Abhishek Kumar" <abhishekkumar8222@gmail.com>, "Jakub Narębski" <jnareb@gmail.com> Subject: Re: [PATCH v3 09/11] commit-graph: use generation v2 only if entire chain does Date: Sat, 22 Aug 2020 19:14:38 +0200 Message-ID: <85pn7ihabl.fsf@gmail.com> (raw) In-Reply-To: <5a147a9704f0f8d8644c92ea38583e966378b931.1597509583.git.gitgitgadget@gmail.com> (Abhishek Kumar via GitGitGadget's message of "Sat, 15 Aug 2020 16:39:41 +0000") Hi Abhishek, "Abhishek Kumar via GitGitGadget" <gitgitgadget@gmail.com> writes: > From: Abhishek Kumar <abhishekkumar8222@gmail.com> > > Since there are released versions of Git that understand generation > numbers in the commit-graph's CDAT chunk but do not understand the GDAT > chunk, the following scenario is possible: > > 1. "New" Git writes a commit-graph with the GDAT chunk. > 2. "Old" Git writes a split commit-graph on top without a GDAT chunk. > > Because of the current use of inspecting the current layer for a > chunk_generation_data pointer, the commits in the lower layer will be > interpreted as having very large generation values (commit date plus > offset) compared to the generation numbers in the top layer (topological > level). This violates the expectation that the generation of a parent is > strictly smaller than the generation of a child. All right, this explains changes to the *reading* side. If there is split commit-graph layer without GDAT chunk (or to be more exact, current code checks if there is any layer without GDAT chunk), then we fall back to using topological levels, as if all layers / all graphs were without GDAT. This allows to avoid the issue explained above, where for some commits 'generation' holds corrected commit date, and for some it holds topological levels, breaking the reachability condition guarantee. However the commit message do not say anything about the *writing* side. We have decided to not write the GDAT chunk when writing the new layer in split commit-graph, and top layer doesn't itself have GDAT chunks. That makes for easier reasoning and safer handling: in mixed-version environment the only possible arrangement is for the lower layers (possibly zero) have GDAT chunk, and higher layers (possibly zero) not have GDAT chunks. Rewriting layers follows similar approach: if the topmost layer below set of layers being rewritten (in the split commit-graph chain) exists, and it does not contain GDAT chunk, then the result of rewrite should not have GDAT chunks either. To be more detailed, without '--split=replace' we would want the following layer merging behavior: [layer with GDAT][with GDAT][without GDAT][without GDAT][without GDAT] 1 2 3 4 5 In the split commit-graph chain above, merging two topmost layers (layers 4 and 5) should create a layer without GDAT; merging three topmost layers (and any other layers, e.g. two middle ones, i.e. 3 and 4) should create a new layer with GDAT. [layer with GDAT][with GDAT][without GDAT][-------without GDAT-------] 1 2 3 merged [layer with GDAT][with GDAT][-------------with GDAT------------------] 1 2 merged I hope those ASCII-art pictures help understanding it > > It is difficult to expose this issue in a test. Since we _start_ with > artificially low generation numbers, any commit walk that prioritizes > generation numbers will walk all of the commits with high generation > number before walking the commits with low generation number. In all the > cases I tried, the commit-graph layers themselves "protect" any > incorrect behavior since none of the commits in the lower layer can > reach the commits in the upper layer. > > This issue would manifest itself as a performance problem in this case, > especially with something like "git log --graph" since the low > generation numbers would cause the in-degree queue to walk all of the > commits in the lower layer before allowing the topo-order queue to write > anything to output (depending on the size of the upper layer). Wouldn't breaking the reachability condition promise make some Git commands to return *incorrect* results if they short-circuit, stop walking if generation number shows that A cannot reach B? I am talking here about commands that return boolean, or select subset from given set of revisions: - git merge-base --is-ancestor <B> <A> - git branch branch-A <A> && git branch --contains <B> - git branch branch-B <B> && git branch --merged <A> Git assumes that generation numbers fulfill the following condition: if A can reach B, then gen(A) > gen(B) Notably this includes commits not in commit-graph, and clamped values. However, in the following case * if commit A is from higher layer without GDAT and uses topological levels for 'generation', e.g. 115 (in a small repo) * and commit B is from lower layer with GDAT and uses corrected commit date as 'generation', for example 1598112896, it may happen that A (later commit) can reach B (earlier commit), but gen(B) > gen(A). The reachability condition promise for generation numbers is broken. > > Signed-off-by: Derrick Stolee <dstolee@microsoft.com> > Signed-off-by: Abhishek Kumar <abhishekkumar8222@gmail.com> > --- I have reordered files in the patch itself to make it easier to review the proposed changes. > commit-graph.h | 1 + > commit-graph.c | 32 +++++++++++++++- > t/t5324-split-commit-graph.sh | 70 +++++++++++++++++++++++++++++++++++ > 3 files changed, 102 insertions(+), 1 deletion(-) > > diff --git a/commit-graph.h b/commit-graph.h > index f78c892fc0..3cf89d895d 100644 > --- a/commit-graph.h > +++ b/commit-graph.h > @@ -63,6 +63,7 @@ struct commit_graph { > struct object_directory *odb; > > uint32_t num_commits_in_base; > + uint32_t read_generation_data; > struct commit_graph *base_graph; > First, why `read_generation_data` is of uint32_t type, when it stores (as far as I understand it), a "boolean" value of either 0 or 1? Second, couldn't we simply set chunk_generation_data to NULL? Or would that interfere with the case of rewriting, where we want to use existing GDAT data when writing new commit-graph with GDAT chunk? > const uint32_t *chunk_oid_fanout; > diff --git a/commit-graph.c b/commit-graph.c > index b7a72b40db..c1292f8e08 100644 > --- a/commit-graph.c > +++ b/commit-graph.c > @@ -597,6 +597,27 @@ static struct commit_graph *load_commit_graph_chain(struct repository *r, > return graph_chain; > } > > +static void validate_mixed_generation_chain(struct repository *r) > +{ > + struct commit_graph *g = r->objects->commit_graph; > + int read_generation_data = 1; > + > + while (g) { > + if (!g->chunk_generation_data) { > + read_generation_data = 0; > + break; > + } > + g = g->base_graph; > + } This loop checks whole split commit-graph chain for existence of layers without GDAT chunk. On one hand it is more than needed _if_ we assume that the fact that only topmost layers can be without GDAT holds true. On the other hand it is safer (an example of defensive coding), and as the length of chain is limited it should be not much of a performance penalty. > + > + g = r->objects->commit_graph; > + > + while (g) { > + g->read_generation_data = read_generation_data; > + g = g->base_graph; > + } All right... though one of earlier commits introduced similar loop, but it set chunk_generation_data to NULL instead. Or did I remember it wrong? > +} > + > struct commit_graph *read_commit_graph_one(struct repository *r, > struct object_directory *odb) > { > @@ -605,6 +626,8 @@ struct commit_graph *read_commit_graph_one(struct repository *r, > if (!g) > g = load_commit_graph_chain(r, odb); > > + validate_mixed_generation_chain(r); > + All right, when reading the commit-graph, check if we are in forced backward-compatibile mode, and we need to use topological levels for generation numbers. > return g; > } > > @@ -763,7 +786,7 @@ static void fill_commit_graph_info(struct commit *item, struct commit_graph *g, > date_low = get_be32(commit_data + g->hash_len + 12); > item->date = (timestamp_t)((date_high << 32) | date_low); > > - if (g->chunk_generation_data) > + if (g->chunk_generation_data && g->read_generation_data) All right, when deciding whether to use corrected commit date (generation number v2 from GDAT chunk), or fall back to using topological levels (generation number v1 from CDAT chunk), we need to take into accout other layers, to not mix v1 and v2. We have earlier checked whether we can use generation number v2, now we use the result of this check, propagated down the commit-graph chain. > graph_data->generation = item->date + > (timestamp_t) get_be32(g->chunk_generation_data + sizeof(uint32_t) * lex_index); > else > @@ -885,6 +908,7 @@ void load_commit_graph_info(struct repository *r, struct commit *item) > uint32_t pos; > if (!prepare_commit_graph(r)) > return; > + > if (find_commit_in_graph(item, r->objects->commit_graph, &pos)) > fill_commit_graph_info(item, r->objects->commit_graph, pos); > } This is unrelated whitespace fix, a "while at it" in neighbourhood of changes. All right then. > @@ -2192,6 +2216,9 @@ int write_commit_graph(struct object_directory *odb, > > g = ctx->r->objects->commit_graph; > > + if (g && !g->chunk_generation_data) > + ctx->write_generation_data = 0; > + > while (g) { > ctx->num_commit_graphs_before++; > g = g->base_graph; > @@ -2210,6 +2237,9 @@ int write_commit_graph(struct object_directory *odb, > > if (ctx->split_opts) > replace = ctx->split_opts->flags & COMMIT_GRAPH_SPLIT_REPLACE; > + > + if (replace) > + ctx->write_generation_data = 1; > } The previous commit introduced `write_generation_data` member in `struct write_commit_graph_context`, then used to handle support for GIT_TEST_COMMIT_GRAPH_NO_GDAT environment variable. Those two hunks of changes above are both inside if (ctx->split) { ... } Here we examine the topmost layer of split commit-graph chain, and if it does not contain GDAT chunk, then we do not store the GDAT chunk, unless `git commit-graph write` is ru with `--split=replace` option. However this is overly strict condition. If we merge layer without GDAT with layer with GDAT below, then we surely can write GDAT; the condition for GDAT-less layers would be still fulfilled (met). However we can consider it 'good enough' for now, and relax this condition in later commits. Note that it is the first time in this patch were we make use of assumption that if there are layers without GDAT then topmost layer is without GDAT. > > ctx->approx_nr_objects = approximate_object_count(); > diff --git a/t/t5324-split-commit-graph.sh b/t/t5324-split-commit-graph.sh > index 531016f405..ac5e7783fb 100755 > --- a/t/t5324-split-commit-graph.sh > +++ b/t/t5324-split-commit-graph.sh > @@ -424,4 +424,74 @@ done <<\EOF > 0600 -r-------- > EOF > It would be nice to have an ASCII-art graph of commits, but earlier tests do not have it either... > +test_expect_success 'setup repo for mixed generation commit-graph-chain' ' > + mkdir mixed && > + graphdir=".git/objects/info/commit-graphs" && > + cd "$TRASH_DIRECTORY/mixed" && > + git init && > + git config core.commitGraph true && > + git config gc.writeCommitGraph false && > + for i in $(test_seq 3) > + do > + test_commit $i && > + git branch commits/$i || return 1 > + done && > + git reset --hard commits/1 && > + for i in $(test_seq 4 5) > + do > + test_commit $i && > + git branch commits/$i || return 1 > + done && > + git reset --hard commits/2 && > + for i in $(test_seq 6 10) > + do > + test_commit $i && > + git branch commits/$i || return 1 > + done && > + git commit-graph write --reachable --split && > + git reset --hard commits/2 && > + git merge commits/4 && > + git branch merge/1 && > + git reset --hard commits/4 && > + git merge commits/6 && > + git branch merge/2 && > + GIT_TEST_COMMIT_GRAPH_NO_GDAT=1 git commit-graph write --reachable --split=no-merge && > + test-tool read-graph >output && > + cat >expect <<-EOF && > + header: 43475048 1 1 4 1 > + num_commits: 2 > + chunks: oid_fanout oid_lookup commit_metadata > + EOF > + test_cmp expect output && > + git commit-graph verify > +' Looks all right to me. > + > +test_expect_success 'does not write generation data chunk if not present on existing tip' ' > + cd "$TRASH_DIRECTORY/mixed" && > + git reset --hard commits/3 && > + git merge merge/1 && > + git merge commits/5 && > + git merge merge/2 && > + git branch merge/3 && > + git commit-graph write --reachable --split=no-merge && > + test-tool read-graph >output && > + cat >expect <<-EOF && > + header: 43475048 1 1 4 2 > + num_commits: 3 > + chunks: oid_fanout oid_lookup commit_metadata > + EOF > + test_cmp expect output && > + git commit-graph verify > +' > + > +test_expect_success 'writes generation data chunk when commit-graph chain is replaced' ' > + cd "$TRASH_DIRECTORY/mixed" && > + git commit-graph write --reachable --split=replace && > + test_path_is_file $graphdir/commit-graph-chain && > + test_line_count = 1 $graphdir/commit-graph-chain && > + verify_chain_files_exist $graphdir && > + graph_read_expect 15 && > + git commit-graph verify > +' It would be nice to have an example with merging layers (whether we would handle it in strict or relaxed way). > + > test_done Best, -- Jakub Narębski
next prev parent reply other threads:[~2020-08-22 17:16 UTC|newest] Thread overview: 189+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-28 9:13 [PATCH 0/6] [GSoC] Implement Corrected Commit Date Abhishek Kumar via GitGitGadget 2020-07-28 9:13 ` [PATCH 1/6] commit-graph: fix regression when computing bloom filter Abhishek Kumar via GitGitGadget 2020-07-28 15:28 ` Taylor Blau 2020-07-30 5:24 ` Abhishek Kumar 2020-08-04 0:46 ` Jakub Narębski 2020-08-04 0:56 ` Taylor Blau 2020-08-04 10:10 ` Jakub Narębski 2020-08-04 7:55 ` Jakub Narębski 2020-07-28 9:13 ` [PATCH 2/6] revision: parse parent in indegree_walk_step() Abhishek Kumar via GitGitGadget 2020-07-28 13:00 ` Derrick Stolee 2020-07-28 15:30 ` Taylor Blau 2020-08-05 23:16 ` Jakub Narębski 2020-07-28 9:13 ` [PATCH 3/6] commit-graph: consolidate fill_commit_graph_info Abhishek Kumar via GitGitGadget 2020-07-28 13:14 ` Derrick Stolee 2020-07-28 15:19 ` René Scharfe 2020-07-28 15:58 ` Derrick Stolee 2020-07-28 16:01 ` Taylor Blau 2020-07-30 6:07 ` Abhishek Kumar 2020-07-28 9:13 ` [PATCH 4/6] commit-graph: consolidate compare_commits_by_gen Abhishek Kumar via GitGitGadget 2020-07-28 16:03 ` Taylor Blau 2020-07-28 9:13 ` [PATCH 5/6] commit-graph: implement generation data chunk Abhishek Kumar via GitGitGadget 2020-07-28 16:12 ` Taylor Blau 2020-07-30 6:52 ` Abhishek Kumar 2020-07-28 9:13 ` [PATCH 6/6] commit-graph: implement corrected commit date offset Abhishek Kumar via GitGitGadget 2020-07-28 15:55 ` Derrick Stolee 2020-07-28 16:23 ` Taylor Blau 2020-07-30 7:27 ` Abhishek Kumar 2020-07-28 14:54 ` [PATCH 0/6] [GSoC] Implement Corrected Commit Date Taylor Blau 2020-07-30 7:47 ` Abhishek Kumar 2020-07-28 16:35 ` Derrick Stolee 2020-08-09 2:53 ` [PATCH v2 00/10] " Abhishek Kumar via GitGitGadget 2020-08-09 2:53 ` [PATCH v2 01/10] commit-graph: fix regression when computing bloom filter Abhishek Kumar via GitGitGadget 2020-08-09 2:53 ` [PATCH v2 02/10] revision: parse parent in indegree_walk_step() Abhishek Kumar via GitGitGadget 2020-08-09 2:53 ` [PATCH v2 03/10] commit-graph: consolidate fill_commit_graph_info Abhishek Kumar via GitGitGadget 2020-08-09 2:53 ` [PATCH v2 04/10] commit-graph: consolidate compare_commits_by_gen Abhishek Kumar via GitGitGadget 2020-08-09 2:53 ` [PATCH v2 05/10] commit-graph: implement generation data chunk Abhishek Kumar via GitGitGadget 2020-08-10 16:28 ` Derrick Stolee 2020-08-11 11:03 ` Abhishek Kumar 2020-08-11 12:27 ` Derrick Stolee 2020-08-11 18:58 ` Taylor Blau 2020-08-09 2:53 ` [PATCH v2 06/10] commit-graph: return 64-bit generation number Abhishek Kumar via GitGitGadget 2020-08-09 2:53 ` [PATCH v2 07/10] commit-graph: implement corrected commit date Abhishek Kumar via GitGitGadget 2020-08-10 14:23 ` Derrick Stolee 2020-08-14 4:59 ` Abhishek Kumar 2020-08-14 12:24 ` Derrick Stolee 2020-08-09 2:53 ` [PATCH v2 08/10] commit-graph: handle mixed generation commit chains Abhishek Kumar via GitGitGadget 2020-08-10 16:42 ` Derrick Stolee 2020-08-11 11:36 ` Abhishek Kumar 2020-08-11 12:43 ` Derrick Stolee 2020-08-09 2:53 ` [PATCH v2 09/10] commit-reach: use corrected commit dates in paint_down_to_common() Abhishek Kumar via GitGitGadget 2020-08-09 2:53 ` [PATCH v2 10/10] doc: add corrected commit date info Abhishek Kumar via GitGitGadget 2020-08-10 16:47 ` [PATCH v2 00/10] [GSoC] Implement Corrected Commit Date Derrick Stolee 2020-08-15 16:39 ` [PATCH v3 00/11] " Abhishek Kumar via GitGitGadget 2020-08-15 16:39 ` [PATCH v3 01/11] commit-graph: fix regression when computing bloom filter Abhishek Kumar via GitGitGadget 2020-08-17 22:30 ` Jakub Narębski 2020-08-15 16:39 ` [PATCH v3 02/11] revision: parse parent in indegree_walk_step() Abhishek Kumar via GitGitGadget 2020-08-18 14:18 ` Jakub Narębski 2020-08-15 16:39 ` [PATCH v3 03/11] commit-graph: consolidate fill_commit_graph_info Abhishek Kumar via GitGitGadget 2020-08-19 17:54 ` Jakub Narębski 2020-08-21 4:11 ` Abhishek Kumar 2020-08-25 11:11 ` Jakub Narębski 2020-09-01 11:35 ` Abhishek Kumar 2020-08-15 16:39 ` [PATCH v3 04/11] commit-graph: consolidate compare_commits_by_gen Abhishek Kumar via GitGitGadget 2020-08-17 13:22 ` Derrick Stolee 2020-08-21 11:05 ` Jakub Narębski 2020-08-15 16:39 ` [PATCH v3 05/11] commit-graph: return 64-bit generation number Abhishek Kumar via GitGitGadget 2020-08-21 13:14 ` Jakub Narębski 2020-08-25 5:04 ` Abhishek Kumar 2020-08-25 12:18 ` Jakub Narębski 2020-09-01 12:06 ` Abhishek Kumar 2020-09-03 13:42 ` Jakub Narębski 2020-09-05 17:21 ` Abhishek Kumar 2020-09-13 15:39 ` Jakub Narębski 2020-09-28 21:48 ` Jakub Narębski 2020-10-05 5:25 ` Abhishek Kumar 2020-08-15 16:39 ` [PATCH v3 06/11] commit-graph: add a slab to store topological levels Abhishek Kumar via GitGitGadget 2020-08-21 18:43 ` Jakub Narębski 2020-08-25 6:14 ` Abhishek Kumar 2020-08-25 7:33 ` Jakub Narębski 2020-08-25 7:56 ` Jakub Narębski 2020-09-01 10:26 ` Abhishek Kumar 2020-09-03 9:25 ` Jakub Narębski 2020-08-15 16:39 ` [PATCH v3 07/11] commit-graph: implement corrected commit date Abhishek Kumar via GitGitGadget 2020-08-22 0:05 ` Jakub Narębski 2020-08-25 6:49 ` Abhishek Kumar 2020-08-25 10:07 ` Jakub Narębski 2020-09-01 11:01 ` Abhishek Kumar 2020-08-15 16:39 ` [PATCH v3 08/11] commit-graph: implement generation data chunk Abhishek Kumar via GitGitGadget 2020-08-22 13:09 ` Jakub Narębski 2020-08-15 16:39 ` [PATCH v3 09/11] commit-graph: use generation v2 only if entire chain does Abhishek Kumar via GitGitGadget 2020-08-22 17:14 ` Jakub Narębski [this message] 2020-08-26 7:15 ` Abhishek Kumar 2020-08-26 10:38 ` Jakub Narębski 2020-08-15 16:39 ` [PATCH v3 10/11] commit-reach: use corrected commit dates in paint_down_to_common() Abhishek Kumar via GitGitGadget 2020-08-22 19:09 ` Jakub Narębski 2020-09-01 10:08 ` Abhishek Kumar 2020-09-03 19:11 ` Jakub Narębski 2020-08-15 16:39 ` [PATCH v3 11/11] doc: add corrected commit date info Abhishek Kumar via GitGitGadget 2020-08-22 22:20 ` Jakub Narębski 2020-08-27 6:39 ` Abhishek Kumar 2020-08-27 12:43 ` Jakub Narębski 2020-08-27 13:15 ` Derrick Stolee 2020-09-01 13:01 ` Abhishek Kumar 2020-08-17 0:13 ` [PATCH v3 00/11] [GSoC] Implement Corrected Commit Date Jakub Narębski [not found] ` <CANQwDwdKp7oKy9BeKdvKhwPUiq0R5MS8TCw-eWGCYCoMGv=G-g@mail.gmail.com> 2020-08-17 1:32 ` Fwd: " Taylor Blau 2020-08-17 7:56 ` Jakub Narębski 2020-08-18 6:12 ` Abhishek Kumar 2020-08-23 15:27 ` Jakub Narębski 2020-08-24 2:49 ` Abhishek Kumar 2020-10-07 14:09 ` [PATCH v4 00/10] " Abhishek Kumar via GitGitGadget 2020-10-07 14:09 ` [PATCH v4 01/10] commit-graph: fix regression when computing Bloom filters Abhishek Kumar via GitGitGadget 2020-10-24 23:16 ` Jakub Narębski 2020-10-25 20:58 ` Taylor Blau 2020-11-03 5:36 ` Abhishek Kumar 2020-10-07 14:09 ` [PATCH v4 02/10] revision: parse parent in indegree_walk_step() Abhishek Kumar via GitGitGadget 2020-10-24 23:41 ` Jakub Narębski 2020-10-07 14:09 ` [PATCH v4 03/10] commit-graph: consolidate fill_commit_graph_info Abhishek Kumar via GitGitGadget 2020-10-25 10:52 ` Jakub Narębski 2020-10-27 6:33 ` Abhishek Kumar 2020-10-07 14:09 ` [PATCH v4 04/10] commit-graph: return 64-bit generation number Abhishek Kumar via GitGitGadget 2020-10-25 13:48 ` Jakub Narębski 2020-11-03 6:40 ` Abhishek Kumar 2020-10-07 14:09 ` [PATCH v4 05/10] commit-graph: add a slab to store topological levels Abhishek Kumar via GitGitGadget 2020-10-25 22:17 ` Jakub Narębski 2020-10-07 14:09 ` [PATCH v4 06/10] commit-graph: implement corrected commit date Abhishek Kumar via GitGitGadget 2020-10-27 18:53 ` Jakub Narębski 2020-11-03 11:44 ` Abhishek Kumar 2020-11-04 16:45 ` Jakub Narębski 2020-11-05 14:05 ` Philip Oakley 2020-11-05 18:22 ` Junio C Hamano 2020-11-06 18:26 ` Extending and updating gitglossary (was: Re: [PATCH v4 06/10] commit-graph: implement corrected commit date) Jakub Narębski 2020-11-06 19:33 ` Extending and updating gitglossary Junio C Hamano 2020-11-08 17:23 ` Extending and updating gitglossary (was: Re: [PATCH v4 06/10] commit-graph: implement corrected commit date) Philip Oakley 2020-11-10 1:35 ` Extending and updating gitglossary Jakub Narębski 2020-11-10 14:04 ` Philip Oakley 2020-11-10 23:52 ` Jakub Narębski 2020-10-07 14:09 ` [PATCH v4 07/10] commit-graph: implement generation data chunk Abhishek Kumar via GitGitGadget 2020-10-30 12:45 ` Jakub Narębski 2020-11-06 11:25 ` Abhishek Kumar 2020-11-06 17:56 ` Jakub Narębski 2020-10-07 14:09 ` [PATCH v4 08/10] commit-graph: use generation v2 only if entire chain does Abhishek Kumar via GitGitGadget 2020-11-01 0:55 ` Jakub Narębski 2020-11-12 10:01 ` Abhishek Kumar 2020-11-13 9:59 ` Jakub Narębski 2020-10-07 14:09 ` [PATCH v4 09/10] commit-reach: use corrected commit dates in paint_down_to_common() Abhishek Kumar via GitGitGadget 2020-11-03 17:59 ` Jakub Narębski 2020-11-03 18:19 ` Junio C Hamano 2020-11-20 10:33 ` Abhishek Kumar 2020-10-07 14:09 ` [PATCH v4 10/10] doc: add corrected commit date info Abhishek Kumar via GitGitGadget 2020-11-04 1:37 ` Jakub Narębski 2020-11-21 6:30 ` Abhishek Kumar 2020-11-04 23:37 ` [PATCH v4 00/10] [GSoC] Implement Corrected Commit Date Jakub Narębski 2020-11-22 5:31 ` Abhishek Kumar 2020-12-28 11:15 ` [PATCH v5 00/11] " Abhishek Kumar via GitGitGadget 2020-12-28 11:15 ` [PATCH v5 01/11] commit-graph: fix regression when computing Bloom filters Abhishek Kumar via GitGitGadget 2020-12-30 1:35 ` Derrick Stolee 2021-01-08 5:45 ` Abhishek Kumar 2021-01-05 9:45 ` SZEDER Gábor 2021-01-05 9:47 ` SZEDER Gábor 2021-01-08 5:51 ` Abhishek Kumar 2020-12-28 11:15 ` [PATCH v5 02/11] revision: parse parent in indegree_walk_step() Abhishek Kumar via GitGitGadget 2020-12-28 11:16 ` [PATCH v5 03/11] commit-graph: consolidate fill_commit_graph_info Abhishek Kumar via GitGitGadget 2020-12-28 11:16 ` [PATCH v5 04/11] t6600-test-reach: generalize *_three_modes Abhishek Kumar via GitGitGadget 2020-12-28 11:16 ` [PATCH v5 05/11] commit-graph: add a slab to store topological levels Abhishek Kumar via GitGitGadget 2020-12-28 11:16 ` [PATCH v5 06/11] commit-graph: return 64-bit generation number Abhishek Kumar via GitGitGadget 2020-12-28 11:16 ` [PATCH v5 07/11] commit-graph: implement corrected commit date Abhishek Kumar via GitGitGadget 2020-12-30 1:53 ` Derrick Stolee 2021-01-10 12:21 ` Abhishek Kumar 2020-12-28 11:16 ` [PATCH v5 08/11] commit-graph: implement generation data chunk Abhishek Kumar via GitGitGadget 2020-12-28 11:16 ` [PATCH v5 09/11] commit-graph: use generation v2 only if entire chain does Abhishek Kumar via GitGitGadget 2020-12-30 3:23 ` Derrick Stolee 2021-01-10 13:13 ` Abhishek Kumar 2021-01-11 12:43 ` Derrick Stolee 2020-12-28 11:16 ` [PATCH v5 10/11] commit-reach: use corrected commit dates in paint_down_to_common() Abhishek Kumar via GitGitGadget 2020-12-28 11:16 ` [PATCH v5 11/11] doc: add corrected commit date info Abhishek Kumar via GitGitGadget 2020-12-30 4:35 ` [PATCH v5 00/11] [GSoC] Implement Corrected Commit Date Derrick Stolee 2021-01-10 14:06 ` Abhishek Kumar 2021-01-16 18:11 ` [PATCH v6 " Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 01/11] commit-graph: fix regression when computing Bloom filters Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 02/11] revision: parse parent in indegree_walk_step() Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 03/11] commit-graph: consolidate fill_commit_graph_info Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 04/11] t6600-test-reach: generalize *_three_modes Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 05/11] commit-graph: add a slab to store topological levels Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 06/11] commit-graph: return 64-bit generation number Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 07/11] commit-graph: implement corrected commit date Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 08/11] commit-graph: implement generation data chunk Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 09/11] commit-graph: use generation v2 only if entire chain does Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 10/11] commit-reach: use corrected commit dates in paint_down_to_common() Abhishek Kumar via GitGitGadget 2021-01-16 18:11 ` [PATCH v6 11/11] doc: add corrected commit date info Abhishek Kumar via GitGitGadget
Reply instructions: You may reply publicly 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=85pn7ihabl.fsf@gmail.com \ --to=jnareb@gmail.com \ --cc=abhishekkumar8222@gmail.com \ --cc=git@vger.kernel.org \ --cc=gitgitgadget@gmail.com \ --cc=me@ttaylorr.com \ --cc=stolee@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 list mirror (unofficial, one of many) This inbox may be cloned and mirrored by anyone: 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 # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V1 git git/ https://public-inbox.org/git \ git@vger.kernel.org public-inbox-index git Example config snippet for mirrors. 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.io/gmane.comp.version-control.git note: .onion URLs require Tor: https://www.torproject.org/ code repositories for the project(s) associated with this inbox: https://80x24.org/mirrors/git.git AGPL code for this site: git clone https://public-inbox.org/public-inbox.git