1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-10-28 04:49:43 +01:00

environment: make get_object_directory() accept a repository

The `get_object_directory()` function retrieves the path to the object
directory for `the_repository`. Make it accept a `struct repository`
such that it can work on arbitrary repositories and make it part of the
repository subsystem. This reduces our reliance on `the_repository` and
clarifies scope.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2024-09-12 13:29:30 +02:00 committed by Junio C Hamano
parent 661624a4f6
commit a3673f4898
20 changed files with 43 additions and 39 deletions

View file

@ -1,7 +1,6 @@
#include "builtin.h" #include "builtin.h"
#include "commit.h" #include "commit.h"
#include "config.h" #include "config.h"
#include "environment.h"
#include "gettext.h" #include "gettext.h"
#include "hex.h" #include "hex.h"
#include "parse-options.h" #include "parse-options.h"
@ -95,7 +94,7 @@ static int graph_verify(int argc, const char **argv, const char *prefix)
usage_with_options(builtin_commit_graph_verify_usage, options); usage_with_options(builtin_commit_graph_verify_usage, options);
if (!opts.obj_dir) if (!opts.obj_dir)
opts.obj_dir = get_object_directory(); opts.obj_dir = repo_get_object_directory(the_repository);
if (opts.shallow) if (opts.shallow)
flags |= COMMIT_GRAPH_VERIFY_SHALLOW; flags |= COMMIT_GRAPH_VERIFY_SHALLOW;
if (opts.progress) if (opts.progress)
@ -275,7 +274,7 @@ static int graph_write(int argc, const char **argv, const char *prefix)
if (opts.reachable + opts.stdin_packs + opts.stdin_commits > 1) if (opts.reachable + opts.stdin_packs + opts.stdin_commits > 1)
die(_("use at most one of --reachable, --stdin-commits, or --stdin-packs")); die(_("use at most one of --reachable, --stdin-commits, or --stdin-packs"));
if (!opts.obj_dir) if (!opts.obj_dir)
opts.obj_dir = get_object_directory(); opts.obj_dir = repo_get_object_directory(the_repository);
if (opts.append) if (opts.append)
flags |= COMMIT_GRAPH_WRITE_APPEND; flags |= COMMIT_GRAPH_WRITE_APPEND;
if (opts.split) if (opts.split)

View file

