object-file: get rid of `the_repository` in `force_object_loose()`
The function `force_object_loose()` forces an object to become a loose object in case it only exists in its packed form. To do so it implicitly relies on `the_repository`. Refactor the function by passing a `struct odb_source` as parameter. While the check whether any such loose object exists already acts on the whole object database, writing the loose object happens in one specific source. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
0df005353a
commit
c2b5d1490a
|
|
@ -4411,7 +4411,8 @@ static void loosen_unused_packed_objects(void)
|
||||||
if (!packlist_find(&to_pack, &oid) &&
|
if (!packlist_find(&to_pack, &oid) &&
|
||||||
!has_sha1_pack_kept_or_nonlocal(&oid) &&
|
!has_sha1_pack_kept_or_nonlocal(&oid) &&
|
||||||
!loosened_object_can_be_discarded(&oid, p->mtime)) {
|
!loosened_object_can_be_discarded(&oid, p->mtime)) {
|
||||||
if (force_object_loose(&oid, p->mtime))
|
if (force_object_loose(the_repository->objects->sources,
|
||||||
|
&oid, p->mtime))
|
||||||
die(_("unable to force loose object"));
|
die(_("unable to force loose object"));
|
||||||
loosened_objects_nr++;
|
loosened_objects_nr++;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1077,10 +1077,10 @@ int write_object_file(struct odb_source *source,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int force_object_loose(const struct object_id *oid, time_t mtime)
|
int force_object_loose(struct odb_source *source,
|
||||||
|
const struct object_id *oid, time_t mtime)
|
||||||
{
|
{
|
||||||
struct repository *repo = the_repository;
|
const struct git_hash_algo *compat = source->odb->repo->compat_hash_algo;
|
||||||
const struct git_hash_algo *compat = repo->compat_hash_algo;
|
|
||||||
void *buf;
|
void *buf;
|
||||||
unsigned long len;
|
unsigned long len;
|
||||||
struct object_info oi = OBJECT_INFO_INIT;
|
struct object_info oi = OBJECT_INFO_INIT;
|
||||||
|
|
@ -1090,24 +1090,24 @@ int force_object_loose(const struct object_id *oid, time_t mtime)
|
||||||
int hdrlen;
|
int hdrlen;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
for (struct odb_source *source = repo->objects->sources; source; source = source->next)
|
for (struct odb_source *s = source->odb->sources; s; s = s->next)
|
||||||
if (has_loose_object(source, oid))
|
if (has_loose_object(s, oid))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
oi.typep = &type;
|
oi.typep = &type;
|
||||||
oi.sizep = &len;
|
oi.sizep = &len;
|
||||||
oi.contentp = &buf;
|
oi.contentp = &buf;
|
||||||
if (odb_read_object_info_extended(the_repository->objects, oid, &oi, 0))
|
if (odb_read_object_info_extended(source->odb, oid, &oi, 0))
|
||||||
return error(_("cannot read object for %s"), oid_to_hex(oid));
|
return error(_("cannot read object for %s"), oid_to_hex(oid));
|
||||||
if (compat) {
|
if (compat) {
|
||||||
if (repo_oid_to_algop(repo, oid, compat, &compat_oid))
|
if (repo_oid_to_algop(source->odb->repo, oid, compat, &compat_oid))
|
||||||
return error(_("cannot map object %s to %s"),
|
return error(_("cannot map object %s to %s"),
|
||||||
oid_to_hex(oid), compat->name);
|
oid_to_hex(oid), compat->name);
|
||||||
}
|
}
|
||||||
hdrlen = format_object_header(hdr, sizeof(hdr), type, len);
|
hdrlen = format_object_header(hdr, sizeof(hdr), type, len);
|
||||||
ret = write_loose_object(repo->objects->sources, oid, hdr, hdrlen, buf, len, mtime, 0);
|
ret = write_loose_object(source, oid, hdr, hdrlen, buf, len, mtime, 0);
|
||||||
if (!ret && compat)
|
if (!ret && compat)
|
||||||
ret = repo_add_loose_object_map(the_repository->objects->sources, oid, &compat_oid);
|
ret = repo_add_loose_object_map(source, oid, &compat_oid);
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,8 @@ int stream_loose_object(struct odb_source *source,
|
||||||
struct input_stream *in_stream, size_t len,
|
struct input_stream *in_stream, size_t len,
|
||||||
struct object_id *oid);
|
struct object_id *oid);
|
||||||
|
|
||||||
int force_object_loose(const struct object_id *oid, time_t mtime);
|
int force_object_loose(struct odb_source *source,
|
||||||
|
const struct object_id *oid, time_t mtime);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* With in-core object data in "buf", rehash it to make sure the
|
* With in-core object data in "buf", rehash it to make sure the
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue