Browse Source

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
maint
Junio C Hamano 5 years ago
parent
commit
24ecfdf206
  1. 3
      commit-graph.c
  2. 2
      commit.c
  3. 1
      object.h
  4. 14
      t/t5537-fetch-shallow.sh

3
commit-graph.c

@ -203,7 +203,8 @@ static int commit_graph_compatible(struct repository *r) @@ -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;

2
commit.c

@ -423,6 +423,8 @@ int parse_commit_buffer(struct repository *r, struct commit *item, const void *b @@ -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;


1
object.h

@ -25,6 +25,7 @@ struct parsed_object_pool { @@ -25,6 +25,7 @@ struct parsed_object_pool {
char *alternate_shallow_file;

int commit_graft_prepared;
int substituted_parent;

struct buffer_slab *buffer_slab;
};

14
t/t5537-fetch-shallow.sh

@ -81,6 +81,20 @@ test_expect_success 'fetch --unshallow from shallow clone' ' @@ -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

Loading…
Cancel
Save