diff --git a/attr.c b/attr.c index c605d2c1703808668830947331fd4bc9c2a8fb54..053cd59af26b1fea44e5cc8748cf990d7393cd26 100644 --- a/attr.c +++ b/attr.c @@ -716,7 +716,7 @@ static enum git_attr_direction direction; void git_attr_set_direction(enum git_attr_direction new_direction) { - if (is_bare_repository() && new_direction != GIT_ATTR_INDEX) + if (repo_is_bare(the_repository) && new_direction != GIT_ATTR_INDEX) BUG("non-INDEX attr direction in a bare repo"); if (new_direction != direction) @@ -883,7 +883,7 @@ static struct attr_stack *read_attr(struct index_state *istate, res = read_attr_from_index(istate, path, flags); } else if (tree_oid) { res = read_attr_from_blob(istate, tree_oid, path, flags); - } else if (!is_bare_repository()) { + } else if (!repo_is_bare(the_repository)) { if (direction == GIT_ATTR_CHECKOUT) { res = read_attr_from_index(istate, path, flags); if (!res) diff --git a/builtin/bisect.c b/builtin/bisect.c index 21d17a6c1a83e51fb82b53703b95d89bd9028830..b794a84528fd068b6af120d455152858f9271f62 100644 --- a/builtin/bisect.c +++ b/builtin/bisect.c @@ -705,7 +705,7 @@ static enum bisect_error bisect_start(struct bisect_terms *terms, int argc, struct object_id oid; const char *head; - if (is_bare_repository()) + if (repo_is_bare(the_repository)) no_checkout = 1; /* diff --git a/builtin/blame.c b/builtin/blame.c index e407a22da3bacf6bd26a6738e0ab0292ffadc216..5365c3d45948334a5cdb7f31f7f0a837c50eed6d 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1092,7 +1092,7 @@ int cmd_blame(int argc, revs.disable_stdin = 1; setup_revisions(argc, argv, &revs, NULL); - if (!revs.pending.nr && is_bare_repository()) { + if (!revs.pending.nr && repo_is_bare(the_repository)) { struct commit *head_commit; struct object_id head_oid; diff --git a/builtin/check-attr.c b/builtin/check-attr.c index 7cf275b8937958ae41947814ec2ccf6c808706cb..37baf64f94940b366a89160d8e0fc74c51559518 100644 --- a/builtin/check-attr.c +++ b/builtin/check-attr.c @@ -116,7 +116,7 @@ int cmd_check_attr(int argc, struct object_id initialized_oid; int cnt, i, doubledash, filei; - if (!is_bare_repository()) + if (!repo_is_bare(the_repository)) setup_work_tree(); git_config(git_default_config, NULL); diff --git a/builtin/clone.c b/builtin/clone.c index 59fcb317a68a77eee3ca96a60720c556e044c369..80b594c6011ba5a3da9cf0f2c59a951dce8e0e57 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -1415,7 +1415,7 @@ int cmd_clone(int argc, repo_clear(the_repository); /* At this point, we need the_repository to match the cloned repo. */ - if (repo_init(the_repository, git_dir, work_tree)) + if (repo_init(the_repository, git_dir, work_tree, -1)) warning(_("failed to initialize the repo, skipping bundle URI")); else if (fetch_bundle_uri(the_repository, bundle_uri, &has_heuristic)) warning(_("failed to fetch objects from bundle URI '%s'"), @@ -1446,7 +1446,7 @@ int cmd_clone(int argc, repo_clear(the_repository); /* At this point, we need the_repository to match the cloned repo. */ - if (repo_init(the_repository, git_dir, work_tree)) + if (repo_init(the_repository, git_dir, work_tree, -1)) warning(_("failed to initialize the repo, skipping bundle URI")); else if (fetch_bundle_list(the_repository, transport->bundles)) diff --git a/builtin/gc.c b/builtin/gc.c index d52735354c9f87ba4e8acb593dd11aa0482223e1..e43219e1c17e8563fd71f39a62b3c9bf00187ad1 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -712,7 +712,7 @@ struct repository *repo UNUSED) die(_("failed to parse gc.logExpiry value %s"), cfg.gc_log_expire); if (cfg.pack_refs < 0) - cfg.pack_refs = !is_bare_repository(); + cfg.pack_refs = !repo_is_bare(the_repository); argc = parse_options(argc, argv, prefix, builtin_gc_options, builtin_gc_usage, 0); diff --git a/builtin/init-db.c b/builtin/init-db.c index 7e00d57d654e6820c7ad2418cafc3a9aca815816..901bf30b50806dca218f209d1f3b7a679c83126d 100644 --- a/builtin/init-db.c +++ b/builtin/init-db.c @@ -89,7 +89,7 @@ int cmd_init_db(int argc, const struct option init_db_options[] = { OPT_STRING(0, "template", &template_dir, N_("template-directory"), N_("directory from which templates will be used")), - OPT_SET_INT(0, "bare", &is_bare_repository_cfg, + OPT_SET_INT(0, "bare", &the_repository->is_bare_cfg, N_("create a bare repository"), 1), { OPTION_CALLBACK, 0, "shared", &init_shared_repository, N_("permissions"), @@ -109,7 +109,7 @@ int cmd_init_db(int argc, argc = parse_options(argc, argv, prefix, init_db_options, init_db_usage, 0); - if (real_git_dir && is_bare_repository_cfg == 1) + if (real_git_dir && the_repository->is_bare_cfg == 1) die(_("options '%s' and '%s' cannot be used together"), "--separate-git-dir", "--bare"); if (real_git_dir && !is_absolute_path(real_git_dir)) @@ -155,7 +155,7 @@ int cmd_init_db(int argc, } else if (0 < argc) { usage(init_db_usage[0]); } - if (is_bare_repository_cfg == 1) { + if (the_repository->is_bare_cfg == 1) { char *cwd = xgetcwd(); setenv(GIT_DIR_ENVIRONMENT, cwd, argc > 0); free(cwd); @@ -182,7 +182,7 @@ int cmd_init_db(int argc, */ git_dir = xstrdup_or_null(getenv(GIT_DIR_ENVIRONMENT)); work_tree = xstrdup_or_null(getenv(GIT_WORK_TREE_ENVIRONMENT)); - if ((!git_dir || is_bare_repository_cfg == 1) && work_tree) + if ((!git_dir || the_repository->is_bare_cfg == 1) && work_tree) die(_("%s (or --work-tree=) not allowed without " "specifying %s (or --git-dir=)"), GIT_WORK_TREE_ENVIRONMENT, @@ -218,10 +218,10 @@ int cmd_init_db(int argc, strbuf_release(&sb); } - if (is_bare_repository_cfg < 0) - is_bare_repository_cfg = guess_repository_type(git_dir); + if (the_repository->is_bare_cfg < 0) + the_repository->is_bare_cfg = guess_repository_type(git_dir); - if (!is_bare_repository_cfg) { + if (!the_repository->is_bare_cfg) { const char *git_dir_parent = strrchr(git_dir, '/'); if (git_dir_parent) { char *rel = xstrndup(git_dir, git_dir_parent - git_dir); diff --git a/builtin/repack.c b/builtin/repack.c index d6bb37e84ae2e3715c48791b97f6798177629684..45621f70c5b4c87a3a73433e7d36e9f7a90365b8 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -1266,7 +1266,7 @@ int cmd_repack(int argc, if (write_bitmaps < 0) { if (!write_midx && - (!(pack_everything & ALL_INTO_ONE) || !is_bare_repository())) + (!(pack_everything & ALL_INTO_ONE) || !repo_is_bare(the_repository))) write_bitmaps = 0; } if (pack_kept_objects < 0) diff --git a/builtin/reset.c b/builtin/reset.c index 7154f88826d4c48680eb08466968fb05d4bd9f77..dccd5d95daeb7e398c88dd53db11b47d103c5302 100644 --- a/builtin/reset.c +++ b/builtin/reset.c @@ -448,7 +448,7 @@ int cmd_reset(int argc, if (reset_type != SOFT && (reset_type != MIXED || repo_get_work_tree(the_repository))) setup_work_tree(); - if (reset_type == MIXED && is_bare_repository()) + if (reset_type == MIXED && repo_is_bare(the_repository)) die(_("%s reset is not allowed in a bare repository"), _(reset_type_names[reset_type])); diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 8401b4d7ab64f06b55fb055899d2eb36dc3810a2..281b557483eca5bbc45db2b632e9924236ee469b 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -1063,7 +1063,7 @@ int cmd_rev_parse(int argc, continue; } if (!strcmp(arg, "--is-bare-repository")) { - printf("%s\n", is_bare_repository() ? "true" + printf("%s\n", repo_is_bare(the_repository) ? "true" : "false"); continue; } diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index b6b5f1ebde7c2e4780af4097a0c4d6d838948aee..7bff99bf08f635c38a45620220fbeba9d2e3f710 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1591,7 +1591,7 @@ static int add_possible_reference_from_superproject( struct strbuf err = STRBUF_INIT; strbuf_add(&sb, odb->path, len); - if (repo_init(&alternate, sb.buf, NULL) < 0) + if (repo_init(&alternate, sb.buf, NULL, the_repository->is_bare_cfg) < 0) die(_("could not get a repository handle for gitdir '%s'"), sb.buf); diff --git a/config.c b/config.c index a11bb85da303a7267e86a7a0b420fe22881e4d4f..c1b14c89947596d9b69efdcf10075367b511b44d 100644 --- a/config.c +++ b/config.c @@ -1441,7 +1441,7 @@ static int git_default_core_config(const char *var, const char *value, } if (!strcmp(var, "core.bare")) { - is_bare_repository_cfg = git_config_bool(var, value); + the_repository->is_bare_cfg = git_config_bool(var, value); return 0; } diff --git a/dir.c b/dir.c index e3ddd5b529647580b77ec1db54c59ce04ea6f9ac..c995668e54caad5a2e23643ca8a028fcbd8a7c5d 100644 --- a/dir.c +++ b/dir.c @@ -4008,7 +4008,7 @@ static void connect_wt_gitdir_in_nested(const char *sub_worktree, const struct submodule *sub; /* If the submodule has no working tree, we can ignore it. */ - if (repo_init(&subrepo, sub_gitdir, sub_worktree)) + if (repo_init(&subrepo, sub_gitdir, sub_worktree, the_repository->is_bare_cfg)) return; if (repo_read_index(&subrepo) < 0) diff --git a/environment.c b/environment.c index a2ce998081864da3dae678a2b8c44df61295626c..9af20d5e34e1d40a1370e250b16404c8a1b641d2 100644 --- a/environment.c +++ b/environment.c @@ -34,7 +34,6 @@ int has_symlinks = 1; int minimum_abbrev = 4, default_abbrev = -1; int ignore_case; int assume_unchanged; -int is_bare_repository_cfg = -1; /* unspecified */ int warn_on_object_refname_ambiguity = 1; int repository_format_precious_objects; char *git_commit_encoding; @@ -146,12 +145,6 @@ const char *getenv_safe(struct strvec *argv, const char *name) return argv->v[argv->nr - 1]; } -int is_bare_repository(void) -{ - /* if core.bare is not 'false', let's see if there is a work tree */ - return is_bare_repository_cfg && !repo_get_work_tree(the_repository); -} - int have_git_dir(void) { return startup_info->have_repository diff --git a/environment.h b/environment.h index 923e12661e19e45af18801af91bc4f8032a7ec14..23f29a4df053260e6fe32037a21674fbfc962a64 100644 --- a/environment.h +++ b/environment.h @@ -144,8 +144,7 @@ void set_shared_repository(int value); int get_shared_repository(void); void reset_shared_repository(void); -extern int is_bare_repository_cfg; -int is_bare_repository(void); +int is_bare_repository(struct repository *repo); extern char *git_work_tree_cfg; /* Environment bits from configuration mechanism */ diff --git a/git.c b/git.c index c2c1b8e22c2d91824ad6d631ea9374424ab53435..c8ed29b22957ad57df1bd5119c0877f44a8db548 100644 --- a/git.c +++ b/git.c @@ -251,7 +251,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) *envchanged = 1; } else if (!strcmp(cmd, "--bare")) { char *cwd = xgetcwd(); - is_bare_repository_cfg = 1; + the_repository->is_bare_cfg = 1; setenv(GIT_DIR_ENVIRONMENT, cwd, 0); free(cwd); setenv(GIT_IMPLICIT_WORK_TREE_ENVIRONMENT, "0", 1); diff --git a/mailmap.c b/mailmap.c index 9f9fa3199a85f82fd57381086943059ed0a9ff3f..65fdd853a8ecb71fbcb453438860fc41584b44b5 100644 --- a/mailmap.c +++ b/mailmap.c @@ -216,10 +216,10 @@ int read_mailmap(struct string_list *map) map->strdup_strings = 1; map->cmp = namemap_cmp; - if (!git_mailmap_blob && is_bare_repository()) + if (!git_mailmap_blob && repo_is_bare(the_repository)) git_mailmap_blob = xstrdup("HEAD:.mailmap"); - if (!startup_info->have_repository || !is_bare_repository()) + if (!startup_info->have_repository || !repo_is_bare(the_repository)) err |= read_mailmap_file(map, ".mailmap", startup_info->have_repository ? MAILMAP_NOFOLLOW : 0); diff --git a/refs/files-backend.c b/refs/files-backend.c index 0824c0b8a946909791da36ddb4171db4ad98913b..7310dc0b332c1254ee7811ae4bfcd2014fcfa126 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -1779,7 +1779,7 @@ static int log_ref_setup(struct files_ref_store *refs, char *logfile; if (log_refs_cfg == LOG_REFS_UNSET) - log_refs_cfg = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL; + log_refs_cfg = repo_is_bare(refs->base.repo) ? LOG_REFS_NONE : LOG_REFS_NORMAL; files_reflog_path(refs, &logfile_sb, refname); logfile = strbuf_detach(&logfile_sb, NULL); diff --git a/refs/reftable-backend.c b/refs/reftable-backend.c index 3c6107c7ce5380bbbb526e835979ba9289b7dd22..544adfea3d38830705177025282878f601a1f913 100644 --- a/refs/reftable-backend.c +++ b/refs/reftable-backend.c @@ -163,7 +163,7 @@ static int should_write_log(struct reftable_ref_store *refs, const char *refname { enum log_refs_config log_refs_cfg = refs->log_all_ref_updates; if (log_refs_cfg == LOG_REFS_UNSET) - log_refs_cfg = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL; + log_refs_cfg = repo_is_bare(refs->base.repo) ? LOG_REFS_NONE : LOG_REFS_NORMAL; switch (log_refs_cfg) { case LOG_REFS_NONE: diff --git a/repository.c b/repository.c index f988b8ae68a6a29792e7f2c980a02bd0e388a3b9..cd1d59ea1b9f51939c559b84548bd2e1612bda11 100644 --- a/repository.c +++ b/repository.c @@ -25,7 +25,9 @@ extern struct repository *the_repository; /* The main repository */ -static struct repository the_repo; +static struct repository the_repo = { + .is_bare_cfg = -1, +}; struct repository *the_repository = &the_repo; /* @@ -263,10 +265,13 @@ static int read_and_verify_repository_format(struct repository_format *format, /* * Initialize 'repo' based on the provided 'gitdir'. * Return 0 upon success and a non-zero value upon failure. + * is_bare can be passed to indicate whether or not the repository should be + * treated as bare when repo_init() is used to initiate a secondary repository. */ int repo_init(struct repository *repo, const char *gitdir, - const char *worktree) + const char *worktree, + int is_bare) { struct repository_format format = REPOSITORY_FORMAT_INIT; memset(repo, 0, sizeof(*repo)); @@ -283,6 +288,8 @@ int repo_init(struct repository *repo, repo_set_compat_hash_algo(repo, format.compat_hash_algo); repo_set_ref_storage_format(repo, format.ref_storage_format); repo->repository_format_worktree_config = format.worktree_config; + if (is_bare > 0) + repo->is_bare_cfg = is_bare; /* take ownership of format.partial_clone */ repo->repository_format_partial_clone = format.partial_clone; @@ -314,7 +321,7 @@ int repo_submodule_init(struct repository *subrepo, strbuf_repo_worktree_path(&gitdir, superproject, "%s/.git", path); strbuf_repo_worktree_path(&worktree, superproject, "%s", path); - if (repo_init(subrepo, gitdir.buf, worktree.buf)) { + if (repo_init(subrepo, gitdir.buf, worktree.buf, superproject->is_bare_cfg)) { /* * If initialization fails then it may be due to the submodule * not being populated in the superproject's worktree. Instead @@ -332,7 +339,7 @@ int repo_submodule_init(struct repository *subrepo, strbuf_reset(&gitdir); submodule_name_to_gitdir(&gitdir, superproject, sub->name); - if (repo_init(subrepo, gitdir.buf, NULL)) { + if (repo_init(subrepo, gitdir.buf, NULL, superproject->is_bare_cfg)) { ret = -1; goto out; } @@ -453,3 +460,11 @@ int repo_hold_locked_index(struct repository *repo, BUG("the repo hasn't been setup"); return hold_lock_file_for_update(lf, repo->index_file, flags); } + +int repo_is_bare(struct repository *repo) +{ + /* if core.bare is not 'false', let's see if there is a work tree */ + if (repo->is_bare_cfg < 0 ) + BUG("is_bare_cfg unspecified"); + return repo->is_bare_cfg && !repo_get_work_tree(repo); +} diff --git a/repository.h b/repository.h index 24a66a496a6ff516ce06d47b7329b3d36eb701ca..c243653492b625a88dd0c5912132e6749681a884 100644 --- a/repository.h +++ b/repository.h @@ -153,6 +153,14 @@ struct repository { /* Indicate if a repository has a different 'commondir' from 'gitdir' */ unsigned different_commondir:1; + + /* + * Indicates if the repository is set to be treated as a bare repository, + * through a command line argument, configuration, or environment + * variable. + * -1 means unspecified, 0 indicates non-bare, and 1 indicates bare. + */ + int is_bare_cfg; }; #ifdef USE_THE_REPOSITORY_VARIABLE @@ -188,7 +196,7 @@ void repo_set_ref_storage_format(struct repository *repo, enum ref_storage_format format); void initialize_repository(struct repository *repo); RESULT_MUST_BE_USED -int repo_init(struct repository *r, const char *gitdir, const char *worktree); +int repo_init(struct repository *r, const char *gitdir, const char *worktree, int is_bare); /* * Initialize the repository 'subrepo' as the submodule at the given path. If @@ -232,4 +240,6 @@ void repo_update_index_if_able(struct repository *, struct lock_file *); */ int upgrade_repository_format(int target_version); +int repo_is_bare(struct repository *repo); + #endif /* REPOSITORY_H */ diff --git a/scalar.c b/scalar.c index ac0cb579d3f00551fc0afe75f724208c367d8dc3..c2ec1f3e745e0c5292aa025d5e6f733fd2265ba0 100644 --- a/scalar.c +++ b/scalar.c @@ -722,7 +722,7 @@ static int cmd_reconfigure(int argc, const char **argv) git_config_clear(); - if (repo_init(&r, gitdir.buf, commondir.buf)) + if (repo_init(&r, gitdir.buf, commondir.buf, the_repository->is_bare_cfg)) goto loop_end; old_repo = the_repository; diff --git a/setup.c b/setup.c index 7b648de0279116b381eea46800ad130606926103..5680976c598fa0a80d6825b6bc5c77af55caa750 100644 --- a/setup.c +++ b/setup.c @@ -741,6 +741,7 @@ static int check_repository_format_gently(const char *gitdir, struct repository_ if (verify_repository_format(candidate, &err) < 0) { if (nongit_ok) { + the_repository->is_bare_cfg = 1; warning("%s", err.buf); strbuf_release(&err); *nongit_ok = -1; @@ -766,8 +767,8 @@ static int check_repository_format_gently(const char *gitdir, struct repository_ if (!has_common) { if (candidate->is_bare != -1) { - is_bare_repository_cfg = candidate->is_bare; - if (is_bare_repository_cfg == 1) + the_repository->is_bare_cfg = candidate->is_bare; + if (the_repository->is_bare_cfg == 1) inside_work_tree = -1; } if (candidate->work_tree) { @@ -1017,6 +1018,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv, if (nongit_ok) { *nongit_ok = 1; free(gitfile); + the_repository->is_bare_cfg = 0; return NULL; } die(_("not a git repository: '%s'"), gitdirenv); @@ -1030,7 +1032,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv, /* #3, #7, #11, #15, #19, #23, #27, #31 (see t1510) */ if (work_tree_env) set_git_work_tree(work_tree_env); - else if (is_bare_repository_cfg > 0) { + else if (the_repository->is_bare_cfg > 0) { if (git_work_tree_cfg) { /* #22.2, #30 */ warning("core.bare and core.worktree do not make sense"); @@ -1069,6 +1071,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv, /* set_git_work_tree() must have been called by now */ worktree = repo_get_work_tree(the_repository); + the_repository->is_bare_cfg = 0; /* both repo_get_work_tree() and cwd are already normalized */ if (!strcmp(cwd->buf, worktree)) { /* cwd == worktree */ @@ -1116,7 +1119,7 @@ static const char *setup_discovered_git_dir(const char *gitdir, } /* #16.2, #17.2, #20.2, #21.2, #24, #25, #28, #29 (see t1510) */ - if (is_bare_repository_cfg > 0) { + if (the_repository->is_bare_cfg > 0) { set_git_dir(gitdir, (offset != cwd->len)); if (chdir(cwd->buf)) die_errno(_("cannot come back to cwd")); @@ -1125,6 +1128,9 @@ static const char *setup_discovered_git_dir(const char *gitdir, /* #0, #1, #5, #8, #9, #12, #13 */ set_git_work_tree("."); + + if (the_repository->is_bare_cfg < 0) + the_repository->is_bare_cfg = 0; if (strcmp(gitdir, DEFAULT_GIT_DIR_ENVIRONMENT)) set_git_dir(gitdir, 0); inside_git_dir = 0; @@ -1767,6 +1773,7 @@ const char *setup_git_directory_gently(int *nongit_ok) die(_("not a git repository (or any of the parent directories): %s"), DEFAULT_GIT_DIR_ENVIRONMENT); *nongit_ok = 1; + the_repository->is_bare_cfg = 1; break; case GIT_DIR_HIT_MOUNT_POINT: if (!nongit_ok) @@ -2323,7 +2330,7 @@ static int create_default_files(const char *template_path, if (init_shared_repository != -1) set_shared_repository(init_shared_repository); - is_bare_repository_cfg = !work_tree; + the_repository->is_bare_cfg = !work_tree; /* * We would have created the above under user's umask -- under @@ -2349,7 +2356,7 @@ static int create_default_files(const char *template_path, } git_config_set("core.filemode", filemode ? "true" : "false"); - if (is_bare_repository()) + if (repo_is_bare(the_repository)) git_config_set("core.bare", "true"); else { git_config_set("core.bare", "false"); diff --git a/submodule.c b/submodule.c index 74d5766f07c31149047afe190add31473182b3ef..059b9d32dcbdca800886630bfde7c0a193e73e93 100644 --- a/submodule.c +++ b/submodule.c @@ -535,7 +535,7 @@ static struct repository *open_submodule(const char *path) struct strbuf sb = STRBUF_INIT; struct repository *out = xmalloc(sizeof(*out)); - if (submodule_to_gitdir(&sb, path) || repo_init(out, sb.buf, NULL)) { + if (submodule_to_gitdir(&sb, path) || repo_init(out, sb.buf, NULL, -1)) { strbuf_release(&sb); free(out); return NULL; diff --git a/t/helper/test-partial-clone.c b/t/helper/test-partial-clone.c index a1af9710c31002e30314f28cf9c5c76217590cdf..66d9390dae1b1d0300b1c22f59c5206708f1fc82 100644 --- a/t/helper/test-partial-clone.c +++ b/t/helper/test-partial-clone.c @@ -19,7 +19,7 @@ static void object_info(const char *gitdir, const char *oid_hex) struct object_info oi = {.sizep = &size}; const char *p; - if (repo_init(&r, gitdir, NULL)) + if (repo_init(&r, gitdir, NULL, -1)) die("could not init repo"); if (parse_oid_hex_algop(oid_hex, &oid, &p, r.hash_algo)) die("could not parse oid"); diff --git a/t/helper/test-repository.c b/t/helper/test-repository.c index 63c37de33d22f195bb15298527e013e98c778776..90d58190c37c713a6db1e1922fa1df1ebf2b0dcf 100644 --- a/t/helper/test-repository.c +++ b/t/helper/test-repository.c @@ -21,7 +21,7 @@ static void test_parse_commit_in_graph(const char *gitdir, const char *worktree, repo_clear(the_repository); - if (repo_init(&r, gitdir, worktree)) + if (repo_init(&r, gitdir, worktree, -1)) die("Couldn't init repo"); repo_set_hash_algo(the_repository, hash_algo_by_ptr(r.hash_algo)); @@ -51,7 +51,7 @@ static void test_get_commit_tree_in_graph(const char *gitdir, repo_clear(the_repository); - if (repo_init(&r, gitdir, worktree)) + if (repo_init(&r, gitdir, worktree, -1)) die("Couldn't init repo"); repo_set_hash_algo(the_repository, hash_algo_by_ptr(r.hash_algo)); diff --git a/transport.c b/transport.c index 47fda6a7732f4b8cdcb6e750f36b896a988ffd0b..d72b8380846696b0c1b1d2aed8e47f328d6c9e94 100644 --- a/transport.c +++ b/transport.c @@ -1428,7 +1428,7 @@ int transport_push(struct repository *r, if ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND | TRANSPORT_RECURSE_SUBMODULES_ONLY)) && - !is_bare_repository()) { + !repo_is_bare(r)) { struct ref *ref = remote_refs; struct oid_array commits = OID_ARRAY_INIT; @@ -1455,7 +1455,7 @@ int transport_push(struct repository *r, if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) || ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND | TRANSPORT_RECURSE_SUBMODULES_ONLY)) && - !pretend)) && !is_bare_repository()) { + !pretend)) && !repo_is_bare(r)) { struct ref *ref = remote_refs; struct string_list needs_pushing = STRING_LIST_INIT_DUP; struct oid_array commits = OID_ARRAY_INIT; diff --git a/worktree.c b/worktree.c index 77ff484d3ec48c547ee4e3d958dfa28a52c1eaa7..c9d5b2289591f190ecdfb8662107473bbb4aaad5 100644 --- a/worktree.c +++ b/worktree.c @@ -85,8 +85,8 @@ static struct worktree *get_main_worktree(int skip_reading_head) * This means that worktree->is_bare may be set to 0 even if the main * worktree is configured to be bare. */ - worktree->is_bare = (is_bare_repository_cfg == 1) || - is_bare_repository(); + + worktree->is_bare = the_repository->is_bare_cfg == 1; worktree->is_current = is_current_worktree(worktree); if (!skip_reading_head) add_head_info(worktree);