diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-07-09 14:00:44 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-07-09 14:00:44 -0700 |
commit | 24ecfdf206ee0e9e01f86d333d90d281fdfd12d0 (patch) | |
tree | cebd8275c93f7a86afa85fb6ed69fe0691034f3f | |
parent | Merge branch 'ct/diff-with-merge-base-clarification' into master (diff) | |
parent | commit.c: don't persist substituted parents when unshallowing (diff) | |
download | tgif-24ecfdf206ee0e9e01f86d333d90d281fdfd12d0.tar.xz |
Merge branch 'tb/fix-persistent-shallow' into master
When "fetch.writeCommitGraph" configuration is set in a shallow
repository and a fetch moves the shallow boundary, we wrote out
broken commit-graph files that do not match the reality, which has
been corrected.
* tb/fix-persistent-shallow:
commit.c: don't persist substituted parents when unshallowing
-rw-r--r-- | commit-graph.c | 3 | ||||
-rw-r--r-- | commit.c | 2 | ||||
-rw-r--r-- | object.h | 1 | ||||
-rwxr-xr-x | t/t5537-fetch-shallow.sh | 14 |
4 files changed, 19 insertions, 1 deletions
diff --git a/commit-graph.c b/commit-graph.c index fdd1c4fa7c..328ab06fd4 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -203,7 +203,8 @@ static int commit_graph_compatible(struct repository *r) } prepare_commit_graft(r); - if (r->parsed_objects && r->parsed_objects->grafts_nr) + if (r->parsed_objects && + (r->parsed_objects->grafts_nr || r->parsed_objects->substituted_parent)) return 0; if (is_repository_shallow(r)) return 0; @@ -423,6 +423,8 @@ int parse_commit_buffer(struct repository *r, struct commit *item, const void *b pptr = &item->parents; graft = lookup_commit_graft(r, &item->object.oid); + if (graft) + r->parsed_objects->substituted_parent = 1; while (bufptr + parent_entry_len < tail && !memcmp(bufptr, "parent ", 7)) { struct commit *new_parent; @@ -25,6 +25,7 @@ struct parsed_object_pool { char *alternate_shallow_file; int commit_graft_prepared; + int substituted_parent; struct buffer_slab *buffer_slab; }; diff --git a/t/t5537-fetch-shallow.sh b/t/t5537-fetch-shallow.sh index d427a2d7f7..a55202d2d3 100755 --- a/t/t5537-fetch-shallow.sh +++ b/t/t5537-fetch-shallow.sh @@ -81,6 +81,20 @@ test_expect_success 'fetch --unshallow from shallow clone' ' ) ' +test_expect_success 'fetch --unshallow from a full clone' ' + git clone --no-local --depth=2 .git shallow3 && + ( + cd shallow3 && + git log --format=%s >actual && + test_write_lines 4 3 >expect && + test_cmp expect actual && + git -c fetch.writeCommitGraph fetch --unshallow && + git log origin/master --format=%s >actual && + test_write_lines 4 3 2 1 >expect && + test_cmp expect actual + ) +' + test_expect_success 'fetch something upstream has but hidden by clients shallow boundaries' ' # the blob "1" is available in .git but hidden by the # shallow2/.git/shallow and it should be resent |