Skip to content

Clarify commit-graph and grafts/replace/shallow incompatibilities

Derrick Stolee git 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v2 Latest8 patches 7 repliesIn review

Changes in v2 from the cover letter

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

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/8refs.c: migrate internal ref iteration to pass thru repository argumentrefs.c refs.h refs/iterator.c +1 more+53 -70 replies
2/8refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callbackbuiltin/replace.c refs.c refs.h +1 more+12 -120 replies
3/8commit-graph: update design documentDocumentation/technical/commit-graph.txt+15 -30 replies
4/8test-repository: properly init repot/helper/test-repository.c+8 -20 replies
5/8commit-graph: not compatible with replace objectsbuiltin/commit-graph.c commit-graph.c replace-object.c +2 more+50 -12 replies
6/8commit-graph: not compatible with graftscommit-graph.c commit.c commit.h +1 more+46 -10 replies
7/8commit-graph: not compatible with uninitialized repocommit-graph.c+3 -00 replies
8/8commit-graph: close_commit_graph before shallow walkcommit-graph.c commit-graph.h upload-pack.c+7 -40 replies

Reviews trailers per patch

None of the 8 patches has a Reviewed-by or Acked-by.

PatchJakub Narebski
1/8
2/8
3/8
4/8
5/8
6/8Helped-by
7/8
8/8

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v2 thread

Cover letter [PATCH v2 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.

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 callback

 Documentation/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

Signature · 1 line
2.18.0.118.gd4f65b8d14