On 2/9/2018 8:02 AM, SZEDER Gábor wrote:
On Thu, Feb 8, 2018 at 9:37 PM, Derrick Stolee <sto...@gmail.com> wrote:
Teach git-commit-graph to read commits from stdin when the
--stdin-commits flag is specified. Commits reachable from these
commits are added to the graph. This is a much faster way to construct
the graph than inspecting all packed objects, but is restricted to
known tips.

For the Linux repository, 700,000+ commits were added to the graph
file starting from 'master' in 7-9 seconds, depending on the number
of packfiles in the repo (1, 24, or 120).
It seems something went wrong with '--stdin-commits' in v3, look:

   ~/src/git (commit-graph-v2 %)$ time { git rev-parse HEAD | ./git
commit-graph --write --update-head --stdin-commits ; }

   real  0m1.199s
   user  0m1.123s
   sys   0m0.024s

   ~/src/git (commit-graph-v3 %)$ time { git rev-parse HEAD | ./git
commit-graph write --update-head --stdin-commits ; }

   real  0m30.766s
   user  0m29.120s
   sys   0m0.546s

Thanks, Szeder. You're right. This is the diff that I forgot to apply in the last commit:

diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
index 28d043b..175b967 100644
--- a/builtin/commit-graph.c
+++ b/builtin/commit-graph.c
@@ -257,7 +257,7 @@ static int graph_write(int argc, const char **argv)

        has_existing = !!get_graph_head_hash(opts.pack_dir, &old_graph_hash);

-       if (opts.stdin_packs) {
+       if (opts.stdin_packs || opts.stdin_commits) {
                struct strbuf buf = STRBUF_INIT;
                nr_lines = 0;
                alloc_lines = 128;

I'll work to create a test that ensures we are only adding commits reachable from specific commits to prevent this regression.


Reply via email to