зеркало из https://github.com/microsoft/git.git
Merge branch 'jt/unparse-commit-upon-graft-change'
Updating the graft information invalidates the list of parents of in-core commit objects that used to be in the graft file. * jt/unparse-commit-upon-graft-change: commit,shallow: unparse commits if grafts changed
This commit is contained in:
Коммит
eef985e17a
16
commit.c
16
commit.c
|
@ -120,6 +120,17 @@ int commit_graft_pos(struct repository *r, const struct object_id *oid)
|
||||||
commit_graft_oid_access);
|
commit_graft_oid_access);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void unparse_commit(struct repository *r, const struct object_id *oid)
|
||||||
|
{
|
||||||
|
struct commit *c = lookup_commit(r, oid);
|
||||||
|
|
||||||
|
if (!c->object.parsed)
|
||||||
|
return;
|
||||||
|
free_commit_list(c->parents);
|
||||||
|
c->parents = NULL;
|
||||||
|
c->object.parsed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
int register_commit_graft(struct repository *r, struct commit_graft *graft,
|
int register_commit_graft(struct repository *r, struct commit_graft *graft,
|
||||||
int ignore_dups)
|
int ignore_dups)
|
||||||
{
|
{
|
||||||
|
@ -145,6 +156,7 @@ int register_commit_graft(struct repository *r, struct commit_graft *graft,
|
||||||
(r->parsed_objects->grafts_nr - pos - 1) *
|
(r->parsed_objects->grafts_nr - pos - 1) *
|
||||||
sizeof(*r->parsed_objects->grafts));
|
sizeof(*r->parsed_objects->grafts));
|
||||||
r->parsed_objects->grafts[pos] = graft;
|
r->parsed_objects->grafts[pos] = graft;
|
||||||
|
unparse_commit(r, &graft->oid);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,8 +265,10 @@ void reset_commit_grafts(struct repository *r)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < r->parsed_objects->grafts_nr; i++)
|
for (i = 0; i < r->parsed_objects->grafts_nr; i++) {
|
||||||
|
unparse_commit(r, &r->parsed_objects->grafts[i]->oid);
|
||||||
free(r->parsed_objects->grafts[i]);
|
free(r->parsed_objects->grafts[i]);
|
||||||
|
}
|
||||||
r->parsed_objects->grafts_nr = 0;
|
r->parsed_objects->grafts_nr = 0;
|
||||||
r->parsed_objects->commit_graft_prepared = 0;
|
r->parsed_objects->commit_graft_prepared = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,13 @@ int commit_shallow_file(struct repository *r, struct shallow_lock *lk)
|
||||||
{
|
{
|
||||||
int res = commit_lock_file(&lk->lock);
|
int res = commit_lock_file(&lk->lock);
|
||||||
reset_repository_shallow(r);
|
reset_repository_shallow(r);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update in-memory data structures with the new shallow information,
|
||||||
|
* including unparsing all commits that now have grafts.
|
||||||
|
*/
|
||||||
|
is_repository_shallow(r);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -164,12 +164,24 @@ test_expect_success 'fetch --update-shallow' '
|
||||||
test_expect_success 'fetch --update-shallow into a repo with submodules' '
|
test_expect_success 'fetch --update-shallow into a repo with submodules' '
|
||||||
git init a-submodule &&
|
git init a-submodule &&
|
||||||
test_commit -C a-submodule foo &&
|
test_commit -C a-submodule foo &&
|
||||||
|
|
||||||
|
test_when_finished "rm -rf repo-with-sub" &&
|
||||||
git init repo-with-sub &&
|
git init repo-with-sub &&
|
||||||
git -C repo-with-sub submodule add ../a-submodule a-submodule &&
|
git -C repo-with-sub submodule add ../a-submodule a-submodule &&
|
||||||
git -C repo-with-sub commit -m "added submodule" &&
|
git -C repo-with-sub commit -m "added submodule" &&
|
||||||
git -C repo-with-sub fetch --update-shallow ../shallow/.git refs/heads/*:refs/remotes/shallow/*
|
git -C repo-with-sub fetch --update-shallow ../shallow/.git refs/heads/*:refs/remotes/shallow/*
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'fetch --update-shallow a commit that is also a shallow point into a repo with submodules' '
|
||||||
|
test_when_finished "rm -rf repo-with-sub" &&
|
||||||
|
git init repo-with-sub &&
|
||||||
|
git -C repo-with-sub submodule add ../a-submodule a-submodule &&
|
||||||
|
git -C repo-with-sub commit -m "added submodule" &&
|
||||||
|
|
||||||
|
SHALLOW=$(cat shallow/.git/shallow) &&
|
||||||
|
git -C repo-with-sub fetch --update-shallow ../shallow/.git "$SHALLOW":refs/heads/a-shallow
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'fetch --update-shallow (with fetch.writeCommitGraph)' '
|
test_expect_success 'fetch --update-shallow (with fetch.writeCommitGraph)' '
|
||||||
(
|
(
|
||||||
cd shallow &&
|
cd shallow &&
|
||||||
|
|
Загрузка…
Ссылка в новой задаче