> 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.)