@ -7,7 +7,6 @@
#include "builtin.h" #include "builtin.h"
#include "config.h" #include "config.h"
#include "dir.h" #include "dir.h"
#include "environment.h"
#include "gettext.h" #include "gettext.h"
#include "path.h" #include "path.h"
#include "repository.h" #include "repository.h"
@ -116,7 +115,7 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix)
report_linked_checkout_garbage(the_repository); report_linked_checkout_garbage(the_repository);
} }
for_each_loose_file_in_objdir(get_object_directory(), for_each_loose_file_in_objdir(repo_get_object_directory(the_repository),
count_loose, count_cruft, NULL, NULL); count_loose, count_cruft, NULL, NULL);
if (verbose) { if (verbose) {

View file

@ -1,7 +1,6 @@
#include "builtin.h" #include "builtin.h"
#include "abspath.h" #include "abspath.h"
#include "config.h" #include "config.h"
#include "environment.h"
#include "gettext.h" #include "gettext.h"
#include "parse-options.h" #include "parse-options.h"
#include "midx.h" #include "midx.h"
@ -9,6 +8,7 @@
#include "trace2.h" #include "trace2.h"
#include "object-store-ll.h" #include "object-store-ll.h"
#include "replace-object.h" #include "replace-object.h"
#include "repository.h"
#define BUILTIN_MIDX_WRITE_USAGE \ #define BUILTIN_MIDX_WRITE_USAGE \
N_("git multi-pack-index [<options>] write [--preferred-pack=<pack>]" \ N_("git multi-pack-index [<options>] write [--preferred-pack=<pack>]" \
@ -63,7 +63,7 @@ static int parse_object_dir(const struct option *opt, const char *arg,
char **value = opt->value; char **value = opt->value;
free(*value); free(*value);
if (unset) if (unset)
*value = xstrdup(get_object_directory()); *value = xstrdup(repo_get_object_directory(the_repository));
else else
*value = real_pathdup(arg, 1); *value = real_pathdup(arg, 1);
return 0; return 0;

View file

@ -3940,7 +3940,7 @@ static int add_loose_object(const struct object_id *oid, const char *path,
*/ */
static void add_unreachable_loose_objects(void) static void add_unreachable_loose_objects(void)
{ {
for_each_loose_file_in_objdir(get_object_directory(), for_each_loose_file_in_objdir(repo_get_object_directory(the_repository),
add_loose_object, add_loose_object,
NULL, NULL, NULL); NULL, NULL, NULL);
} }

View file

@ -193,12 +193,12 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
revs.exclude_promisor_objects = 1; revs.exclude_promisor_objects = 1;
} }
for_each_loose_file_in_objdir(get_object_directory(), prune_object, for_each_loose_file_in_objdir(repo_get_object_directory(the_repository),
prune_cruft, prune_subdir, &revs); prune_object, prune_cruft, prune_subdir, &revs);
prune_packed_objects(show_only ? PRUNE_PACKED_DRY_RUN : 0); prune_packed_objects(show_only ? PRUNE_PACKED_DRY_RUN : 0);
remove_temporary_files(get_object_directory()); remove_temporary_files(repo_get_object_directory(the_repository));
s = mkpathdup("%s/pack", get_object_directory()); s = mkpathdup("%s/pack", repo_get_object_directory(the_repository));
remove_temporary_files(s); remove_temporary_files(s);
free(s); free(s);

View file

@ -1240,7 +1240,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
if (write_midx && write_bitmaps) { if (write_midx && write_bitmaps) {
struct strbuf path = STRBUF_INIT; struct strbuf path = STRBUF_INIT;
strbuf_addf(&path, "%s/%s_XXXXXX", get_object_directory(), strbuf_addf(&path, "%s/%s_XXXXXX", repo_get_object_directory(the_repository),
"bitmap-ref-tips"); "bitmap-ref-tips");
refs_snapshot = xmks_tempfile(path.buf); refs_snapshot = xmks_tempfile(path.buf);
@ -1249,7 +1249,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
strbuf_release(&path); strbuf_release(&path);
} }
packdir = mkpathdup("%s/pack", get_object_directory()); packdir = mkpathdup("%s/pack", repo_get_object_directory(the_repository));
packtmp_name = xstrfmt(".tmp-%d-pack", (int)getpid()); packtmp_name = xstrfmt(".tmp-%d-pack", (int)getpid());
packtmp = mkpathdup("%s/%s", packdir, packtmp_name); packtmp = mkpathdup("%s/%s", packdir, packtmp_name);
@ -1519,7 +1519,8 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
unsigned flags = 0; unsigned flags = 0;
if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX_WRITE_INCREMENTAL, 0)) if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX_WRITE_INCREMENTAL, 0))
flags |= MIDX_WRITE_INCREMENTAL; flags |= MIDX_WRITE_INCREMENTAL;
write_midx_file(get_object_directory(), NULL, NULL, flags); write_midx_file(repo_get_object_directory(the_repository),
NULL, NULL, flags);
} }
cleanup: cleanup:

View file

@ -75,7 +75,7 @@ static void flush_bulk_checkin_packfile(struct bulk_checkin_packfile *state)
close(fd); close(fd);
} }
strbuf_addf(&packname, "%s/pack/pack-%s.", get_object_directory(), strbuf_addf(&packname, "%s/pack/pack-%s.", repo_get_object_directory(the_repository),
hash_to_hex(hash)); hash_to_hex(hash));
finish_tmp_packfile(&packname, state->pack_tmp_name, finish_tmp_packfile(&packname, state->pack_tmp_name,
state->written, state->nr_written, state->written, state->nr_written,
@ -113,7 +113,7 @@ static void flush_batch_fsync(void)
* to ensure that the data in each new object file is durable before * to ensure that the data in each new object file is durable before
* the final name is visible. * the final name is visible.
*/ */
strbuf_addf(&temp_path, "%s/bulk_fsync_XXXXXX", get_object_directory()); strbuf_addf(&temp_path, "%s/bulk_fsync_XXXXXX", repo_get_object_directory(the_repository));
temp = xmks_tempfile(temp_path.buf); temp = xmks_tempfile(temp_path.buf);
fsync_or_die(get_tempfile_fd(temp), get_tempfile_path(temp)); fsync_or_die(get_tempfile_fd(temp), get_tempfile_path(temp));
delete_tempfile(&temp); delete_tempfile(&temp);

View file

@ -273,13 +273,6 @@ const char *get_git_work_tree(void)
return the_repository->worktree; return the_repository->worktree;
} }
const char *get_object_directory(void)
{
if (!the_repository->objects->odb)
BUG("git environment hasn't been setup");
return the_repository->objects->odb->path;
}
int odb_mkstemp(struct strbuf *temp_filename, const char *pattern) int odb_mkstemp(struct strbuf *temp_filename, const char *pattern)
{ {
int fd; int fd;

View file

@ -106,7 +106,6 @@ int have_git_dir(void);
extern int is_bare_repository_cfg; extern int is_bare_repository_cfg;
int is_bare_repository(void); int is_bare_repository(void);
extern char *git_work_tree_cfg; extern char *git_work_tree_cfg;
const char *get_object_directory(void);
char *get_index_file(void); char *get_index_file(void);
char *get_graft_file(struct repository *r); char *get_graft_file(struct repository *r);
void set_git_dir(const char *path, int make_realpath); void set_git_dir(const char *path, int make_realpath);

View file

@ -1839,7 +1839,7 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
string_list_append_nodup(pack_lockfiles, string_list_append_nodup(pack_lockfiles,
xstrfmt("%s/pack/pack-%s.keep", xstrfmt("%s/pack/pack-%s.keep",
get_object_directory(), repo_get_object_directory(the_repository),
packname)); packname));
} }
string_list_clear(&packfile_uris, 0); string_list_clear(&packfile_uris, 0);

