> To use the new test-tool, use 'test-tool reach <method>' and provide > input to stdin that describes the inputs to the method. Currently, we > only implement the ref_newer method, which requires two commits. Use > lines "A:<committish>" and "B:<committish>" for the two inputs. We will > expand this input later to accommodate methods that take lists of > commits. It would be nice if "A" and "B" were "ancestor" and "descendant" (or something like that) instead, so that I don't have to check which direction the reach is calculated in. > +int cmd__reach(int ac, const char **av) > +{ > + struct object_id oid_A, oid_B; > + struct strbuf buf = STRBUF_INIT; > + struct repository *r = the_repository; > + > + setup_git_directory(); > + > + if (ac < 2) > + exit(1); > + > + > + while (strbuf_getline(&buf, stdin) != EOF) { > + struct object_id oid; > + struct object *o; > + struct commit *c; > + if (buf.len < 3) > + continue; > + > + if (get_oid_committish(buf.buf + 2, &oid)) > + die("failed to resolve %s", buf.buf + 2); You can also use skip_prefix() instead of using arithmetic to determine the start of the OID. > +# Construct a grid-like commit graph with points (x,y) > +# with 1 <= x <= 10, 1 <= y <= 10, where (x,y) has > +# parents (x-1, y) and (x, y-1), keeping in mind that > +# we drop a parent if a coordinate is nonpositive. > +# > +# (10,10) > +# / \ > +# (10,9) (9,10) > +# / \ / \ > +# (10,8) (9,9) (8,10) > +# / \ / \ / \ > +# ( continued...) > +# \ / \ / \ / > +# (3,1) (2,2) (1,3) > +# \ / \ / > +# (2,1) (2,1) > +# \ / > +# (1,1) This is quite a good design, thanks. > +# We use branch 'comit-x-y' to refer to (x,y). s/comit/commit/ > + git show-ref -s commit-7-7 | git commit-graph write --stdin-commits && > + mv .git/objects/info/commit-graph commit-graph-half && My understanding is that this writes for 7-7 and all its ancestors, but... > +test_expect_success 'ref_newer:hit' ' > + cat >input <<-\EOF && > + A:commit-5-7 > + B:commit-2-3 > + EOF > + printf "ref_newer:1\n" >expect && > + test_three_modes ref_newer > +' > + > +test_done ...both 5-7 and 2-3 are ancestors of 7-7, right? Which means that you don't test the "half" commit graph here. (It's probably sufficient to just adjust the numbers.)