Merge branch 'jt/reset-grafts-when-resetting-shallow'

When "shallow" information is updated, we forgot to update the
in-core equivalent, which has been corrected.

* jt/reset-grafts-when-resetting-shallow:
  shallow: reset commit grafts when shallow is reset
This commit is contained in:
Junio C Hamano 2022-03-29 12:22:03 -07:00
commit 5fe35fcc79
5 changed files with 22 additions and 0 deletions

View File

@ -249,6 +249,16 @@ int for_each_commit_graft(each_commit_graft_fn fn, void *cb_data)
return ret;
}
void reset_commit_grafts(struct repository *r)
{
int i;
for (i = 0; i < r->parsed_objects->grafts_nr; i++)
free(r->parsed_objects->grafts[i]);
r->parsed_objects->grafts_nr = 0;
r->parsed_objects->commit_graft_prepared = 0;
}
struct commit_buffer {
void *buffer;
unsigned long size;

View File

@ -249,6 +249,7 @@ int commit_graft_pos(struct repository *r, const struct object_id *oid);
int register_commit_graft(struct repository *r, struct commit_graft *, int);
void prepare_commit_graft(struct repository *r);
struct commit_graft *lookup_commit_graft(struct repository *r, const struct object_id *oid);
void reset_commit_grafts(struct repository *r);
struct commit *get_fork_point(const char *refname, struct commit *commit);

View File

@ -90,6 +90,7 @@ static void reset_repository_shallow(struct repository *r)
{
r->parsed_objects->is_shallow = -1;
stat_validity_clear(r->parsed_objects->shallow_stat);
reset_commit_grafts(r);
}
int commit_shallow_file(struct repository *r, struct shallow_lock *lk)

View File

@ -22,6 +22,7 @@
#include "parse-options.h"
#include "object-store.h"
#include "commit-reach.h"
#include "shallow.h"
static int config_update_recurse_submodules = RECURSE_SUBMODULES_OFF;
static int initialized_fetch_ref_tips;

View File

@ -161,6 +161,15 @@ test_expect_success 'fetch --update-shallow' '
)
'
test_expect_success 'fetch --update-shallow into a repo with submodules' '
git init a-submodule &&
test_commit -C a-submodule foo &&
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" &&
git -C repo-with-sub fetch --update-shallow ../shallow/.git refs/heads/*:refs/remotes/shallow/*
'
test_expect_success 'fetch --update-shallow (with fetch.writeCommitGraph)' '
(
cd shallow &&