Merge branch 'jn/per-repo-object-store-fixes'
Step #0 of a planned & larger series to make the in-core object store per in-core repository object. * jn/per-repo-object-store-fixes: replace-objects: evaluate replacement refs without using the object store push, fetch: error out for submodule entries not pointing to commits pack: make packed_git_mru global a value instead of a pointer
This commit is contained in:
33
submodule.c
33
submodule.c
@ -774,19 +774,36 @@ static int append_oid_to_argv(const struct object_id *oid, void *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct has_commit_data {
|
||||
int result;
|
||||
const char *path;
|
||||
};
|
||||
|
||||
static int check_has_commit(const struct object_id *oid, void *data)
|
||||
{
|
||||
int *has_commit = data;
|
||||
struct has_commit_data *cb = data;
|
||||
|
||||
if (!lookup_commit_reference(oid))
|
||||
*has_commit = 0;
|
||||
enum object_type type = sha1_object_info(oid->hash, NULL);
|
||||
|
||||
return 0;
|
||||
switch (type) {
|
||||
case OBJ_COMMIT:
|
||||
return 0;
|
||||
case OBJ_BAD:
|
||||
/*
|
||||
* Object is missing or invalid. If invalid, an error message
|
||||
* has already been printed.
|
||||
*/
|
||||
cb->result = 0;
|
||||
return 0;
|
||||
default:
|
||||
die(_("submodule entry '%s' (%s) is a %s, not a commit"),
|
||||
cb->path, oid_to_hex(oid), typename(type));
|
||||
}
|
||||
}
|
||||
|
||||
static int submodule_has_commits(const char *path, struct oid_array *commits)
|
||||
{
|
||||
int has_commit = 1;
|
||||
struct has_commit_data has_commit = { 1, path };
|
||||
|
||||
/*
|
||||
* Perform a cheap, but incorrect check for the existence of 'commits'.
|
||||
@ -802,7 +819,7 @@ static int submodule_has_commits(const char *path, struct oid_array *commits)
|
||||
|
||||
oid_array_for_each_unique(commits, check_has_commit, &has_commit);
|
||||
|
||||
if (has_commit) {
|
||||
if (has_commit.result) {
|
||||
/*
|
||||
* Even if the submodule is checked out and the commit is
|
||||
* present, make sure it exists in the submodule's object store
|
||||
@ -821,12 +838,12 @@ static int submodule_has_commits(const char *path, struct oid_array *commits)
|
||||
cp.dir = path;
|
||||
|
||||
if (capture_command(&cp, &out, GIT_MAX_HEXSZ + 1) || out.len)
|
||||
has_commit = 0;
|
||||
has_commit.result = 0;
|
||||
|
||||
strbuf_release(&out);
|
||||
}
|
||||
|
||||
return has_commit;
|
||||
return has_commit.result;
|
||||
}
|
||||
|
||||
static int submodule_needs_pushing(const char *path, struct oid_array *commits)
|
||||
|
Reference in New Issue
Block a user