Clarify commit-graph and grafts/replace/shallow incompatibilities
Get series with b4
b4 am [email protected]Versions newest first
- v1 Latest8 patches 17 repliesIn review
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/8 | refs.c: migrate internal ref iteration to pass thru repository argumentrefs.c refs.h refs/ +1 more | +53 | 0 replies | |
| 2/8 | refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callbackbuiltin/ refs.c refs.h +1 more | +12 | 3 replies | |
| 3/8 | commit-graph: update design documentDocumentation/ | +15 | 1 reply | |
| 4/8 | test-repository: properly init repot/ | +8 | 1 reply | |
| 5/8 | commit-graph: not compatible with replace objectscommit-graph.c replace-object.c replace-object.h +1 more | +42 | 7 replies | |
| 6/8 | commit-graph: not compatible with graftscommit-graph.c commit.c commit.h +1 more | +44 | 1 reply | |
| 7/8 | commit-graph: not compatible with uninitialized repocommit-graph.c | +3 | 1 reply | |
| 8/8 | commit-graph: close_commit_graph before shallow walkcommit-graph.c commit-graph.h upload-pack.c | +7 | 1 reply |
Reviews trailers per patch
None of the 8 patches has a Reviewed-by or Acked-by.
| Patch | Jakub Narebski |
|---|---|
| Series | Helped-by |
| 1/8 | |
| 2/8 | |
| 3/8 | |
| 4/8 | |
| 5/8 | |
| 6/8 | |
| 7/8 | |
| 8/8 |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
Cover letter [PATCH 0/8] Clarify commit-graph and grafts/replace/shallow incompatibilities
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.
I will send a follow-up patch that shows how I tested these interactions by computing the commit-graph on every 'git commit'.
This approach works for most cases, but I found one nagging test case that was causing problems. This led to the commit "commit-graph: close_commit_graph before shallow walk" and is the patch I am least confident about. Please take a close look at that one and suggest alternatives.
This approach is very different from the previous RFC on the subject [1].
While building this series, I got some test failures in the non-the_repository tests. These issues are related to missing references to an arbitrary repository (instead of the_repository) and some uninitialized values in the tests. Stefan already sent a patch to address this [2], and I've included those commits (along with a small tweak [3]). These are only included for convenience.
Thanks,
-Stolee
[1] https://public-inbox.org/git/[email protected]/
[RFC PATCH 0/6] Fix commit-graph/graft/replace/shallow combo
[2] https://public-inbox.org/git/[email protected]/T/#t
[PATCH 0/2] RFC ref store to repository migration
[3] https://public-inbox.org/git/[email protected]/T/#m966eac85fd58c66523654ddaf0bec72877d3295a
[PATCH] TO-SQUASH: replace the_repository with arbitrary r
Based-On: jt/commit-graph-per-object-store
Cc: [email protected]
Cc: [email protected]
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 callback
Documentation/technical/commit-graph.txt | 18 ++++++-- builtin/replace.c | 8 ++-- commit-graph.c | 34 ++++++++++++-- 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 | 58 ++++++++++++++++++++++++ upload-pack.c | 2 + 15 files changed, 184 insertions(+), 30 deletions(-)
base-commit: dade47c06cf849b0ca180a8e6383b55ea6f75812
Published-As: https://github.com/gitgitgadget/git/releases/tags/pr-11%2Fderrickstolee%2Fshallow%2Fupstream-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-11/derrickstolee/shallow/upstream-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/11
Signature · 1 line
gitgitgadget