View file

@ -601,7 +601,7 @@ static void get_head(struct strbuf *hdr, char *arg UNUSED)
static void get_info_packs(struct strbuf *hdr, char *arg UNUSED) static void get_info_packs(struct strbuf *hdr, char *arg UNUSED)
{ {
size_t objdirlen = strlen(get_object_directory()); size_t objdirlen = strlen(repo_get_object_directory(the_repository));
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
struct packed_git *p; struct packed_git *p;
size_t cnt = 0; size_t cnt = 0;

View file

@ -2053,7 +2053,7 @@ static int start_loose_object_common(struct strbuf *tmp_file,
else if (errno == EACCES) else if (errno == EACCES)
return error(_("insufficient permission for adding " return error(_("insufficient permission for adding "
"an object to repository database %s"), "an object to repository database %s"),
get_object_directory()); repo_get_object_directory(the_repository));
else else
return error_errno( return error_errno(
_("unable to create temporary file")); _("unable to create temporary file"));
@ -2228,7 +2228,7 @@ int stream_loose_object(struct input_stream *in_stream, size_t len,
prepare_loose_object_bulk_checkin(); prepare_loose_object_bulk_checkin();
/* Since oid is not determined, save tmp file to odb path. */ /* Since oid is not determined, save tmp file to odb path. */
strbuf_addf(&filename, "%s/", get_object_directory()); strbuf_addf(&filename, "%s/", repo_get_object_directory(the_repository));
hdrlen = format_object_header(hdr, sizeof(hdr), OBJ_BLOB, len); hdrlen = format_object_header(hdr, sizeof(hdr), OBJ_BLOB, len);
/* /*

View file

@ -12,6 +12,7 @@
#include "pack-objects.h" #include "pack-objects.h"
#include "pack-revindex.h" #include "pack-revindex.h"
#include "path.h" #include "path.h"
#include "repository.h"
#include "strbuf.h" #include "strbuf.h"
void reset_pack_idx_option(struct pack_idx_option *opts) void reset_pack_idx_option(struct pack_idx_option *opts)
@ -473,7 +474,7 @@ char *index_pack_lockfile(int ip_out, int *is_well_formed)
packname[len-1] = 0; packname[len-1] = 0;
if (skip_prefix(packname, "keep\t", &name)) if (skip_prefix(packname, "keep\t", &name))
return xstrfmt("%s/pack/pack-%s.keep", return xstrfmt("%s/pack/pack-%s.keep",
get_object_directory(), name); repo_get_object_directory(the_repository), name);
return NULL; return NULL;
} }
if (is_well_formed) if (is_well_formed)

View file

@ -30,7 +30,7 @@ char *odb_pack_name(struct strbuf *buf,
const char *ext) const char *ext)
{ {
strbuf_reset(buf); strbuf_reset(buf);
strbuf_addf(buf, "%s/pack/pack-%s.%s", get_object_directory(), strbuf_addf(buf, "%s/pack/pack-%s.%s", repo_get_object_directory(the_repository),
hash_to_hex(hash), ext); hash_to_hex(hash), ext);
return buf->buf; return buf->buf;
} }

View file

@ -1,10 +1,12 @@
#define USE_THE_REPOSITORY_VARIABLE
#include "git-compat-util.h" #include "git-compat-util.h"
#include "environment.h"
#include "gettext.h" #include "gettext.h"
#include "object-store-ll.h" #include "object-store-ll.h"
#include "packfile.h" #include "packfile.h"
#include "progress.h" #include "progress.h"
#include "prune-packed.h" #include "prune-packed.h"
#include "repository.h"
static struct progress *progress; static struct progress *progress;
@ -37,7 +39,7 @@ void prune_packed_objects(int opts)
if (opts & PRUNE_PACKED_VERBOSE) if (opts & PRUNE_PACKED_VERBOSE)
progress = start_delayed_progress(_("Removing duplicate objects"), 256); progress = start_delayed_progress(_("Removing duplicate objects"), 256);
for_each_loose_file_in_objdir(get_object_directory(), for_each_loose_file_in_objdir(repo_get_object_directory(the_repository),
prune_object, NULL, prune_subdir, &opts); prune_object, NULL, prune_subdir, &opts);
/* Ensure we show 100% before finishing progress */ /* Ensure we show 100% before finishing progress */

View file

@ -105,6 +105,13 @@ const char *repo_get_common_dir(struct repository *repo)
return repo->commondir; return repo->commondir;
} }
const char *repo_get_object_directory(struct repository *repo)
{
if (!repo->objects->odb)
BUG("repository hasn't been set up");
return repo->objects->odb->path;
}
static void repo_set_commondir(struct repository *repo, static void repo_set_commondir(struct repository *repo,
const char *commondir) const char *commondir)
{ {

View file

@ -208,6 +208,7 @@ extern struct repository *the_repository;
const char *repo_get_git_dir(struct repository *repo); const char *repo_get_git_dir(struct repository *repo);
const char *repo_get_common_dir(struct repository *repo); const char *repo_get_common_dir(struct repository *repo);
const char *repo_get_object_directory(struct repository *repo);
/* /*
* Define a custom repository layout. Any field can be NULL, which * Define a custom repository layout. Any field can be NULL, which

View file

@ -2,7 +2,6 @@
#include "git-compat-util.h" #include "git-compat-util.h"
#include "dir.h" #include "dir.h"
#include "environment.h"
#include "hex.h" #include "hex.h"
#include "repository.h" #include "repository.h"
#include "refs.h" #include "refs.h"
@ -342,7 +341,8 @@ static int write_pack_info_file(struct update_info_ctx *uic)
static int update_info_packs(int force) static int update_info_packs(int force)
{ {
char *infofile = mkpathdup("%s/info/packs", get_object_directory()); char *infofile = mkpathdup("%s/info/packs",
repo_get_object_directory(the_repository));
int ret; int ret;
init_pack_info(infofile, force); init_pack_info(infofile, force);

View file

@ -2282,7 +2282,7 @@ static void create_object_directory(void)
struct strbuf path = STRBUF_INIT; struct strbuf path = STRBUF_INIT;
size_t baselen; size_t baselen;
strbuf_addstr(&path, get_object_directory()); strbuf_addstr(&path, repo_get_object_directory(the_repository));
baselen = path.len; baselen = path.len;
safe_create_dir(path.buf, 1); safe_create_dir(path.buf, 1);

View file

@ -13,6 +13,7 @@
#include "strvec.h" #include "strvec.h"
#include "quote.h" #include "quote.h"
#include "object-store-ll.h" #include "object-store-ll.h"
#include "repository.h"
struct tmp_objdir { struct tmp_objdir {
struct strbuf path; struct strbuf path;
@ -132,7 +133,8 @@ struct tmp_objdir *tmp_objdir_create(const char *prefix)
* can recognize any stale objdirs left behind by a crash and delete * can recognize any stale objdirs left behind by a crash and delete
* them. * them.
*/ */
strbuf_addf(&t->path, "%s/tmp_objdir-%s-XXXXXX", get_object_directory(), prefix); strbuf_addf(&t->path, "%s/tmp_objdir-%s-XXXXXX",
repo_get_object_directory(the_repository), prefix);
if (!mkdtemp(t->path.buf)) { if (!mkdtemp(t->path.buf)) {
/* free, not destroy, as we never touched the filesystem */ /* free, not destroy, as we never touched the filesystem */
@ -152,7 +154,7 @@ struct tmp_objdir *tmp_objdir_create(const char *prefix)
} }
env_append(&t->env, ALTERNATE_DB_ENVIRONMENT, env_append(&t->env, ALTERNATE_DB_ENVIRONMENT,
absolute_path(get_object_directory())); absolute_path(repo_get_object_directory(the_repository)));
env_replace(&t->env, DB_ENVIRONMENT, absolute_path(t->path.buf)); env_replace(&t->env, DB_ENVIRONMENT, absolute_path(t->path.buf));
env_replace(&t->env, GIT_QUARANTINE_ENVIRONMENT, env_replace(&t->env, GIT_QUARANTINE_ENVIRONMENT,
absolute_path(t->path.buf)); absolute_path(t->path.buf));
@ -267,7 +269,7 @@ int tmp_objdir_migrate(struct tmp_objdir *t)
} }
strbuf_addbuf(&src, &t->path); strbuf_addbuf(&src, &t->path);
strbuf_addstr(&dst, get_object_directory()); strbuf_addstr(&dst, repo_get_object_directory(the_repository));
ret = migrate_paths(&src, &dst); ret = migrate_paths(&src, &dst);