[PATCH v2 0/8] Clarify commit-graph and grafts/replace/shallow incompatibilities
- From
Derrick Stolee <dstolee@microsoft.com>
- Date
- Aug 20, 2018, 18:24 UTC
- Message-ID
- <20180820182359.165929-1-dstolee@microsoft.com>
- In-Reply-To
- <pull.11.git.gitgitgadget@gmail.com>
One unresolved issue with the commit-graph feature is that it can cause issues when combined with replace objects, commit grafts, or shallow clones. These are not 100% incompatible, as one could be reasonably successful writing a commit-graph after replacing some objects and not have issues. The problems happen when commits that are already in the commit-graph file are replaced, or when git is run with the `--no-replace-objects` option; this can cause incorrect parents or incorrect generation numbers. Similar things occur with commit grafts and shallow clones, especially when running `git fetch --unshallow` in a shallow repo.
Instead of trying (and probably failing) to make these features work together, default to making the commit-graph feature unavailable in these situations. Create a new method 'commit_graph_compatible(r)' that checks if the repository 'r' has any of these features enabled.
CHANGES IN V2:
* The first two commits regarding the ref iterators are unchanged, despite a lot of discussion on the subject [1].
* I included Peff's changes in jk/core-use-replace-refs, changing the base commit for the series to 1689c22c1c328e9135ed51458e9f9a5d224c5057 (the merge that brought that topic into 'msater').
* I fixed the tests for the interactions with the graft feature.
Because of the change of base, it is hard to provide a side-by-side diff from v1.
Thanks, -Stolee
[1] https://public-inbox.org/git/CAGZ79kZ3PzqpGzXWcmxjzi98gA+LT2MBOf8KaA89hOa-Qig=Og@mail.gmail.com/
Stefan's response recommending we keep the first two commits.Derrick Stolee (6): commit-graph: update design document test-repository: properly init repo commit-graph: not compatible with replace objects commit-graph: not compatible with grafts commit-graph: not compatible with uninitialized repo commit-graph: close_commit_graph before shallow walk
Stefan Beller (2):
refs.c: migrate internal ref iteration to pass thru repository
argument
refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callbackDocumentation/technical/commit-graph.txt | 18 +++++-- builtin/commit-graph.c | 4 ++ builtin/replace.c | 8 ++-- commit-graph.c | 38 +++++++++++++-- commit-graph.h | 1 + commit.c | 2 +- commit.h | 1 + refs.c | 48 ++++++++++++++++--- refs.h | 12 ++++- refs/iterator.c | 6 +-- refs/refs-internal.h | 5 +- replace-object.c | 7 +-- replace-object.h | 2 + t/helper/test-repository.c | 10 +++- t/t5318-commit-graph.sh | 60 ++++++++++++++++++++++++ upload-pack.c | 2 + 16 files changed, 194 insertions(+), 30 deletions(-)
base-commit: 1689c22c1c328e9135ed51458e9f9a5d224c5057
-- 2.18.0.118.gd4f65b8d14