summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2020-07-09 21:00:44 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-07-09 21:00:44 (GMT)
commit24ecfdf206ee0e9e01f86d333d90d281fdfd12d0 (patch)
treecebd8275c93f7a86afa85fb6ed69fe0691034f3f
parent46be023084bd6ce4958f16427da7cdaf91cff205 (diff)
parentce16364e897e70a17bd1864b6007719eeec959f3 (diff)
downloadgit-24ecfdf206ee0e9e01f86d333d90d281fdfd12d0.zip
git-24ecfdf206ee0e9e01f86d333d90d281fdfd12d0.tar.gz
git-24ecfdf206ee0e9e01f86d333d90d281fdfd12d0.tar.bz2
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.c3
-rw-r--r--commit.c2
-rw-r--r--object.h1
-rwxr-xr-xt/t5537-fetch-shallow.sh14
4 files changed, 19 insertions, 1 deletions
diff --git a/commit-graph.c b/commit-graph.c
index fdd1c4f..328ab06 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;
diff --git a/commit.c b/commit.c
index 43d29a8..7128895 100644
--- a/commit.c
+++ b/commit.c
@@ -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;
diff --git a/object.h b/object.h
index 38dc2d5..96a2105 100644
--- a/object.h
+++ b/object.h
@@ -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 d427a2d..a55202d 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