]> git.ipfire.org Git - thirdparty/git.git/commit - commit-graph.h
commit-graph.h: store an odb in 'struct write_commit_graph_context'
authorTaylor Blau <me@ttaylorr.com>
Tue, 4 Feb 2020 05:51:50 +0000 (21:51 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 4 Feb 2020 19:36:37 +0000 (11:36 -0800)
commit0bd52e27e315a76d6950fa30ce602eef15d90571
treeb47e3464304a349b0e1223e682feb89449b312d8
parent1793280e91c51d5923e1c714ed6e0cd1291cbe77
commit-graph.h: store an odb in 'struct write_commit_graph_context'

There are lots of places in 'commit-graph.h' where a function either has
(or almost has) a full 'struct object_directory *', accesses '->path',
and then throws away the rest of the struct.

This can cause headaches when comparing the locations of object
directories across alternates (e.g., in the case of deciding if two
commit-graph layers can be merged). These paths are normalized with
'normalize_path_copy()' which mitigates some comparison issues, but not
all [1].

Replace usage of 'char *object_dir' with 'odb->path' by storing a
'struct object_directory *' in the 'write_commit_graph_context'
structure. This is an intermediate step towards getting rid of all path
normalization in 'commit-graph.c'.

Resolving a user-provided '--object-dir' argument now requires that we
compare it to the known alternates for equality.  Prior to this patch,
an unknown '--object-dir' argument would silently exit with status zero.

This can clearly lead to unintended behavior, such as verifying
commit-graphs that aren't in a repository's own object store (or one of
its alternates), or causing a typo to mask a legitimate commit-graph
verification failure. Make this error non-silent by 'die()'-ing when the
given '--object-dir' does not match any known alternate object store.

[1]: In my testing, for example, I can get one side of the commit-graph
code to fill object_dir with "./objects" and the other with just
"objects".

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-commit-graph.txt
builtin/commit-graph.c
builtin/commit.c
builtin/fetch.c
builtin/gc.c
commit-graph.c
commit-graph.h