Merge branch 'ps/environ-wo-the-repository'
Code clean-up. * ps/environ-wo-the-repository: (21 commits) environment: stop storing "core.notesRef" globally environment: stop storing "core.warnAmbiguousRefs" globally environment: stop storing "core.preferSymlinkRefs" globally environment: stop storing "core.logAllRefUpdates" globally refs: stop modifying global `log_all_ref_updates` variable branch: stop modifying `log_all_ref_updates` variable repo-settings: track defaults close to `struct repo_settings` repo-settings: split out declarations into a standalone header environment: guard state depending on a repository environment: reorder header to split out `the_repository`-free section environment: move `set_git_dir()` and related into setup layer environment: make `get_git_namespace()` self-contained environment: move object database functions into object layer config: make dependency on repo in `read_early_config()` explicit config: document `read_early_config()` and `read_very_early_config()` environment: make `get_git_work_tree()` accept a repository environment: make `get_graft_file()` accept a repository environment: make `get_index_file()` accept a repository environment: make `get_object_directory()` accept a repository environment: make `get_git_common_dir()` accept a repository ...
This commit is contained in:
6
alias.c
6
alias.c
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "alias.h"
|
#include "alias.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@@ -37,7 +39,7 @@ char *alias_lookup(const char *alias)
|
|||||||
{
|
{
|
||||||
struct config_alias_data data = { alias, NULL };
|
struct config_alias_data data = { alias, NULL };
|
||||||
|
|
||||||
read_early_config(config_alias_cb, &data);
|
read_early_config(the_repository, config_alias_cb, &data);
|
||||||
|
|
||||||
return data.v;
|
return data.v;
|
||||||
}
|
}
|
||||||
@@ -46,7 +48,7 @@ void list_aliases(struct string_list *list)
|
|||||||
{
|
{
|
||||||
struct config_alias_data data = { NULL, NULL, list };
|
struct config_alias_data data = { NULL, NULL, list };
|
||||||
|
|
||||||
read_early_config(config_alias_cb, &data);
|
read_early_config(the_repository, config_alias_cb, &data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void quote_cmdline(struct strbuf *buf, const char **argv)
|
void quote_cmdline(struct strbuf *buf, const char **argv)
|
||||||
|
|||||||
3
apply.c
3
apply.c
@@ -30,6 +30,7 @@
|
|||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "quote.h"
|
#include "quote.h"
|
||||||
#include "read-cache.h"
|
#include "read-cache.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "rerere.h"
|
#include "rerere.h"
|
||||||
#include "apply.h"
|
#include "apply.h"
|
||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
@@ -4113,7 +4114,7 @@ static int read_apply_cache(struct apply_state *state)
|
|||||||
{
|
{
|
||||||
if (state->index_file)
|
if (state->index_file)
|
||||||
return read_index_from(state->repo->index, state->index_file,
|
return read_index_from(state->repo->index, state->index_file,
|
||||||
get_git_dir());
|
repo_get_git_dir(the_repository));
|
||||||
else
|
else
|
||||||
return repo_read_index(state->repo);
|
return repo_read_index(state->repo);
|
||||||
}
|
}
|
||||||
|
|||||||
5
branch.c
5
branch.c
@@ -601,6 +601,7 @@ void create_branch(struct repository *r,
|
|||||||
int forcing = 0;
|
int forcing = 0;
|
||||||
struct ref_transaction *transaction;
|
struct ref_transaction *transaction;
|
||||||
struct strbuf err = STRBUF_INIT;
|
struct strbuf err = STRBUF_INIT;
|
||||||
|
int flags = 0;
|
||||||
char *msg;
|
char *msg;
|
||||||
|
|
||||||
if (track == BRANCH_TRACK_OVERRIDE)
|
if (track == BRANCH_TRACK_OVERRIDE)
|
||||||
@@ -619,7 +620,7 @@ void create_branch(struct repository *r,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (reflog)
|
if (reflog)
|
||||||
log_all_ref_updates = LOG_REFS_NORMAL;
|
flags |= REF_FORCE_CREATE_REFLOG;
|
||||||
|
|
||||||
if (forcing)
|
if (forcing)
|
||||||
msg = xstrfmt("branch: Reset to %s", start_name);
|
msg = xstrfmt("branch: Reset to %s", start_name);
|
||||||
@@ -630,7 +631,7 @@ void create_branch(struct repository *r,
|
|||||||
if (!transaction ||
|
if (!transaction ||
|
||||||
ref_transaction_update(transaction, ref.buf,
|
ref_transaction_update(transaction, ref.buf,
|
||||||
&oid, forcing ? NULL : null_oid(),
|
&oid, forcing ? NULL : null_oid(),
|
||||||
NULL, NULL, 0, msg, &err) ||
|
NULL, NULL, flags, msg, &err) ||
|
||||||
ref_transaction_commit(transaction, &err))
|
ref_transaction_commit(transaction, &err))
|
||||||
die("%s", err.buf);
|
die("%s", err.buf);
|
||||||
ref_transaction_free(transaction);
|
ref_transaction_free(transaction);
|
||||||
|
|||||||
13
builtin/am.c
13
builtin/am.c
@@ -1544,7 +1544,8 @@ static int run_apply(const struct am_state *state, const char *index_file)
|
|||||||
if (index_file) {
|
if (index_file) {
|
||||||
/* Reload index as apply_all_patches() will have modified it. */
|
/* Reload index as apply_all_patches() will have modified it. */
|
||||||
discard_index(the_repository->index);
|
discard_index(the_repository->index);
|
||||||
read_index_from(the_repository->index, index_file, get_git_dir());
|
read_index_from(the_repository->index, index_file,
|
||||||
|
repo_get_git_dir(the_repository));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1587,7 +1588,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa
|
|||||||
return error("could not build fake ancestor");
|
return error("could not build fake ancestor");
|
||||||
|
|
||||||
discard_index(the_repository->index);
|
discard_index(the_repository->index);
|
||||||
read_index_from(the_repository->index, index_path, get_git_dir());
|
read_index_from(the_repository->index, index_path, repo_get_git_dir(the_repository));
|
||||||
|
|
||||||
if (write_index_as_tree(&bases[0], the_repository->index, index_path, 0, NULL))
|
if (write_index_as_tree(&bases[0], the_repository->index, index_path, 0, NULL))
|
||||||
return error(_("Repository lacks necessary blobs to fall back on 3-way merge."));
|
return error(_("Repository lacks necessary blobs to fall back on 3-way merge."));
|
||||||
@@ -1667,7 +1668,9 @@ static void do_commit(const struct am_state *state)
|
|||||||
if (!state->no_verify && run_hooks(the_repository, "pre-applypatch"))
|
if (!state->no_verify && run_hooks(the_repository, "pre-applypatch"))
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
if (write_index_as_tree(&tree, the_repository->index, get_index_file(), 0, NULL))
|
if (write_index_as_tree(&tree, the_repository->index,
|
||||||
|
repo_get_index_file(the_repository),
|
||||||
|
0, NULL))
|
||||||
die(_("git write-tree failed to write a tree"));
|
die(_("git write-tree failed to write a tree"));
|
||||||
|
|
||||||
if (!repo_get_oid_commit(the_repository, "HEAD", &parent)) {
|
if (!repo_get_oid_commit(the_repository, "HEAD", &parent)) {
|
||||||
@@ -2077,7 +2080,9 @@ static int clean_index(const struct object_id *head, const struct object_id *rem
|
|||||||
if (fast_forward_to(head_tree, head_tree, 1))
|
if (fast_forward_to(head_tree, head_tree, 1))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (write_index_as_tree(&index, the_repository->index, get_index_file(), 0, NULL))
|
if (write_index_as_tree(&index, the_repository->index,
|
||||||
|
repo_get_index_file(the_repository),
|
||||||
|
0, NULL))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
index_tree = parse_tree_indirect(&index);
|
index_tree = parse_tree_indirect(&index);
|
||||||
|
|||||||
@@ -1081,7 +1081,7 @@ parse_done:
|
|||||||
path = add_prefix(prefix, argv[1]);
|
path = add_prefix(prefix, argv[1]);
|
||||||
argv[1] = argv[2];
|
argv[1] = argv[2];
|
||||||
} else { /* (2a) */
|
} else { /* (2a) */
|
||||||
if (argc == 2 && is_a_rev(argv[1]) && !get_git_work_tree())
|
if (argc == 2 && is_a_rev(argv[1]) && !repo_get_work_tree(the_repository))
|
||||||
die("missing <path> to blame");
|
die("missing <path> to blame");
|
||||||
path = add_prefix(prefix, argv[argc - 1]);
|
path = add_prefix(prefix, argv[argc - 1]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include "read-cache.h"
|
#include "read-cache.h"
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
#include "remote.h"
|
#include "remote.h"
|
||||||
|
#include "repo-settings.h"
|
||||||
#include "resolve-undo.h"
|
#include "resolve-undo.h"
|
||||||
#include "revision.h"
|
#include "revision.h"
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
@@ -950,11 +951,13 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
|
|||||||
const char *old_desc, *reflog_msg;
|
const char *old_desc, *reflog_msg;
|
||||||
if (opts->new_branch) {
|
if (opts->new_branch) {
|
||||||
if (opts->new_orphan_branch) {
|
if (opts->new_orphan_branch) {
|
||||||
|
enum log_refs_config log_all_ref_updates =
|
||||||
|
repo_settings_get_log_all_ref_updates(the_repository);
|
||||||
char *refname;
|
char *refname;
|
||||||
|
|
||||||
refname = mkpathdup("refs/heads/%s", opts->new_orphan_branch);
|
refname = mkpathdup("refs/heads/%s", opts->new_orphan_branch);
|
||||||
if (opts->new_branch_log &&
|
if (opts->new_branch_log &&
|
||||||
!should_autocreate_reflog(refname)) {
|
!should_autocreate_reflog(log_all_ref_updates, refname)) {
|
||||||
int ret;
|
int ret;
|
||||||
struct strbuf err = STRBUF_INIT;
|
struct strbuf err = STRBUF_INIT;
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "preload-index.h"
|
#include "preload-index.h"
|
||||||
#include "read-cache.h"
|
#include "read-cache.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
#include "rerere.h"
|
#include "rerere.h"
|
||||||
#include "unpack-trees.h"
|
#include "unpack-trees.h"
|
||||||
@@ -407,7 +408,7 @@ static const char *prepare_index(const char **argv, const char *prefix,
|
|||||||
|
|
||||||
discard_index(the_repository->index);
|
discard_index(the_repository->index);
|
||||||
read_index_from(the_repository->index, get_lock_file_path(&index_lock),
|
read_index_from(the_repository->index, get_lock_file_path(&index_lock),
|
||||||
get_git_dir());
|
repo_get_git_dir(the_repository));
|
||||||
if (cache_tree_update(the_repository->index, WRITE_TREE_SILENT) == 0) {
|
if (cache_tree_update(the_repository->index, WRITE_TREE_SILENT) == 0) {
|
||||||
if (reopen_lock_file(&index_lock) < 0)
|
if (reopen_lock_file(&index_lock) < 0)
|
||||||
die(_("unable to write index file"));
|
die(_("unable to write index file"));
|
||||||
@@ -472,7 +473,7 @@ static const char *prepare_index(const char **argv, const char *prefix,
|
|||||||
COMMIT_LOCK | SKIP_IF_UNCHANGED))
|
COMMIT_LOCK | SKIP_IF_UNCHANGED))
|
||||||
die(_("unable to write new index file"));
|
die(_("unable to write new index file"));
|
||||||
commit_style = COMMIT_AS_IS;
|
commit_style = COMMIT_AS_IS;
|
||||||
ret = get_index_file();
|
ret = repo_get_index_file(the_repository);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -534,7 +535,7 @@ static const char *prepare_index(const char **argv, const char *prefix,
|
|||||||
|
|
||||||
discard_index(the_repository->index);
|
discard_index(the_repository->index);
|
||||||
ret = get_lock_file_path(&false_lock);
|
ret = get_lock_file_path(&false_lock);
|
||||||
read_index_from(the_repository->index, ret, get_git_dir());
|
read_index_from(the_repository->index, ret, repo_get_git_dir(the_repository));
|
||||||
out:
|
out:
|
||||||
string_list_clear(&partial, 0);
|
string_list_clear(&partial, 0);
|
||||||
clear_pathspec(&pathspec);
|
clear_pathspec(&pathspec);
|
||||||
@@ -1072,7 +1073,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
|||||||
*/
|
*/
|
||||||
discard_index(the_repository->index);
|
discard_index(the_repository->index);
|
||||||
}
|
}
|
||||||
read_index_from(the_repository->index, index_file, get_git_dir());
|
read_index_from(the_repository->index, index_file, repo_get_git_dir(the_repository));
|
||||||
|
|
||||||
if (cache_tree_update(the_repository->index, 0)) {
|
if (cache_tree_update(the_repository->index, 0)) {
|
||||||
error(_("Error building trees"));
|
error(_("Error building trees"));
|
||||||
@@ -1873,8 +1874,8 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
repo_rerere(the_repository, 0);
|
repo_rerere(the_repository, 0);
|
||||||
run_auto_maintenance(quiet);
|
run_auto_maintenance(quiet);
|
||||||
run_commit_hook(use_editor, get_index_file(), NULL, "post-commit",
|
run_commit_hook(use_editor, repo_get_index_file(the_repository),
|
||||||
NULL);
|
NULL, "post-commit", NULL);
|
||||||
if (amend && !no_post_rewrite) {
|
if (amend && !no_post_rewrite) {
|
||||||
commit_post_rewrite(the_repository, current_head, &oid);
|
commit_post_rewrite(the_repository, current_head, &oid);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -807,8 +807,8 @@ static void location_options_init(struct config_location_options *opts,
|
|||||||
else
|
else
|
||||||
opts->options.respect_includes = opts->respect_includes_opt;
|
opts->options.respect_includes = opts->respect_includes_opt;
|
||||||
if (startup_info->have_repository) {
|
if (startup_info->have_repository) {
|
||||||
opts->options.commondir = get_git_common_dir();
|
opts->options.commondir = repo_get_common_dir(the_repository);
|
||||||
opts->options.git_dir = get_git_dir();
|
opts->options.git_dir = repo_get_git_dir(the_repository);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "hex.h"
|
#include "hex.h"
|
||||||
#include "parse-options.h"
|
#include "parse-options.h"
|
||||||
#include "read-cache-ll.h"
|
#include "read-cache-ll.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "sparse-index.h"
|
#include "sparse-index.h"
|
||||||
#include "strvec.h"
|
#include "strvec.h"
|
||||||
#include "strbuf.h"
|
#include "strbuf.h"
|
||||||
@@ -214,7 +215,7 @@ static void changed_files(struct hashmap *result, const char *index_path,
|
|||||||
struct child_process update_index = CHILD_PROCESS_INIT;
|
struct child_process update_index = CHILD_PROCESS_INIT;
|
||||||
struct child_process diff_files = CHILD_PROCESS_INIT;
|
struct child_process diff_files = CHILD_PROCESS_INIT;
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
const char *git_dir = absolute_path(get_git_dir());
|
const char *git_dir = absolute_path(repo_get_git_dir(the_repository));
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
strvec_pushl(&update_index.args,
|
strvec_pushl(&update_index.args,
|
||||||
@@ -377,7 +378,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
|
|||||||
struct hashmap wt_modified, tmp_modified;
|
struct hashmap wt_modified, tmp_modified;
|
||||||
int indices_loaded = 0;
|
int indices_loaded = 0;
|
||||||
|
|
||||||
workdir = get_git_work_tree();
|
workdir = repo_get_work_tree(the_repository);
|
||||||
|
|
||||||
/* Setup temp directories */
|
/* Setup temp directories */
|
||||||
tmp = getenv("TMPDIR");
|
tmp = getenv("TMPDIR");
|
||||||
@@ -737,8 +738,8 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
if (!no_index){
|
if (!no_index){
|
||||||
setup_work_tree();
|
setup_work_tree();
|
||||||
setenv(GIT_DIR_ENVIRONMENT, absolute_path(get_git_dir()), 1);
|
setenv(GIT_DIR_ENVIRONMENT, absolute_path(repo_get_git_dir(the_repository)), 1);
|
||||||
setenv(GIT_WORK_TREE_ENVIRONMENT, absolute_path(get_git_work_tree()), 1);
|
setenv(GIT_WORK_TREE_ENVIRONMENT, absolute_path(repo_get_work_tree(the_repository)), 1);
|
||||||
} else if (dir_diff)
|
} else if (dir_diff)
|
||||||
die(_("options '%s' and '%s' cannot be used together"), "--dir-diff", "--no-index");
|
die(_("options '%s' and '%s' cannot be used together"), "--dir-diff", "--no-index");
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
#include "abspath.h"
|
#include "abspath.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
#include "environment.h"
|
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "parse-options.h"
|
#include "parse-options.h"
|
||||||
#include "fsmonitor-ll.h"
|
#include "fsmonitor-ll.h"
|
||||||
@@ -1291,7 +1290,8 @@ static int fsmonitor_run_daemon(void)
|
|||||||
|
|
||||||
/* Prepare to (recursively) watch the <worktree-root> directory. */
|
/* Prepare to (recursively) watch the <worktree-root> directory. */
|
||||||
strbuf_init(&state.path_worktree_watch, 0);
|
strbuf_init(&state.path_worktree_watch, 0);
|
||||||
strbuf_addstr(&state.path_worktree_watch, absolute_path(get_git_work_tree()));
|
strbuf_addstr(&state.path_worktree_watch,
|
||||||
|
absolute_path(repo_get_work_tree(the_repository)));
|
||||||
state.nr_paths_watching = 1;
|
state.nr_paths_watching = 1;
|
||||||
|
|
||||||
strbuf_init(&state.alias.alias, 0);
|
strbuf_init(&state.alias.alias, 0);
|
||||||
@@ -1311,7 +1311,8 @@ static int fsmonitor_run_daemon(void)
|
|||||||
strbuf_addstr(&state.path_gitdir_watch, "/.git");
|
strbuf_addstr(&state.path_gitdir_watch, "/.git");
|
||||||
if (!is_directory(state.path_gitdir_watch.buf)) {
|
if (!is_directory(state.path_gitdir_watch.buf)) {
|
||||||
strbuf_reset(&state.path_gitdir_watch);
|
strbuf_reset(&state.path_gitdir_watch);
|
||||||
strbuf_addstr(&state.path_gitdir_watch, absolute_path(get_git_dir()));
|
strbuf_addstr(&state.path_gitdir_watch,
|
||||||
|
absolute_path(repo_get_git_dir(the_repository)));
|
||||||
state.nr_paths_watching = 2;
|
state.nr_paths_watching = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2132,7 +2132,7 @@ static int schtasks_schedule_task(const char *exec_path, enum schedule_priority
|
|||||||
get_schedule_cmd(&cmd, NULL);
|
get_schedule_cmd(&cmd, NULL);
|
||||||
|
|
||||||
strbuf_addf(&tfilename, "%s/schedule_%s_XXXXXX",
|
strbuf_addf(&tfilename, "%s/schedule_%s_XXXXXX",
|
||||||
get_git_common_dir(), frequency);
|
repo_get_common_dir(the_repository), frequency);
|
||||||
tfile = xmks_tempfile(tfilename.buf);
|
tfile = xmks_tempfile(tfilename.buf);
|
||||||
strbuf_release(&tfilename);
|
strbuf_release(&tfilename);
|
||||||
|
|
||||||
|
|||||||
@@ -231,9 +231,9 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
|
|||||||
set_git_work_tree(work_tree);
|
set_git_work_tree(work_tree);
|
||||||
else
|
else
|
||||||
set_git_work_tree(git_work_tree_cfg);
|
set_git_work_tree(git_work_tree_cfg);
|
||||||
if (access(get_git_work_tree(), X_OK))
|
if (access(repo_get_work_tree(the_repository), X_OK))
|
||||||
die_errno (_("Cannot access work tree '%s'"),
|
die_errno (_("Cannot access work tree '%s'"),
|
||||||
get_git_work_tree());
|
repo_get_work_tree(the_repository));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (real_git_dir)
|
if (real_git_dir)
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
#include "object-name.h"
|
#include "object-name.h"
|
||||||
#include "parse-options.h"
|
#include "parse-options.h"
|
||||||
#include "lockfile.h"
|
#include "lockfile.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "run-command.h"
|
#include "run-command.h"
|
||||||
#include "hook.h"
|
#include "hook.h"
|
||||||
#include "diff.h"
|
#include "diff.h"
|
||||||
@@ -695,7 +696,9 @@ static int read_tree_trivial(struct object_id *common, struct object_id *head,
|
|||||||
|
|
||||||
static void write_tree_trivial(struct object_id *oid)
|
static void write_tree_trivial(struct object_id *oid)
|
||||||
{
|
{
|
||||||
if (write_index_as_tree(oid, the_repository->index, get_index_file(), 0, NULL))
|
if (write_index_as_tree(oid, the_repository->index,
|
||||||
|
repo_get_index_file(the_repository),
|
||||||
|
0, NULL))
|
||||||
die(_("git write-tree failed to write a tree"));
|
die(_("git write-tree failed to write a tree"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -757,7 +760,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
|
|||||||
}
|
}
|
||||||
if (write_locked_index(the_repository->index, &lock,
|
if (write_locked_index(the_repository->index, &lock,
|
||||||
COMMIT_LOCK | SKIP_IF_UNCHANGED))
|
COMMIT_LOCK | SKIP_IF_UNCHANGED))
|
||||||
die(_("unable to write %s"), get_index_file());
|
die(_("unable to write %s"), repo_get_index_file(the_repository));
|
||||||
return clean ? 0 : 1;
|
return clean ? 0 : 1;
|
||||||
} else {
|
} else {
|
||||||
return try_merge_command(the_repository,
|
return try_merge_command(the_repository,
|
||||||
@@ -839,7 +842,7 @@ static void write_merge_heads(struct commit_list *);
|
|||||||
static void prepare_to_commit(struct commit_list *remoteheads)
|
static void prepare_to_commit(struct commit_list *remoteheads)
|
||||||
{
|
{
|
||||||
struct strbuf msg = STRBUF_INIT;
|
struct strbuf msg = STRBUF_INIT;
|
||||||
const char *index_file = get_index_file();
|
const char *index_file = repo_get_index_file(the_repository);
|
||||||
|
|
||||||
if (!no_verify) {
|
if (!no_verify) {
|
||||||
int invoked_hook;
|
int invoked_hook;
|
||||||
@@ -855,7 +858,8 @@ static void prepare_to_commit(struct commit_list *remoteheads)
|
|||||||
if (invoked_hook)
|
if (invoked_hook)
|
||||||
discard_index(the_repository->index);
|
discard_index(the_repository->index);
|
||||||
}
|
}
|
||||||
read_index_from(the_repository->index, index_file, get_git_dir());
|
read_index_from(the_repository->index, index_file,
|
||||||
|
repo_get_git_dir(the_repository));
|
||||||
strbuf_addbuf(&msg, &merge_msg);
|
strbuf_addbuf(&msg, &merge_msg);
|
||||||
if (squash)
|
if (squash)
|
||||||
BUG("the control must not reach here under --squash");
|
BUG("the control must not reach here under --squash");
|
||||||
@@ -878,8 +882,8 @@ static void prepare_to_commit(struct commit_list *remoteheads)
|
|||||||
append_signoff(&msg, ignored_log_message_bytes(msg.buf, msg.len), 0);
|
append_signoff(&msg, ignored_log_message_bytes(msg.buf, msg.len), 0);
|
||||||
write_merge_heads(remoteheads);
|
write_merge_heads(remoteheads);
|
||||||
write_file_buf(git_path_merge_msg(the_repository), msg.buf, msg.len);
|
write_file_buf(git_path_merge_msg(the_repository), msg.buf, msg.len);
|
||||||
if (run_commit_hook(0 < option_edit, get_index_file(), NULL,
|
if (run_commit_hook(0 < option_edit, repo_get_index_file(the_repository),
|
||||||
"prepare-commit-msg",
|
NULL, "prepare-commit-msg",
|
||||||
git_path_merge_msg(the_repository), "merge", NULL))
|
git_path_merge_msg(the_repository), "merge", NULL))
|
||||||
abort_commit(remoteheads, NULL);
|
abort_commit(remoteheads, NULL);
|
||||||
if (0 < option_edit) {
|
if (0 < option_edit) {
|
||||||
@@ -887,7 +891,7 @@ static void prepare_to_commit(struct commit_list *remoteheads)
|
|||||||
abort_commit(remoteheads, NULL);
|
abort_commit(remoteheads, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!no_verify && run_commit_hook(0 < option_edit, get_index_file(),
|
if (!no_verify && run_commit_hook(0 < option_edit, repo_get_index_file(the_repository),
|
||||||
NULL, "commit-msg",
|
NULL, "commit-msg",
|
||||||
git_path_merge_msg(the_repository), NULL))
|
git_path_merge_msg(the_repository), NULL))
|
||||||
abort_commit(remoteheads, NULL);
|
abort_commit(remoteheads, NULL);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -897,6 +897,7 @@ static int merge(int argc, const char **argv, const char *prefix)
|
|||||||
1, PARSE_OPT_NONEG),
|
1, PARSE_OPT_NONEG),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
char *notes_ref;
|
||||||
|
|
||||||
argc = parse_options(argc, argv, prefix, options,
|
argc = parse_options(argc, argv, prefix, options,
|
||||||
git_notes_merge_usage, 0);
|
git_notes_merge_usage, 0);
|
||||||
@@ -924,7 +925,8 @@ static int merge(int argc, const char **argv, const char *prefix)
|
|||||||
if (do_commit)
|
if (do_commit)
|
||||||
return merge_commit(&o);
|
return merge_commit(&o);
|
||||||
|
|
||||||
o.local_ref = default_notes_ref();
|
notes_ref = default_notes_ref(the_repository);
|
||||||
|
o.local_ref = notes_ref;
|
||||||
strbuf_addstr(&remote_ref, argv[0]);
|
strbuf_addstr(&remote_ref, argv[0]);
|
||||||
expand_loose_notes_ref(&remote_ref);
|
expand_loose_notes_ref(&remote_ref);
|
||||||
o.remote_ref = remote_ref.buf;
|
o.remote_ref = remote_ref.buf;
|
||||||
@@ -953,7 +955,7 @@ static int merge(int argc, const char **argv, const char *prefix)
|
|||||||
}
|
}
|
||||||
|
|
||||||
strbuf_addf(&msg, "notes: Merged notes from %s into %s",
|
strbuf_addf(&msg, "notes: Merged notes from %s into %s",
|
||||||
remote_ref.buf, default_notes_ref());
|
remote_ref.buf, notes_ref);
|
||||||
strbuf_add(&(o.commit_msg), msg.buf + 7, msg.len - 7); /* skip "notes: " */
|
strbuf_add(&(o.commit_msg), msg.buf + 7, msg.len - 7); /* skip "notes: " */
|
||||||
|
|
||||||
result = notes_merge(&o, t, &result_oid);
|
result = notes_merge(&o, t, &result_oid);
|
||||||
@@ -961,7 +963,7 @@ static int merge(int argc, const char **argv, const char *prefix)
|
|||||||
if (result >= 0) /* Merge resulted (trivially) in result_oid */
|
if (result >= 0) /* Merge resulted (trivially) in result_oid */
|
||||||
/* Update default notes ref with new commit */
|
/* Update default notes ref with new commit */
|
||||||
refs_update_ref(get_main_ref_store(the_repository), msg.buf,
|
refs_update_ref(get_main_ref_store(the_repository), msg.buf,
|
||||||
default_notes_ref(), &result_oid, NULL, 0,
|
notes_ref, &result_oid, NULL, 0,
|
||||||
UPDATE_REFS_DIE_ON_ERR);
|
UPDATE_REFS_DIE_ON_ERR);
|
||||||
else { /* Merge has unresolved conflicts */
|
else { /* Merge has unresolved conflicts */
|
||||||
struct worktree **worktrees;
|
struct worktree **worktrees;
|
||||||
@@ -973,14 +975,14 @@ static int merge(int argc, const char **argv, const char *prefix)
|
|||||||
/* Store ref-to-be-updated into .git/NOTES_MERGE_REF */
|
/* Store ref-to-be-updated into .git/NOTES_MERGE_REF */
|
||||||
worktrees = get_worktrees();
|
worktrees = get_worktrees();
|
||||||
wt = find_shared_symref(worktrees, "NOTES_MERGE_REF",
|
wt = find_shared_symref(worktrees, "NOTES_MERGE_REF",
|
||||||
default_notes_ref());
|
notes_ref);
|
||||||
if (wt)
|
if (wt)
|
||||||
die(_("a notes merge into %s is already in-progress at %s"),
|
die(_("a notes merge into %s is already in-progress at %s"),
|
||||||
default_notes_ref(), wt->path);
|
notes_ref, wt->path);
|
||||||
free_worktrees(worktrees);
|
free_worktrees(worktrees);
|
||||||
if (refs_update_symref(get_main_ref_store(the_repository), "NOTES_MERGE_REF", default_notes_ref(), NULL))
|
if (refs_update_symref(get_main_ref_store(the_repository), "NOTES_MERGE_REF", notes_ref, NULL))
|
||||||
die(_("failed to store link to current notes ref (%s)"),
|
die(_("failed to store link to current notes ref (%s)"),
|
||||||
default_notes_ref());
|
notes_ref);
|
||||||
fprintf(stderr, _("Automatic notes merge failed. Fix conflicts in %s "
|
fprintf(stderr, _("Automatic notes merge failed. Fix conflicts in %s "
|
||||||
"and commit the result with 'git notes merge --commit', "
|
"and commit the result with 'git notes merge --commit', "
|
||||||
"or abort the merge with 'git notes merge --abort'.\n"),
|
"or abort the merge with 'git notes merge --abort'.\n"),
|
||||||
@@ -988,6 +990,7 @@ static int merge(int argc, const char **argv, const char *prefix)
|
|||||||
}
|
}
|
||||||
|
|
||||||
free_notes(t);
|
free_notes(t);
|
||||||
|
free(notes_ref);
|
||||||
strbuf_release(&remote_ref);
|
strbuf_release(&remote_ref);
|
||||||
strbuf_release(&msg);
|
strbuf_release(&msg);
|
||||||
return result < 0; /* return non-zero on conflicts */
|
return result < 0; /* return non-zero on conflicts */
|
||||||
@@ -1084,6 +1087,7 @@ static int prune(int argc, const char **argv, const char *prefix)
|
|||||||
static int get_ref(int argc, const char **argv, const char *prefix)
|
static int get_ref(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
struct option options[] = { OPT_END() };
|
struct option options[] = { OPT_END() };
|
||||||
|
char *notes_ref;
|
||||||
argc = parse_options(argc, argv, prefix, options,
|
argc = parse_options(argc, argv, prefix, options,
|
||||||
git_notes_get_ref_usage, 0);
|
git_notes_get_ref_usage, 0);
|
||||||
|
|
||||||
@@ -1092,7 +1096,9 @@ static int get_ref(int argc, const char **argv, const char *prefix)
|
|||||||
usage_with_options(git_notes_get_ref_usage, options);
|
usage_with_options(git_notes_get_ref_usage, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
puts(default_notes_ref());
|
notes_ref = default_notes_ref(the_repository);
|
||||||
|
puts(notes_ref);
|
||||||
|
free(notes_ref);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3968,7 +3968,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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -1260,7 +1260,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);
|
||||||
@@ -1269,7 +1269,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);
|
||||||
|
|
||||||
@@ -1539,7 +1539,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:
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
#include "builtin.h"
|
#include "builtin.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "editor.h"
|
#include "editor.h"
|
||||||
#include "environment.h"
|
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "hex.h"
|
#include "hex.h"
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
@@ -514,7 +513,7 @@ static int create_graft(int argc, const char **argv, int force, int gentle)
|
|||||||
|
|
||||||
static int convert_graft_file(int force)
|
static int convert_graft_file(int force)
|
||||||
{
|
{
|
||||||
const char *graft_file = get_graft_file(the_repository);
|
const char *graft_file = repo_get_graft_file(the_repository);
|
||||||
FILE *fp = fopen_or_warn(graft_file, "r");
|
FILE *fp = fopen_or_warn(graft_file, "r");
|
||||||
struct strbuf buf = STRBUF_INIT, err = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT, err = STRBUF_INIT;
|
||||||
struct strvec args = STRVEC_INIT;
|
struct strvec args = STRVEC_INIT;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#include "object-name.h"
|
#include "object-name.h"
|
||||||
#include "parse-options.h"
|
#include "parse-options.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "unpack-trees.h"
|
#include "unpack-trees.h"
|
||||||
#include "cache-tree.h"
|
#include "cache-tree.h"
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
@@ -441,7 +442,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
else
|
else
|
||||||
trace2_cmd_mode(reset_type_names[reset_type]);
|
trace2_cmd_mode(reset_type_names[reset_type]);
|
||||||
|
|
||||||
if (reset_type != SOFT && (reset_type != MIXED || get_git_work_tree()))
|
if (reset_type != SOFT && (reset_type != MIXED || repo_get_work_tree(the_repository)))
|
||||||
setup_work_tree();
|
setup_work_tree();
|
||||||
|
|
||||||
if (reset_type == MIXED && is_bare_repository())
|
if (reset_type == MIXED && is_bare_repository())
|
||||||
@@ -474,7 +475,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
the_repository->index->updated_skipworktree = 1;
|
the_repository->index->updated_skipworktree = 1;
|
||||||
if (!no_refresh && get_git_work_tree()) {
|
if (!no_refresh && repo_get_work_tree(the_repository)) {
|
||||||
uint64_t t_begin, t_delta_in_ms;
|
uint64_t t_begin, t_delta_in_ms;
|
||||||
|
|
||||||
t_begin = getnanotime();
|
t_begin = getnanotime();
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "diff.h"
|
#include "diff.h"
|
||||||
#include "read-cache-ll.h"
|
#include "read-cache-ll.h"
|
||||||
|
#include "repo-settings.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "revision.h"
|
#include "revision.h"
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include "split-index.h"
|
#include "split-index.h"
|
||||||
@@ -898,7 +900,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
|||||||
}
|
}
|
||||||
if (opt_with_value(arg, "--abbrev-ref", &arg)) {
|
if (opt_with_value(arg, "--abbrev-ref", &arg)) {
|
||||||
abbrev_ref = 1;
|
abbrev_ref = 1;
|
||||||
abbrev_ref_strict = warn_ambiguous_refs;
|
abbrev_ref_strict =
|
||||||
|
repo_settings_get_warn_ambiguous_refs(the_repository);
|
||||||
if (arg) {
|
if (arg) {
|
||||||
if (!strcmp(arg, "strict"))
|
if (!strcmp(arg, "strict"))
|
||||||
abbrev_ref_strict = 1;
|
abbrev_ref_strict = 1;
|
||||||
@@ -966,7 +969,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(arg, "--show-toplevel")) {
|
if (!strcmp(arg, "--show-toplevel")) {
|
||||||
const char *work_tree = get_git_work_tree();
|
const char *work_tree = repo_get_work_tree(the_repository);
|
||||||
if (work_tree)
|
if (work_tree)
|
||||||
print_path(work_tree, prefix, format, DEFAULT_UNMODIFIED);
|
print_path(work_tree, prefix, format, DEFAULT_UNMODIFIED);
|
||||||
else
|
else
|
||||||
@@ -991,7 +994,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
|||||||
const char *pfx = prefix;
|
const char *pfx = prefix;
|
||||||
if (!is_inside_work_tree()) {
|
if (!is_inside_work_tree()) {
|
||||||
const char *work_tree =
|
const char *work_tree =
|
||||||
get_git_work_tree();
|
repo_get_work_tree(the_repository);
|
||||||
if (work_tree)
|
if (work_tree)
|
||||||
printf("%s\n", work_tree);
|
printf("%s\n", work_tree);
|
||||||
continue;
|
continue;
|
||||||
@@ -1042,7 +1045,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(arg, "--git-common-dir")) {
|
if (!strcmp(arg, "--git-common-dir")) {
|
||||||
print_path(get_git_common_dir(), prefix, format, DEFAULT_RELATIVE_IF_SHARED);
|
print_path(repo_get_common_dir(the_repository), prefix, format, DEFAULT_RELATIVE_IF_SHARED);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(arg, "--is-inside-git-dir")) {
|
if (!strcmp(arg, "--is-inside-git-dir")) {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
#include "preload-index.h"
|
#include "preload-index.h"
|
||||||
#include "read-cache.h"
|
#include "read-cache.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "rerere.h"
|
#include "rerere.h"
|
||||||
#include "revision.h"
|
#include "revision.h"
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
@@ -539,8 +540,8 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
|
|||||||
NULL, NULL, NULL))
|
NULL, NULL, NULL))
|
||||||
return error(_("could not write index"));
|
return error(_("could not write index"));
|
||||||
|
|
||||||
if (write_index_as_tree(&c_tree, the_repository->index, get_index_file(), 0,
|
if (write_index_as_tree(&c_tree, the_repository->index,
|
||||||
NULL))
|
repo_get_index_file(the_repository), 0, NULL))
|
||||||
return error(_("cannot apply a stash in the middle of a merge"));
|
return error(_("cannot apply a stash in the middle of a merge"));
|
||||||
|
|
||||||
if (index) {
|
if (index) {
|
||||||
@@ -565,7 +566,7 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
|
|||||||
discard_index(the_repository->index);
|
discard_index(the_repository->index);
|
||||||
repo_read_index(the_repository);
|
repo_read_index(the_repository);
|
||||||
if (write_index_as_tree(&index_tree, the_repository->index,
|
if (write_index_as_tree(&index_tree, the_repository->index,
|
||||||
get_index_file(), 0, NULL))
|
repo_get_index_file(the_repository), 0, NULL))
|
||||||
return error(_("could not save index tree"));
|
return error(_("could not save index tree"));
|
||||||
|
|
||||||
reset_head();
|
reset_head();
|
||||||
@@ -640,9 +641,9 @@ restore_untracked:
|
|||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.dir = prefix;
|
cp.dir = prefix;
|
||||||
strvec_pushf(&cp.env, GIT_WORK_TREE_ENVIRONMENT"=%s",
|
strvec_pushf(&cp.env, GIT_WORK_TREE_ENVIRONMENT"=%s",
|
||||||
absolute_path(get_git_work_tree()));
|
absolute_path(repo_get_work_tree(the_repository)));
|
||||||
strvec_pushf(&cp.env, GIT_DIR_ENVIRONMENT"=%s",
|
strvec_pushf(&cp.env, GIT_DIR_ENVIRONMENT"=%s",
|
||||||
absolute_path(get_git_dir()));
|
absolute_path(repo_get_git_dir(the_repository)));
|
||||||
strvec_push(&cp.args, "status");
|
strvec_push(&cp.args, "status");
|
||||||
run_command(&cp);
|
run_command(&cp);
|
||||||
}
|
}
|
||||||
@@ -1405,8 +1406,8 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
|
|||||||
|
|
||||||
strbuf_addf(&commit_tree_label, "index on %s\n", msg.buf);
|
strbuf_addf(&commit_tree_label, "index on %s\n", msg.buf);
|
||||||
commit_list_insert(head_commit, &parents);
|
commit_list_insert(head_commit, &parents);
|
||||||
if (write_index_as_tree(&info->i_tree, the_repository->index, get_index_file(), 0,
|
if (write_index_as_tree(&info->i_tree, the_repository->index,
|
||||||
NULL) ||
|
repo_get_index_file(the_repository), 0, NULL) ||
|
||||||
commit_tree(commit_tree_label.buf, commit_tree_label.len,
|
commit_tree(commit_tree_label.buf, commit_tree_label.len,
|
||||||
&info->i_tree, parents, &info->i_commit, NULL, NULL)) {
|
&info->i_tree, parents, &info->i_commit, NULL, NULL)) {
|
||||||
if (!quiet)
|
if (!quiet)
|
||||||
@@ -1904,7 +1905,7 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
|
|||||||
prepare_repo_settings(the_repository);
|
prepare_repo_settings(the_repository);
|
||||||
the_repository->settings.command_requires_full_index = 0;
|
the_repository->settings.command_requires_full_index = 0;
|
||||||
|
|
||||||
index_file = get_index_file();
|
index_file = repo_get_index_file(the_repository);
|
||||||
strbuf_addf(&stash_index_path, "%s.stash.%" PRIuMAX, index_file,
|
strbuf_addf(&stash_index_path, "%s.stash.%" PRIuMAX, index_file,
|
||||||
(uintmax_t)pid);
|
(uintmax_t)pid);
|
||||||
|
|
||||||
|
|||||||
@@ -1709,7 +1709,7 @@ static int clone_submodule(const struct module_clone_data *clone_data,
|
|||||||
exit(128);
|
exit(128);
|
||||||
|
|
||||||
if (!is_absolute_path(clone_data->path))
|
if (!is_absolute_path(clone_data->path))
|
||||||
clone_data_path = to_free = xstrfmt("%s/%s", get_git_work_tree(),
|
clone_data_path = to_free = xstrfmt("%s/%s", repo_get_work_tree(the_repository),
|
||||||
clone_data->path);
|
clone_data->path);
|
||||||
|
|
||||||
if (validate_submodule_git_dir(sm_gitdir, clone_data->name) < 0)
|
if (validate_submodule_git_dir(sm_gitdir, clone_data->name) < 0)
|
||||||
|
|||||||
@@ -1194,7 +1194,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
|
|||||||
"remove or change it, if you really want to "
|
"remove or change it, if you really want to "
|
||||||
"enable the untracked cache"));
|
"enable the untracked cache"));
|
||||||
add_untracked_cache(the_repository->index);
|
add_untracked_cache(the_repository->index);
|
||||||
report(_("Untracked cache enabled for '%s'"), get_git_work_tree());
|
report(_("Untracked cache enabled for '%s'"), repo_get_work_tree(the_repository));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
BUG("bad untracked_cache value: %d", untracked_cache);
|
BUG("bad untracked_cache value: %d", untracked_cache);
|
||||||
@@ -1239,7 +1239,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
|
|||||||
if (newfd < 0) {
|
if (newfd < 0) {
|
||||||
if (refresh_args.flags & REFRESH_QUIET)
|
if (refresh_args.flags & REFRESH_QUIET)
|
||||||
exit(128);
|
exit(128);
|
||||||
unable_to_lock_die(get_index_file(), lock_error);
|
unable_to_lock_die(repo_get_index_file(the_repository), lock_error);
|
||||||
}
|
}
|
||||||
if (write_locked_index(the_repository->index, &lock_file, COMMIT_LOCK))
|
if (write_locked_index(the_repository->index, &lock_file, COMMIT_LOCK))
|
||||||
die("Unable to write new index file");
|
die("Unable to write new index file");
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ static void prune_worktrees(void)
|
|||||||
}
|
}
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
|
||||||
strbuf_add_absolute_path(&main_path, get_git_common_dir());
|
strbuf_add_absolute_path(&main_path, repo_get_common_dir(the_repository));
|
||||||
/* massage main worktree absolute path to match 'gitdir' content */
|
/* massage main worktree absolute path to match 'gitdir' content */
|
||||||
strbuf_strip_suffix(&main_path, "/.");
|
strbuf_strip_suffix(&main_path, "/.");
|
||||||
string_list_append_nodup(&kept, strbuf_detach(&main_path, NULL));
|
string_list_append_nodup(&kept, strbuf_detach(&main_path, NULL));
|
||||||
@@ -492,7 +492,7 @@ static int add_worktree(const char *path, const char *refname,
|
|||||||
strbuf_addf(&sb, "%s/gitdir", sb_repo.buf);
|
strbuf_addf(&sb, "%s/gitdir", sb_repo.buf);
|
||||||
strbuf_realpath(&realpath, sb_git.buf, 1);
|
strbuf_realpath(&realpath, sb_git.buf, 1);
|
||||||
write_file(sb.buf, "%s", realpath.buf);
|
write_file(sb.buf, "%s", realpath.buf);
|
||||||
strbuf_realpath(&realpath, get_git_common_dir(), 1);
|
strbuf_realpath(&realpath, repo_get_common_dir(the_repository), 1);
|
||||||
write_file(sb_git.buf, "gitdir: %s/worktrees/%s",
|
write_file(sb_git.buf, "gitdir: %s/worktrees/%s",
|
||||||
realpath.buf, name);
|
realpath.buf, name);
|
||||||
strbuf_reset(&sb);
|
strbuf_reset(&sb);
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
#include "builtin.h"
|
#include "builtin.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "environment.h"
|
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "hex.h"
|
#include "hex.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
@@ -44,7 +43,8 @@ int cmd_write_tree(int argc, const char **argv, const char *cmd_prefix)
|
|||||||
prepare_repo_settings(the_repository);
|
prepare_repo_settings(the_repository);
|
||||||
the_repository->settings.command_requires_full_index = 0;
|
the_repository->settings.command_requires_full_index = 0;
|
||||||
|
|
||||||
ret = write_index_as_tree(&oid, the_repository->index, get_index_file(),
|
ret = write_index_as_tree(&oid, the_repository->index,
|
||||||
|
repo_get_index_file(the_repository),
|
||||||
flags, tree_prefix);
|
flags, tree_prefix);
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include "bundle-uri.h"
|
#include "bundle-uri.h"
|
||||||
#include "bundle.h"
|
#include "bundle.h"
|
||||||
#include "copy.h"
|
#include "copy.h"
|
||||||
#include "environment.h"
|
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
#include "run-command.h"
|
#include "run-command.h"
|
||||||
@@ -14,6 +13,7 @@
|
|||||||
#include "fetch-pack.h"
|
#include "fetch-pack.h"
|
||||||
#include "remote.h"
|
#include "remote.h"
|
||||||
#include "trace2.h"
|
#include "trace2.h"
|
||||||
|
#include "object-store-ll.h"
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
enum bundle_list_heuristic heuristic;
|
enum bundle_list_heuristic heuristic;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#define USE_THE_REPOSITORY_VARIABLE
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "environment.h"
|
|
||||||
#include "hex.h"
|
#include "hex.h"
|
||||||
#include "lockfile.h"
|
#include "lockfile.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
@@ -12,6 +11,7 @@
|
|||||||
#include "object-store-ll.h"
|
#include "object-store-ll.h"
|
||||||
#include "read-cache-ll.h"
|
#include "read-cache-ll.h"
|
||||||
#include "replace-object.h"
|
#include "replace-object.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "promisor-remote.h"
|
#include "promisor-remote.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
#include "trace2.h"
|
#include "trace2.h"
|
||||||
@@ -725,7 +725,8 @@ int write_index_as_tree(struct object_id *oid, struct index_state *index_state,
|
|||||||
|
|
||||||
hold_lock_file_for_update(&lock_file, index_path, LOCK_DIE_ON_ERROR);
|
hold_lock_file_for_update(&lock_file, index_path, LOCK_DIE_ON_ERROR);
|
||||||
|
|
||||||
entries = read_index_from(index_state, index_path, get_git_dir());
|
entries = read_index_from(index_state, index_path,
|
||||||
|
repo_get_git_dir(the_repository));
|
||||||
if (entries < 0) {
|
if (entries < 0) {
|
||||||
ret = WRITE_TREE_UNREADABLE_INDEX;
|
ret = WRITE_TREE_UNREADABLE_INDEX;
|
||||||
goto out;
|
goto out;
|
||||||
|
|||||||
4
commit.c
4
commit.c
@@ -292,14 +292,14 @@ static int read_graft_file(struct repository *r, const char *graft_file)
|
|||||||
|
|
||||||
void prepare_commit_graft(struct repository *r)
|
void prepare_commit_graft(struct repository *r)
|
||||||
{
|
{
|
||||||
char *graft_file;
|
const char *graft_file;
|
||||||
|
|
||||||
if (r->parsed_objects->commit_graft_prepared)
|
if (r->parsed_objects->commit_graft_prepared)
|
||||||
return;
|
return;
|
||||||
if (!startup_info->have_repository)
|
if (!startup_info->have_repository)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
graft_file = get_graft_file(r);
|
graft_file = repo_get_graft_file(r);
|
||||||
read_graft_file(r, graft_file);
|
read_graft_file(r, graft_file);
|
||||||
/* make sure shallows are read */
|
/* make sure shallows are read */
|
||||||
is_repository_shallow(r);
|
is_repository_shallow(r);
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "../git-compat-util.h"
|
#include "../git-compat-util.h"
|
||||||
#include "win32.h"
|
#include "win32.h"
|
||||||
#include <aclapi.h>
|
#include <aclapi.h>
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "../../git-compat-util.h"
|
#include "../../git-compat-util.h"
|
||||||
#include "../../environment.h"
|
#include "../../environment.h"
|
||||||
|
|
||||||
|
|||||||
42
config.c
42
config.c
@@ -6,6 +6,8 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "abspath.h"
|
#include "abspath.h"
|
||||||
#include "advice.h"
|
#include "advice.h"
|
||||||
@@ -1445,26 +1447,6 @@ static int git_default_core_config(const char *var, const char *value,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "core.prefersymlinkrefs")) {
|
|
||||||
prefer_symlink_refs = git_config_bool(var, value);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(var, "core.logallrefupdates")) {
|
|
||||||
if (value && !strcasecmp(value, "always"))
|
|
||||||
log_all_ref_updates = LOG_REFS_ALWAYS;
|
|
||||||
else if (git_config_bool(var, value))
|
|
||||||
log_all_ref_updates = LOG_REFS_NORMAL;
|
|
||||||
else
|
|
||||||
log_all_ref_updates = LOG_REFS_NONE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(var, "core.warnambiguousrefs")) {
|
|
||||||
warn_ambiguous_refs = git_config_bool(var, value);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(var, "core.abbrev")) {
|
if (!strcmp(var, "core.abbrev")) {
|
||||||
if (!value)
|
if (!value)
|
||||||
return config_error_nonbool(var);
|
return config_error_nonbool(var);
|
||||||
@@ -1573,14 +1555,6 @@ static int git_default_core_config(const char *var, const char *value,
|
|||||||
return git_config_string(&check_roundtrip_encoding, var, value);
|
return git_config_string(&check_roundtrip_encoding, var, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "core.notesref")) {
|
|
||||||
if (!value)
|
|
||||||
return config_error_nonbool(var);
|
|
||||||
free(notes_ref_name);
|
|
||||||
notes_ref_name = xstrdup(value);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(var, "core.editor")) {
|
if (!strcmp(var, "core.editor")) {
|
||||||
FREE_AND_NULL(editor_program);
|
FREE_AND_NULL(editor_program);
|
||||||
return git_config_string(&editor_program, var, value);
|
return git_config_string(&editor_program, var, value);
|
||||||
@@ -2202,7 +2176,7 @@ static void configset_iter(struct config_set *set, config_fn_t fn, void *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void read_early_config(config_fn_t cb, void *data)
|
void read_early_config(struct repository *repo, config_fn_t cb, void *data)
|
||||||
{
|
{
|
||||||
struct config_options opts = {0};
|
struct config_options opts = {0};
|
||||||
struct strbuf commondir = STRBUF_INIT;
|
struct strbuf commondir = STRBUF_INIT;
|
||||||
@@ -2210,9 +2184,9 @@ void read_early_config(config_fn_t cb, void *data)
|
|||||||
|
|
||||||
opts.respect_includes = 1;
|
opts.respect_includes = 1;
|
||||||
|
|
||||||
if (have_git_dir()) {
|
if (repo && repo->gitdir) {
|
||||||
opts.commondir = get_git_common_dir();
|
opts.commondir = repo_get_common_dir(repo);
|
||||||
opts.git_dir = get_git_dir();
|
opts.git_dir = repo_get_git_dir(repo);
|
||||||
/*
|
/*
|
||||||
* When setup_git_directory() was not yet asked to discover the
|
* When setup_git_directory() was not yet asked to discover the
|
||||||
* GIT_DIR, we ask discover_git_directory() to figure out whether there
|
* GIT_DIR, we ask discover_git_directory() to figure out whether there
|
||||||
@@ -2232,10 +2206,6 @@ void read_early_config(config_fn_t cb, void *data)
|
|||||||
strbuf_release(&gitdir);
|
strbuf_release(&gitdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Read config but only enumerate system and global settings.
|
|
||||||
* Omit any repo-local, worktree-local, or command-line settings.
|
|
||||||
*/
|
|
||||||
void read_very_early_config(config_fn_t cb, void *data)
|
void read_very_early_config(config_fn_t cb, void *data)
|
||||||
{
|
{
|
||||||
struct config_options opts = { 0 };
|
struct config_options opts = { 0 };
|
||||||
|
|||||||
13
config.h
13
config.h
@@ -192,7 +192,18 @@ int git_config_from_blob_oid(config_fn_t fn, const char *name,
|
|||||||
void git_config_push_parameter(const char *text);
|
void git_config_push_parameter(const char *text);
|
||||||
void git_config_push_env(const char *spec);
|
void git_config_push_env(const char *spec);
|
||||||
int git_config_from_parameters(config_fn_t fn, void *data);
|
int git_config_from_parameters(config_fn_t fn, void *data);
|
||||||
void read_early_config(config_fn_t cb, void *data);
|
|
||||||
|
/*
|
||||||
|
* Read config when the Git directory has not yet been set up. In case
|
||||||
|
* `the_repository` has not yet been set up, try to discover the Git
|
||||||
|
* directory to read the configuration from.
|
||||||
|
*/
|
||||||
|
void read_early_config(struct repository *repo, config_fn_t cb, void *data);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read config but only enumerate system and global settings.
|
||||||
|
* Omit any repo-local, worktree-local, or command-line settings.
|
||||||
|
*/
|
||||||
void read_very_early_config(config_fn_t cb, void *data);
|
void read_very_early_config(config_fn_t cb, void *data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
3
dir.c
3
dir.c
@@ -20,6 +20,7 @@
|
|||||||
#include "object-store-ll.h"
|
#include "object-store-ll.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "wildmatch.h"
|
#include "wildmatch.h"
|
||||||
#include "pathspec.h"
|
#include "pathspec.h"
|
||||||
#include "utf8.h"
|
#include "utf8.h"
|
||||||
@@ -2838,7 +2839,7 @@ static const char *get_ident_string(void)
|
|||||||
return sb.buf;
|
return sb.buf;
|
||||||
if (uname(&uts) < 0)
|
if (uname(&uts) < 0)
|
||||||
die_errno(_("failed to get kernel name and information"));
|
die_errno(_("failed to get kernel name and information"));
|
||||||
strbuf_addf(&sb, "Location %s, system %s", get_git_work_tree(),
|
strbuf_addf(&sb, "Location %s, system %s", repo_get_work_tree(the_repository),
|
||||||
uts.sysname);
|
uts.sysname);
|
||||||
return sb.buf;
|
return sb.buf;
|
||||||
}
|
}
|
||||||
|
|||||||
241
environment.c
241
environment.c
@@ -22,15 +22,9 @@
|
|||||||
#include "fmt-merge-msg.h"
|
#include "fmt-merge-msg.h"
|
||||||
#include "commit.h"
|
#include "commit.h"
|
||||||
#include "strvec.h"
|
#include "strvec.h"
|
||||||
#include "object-file.h"
|
|
||||||
#include "object-store-ll.h"
|
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "replace-object.h"
|
|
||||||
#include "tmp-objdir.h"
|
|
||||||
#include "chdir-notify.h"
|
#include "chdir-notify.h"
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include "shallow.h"
|
|
||||||
#include "trace.h"
|
|
||||||
#include "write-or-die.h"
|
#include "write-or-die.h"
|
||||||
|
|
||||||
int trust_executable_bit = 1;
|
int trust_executable_bit = 1;
|
||||||
@@ -40,9 +34,7 @@ int has_symlinks = 1;
|
|||||||
int minimum_abbrev = 4, default_abbrev = -1;
|
int minimum_abbrev = 4, default_abbrev = -1;
|
||||||
int ignore_case;
|
int ignore_case;
|
||||||
int assume_unchanged;
|
int assume_unchanged;
|
||||||
int prefer_symlink_refs;
|
|
||||||
int is_bare_repository_cfg = -1; /* unspecified */
|
int is_bare_repository_cfg = -1; /* unspecified */
|
||||||
int warn_ambiguous_refs = 1;
|
|
||||||
int warn_on_object_refname_ambiguity = 1;
|
int warn_on_object_refname_ambiguity = 1;
|
||||||
int repository_format_precious_objects;
|
int repository_format_precious_objects;
|
||||||
char *git_commit_encoding;
|
char *git_commit_encoding;
|
||||||
@@ -75,7 +67,6 @@ enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED;
|
|||||||
#define OBJECT_CREATION_MODE OBJECT_CREATION_USES_HARDLINKS
|
#define OBJECT_CREATION_MODE OBJECT_CREATION_USES_HARDLINKS
|
||||||
#endif
|
#endif
|
||||||
enum object_creation_mode object_creation_mode = OBJECT_CREATION_MODE;
|
enum object_creation_mode object_creation_mode = OBJECT_CREATION_MODE;
|
||||||
char *notes_ref_name;
|
|
||||||
int grafts_keep_true_parents;
|
int grafts_keep_true_parents;
|
||||||
int core_apply_sparse_checkout;
|
int core_apply_sparse_checkout;
|
||||||
int core_sparse_checkout_cone;
|
int core_sparse_checkout_cone;
|
||||||
@@ -83,7 +74,6 @@ int sparse_expect_files_outside_of_patterns;
|
|||||||
int merge_log_config = -1;
|
int merge_log_config = -1;
|
||||||
int precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */
|
int precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */
|
||||||
unsigned long pack_size_limit_cfg;
|
unsigned long pack_size_limit_cfg;
|
||||||
enum log_refs_config log_all_ref_updates = LOG_REFS_UNSET;
|
|
||||||
int max_allowed_tree_depth =
|
int max_allowed_tree_depth =
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
/*
|
/*
|
||||||
@@ -123,8 +113,6 @@ int core_preload_index = 1;
|
|||||||
/* This is set by setup_git_dir_gently() and/or git_default_config() */
|
/* This is set by setup_git_dir_gently() and/or git_default_config() */
|
||||||
char *git_work_tree_cfg;
|
char *git_work_tree_cfg;
|
||||||
|
|
||||||
static char *git_namespace;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Repository-local GIT_* environment variables; see environment.h for details.
|
* Repository-local GIT_* environment variables; see environment.h for details.
|
||||||
*/
|
*/
|
||||||
@@ -147,27 +135,6 @@ const char * const local_repo_env[] = {
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static char *expand_namespace(const char *raw_namespace)
|
|
||||||
{
|
|
||||||
struct strbuf buf = STRBUF_INIT;
|
|
||||||
struct strbuf **components, **c;
|
|
||||||
|
|
||||||
if (!raw_namespace || !*raw_namespace)
|
|
||||||
return xstrdup("");
|
|
||||||
|
|
||||||
strbuf_addstr(&buf, raw_namespace);
|
|
||||||
components = strbuf_split(&buf, '/');
|
|
||||||
strbuf_reset(&buf);
|
|
||||||
for (c = components; *c; c++)
|
|
||||||
if (strcmp((*c)->buf, "/") != 0)
|
|
||||||
strbuf_addf(&buf, "refs/namespaces/%s", (*c)->buf);
|
|
||||||
strbuf_list_free(components);
|
|
||||||
if (check_refname_format(buf.buf, 0))
|
|
||||||
die(_("bad git namespace path \"%s\""), raw_namespace);
|
|
||||||
strbuf_addch(&buf, '/');
|
|
||||||
return strbuf_detach(&buf, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *getenv_safe(struct strvec *argv, const char *name)
|
const char *getenv_safe(struct strvec *argv, const char *name)
|
||||||
{
|
{
|
||||||
const char *value = getenv(name);
|
const char *value = getenv(name);
|
||||||
@@ -179,47 +146,10 @@ const char *getenv_safe(struct strvec *argv, const char *name)
|
|||||||
return argv->v[argv->nr - 1];
|
return argv->v[argv->nr - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_git_env(const char *git_dir)
|
|
||||||
{
|
|
||||||
char *git_replace_ref_base;
|
|
||||||
const char *shallow_file;
|
|
||||||
const char *replace_ref_base;
|
|
||||||
struct set_gitdir_args args = { NULL };
|
|
||||||
struct strvec to_free = STRVEC_INIT;
|
|
||||||
|
|
||||||
args.commondir = getenv_safe(&to_free, GIT_COMMON_DIR_ENVIRONMENT);
|
|
||||||
args.object_dir = getenv_safe(&to_free, DB_ENVIRONMENT);
|
|
||||||
args.graft_file = getenv_safe(&to_free, GRAFT_ENVIRONMENT);
|
|
||||||
args.index_file = getenv_safe(&to_free, INDEX_ENVIRONMENT);
|
|
||||||
args.alternate_db = getenv_safe(&to_free, ALTERNATE_DB_ENVIRONMENT);
|
|
||||||
if (getenv(GIT_QUARANTINE_ENVIRONMENT)) {
|
|
||||||
args.disable_ref_updates = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
repo_set_gitdir(the_repository, git_dir, &args);
|
|
||||||
strvec_clear(&to_free);
|
|
||||||
|
|
||||||
if (getenv(NO_REPLACE_OBJECTS_ENVIRONMENT))
|
|
||||||
disable_replace_refs();
|
|
||||||
replace_ref_base = getenv(GIT_REPLACE_REF_BASE_ENVIRONMENT);
|
|
||||||
git_replace_ref_base = xstrdup(replace_ref_base ? replace_ref_base
|
|
||||||
: "refs/replace/");
|
|
||||||
update_ref_namespace(NAMESPACE_REPLACE, git_replace_ref_base);
|
|
||||||
|
|
||||||
free(git_namespace);
|
|
||||||
git_namespace = expand_namespace(getenv(GIT_NAMESPACE_ENVIRONMENT));
|
|
||||||
shallow_file = getenv(GIT_SHALLOW_FILE_ENVIRONMENT);
|
|
||||||
if (shallow_file)
|
|
||||||
set_alternate_shallow_file(the_repository, shallow_file, 0);
|
|
||||||
|
|
||||||
if (git_env_bool(NO_LAZY_FETCH_ENVIRONMENT, 0))
|
|
||||||
fetch_if_missing = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int is_bare_repository(void)
|
int is_bare_repository(void)
|
||||||
{
|
{
|
||||||
/* if core.bare is not 'false', let's see if there is a work tree */
|
/* if core.bare is not 'false', let's see if there is a work tree */
|
||||||
return is_bare_repository_cfg && !get_git_work_tree();
|
return is_bare_repository_cfg && !repo_get_work_tree(the_repository);
|
||||||
}
|
}
|
||||||
|
|
||||||
int have_git_dir(void)
|
int have_git_dir(void)
|
||||||
@@ -228,25 +158,37 @@ int have_git_dir(void)
|
|||||||
|| the_repository->gitdir;
|
|| the_repository->gitdir;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *get_git_dir(void)
|
|
||||||
{
|
|
||||||
if (!the_repository->gitdir)
|
|
||||||
BUG("git environment hasn't been setup");
|
|
||||||
return the_repository->gitdir;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *get_git_common_dir(void)
|
|
||||||
{
|
|
||||||
if (!the_repository->commondir)
|
|
||||||
BUG("git environment hasn't been setup");
|
|
||||||
return the_repository->commondir;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *get_git_namespace(void)
|
const char *get_git_namespace(void)
|
||||||
{
|
{
|
||||||
if (!git_namespace)
|
static const char *namespace;
|
||||||
BUG("git environment hasn't been setup");
|
|
||||||
return git_namespace;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
|
struct strbuf **components, **c;
|
||||||
|
const char *raw_namespace;
|
||||||
|
|
||||||
|
if (namespace)
|
||||||
|
return namespace;
|
||||||
|
|
||||||
|
raw_namespace = getenv(GIT_NAMESPACE_ENVIRONMENT);
|
||||||
|
if (!raw_namespace || !*raw_namespace) {
|
||||||
|
namespace = "";
|
||||||
|
return namespace;
|
||||||
|
}
|
||||||
|
|
||||||
|
strbuf_addstr(&buf, raw_namespace);
|
||||||
|
components = strbuf_split(&buf, '/');
|
||||||
|
strbuf_reset(&buf);
|
||||||
|
for (c = components; *c; c++)
|
||||||
|
if (strcmp((*c)->buf, "/") != 0)
|
||||||
|
strbuf_addf(&buf, "refs/namespaces/%s", (*c)->buf);
|
||||||
|
strbuf_list_free(components);
|
||||||
|
if (check_refname_format(buf.buf, 0))
|
||||||
|
die(_("bad git namespace path \"%s\""), raw_namespace);
|
||||||
|
strbuf_addch(&buf, '/');
|
||||||
|
|
||||||
|
namespace = strbuf_detach(&buf, NULL);
|
||||||
|
|
||||||
|
return namespace;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *strip_namespace(const char *namespaced_ref)
|
const char *strip_namespace(const char *namespaced_ref)
|
||||||
@@ -257,129 +199,6 @@ const char *strip_namespace(const char *namespaced_ref)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int git_work_tree_initialized;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Note. This works only before you used a work tree. This was added
|
|
||||||
* primarily to support git-clone to work in a new repository it just
|
|
||||||
* created, and is not meant to flip between different work trees.
|
|
||||||
*/
|
|
||||||
void set_git_work_tree(const char *new_work_tree)
|
|
||||||
{
|
|
||||||
if (git_work_tree_initialized) {
|
|
||||||
struct strbuf realpath = STRBUF_INIT;
|
|
||||||
|
|
||||||
strbuf_realpath(&realpath, new_work_tree, 1);
|
|
||||||
new_work_tree = realpath.buf;
|
|
||||||
if (strcmp(new_work_tree, the_repository->worktree))
|
|
||||||
die("internal error: work tree has already been set\n"
|
|
||||||
"Current worktree: %s\nNew worktree: %s",
|
|
||||||
the_repository->worktree, new_work_tree);
|
|
||||||
strbuf_release(&realpath);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
git_work_tree_initialized = 1;
|
|
||||||
repo_set_worktree(the_repository, new_work_tree);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *get_git_work_tree(void)
|
|
||||||
{
|
|
||||||
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 fd;
|
|
||||||
/*
|
|
||||||
* we let the umask do its job, don't try to be more
|
|
||||||
* restrictive except to remove write permission.
|
|
||||||
*/
|
|
||||||
int mode = 0444;
|
|
||||||
git_path_buf(temp_filename, "objects/%s", pattern);
|
|
||||||
fd = git_mkstemp_mode(temp_filename->buf, mode);
|
|
||||||
if (0 <= fd)
|
|
||||||
return fd;
|
|
||||||
|
|
||||||
/* slow path */
|
|
||||||
/* some mkstemp implementations erase temp_filename on failure */
|
|
||||||
git_path_buf(temp_filename, "objects/%s", pattern);
|
|
||||||
safe_create_leading_directories(temp_filename->buf);
|
|
||||||
return xmkstemp_mode(temp_filename->buf, mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
int odb_pack_keep(const char *name)
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
fd = open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
|
|
||||||
if (0 <= fd)
|
|
||||||
return fd;
|
|
||||||
|
|
||||||
/* slow path */
|
|
||||||
safe_create_leading_directories_const(name);
|
|
||||||
return open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
|
|
||||||
}
|
|
||||||
|
|
||||||
char *get_index_file(void)
|
|
||||||
{
|
|
||||||
if (!the_repository->index_file)
|
|
||||||
BUG("git environment hasn't been setup");
|
|
||||||
return the_repository->index_file;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *get_graft_file(struct repository *r)
|
|
||||||
{
|
|
||||||
if (!r->graft_file)
|
|
||||||
BUG("git environment hasn't been setup");
|
|
||||||
return r->graft_file;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void set_git_dir_1(const char *path)
|
|
||||||
{
|
|
||||||
xsetenv(GIT_DIR_ENVIRONMENT, path, 1);
|
|
||||||
setup_git_env(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void update_relative_gitdir(const char *name UNUSED,
|
|
||||||
const char *old_cwd,
|
|
||||||
const char *new_cwd,
|
|
||||||
void *data UNUSED)
|
|
||||||
{
|
|
||||||
char *path = reparent_relative_path(old_cwd, new_cwd, get_git_dir());
|
|
||||||
struct tmp_objdir *tmp_objdir = tmp_objdir_unapply_primary_odb();
|
|
||||||
|
|
||||||
trace_printf_key(&trace_setup_key,
|
|
||||||
"setup: move $GIT_DIR to '%s'",
|
|
||||||
path);
|
|
||||||
set_git_dir_1(path);
|
|
||||||
if (tmp_objdir)
|
|
||||||
tmp_objdir_reapply_primary_odb(tmp_objdir, old_cwd, new_cwd);
|
|
||||||
free(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_git_dir(const char *path, int make_realpath)
|
|
||||||
{
|
|
||||||
struct strbuf realpath = STRBUF_INIT;
|
|
||||||
|
|
||||||
if (make_realpath) {
|
|
||||||
strbuf_realpath(&realpath, path, 1);
|
|
||||||
path = realpath.buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_git_dir_1(path);
|
|
||||||
if (!is_absolute_path(path))
|
|
||||||
chdir_notify_register(NULL, update_relative_gitdir, NULL);
|
|
||||||
|
|
||||||
strbuf_release(&realpath);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *get_log_output_encoding(void)
|
const char *get_log_output_encoding(void)
|
||||||
{
|
{
|
||||||
return git_log_output_encoding ? git_log_output_encoding
|
return git_log_output_encoding ? git_log_output_encoding
|
||||||
|
|||||||
142
environment.h
142
environment.h
@@ -1,22 +1,7 @@
|
|||||||
#ifndef ENVIRONMENT_H
|
#ifndef ENVIRONMENT_H
|
||||||
#define ENVIRONMENT_H
|
#define ENVIRONMENT_H
|
||||||
|
|
||||||
struct repository;
|
#include "repo-settings.h"
|
||||||
struct strvec;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The character that begins a commented line in user-editable file
|
|
||||||
* that is subject to stripspace.
|
|
||||||
*/
|
|
||||||
extern const char *comment_line_str;
|
|
||||||
extern char *comment_line_str_to_free;
|
|
||||||
extern int auto_comment_line_char;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Wrapper of getenv() that returns a strdup value. This value is kept
|
|
||||||
* in argv to be freed later.
|
|
||||||
*/
|
|
||||||
const char *getenv_safe(struct strvec *argv, const char *name);
|
|
||||||
|
|
||||||
/* Double-check local_repo_env below if you add to this list. */
|
/* Double-check local_repo_env below if you add to this list. */
|
||||||
#define GIT_DIR_ENVIRONMENT "GIT_DIR"
|
#define GIT_DIR_ENVIRONMENT "GIT_DIR"
|
||||||
@@ -87,6 +72,8 @@ const char *getenv_safe(struct strvec *argv, const char *name);
|
|||||||
*/
|
*/
|
||||||
#define GIT_IMPLICIT_WORK_TREE_ENVIRONMENT "GIT_IMPLICIT_WORK_TREE"
|
#define GIT_IMPLICIT_WORK_TREE_ENVIRONMENT "GIT_IMPLICIT_WORK_TREE"
|
||||||
|
|
||||||
|
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Repository-local GIT_* environment variables; these will be cleared
|
* Repository-local GIT_* environment variables; these will be cleared
|
||||||
* when git spawns a sub-process that runs inside another repository.
|
* when git spawns a sub-process that runs inside another repository.
|
||||||
@@ -95,6 +82,50 @@ const char *getenv_safe(struct strvec *argv, const char *name);
|
|||||||
*/
|
*/
|
||||||
extern const char * const local_repo_env[];
|
extern const char * const local_repo_env[];
|
||||||
|
|
||||||
|
struct strvec;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wrapper of getenv() that returns a strdup value. This value is kept
|
||||||
|
* in argv to be freed later.
|
||||||
|
*/
|
||||||
|
const char *getenv_safe(struct strvec *argv, const char *name);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Should we print an ellipsis after an abbreviated SHA-1 value
|
||||||
|
* when doing diff-raw output or indicating a detached HEAD?
|
||||||
|
*/
|
||||||
|
int print_sha1_ellipsis(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the boolean value of $GIT_OPTIONAL_LOCKS (or the default value).
|
||||||
|
*/
|
||||||
|
int use_optional_locks(void);
|
||||||
|
|
||||||
|
const char *get_git_namespace(void);
|
||||||
|
const char *strip_namespace(const char *namespaced_ref);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO: All the below state either explicitly or implicitly relies on
|
||||||
|
* `the_repository`. We should eventually get rid of these and make the
|
||||||
|
* dependency on a repository explicit:
|
||||||
|
*
|
||||||
|
* - `setup_git_env()` ideally shouldn't exist as it modifies global state,
|
||||||
|
* namely the environment. The current process shouldn't ever access that
|
||||||
|
* state via envvars though, but should instead consult a `struct
|
||||||
|
* repository`. When spawning new processes, we would ideally also pass a
|
||||||
|
* `struct repository` and then set up the environment variables for the
|
||||||
|
* child process, only.
|
||||||
|
*
|
||||||
|
* - `have_git_dir()` should not have to exist at all. Instead, we should
|
||||||
|
* decide on whether or not we have a `struct repository`.
|
||||||
|
*
|
||||||
|
* - All the global config variables should become tied to a repository. Like
|
||||||
|
* this, we'd correctly honor repository-local configuration and be able to
|
||||||
|
* distinguish configuration values from different repositories.
|
||||||
|
*
|
||||||
|
* Please do not add new global config variables here.
|
||||||
|
*/
|
||||||
|
# ifdef USE_THE_REPOSITORY_VARIABLE
|
||||||
void setup_git_env(const char *git_dir);
|
void setup_git_env(const char *git_dir);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -103,21 +134,19 @@ void setup_git_env(const char *git_dir);
|
|||||||
*/
|
*/
|
||||||
int have_git_dir(void);
|
int have_git_dir(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Accessors for the core.sharedrepository config which lazy-load the value
|
||||||
|
* from the config (if not already set). The "reset" function can be
|
||||||
|
* used to unset "set" or cached value, meaning that the value will be loaded
|
||||||
|
* fresh from the config file on the next call to get_shared_repository().
|
||||||
|
*/
|
||||||
|
void set_shared_repository(int value);
|
||||||
|
int get_shared_repository(void);
|
||||||
|
void reset_shared_repository(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_git_dir(void);
|
|
||||||
const char *get_git_common_dir(void);
|
|
||||||
const char *get_object_directory(void);
|
|
||||||
char *get_index_file(void);
|
|
||||||
char *get_graft_file(struct repository *r);
|
|
||||||
void set_git_dir(const char *path, int make_realpath);
|
|
||||||
const char *get_git_namespace(void);
|
|
||||||
const char *strip_namespace(const char *namespaced_ref);
|
|
||||||
const char *get_git_work_tree(void);
|
|
||||||
void set_git_work_tree(const char *tree);
|
|
||||||
|
|
||||||
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
|
|
||||||
|
|
||||||
/* Environment bits from configuration mechanism */
|
/* Environment bits from configuration mechanism */
|
||||||
extern int trust_executable_bit;
|
extern int trust_executable_bit;
|
||||||
@@ -127,8 +156,6 @@ extern int has_symlinks;
|
|||||||
extern int minimum_abbrev, default_abbrev;
|
extern int minimum_abbrev, default_abbrev;
|
||||||
extern int ignore_case;
|
extern int ignore_case;
|
||||||
extern int assume_unchanged;
|
extern int assume_unchanged;
|
||||||
extern int prefer_symlink_refs;
|
|
||||||
extern int warn_ambiguous_refs;
|
|
||||||
extern int warn_on_object_refname_ambiguity;
|
extern int warn_on_object_refname_ambiguity;
|
||||||
extern char *apply_default_whitespace;
|
extern char *apply_default_whitespace;
|
||||||
extern char *apply_default_ignorewhitespace;
|
extern char *apply_default_ignorewhitespace;
|
||||||
@@ -143,16 +170,6 @@ extern unsigned long big_file_threshold;
|
|||||||
extern unsigned long pack_size_limit_cfg;
|
extern unsigned long pack_size_limit_cfg;
|
||||||
extern int max_allowed_tree_depth;
|
extern int max_allowed_tree_depth;
|
||||||
|
|
||||||
/*
|
|
||||||
* Accessors for the core.sharedrepository config which lazy-load the value
|
|
||||||
* from the config (if not already set). The "reset" function can be
|
|
||||||
* used to unset "set" or cached value, meaning that the value will be loaded
|
|
||||||
* fresh from the config file on the next call to get_shared_repository().
|
|
||||||
*/
|
|
||||||
void set_shared_repository(int value);
|
|
||||||
int get_shared_repository(void);
|
|
||||||
void reset_shared_repository(void);
|
|
||||||
|
|
||||||
extern int core_preload_index;
|
extern int core_preload_index;
|
||||||
extern int precomposed_unicode;
|
extern int precomposed_unicode;
|
||||||
extern int protect_hfs;
|
extern int protect_hfs;
|
||||||
@@ -162,25 +179,13 @@ extern int core_apply_sparse_checkout;
|
|||||||
extern int core_sparse_checkout_cone;
|
extern int core_sparse_checkout_cone;
|
||||||
extern int sparse_expect_files_outside_of_patterns;
|
extern int sparse_expect_files_outside_of_patterns;
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the boolean value of $GIT_OPTIONAL_LOCKS (or the default value).
|
|
||||||
*/
|
|
||||||
int use_optional_locks(void);
|
|
||||||
|
|
||||||
enum log_refs_config {
|
|
||||||
LOG_REFS_UNSET = -1,
|
|
||||||
LOG_REFS_NONE = 0,
|
|
||||||
LOG_REFS_NORMAL,
|
|
||||||
LOG_REFS_ALWAYS
|
|
||||||
};
|
|
||||||
extern enum log_refs_config log_all_ref_updates;
|
|
||||||
|
|
||||||
enum rebase_setup_type {
|
enum rebase_setup_type {
|
||||||
AUTOREBASE_NEVER = 0,
|
AUTOREBASE_NEVER = 0,
|
||||||
AUTOREBASE_LOCAL,
|
AUTOREBASE_LOCAL,
|
||||||
AUTOREBASE_REMOTE,
|
AUTOREBASE_REMOTE,
|
||||||
AUTOREBASE_ALWAYS
|
AUTOREBASE_ALWAYS
|
||||||
};
|
};
|
||||||
|
extern enum rebase_setup_type autorebase;
|
||||||
|
|
||||||
enum push_default_type {
|
enum push_default_type {
|
||||||
PUSH_DEFAULT_NOTHING = 0,
|
PUSH_DEFAULT_NOTHING = 0,
|
||||||
@@ -190,38 +195,18 @@ enum push_default_type {
|
|||||||
PUSH_DEFAULT_CURRENT,
|
PUSH_DEFAULT_CURRENT,
|
||||||
PUSH_DEFAULT_UNSPECIFIED
|
PUSH_DEFAULT_UNSPECIFIED
|
||||||
};
|
};
|
||||||
|
|
||||||
extern enum rebase_setup_type autorebase;
|
|
||||||
extern enum push_default_type push_default;
|
extern enum push_default_type push_default;
|
||||||
|
|
||||||
enum object_creation_mode {
|
enum object_creation_mode {
|
||||||
OBJECT_CREATION_USES_HARDLINKS = 0,
|
OBJECT_CREATION_USES_HARDLINKS = 0,
|
||||||
OBJECT_CREATION_USES_RENAMES = 1
|
OBJECT_CREATION_USES_RENAMES = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
extern enum object_creation_mode object_creation_mode;
|
extern enum object_creation_mode object_creation_mode;
|
||||||
|
|
||||||
extern char *notes_ref_name;
|
|
||||||
|
|
||||||
extern int grafts_keep_true_parents;
|
extern int grafts_keep_true_parents;
|
||||||
|
|
||||||
extern int repository_format_precious_objects;
|
extern int repository_format_precious_objects;
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a temporary file rooted in the object database directory, or
|
|
||||||
* die on failure. The filename is taken from "pattern", which should have the
|
|
||||||
* usual "XXXXXX" trailer, and the resulting filename is written into the
|
|
||||||
* "template" buffer. Returns the open descriptor.
|
|
||||||
*/
|
|
||||||
int odb_mkstemp(struct strbuf *temp_filename, const char *pattern);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a pack .keep file named "name" (which should generally be the output
|
|
||||||
* of odb_pack_name). Returns a file descriptor opened for writing, or -1 on
|
|
||||||
* error.
|
|
||||||
*/
|
|
||||||
int odb_pack_keep(const char *name);
|
|
||||||
|
|
||||||
const char *get_log_output_encoding(void);
|
const char *get_log_output_encoding(void);
|
||||||
const char *get_commit_output_encoding(void);
|
const char *get_commit_output_encoding(void);
|
||||||
|
|
||||||
@@ -233,9 +218,12 @@ extern char *askpass_program;
|
|||||||
extern char *excludes_file;
|
extern char *excludes_file;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Should we print an ellipsis after an abbreviated SHA-1 value
|
* The character that begins a commented line in user-editable file
|
||||||
* when doing diff-raw output or indicating a detached HEAD?
|
* that is subject to stripspace.
|
||||||
*/
|
*/
|
||||||
int print_sha1_ellipsis(void);
|
extern const char *comment_line_str;
|
||||||
|
extern char *comment_line_str_to_free;
|
||||||
|
extern int auto_comment_line_char;
|
||||||
|
|
||||||
#endif
|
# endif /* USE_THE_REPOSITORY_VARIABLE */
|
||||||
|
#endif /* ENVIRONMENT_H */
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "fsmonitor.h"
|
#include "fsmonitor.h"
|
||||||
#include "fsmonitor-ipc.h"
|
#include "fsmonitor-ipc.h"
|
||||||
#include "name-hash.h"
|
#include "name-hash.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "run-command.h"
|
#include "run-command.h"
|
||||||
#include "strbuf.h"
|
#include "strbuf.h"
|
||||||
#include "trace2.h"
|
#include "trace2.h"
|
||||||
@@ -169,7 +170,7 @@ static int query_fsmonitor_hook(struct repository *r,
|
|||||||
strvec_pushf(&cp.args, "%d", version);
|
strvec_pushf(&cp.args, "%d", version);
|
||||||
strvec_pushf(&cp.args, "%s", last_update);
|
strvec_pushf(&cp.args, "%s", last_update);
|
||||||
cp.use_shell = 1;
|
cp.use_shell = 1;
|
||||||
cp.dir = get_git_work_tree();
|
cp.dir = repo_get_work_tree(the_repository);
|
||||||
|
|
||||||
trace2_region_enter("fsm_hook", "query", NULL);
|
trace2_region_enter("fsm_hook", "query", NULL);
|
||||||
|
|
||||||
|
|||||||
2
help.c
2
help.c
@@ -618,7 +618,7 @@ const char *help_unknown_cmd(const char *cmd)
|
|||||||
memset(&other_cmds, 0, sizeof(other_cmds));
|
memset(&other_cmds, 0, sizeof(other_cmds));
|
||||||
memset(&aliases, 0, sizeof(aliases));
|
memset(&aliases, 0, sizeof(aliases));
|
||||||
|
|
||||||
read_early_config(git_unknown_cmd_config, NULL);
|
read_early_config(the_repository, git_unknown_cmd_config, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disable autocorrection prompt in a non-interactive session
|
* Disable autocorrection prompt in a non-interactive session
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
*
|
*
|
||||||
* Copyright (C) 2008 Linus Torvalds
|
* Copyright (C) 2008 Linus Torvalds
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "environment.h"
|
#include "environment.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
|
|||||||
21
notes.c
21
notes.c
@@ -992,15 +992,16 @@ static int notes_display_config(const char *k, const char *v,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *default_notes_ref(void)
|
char *default_notes_ref(struct repository *repo)
|
||||||
{
|
{
|
||||||
const char *notes_ref = NULL;
|
char *notes_ref = NULL;
|
||||||
|
|
||||||
if (!notes_ref)
|
if (!notes_ref)
|
||||||
notes_ref = getenv(GIT_NOTES_REF_ENVIRONMENT);
|
notes_ref = xstrdup_or_null(getenv(GIT_NOTES_REF_ENVIRONMENT));
|
||||||
if (!notes_ref)
|
if (!notes_ref)
|
||||||
notes_ref = notes_ref_name; /* value of core.notesRef config */
|
repo_config_get_string(repo, "core.notesref", ¬es_ref);
|
||||||
if (!notes_ref)
|
if (!notes_ref)
|
||||||
notes_ref = GIT_NOTES_DEFAULT_REF;
|
notes_ref = xstrdup(GIT_NOTES_DEFAULT_REF);
|
||||||
return notes_ref;
|
return notes_ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1010,13 +1011,14 @@ void init_notes(struct notes_tree *t, const char *notes_ref,
|
|||||||
struct object_id oid, object_oid;
|
struct object_id oid, object_oid;
|
||||||
unsigned short mode;
|
unsigned short mode;
|
||||||
struct leaf_node root_tree;
|
struct leaf_node root_tree;
|
||||||
|
char *to_free = NULL;
|
||||||
|
|
||||||
if (!t)
|
if (!t)
|
||||||
t = &default_notes_tree;
|
t = &default_notes_tree;
|
||||||
assert(!t->initialized);
|
assert(!t->initialized);
|
||||||
|
|
||||||
if (!notes_ref)
|
if (!notes_ref)
|
||||||
notes_ref = default_notes_ref();
|
notes_ref = to_free = default_notes_ref(the_repository);
|
||||||
update_ref_namespace(NAMESPACE_NOTES, xstrdup(notes_ref));
|
update_ref_namespace(NAMESPACE_NOTES, xstrdup(notes_ref));
|
||||||
|
|
||||||
if (!combine_notes)
|
if (!combine_notes)
|
||||||
@@ -1033,7 +1035,7 @@ void init_notes(struct notes_tree *t, const char *notes_ref,
|
|||||||
|
|
||||||
if (flags & NOTES_INIT_EMPTY ||
|
if (flags & NOTES_INIT_EMPTY ||
|
||||||
repo_get_oid_treeish(the_repository, notes_ref, &object_oid))
|
repo_get_oid_treeish(the_repository, notes_ref, &object_oid))
|
||||||
return;
|
goto out;
|
||||||
if (flags & NOTES_INIT_WRITABLE && refs_read_ref(get_main_ref_store(the_repository), notes_ref, &object_oid))
|
if (flags & NOTES_INIT_WRITABLE && refs_read_ref(get_main_ref_store(the_repository), notes_ref, &object_oid))
|
||||||
die("Cannot use notes ref %s", notes_ref);
|
die("Cannot use notes ref %s", notes_ref);
|
||||||
if (get_tree_entry(the_repository, &object_oid, "", &oid, &mode))
|
if (get_tree_entry(the_repository, &object_oid, "", &oid, &mode))
|
||||||
@@ -1043,6 +1045,9 @@ void init_notes(struct notes_tree *t, const char *notes_ref,
|
|||||||
oidclr(&root_tree.key_oid, the_repository->hash_algo);
|
oidclr(&root_tree.key_oid, the_repository->hash_algo);
|
||||||
oidcpy(&root_tree.val_oid, &oid);
|
oidcpy(&root_tree.val_oid, &oid);
|
||||||
load_subtree(t, &root_tree, t->root, 0);
|
load_subtree(t, &root_tree, t->root, 0);
|
||||||
|
|
||||||
|
out:
|
||||||
|
free(to_free);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct notes_tree **load_notes_trees(struct string_list *refs, int flags)
|
struct notes_tree **load_notes_trees(struct string_list *refs, int flags)
|
||||||
@@ -1105,7 +1110,7 @@ void load_display_notes(struct display_notes_opt *opt)
|
|||||||
|
|
||||||
if (!opt || opt->use_default_notes > 0 ||
|
if (!opt || opt->use_default_notes > 0 ||
|
||||||
(opt->use_default_notes == -1 && !opt->extra_notes_refs.nr)) {
|
(opt->use_default_notes == -1 && !opt->extra_notes_refs.nr)) {
|
||||||
string_list_append(&display_notes_refs, default_notes_ref());
|
string_list_append_nodup(&display_notes_refs, default_notes_ref(the_repository));
|
||||||
display_ref_env = getenv(GIT_NOTES_DISPLAY_REF_ENVIRONMENT);
|
display_ref_env = getenv(GIT_NOTES_DISPLAY_REF_ENVIRONMENT);
|
||||||
if (display_ref_env) {
|
if (display_ref_env) {
|
||||||
string_list_add_refs_from_colon_sep(&display_notes_refs,
|
string_list_add_refs_from_colon_sep(&display_notes_refs,
|
||||||
|
|||||||
3
notes.h
3
notes.h
@@ -4,6 +4,7 @@
|
|||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
|
|
||||||
struct object_id;
|
struct object_id;
|
||||||
|
struct repository;
|
||||||
struct strbuf;
|
struct strbuf;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -70,7 +71,7 @@ extern struct notes_tree {
|
|||||||
* 3. The value of the core.notesRef config variable, if set
|
* 3. The value of the core.notesRef config variable, if set
|
||||||
* 4. GIT_NOTES_DEFAULT_REF (i.e. "refs/notes/commits")
|
* 4. GIT_NOTES_DEFAULT_REF (i.e. "refs/notes/commits")
|
||||||
*/
|
*/
|
||||||
const char *default_notes_ref(void);
|
char *default_notes_ref(struct repository *repo);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Flags controlling behaviour of notes tree initialization
|
* Flags controlling behaviour of notes tree initialization
|
||||||
|
|||||||
@@ -419,6 +419,39 @@ enum scld_error safe_create_leading_directories_const(const char *path)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int odb_mkstemp(struct strbuf *temp_filename, const char *pattern)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
/*
|
||||||
|
* we let the umask do its job, don't try to be more
|
||||||
|
* restrictive except to remove write permission.
|
||||||
|
*/
|
||||||
|
int mode = 0444;
|
||||||
|
git_path_buf(temp_filename, "objects/%s", pattern);
|
||||||
|
fd = git_mkstemp_mode(temp_filename->buf, mode);
|
||||||
|
if (0 <= fd)
|
||||||
|
return fd;
|
||||||
|
|
||||||
|
/* slow path */
|
||||||
|
/* some mkstemp implementations erase temp_filename on failure */
|
||||||
|
git_path_buf(temp_filename, "objects/%s", pattern);
|
||||||
|
safe_create_leading_directories(temp_filename->buf);
|
||||||
|
return xmkstemp_mode(temp_filename->buf, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
int odb_pack_keep(const char *name)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
fd = open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
|
||||||
|
if (0 <= fd)
|
||||||
|
return fd;
|
||||||
|
|
||||||
|
/* slow path */
|
||||||
|
safe_create_leading_directories_const(name);
|
||||||
|
return open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
|
||||||
|
}
|
||||||
|
|
||||||
static void fill_loose_path(struct strbuf *buf, const struct object_id *oid)
|
static void fill_loose_path(struct strbuf *buf, const struct object_id *oid)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -2053,7 +2086,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 +2261,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);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include "pretty.h"
|
#include "pretty.h"
|
||||||
#include "object-store-ll.h"
|
#include "object-store-ll.h"
|
||||||
#include "read-cache-ll.h"
|
#include "read-cache-ll.h"
|
||||||
|
#include "repo-settings.h"
|
||||||
#include "repository.h"
|
#include "repository.h"
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include "midx.h"
|
#include "midx.h"
|
||||||
@@ -959,7 +960,7 @@ static int get_oid_basic(struct repository *r, const char *str, int len,
|
|||||||
int fatal = !(flags & GET_OID_QUIETLY);
|
int fatal = !(flags & GET_OID_QUIETLY);
|
||||||
|
|
||||||
if (len == r->hash_algo->hexsz && !get_oid_hex(str, oid)) {
|
if (len == r->hash_algo->hexsz && !get_oid_hex(str, oid)) {
|
||||||
if (warn_ambiguous_refs && warn_on_object_refname_ambiguity) {
|
if (repo_settings_get_warn_ambiguous_refs(r) && warn_on_object_refname_ambiguity) {
|
||||||
refs_found = repo_dwim_ref(r, str, len, &tmp_oid, &real_ref, 0);
|
refs_found = repo_dwim_ref(r, str, len, &tmp_oid, &real_ref, 0);
|
||||||
if (refs_found > 0) {
|
if (refs_found > 0) {
|
||||||
warning(warn_msg, len, str);
|
warning(warn_msg, len, str);
|
||||||
@@ -1020,7 +1021,7 @@ static int get_oid_basic(struct repository *r, const char *str, int len,
|
|||||||
if (!refs_found)
|
if (!refs_found)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (warn_ambiguous_refs && !(flags & GET_OID_QUIETLY) &&
|
if (repo_settings_get_warn_ambiguous_refs(r) && !(flags & GET_OID_QUIETLY) &&
|
||||||
(refs_found > 1 ||
|
(refs_found > 1 ||
|
||||||
!get_short_oid(r, str, len, &tmp_oid, GET_OID_QUIETLY)))
|
!get_short_oid(r, str, len, &tmp_oid, GET_OID_QUIETLY)))
|
||||||
warning(warn_msg, len, str);
|
warning(warn_msg, len, str);
|
||||||
|
|||||||
@@ -231,6 +231,21 @@ struct raw_object_store {
|
|||||||
struct raw_object_store *raw_object_store_new(void);
|
struct raw_object_store *raw_object_store_new(void);
|
||||||
void raw_object_store_clear(struct raw_object_store *o);
|
void raw_object_store_clear(struct raw_object_store *o);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a temporary file rooted in the object database directory, or
|
||||||
|
* die on failure. The filename is taken from "pattern", which should have the
|
||||||
|
* usual "XXXXXX" trailer, and the resulting filename is written into the
|
||||||
|
* "template" buffer. Returns the open descriptor.
|
||||||
|
*/
|
||||||
|
int odb_mkstemp(struct strbuf *temp_filename, const char *pattern);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a pack .keep file named "name" (which should generally be the output
|
||||||
|
* of odb_pack_name). Returns a file descriptor opened for writing, or -1 on
|
||||||
|
* error.
|
||||||
|
*/
|
||||||
|
int odb_pack_keep(const char *name);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Put in `buf` the name of the file in the local object database that
|
* Put in `buf` the name of the file in the local object database that
|
||||||
* would be used to store a loose object with the specified oid.
|
* would be used to store a loose object with the specified oid.
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
7
pager.c
7
pager.c
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "editor.h"
|
#include "editor.h"
|
||||||
@@ -92,7 +94,8 @@ const char *git_pager(int stdout_is_tty)
|
|||||||
pager = getenv("GIT_PAGER");
|
pager = getenv("GIT_PAGER");
|
||||||
if (!pager) {
|
if (!pager) {
|
||||||
if (!pager_program)
|
if (!pager_program)
|
||||||
read_early_config(core_pager_config, NULL);
|
read_early_config(the_repository,
|
||||||
|
core_pager_config, NULL);
|
||||||
pager = pager_program;
|
pager = pager_program;
|
||||||
}
|
}
|
||||||
if (!pager)
|
if (!pager)
|
||||||
@@ -298,7 +301,7 @@ int check_pager_config(const char *cmd)
|
|||||||
data.want = -1;
|
data.want = -1;
|
||||||
data.value = NULL;
|
data.value = NULL;
|
||||||
|
|
||||||
read_early_config(pager_command_config, &data);
|
read_early_config(the_repository, pager_command_config, &data);
|
||||||
|
|
||||||
if (data.value)
|
if (data.value)
|
||||||
pager_program = data.value;
|
pager_program = data.value;
|
||||||
|
|||||||
2
path.c
2
path.c
@@ -2,6 +2,8 @@
|
|||||||
* Utilities for paths and pathnames
|
* Utilities for paths and pathnames
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "abspath.h"
|
#include "abspath.h"
|
||||||
#include "environment.h"
|
#include "environment.h"
|
||||||
|
|||||||
@@ -495,9 +495,9 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags,
|
|||||||
if (!have_git_dir())
|
if (!have_git_dir())
|
||||||
die(_("'%s' is outside the directory tree"),
|
die(_("'%s' is outside the directory tree"),
|
||||||
copyfrom);
|
copyfrom);
|
||||||
hint_path = get_git_work_tree();
|
hint_path = repo_get_work_tree(the_repository);
|
||||||
if (!hint_path)
|
if (!hint_path)
|
||||||
hint_path = get_git_dir();
|
hint_path = repo_get_git_dir(the_repository);
|
||||||
die(_("%s: '%s' is outside repository at '%s'"), elt,
|
die(_("%s: '%s' is outside repository at '%s'"), elt,
|
||||||
copyfrom, absolute_path(hint_path));
|
copyfrom, absolute_path(hint_path));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2008 Linus Torvalds
|
* Copyright (C) 2008 Linus Torvalds
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "pathspec.h"
|
#include "pathspec.h"
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
|
|||||||
2
prompt.c
2
prompt.c
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "parse.h"
|
#include "parse.h"
|
||||||
#include "environment.h"
|
#include "environment.h"
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "preload-index.h"
|
#include "preload-index.h"
|
||||||
#include "read-cache.h"
|
#include "read-cache.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "resolve-undo.h"
|
#include "resolve-undo.h"
|
||||||
#include "revision.h"
|
#include "revision.h"
|
||||||
#include "strbuf.h"
|
#include "strbuf.h"
|
||||||
@@ -3238,10 +3239,11 @@ static int should_delete_shared_index(const char *shared_index_path)
|
|||||||
static int clean_shared_index_files(const char *current_hex)
|
static int clean_shared_index_files(const char *current_hex)
|
||||||
{
|
{
|
||||||
struct dirent *de;
|
struct dirent *de;
|
||||||
DIR *dir = opendir(get_git_dir());
|
DIR *dir = opendir(repo_get_git_dir(the_repository));
|
||||||
|
|
||||||
if (!dir)
|
if (!dir)
|
||||||
return error_errno(_("unable to open git dir: %s"), get_git_dir());
|
return error_errno(_("unable to open git dir: %s"),
|
||||||
|
repo_get_git_dir(the_repository));
|
||||||
|
|
||||||
while ((de = readdir(dir)) != NULL) {
|
while ((de = readdir(dir)) != NULL) {
|
||||||
const char *sha1_hex;
|
const char *sha1_hex;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "object-name.h"
|
#include "object-name.h"
|
||||||
#include "object-store-ll.h"
|
#include "object-store-ll.h"
|
||||||
#include "oid-array.h"
|
#include "oid-array.h"
|
||||||
|
#include "repo-settings.h"
|
||||||
#include "repository.h"
|
#include "repository.h"
|
||||||
#include "commit.h"
|
#include "commit.h"
|
||||||
#include "mailmap.h"
|
#include "mailmap.h"
|
||||||
@@ -2180,7 +2181,7 @@ static const char *show_ref(struct refname_atom *atom, const char *refname)
|
|||||||
if (atom->option == R_SHORT)
|
if (atom->option == R_SHORT)
|
||||||
return refs_shorten_unambiguous_ref(get_main_ref_store(the_repository),
|
return refs_shorten_unambiguous_ref(get_main_ref_store(the_repository),
|
||||||
refname,
|
refname,
|
||||||
warn_ambiguous_refs);
|
repo_settings_get_warn_ambiguous_refs(the_repository));
|
||||||
else if (atom->option == R_LSTRIP)
|
else if (atom->option == R_LSTRIP)
|
||||||
return lstrip_ref_components(refname, atom->lstrip);
|
return lstrip_ref_components(refname, atom->lstrip);
|
||||||
else if (atom->option == R_RSTRIP)
|
else if (atom->option == R_RSTRIP)
|
||||||
|
|||||||
9
refs.c
9
refs.c
@@ -24,7 +24,7 @@
|
|||||||
#include "submodule.h"
|
#include "submodule.h"
|
||||||
#include "worktree.h"
|
#include "worktree.h"
|
||||||
#include "strvec.h"
|
#include "strvec.h"
|
||||||
#include "repository.h"
|
#include "repo-settings.h"
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include "sigchain.h"
|
#include "sigchain.h"
|
||||||
#include "date.h"
|
#include "date.h"
|
||||||
@@ -730,7 +730,7 @@ int expand_ref(struct repository *repo, const char *str, int len,
|
|||||||
if (r) {
|
if (r) {
|
||||||
if (!refs_found++)
|
if (!refs_found++)
|
||||||
*ref = xstrdup(r);
|
*ref = xstrdup(r);
|
||||||
if (!warn_ambiguous_refs)
|
if (!repo_settings_get_warn_ambiguous_refs(repo))
|
||||||
break;
|
break;
|
||||||
} else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
|
} else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
|
||||||
warning(_("ignoring dangling symref %s"), fullref.buf);
|
warning(_("ignoring dangling symref %s"), fullref.buf);
|
||||||
@@ -775,7 +775,7 @@ int repo_dwim_log(struct repository *r, const char *str, int len,
|
|||||||
if (oid)
|
if (oid)
|
||||||
oidcpy(oid, &hash);
|
oidcpy(oid, &hash);
|
||||||
}
|
}
|
||||||
if (!warn_ambiguous_refs)
|
if (!repo_settings_get_warn_ambiguous_refs(r))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
strbuf_release(&path);
|
strbuf_release(&path);
|
||||||
@@ -958,7 +958,8 @@ static char *normalize_reflog_message(const char *msg)
|
|||||||
return strbuf_detach(&sb, NULL);
|
return strbuf_detach(&sb, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int should_autocreate_reflog(const char *refname)
|
int should_autocreate_reflog(enum log_refs_config log_all_ref_updates,
|
||||||
|
const char *refname)
|
||||||
{
|
{
|
||||||
switch (log_all_ref_updates) {
|
switch (log_all_ref_updates) {
|
||||||
case LOG_REFS_ALWAYS:
|
case LOG_REFS_ALWAYS:
|
||||||
|
|||||||
4
refs.h
4
refs.h
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "commit.h"
|
#include "commit.h"
|
||||||
#include "repository.h"
|
#include "repository.h"
|
||||||
|
#include "repo-settings.h"
|
||||||
|
|
||||||
struct fsck_options;
|
struct fsck_options;
|
||||||
struct object_id;
|
struct object_id;
|
||||||
@@ -111,7 +112,8 @@ int refs_verify_refname_available(struct ref_store *refs,
|
|||||||
|
|
||||||
int refs_ref_exists(struct ref_store *refs, const char *refname);
|
int refs_ref_exists(struct ref_store *refs, const char *refname);
|
||||||
|
|
||||||
int should_autocreate_reflog(const char *refname);
|
int should_autocreate_reflog(enum log_refs_config log_all_ref_updates,
|
||||||
|
const char *refname);
|
||||||
|
|
||||||
int is_branch(const char *refname);
|
int is_branch(const char *refname);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "../git-compat-util.h"
|
#include "../git-compat-util.h"
|
||||||
|
#include "../config.h"
|
||||||
#include "../copy.h"
|
#include "../copy.h"
|
||||||
#include "../environment.h"
|
#include "../environment.h"
|
||||||
#include "../gettext.h"
|
#include "../gettext.h"
|
||||||
@@ -6,6 +9,7 @@
|
|||||||
#include "../hex.h"
|
#include "../hex.h"
|
||||||
#include "../fsck.h"
|
#include "../fsck.h"
|
||||||
#include "../refs.h"
|
#include "../refs.h"
|
||||||
|
#include "../repo-settings.h"
|
||||||
#include "refs-internal.h"
|
#include "refs-internal.h"
|
||||||
#include "ref-cache.h"
|
#include "ref-cache.h"
|
||||||
#include "packed-backend.h"
|
#include "packed-backend.h"
|
||||||
@@ -72,6 +76,8 @@ struct files_ref_store {
|
|||||||
unsigned int store_flags;
|
unsigned int store_flags;
|
||||||
|
|
||||||
char *gitcommondir;
|
char *gitcommondir;
|
||||||
|
enum log_refs_config log_all_ref_updates;
|
||||||
|
int prefer_symlink_refs;
|
||||||
|
|
||||||
struct ref_cache *loose;
|
struct ref_cache *loose;
|
||||||
|
|
||||||
@@ -104,6 +110,8 @@ static struct ref_store *files_ref_store_init(struct repository *repo,
|
|||||||
refs->gitcommondir = strbuf_detach(&sb, NULL);
|
refs->gitcommondir = strbuf_detach(&sb, NULL);
|
||||||
refs->packed_ref_store =
|
refs->packed_ref_store =
|
||||||
packed_ref_store_init(repo, refs->gitcommondir, flags);
|
packed_ref_store_init(repo, refs->gitcommondir, flags);
|
||||||
|
refs->log_all_ref_updates = repo_settings_get_log_all_ref_updates(repo);
|
||||||
|
repo_config_get_bool(repo, "core.prefersymlinkrefs", &refs->prefer_symlink_refs);
|
||||||
|
|
||||||
chdir_notify_reparent("files-backend $GIT_DIR", &refs->base.gitdir);
|
chdir_notify_reparent("files-backend $GIT_DIR", &refs->base.gitdir);
|
||||||
chdir_notify_reparent("files-backend $GIT_COMMONDIR",
|
chdir_notify_reparent("files-backend $GIT_COMMONDIR",
|
||||||
@@ -1506,6 +1514,7 @@ static int write_ref_to_lockfile(struct files_ref_store *refs,
|
|||||||
static int commit_ref_update(struct files_ref_store *refs,
|
static int commit_ref_update(struct files_ref_store *refs,
|
||||||
struct ref_lock *lock,
|
struct ref_lock *lock,
|
||||||
const struct object_id *oid, const char *logmsg,
|
const struct object_id *oid, const char *logmsg,
|
||||||
|
int flags,
|
||||||
struct strbuf *err);
|
struct strbuf *err);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1649,7 +1658,7 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
|
|||||||
oidcpy(&lock->old_oid, &orig_oid);
|
oidcpy(&lock->old_oid, &orig_oid);
|
||||||
|
|
||||||
if (write_ref_to_lockfile(refs, lock, &orig_oid, 0, &err) ||
|
if (write_ref_to_lockfile(refs, lock, &orig_oid, 0, &err) ||
|
||||||
commit_ref_update(refs, lock, &orig_oid, logmsg, &err)) {
|
commit_ref_update(refs, lock, &orig_oid, logmsg, 0, &err)) {
|
||||||
error("unable to write current sha1 into %s: %s", newrefname, err.buf);
|
error("unable to write current sha1 into %s: %s", newrefname, err.buf);
|
||||||
strbuf_release(&err);
|
strbuf_release(&err);
|
||||||
goto rollback;
|
goto rollback;
|
||||||
@@ -1666,14 +1675,11 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
|
|||||||
goto rollbacklog;
|
goto rollbacklog;
|
||||||
}
|
}
|
||||||
|
|
||||||
flag = log_all_ref_updates;
|
|
||||||
log_all_ref_updates = LOG_REFS_NONE;
|
|
||||||
if (write_ref_to_lockfile(refs, lock, &orig_oid, 0, &err) ||
|
if (write_ref_to_lockfile(refs, lock, &orig_oid, 0, &err) ||
|
||||||
commit_ref_update(refs, lock, &orig_oid, NULL, &err)) {
|
commit_ref_update(refs, lock, &orig_oid, NULL, REF_SKIP_CREATE_REFLOG, &err)) {
|
||||||
error("unable to write current sha1 into %s: %s", oldrefname, err.buf);
|
error("unable to write current sha1 into %s: %s", oldrefname, err.buf);
|
||||||
strbuf_release(&err);
|
strbuf_release(&err);
|
||||||
}
|
}
|
||||||
log_all_ref_updates = flag;
|
|
||||||
|
|
||||||
rollbacklog:
|
rollbacklog:
|
||||||
if (logmoved && rename(sb_newref.buf, sb_oldref.buf))
|
if (logmoved && rename(sb_newref.buf, sb_oldref.buf))
|
||||||
@@ -1768,13 +1774,17 @@ static int log_ref_setup(struct files_ref_store *refs,
|
|||||||
const char *refname, int force_create,
|
const char *refname, int force_create,
|
||||||
int *logfd, struct strbuf *err)
|
int *logfd, struct strbuf *err)
|
||||||
{
|
{
|
||||||
|
enum log_refs_config log_refs_cfg = refs->log_all_ref_updates;
|
||||||
struct strbuf logfile_sb = STRBUF_INIT;
|
struct strbuf logfile_sb = STRBUF_INIT;
|
||||||
char *logfile;
|
char *logfile;
|
||||||
|
|
||||||
|
if (log_refs_cfg == LOG_REFS_UNSET)
|
||||||
|
log_refs_cfg = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL;
|
||||||
|
|
||||||
files_reflog_path(refs, &logfile_sb, refname);
|
files_reflog_path(refs, &logfile_sb, refname);
|
||||||
logfile = strbuf_detach(&logfile_sb, NULL);
|
logfile = strbuf_detach(&logfile_sb, NULL);
|
||||||
|
|
||||||
if (force_create || should_autocreate_reflog(refname)) {
|
if (force_create || should_autocreate_reflog(log_refs_cfg, refname)) {
|
||||||
if (raceproof_create_file(logfile, open_or_create_logfile, logfd)) {
|
if (raceproof_create_file(logfile, open_or_create_logfile, logfd)) {
|
||||||
if (errno == ENOENT)
|
if (errno == ENOENT)
|
||||||
strbuf_addf(err, "unable to create directory for '%s': "
|
strbuf_addf(err, "unable to create directory for '%s': "
|
||||||
@@ -1863,9 +1873,6 @@ static int files_log_ref_write(struct files_ref_store *refs,
|
|||||||
if (flags & REF_SKIP_CREATE_REFLOG)
|
if (flags & REF_SKIP_CREATE_REFLOG)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (log_all_ref_updates == LOG_REFS_UNSET)
|
|
||||||
log_all_ref_updates = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL;
|
|
||||||
|
|
||||||
result = log_ref_setup(refs, refname,
|
result = log_ref_setup(refs, refname,
|
||||||
flags & REF_FORCE_CREATE_REFLOG,
|
flags & REF_FORCE_CREATE_REFLOG,
|
||||||
&logfd, err);
|
&logfd, err);
|
||||||
@@ -1954,6 +1961,7 @@ static int write_ref_to_lockfile(struct files_ref_store *refs,
|
|||||||
static int commit_ref_update(struct files_ref_store *refs,
|
static int commit_ref_update(struct files_ref_store *refs,
|
||||||
struct ref_lock *lock,
|
struct ref_lock *lock,
|
||||||
const struct object_id *oid, const char *logmsg,
|
const struct object_id *oid, const char *logmsg,
|
||||||
|
int flags,
|
||||||
struct strbuf *err)
|
struct strbuf *err)
|
||||||
{
|
{
|
||||||
files_assert_main_repository(refs, "commit_ref_update");
|
files_assert_main_repository(refs, "commit_ref_update");
|
||||||
@@ -1961,7 +1969,7 @@ static int commit_ref_update(struct files_ref_store *refs,
|
|||||||
clear_loose_ref_cache(refs);
|
clear_loose_ref_cache(refs);
|
||||||
if (files_log_ref_write(refs, lock->ref_name,
|
if (files_log_ref_write(refs, lock->ref_name,
|
||||||
&lock->old_oid, oid,
|
&lock->old_oid, oid,
|
||||||
logmsg, 0, err)) {
|
logmsg, flags, err)) {
|
||||||
char *old_msg = strbuf_detach(err, NULL);
|
char *old_msg = strbuf_detach(err, NULL);
|
||||||
strbuf_addf(err, "cannot update the ref '%s': %s",
|
strbuf_addf(err, "cannot update the ref '%s': %s",
|
||||||
lock->ref_name, old_msg);
|
lock->ref_name, old_msg);
|
||||||
@@ -1994,7 +2002,7 @@ static int commit_ref_update(struct files_ref_store *refs,
|
|||||||
struct strbuf log_err = STRBUF_INIT;
|
struct strbuf log_err = STRBUF_INIT;
|
||||||
if (files_log_ref_write(refs, "HEAD",
|
if (files_log_ref_write(refs, "HEAD",
|
||||||
&lock->old_oid, oid,
|
&lock->old_oid, oid,
|
||||||
logmsg, 0, &log_err)) {
|
logmsg, flags, &log_err)) {
|
||||||
error("%s", log_err.buf);
|
error("%s", log_err.buf);
|
||||||
strbuf_release(&log_err);
|
strbuf_release(&log_err);
|
||||||
}
|
}
|
||||||
@@ -3005,7 +3013,7 @@ static int files_transaction_finish(struct ref_store *ref_store,
|
|||||||
* We try creating a symlink, if that succeeds we continue to the
|
* We try creating a symlink, if that succeeds we continue to the
|
||||||
* next update. If not, we try and create a regular symref.
|
* next update. If not, we try and create a regular symref.
|
||||||
*/
|
*/
|
||||||
if (update->new_target && prefer_symlink_refs)
|
if (update->new_target && refs->prefer_symlink_refs)
|
||||||
if (!create_ref_symlink(lock, update->new_target))
|
if (!create_ref_symlink(lock, update->new_target))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include "../reftable/reftable-record.h"
|
#include "../reftable/reftable-record.h"
|
||||||
#include "../reftable/reftable-error.h"
|
#include "../reftable/reftable-error.h"
|
||||||
#include "../reftable/reftable-iterator.h"
|
#include "../reftable/reftable-iterator.h"
|
||||||
|
#include "../repo-settings.h"
|
||||||
#include "../setup.h"
|
#include "../setup.h"
|
||||||
#include "../strmap.h"
|
#include "../strmap.h"
|
||||||
#include "parse.h"
|
#include "parse.h"
|
||||||
@@ -51,6 +52,7 @@ struct reftable_ref_store {
|
|||||||
struct reftable_write_options write_options;
|
struct reftable_write_options write_options;
|
||||||
|
|
||||||
unsigned int store_flags;
|
unsigned int store_flags;
|
||||||
|
enum log_refs_config log_all_ref_updates;
|
||||||
int err;
|
int err;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -156,22 +158,23 @@ static struct reftable_stack *stack_for(struct reftable_ref_store *store,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int should_write_log(struct ref_store *refs, const char *refname)
|
static int should_write_log(struct reftable_ref_store *refs, const char *refname)
|
||||||
{
|
{
|
||||||
if (log_all_ref_updates == LOG_REFS_UNSET)
|
enum log_refs_config log_refs_cfg = refs->log_all_ref_updates;
|
||||||
log_all_ref_updates = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL;
|
if (log_refs_cfg == LOG_REFS_UNSET)
|
||||||
|
log_refs_cfg = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL;
|
||||||
|
|
||||||
switch (log_all_ref_updates) {
|
switch (log_refs_cfg) {
|
||||||
case LOG_REFS_NONE:
|
case LOG_REFS_NONE:
|
||||||
return refs_reflog_exists(refs, refname);
|
return refs_reflog_exists(&refs->base, refname);
|
||||||
case LOG_REFS_ALWAYS:
|
case LOG_REFS_ALWAYS:
|
||||||
return 1;
|
return 1;
|
||||||
case LOG_REFS_NORMAL:
|
case LOG_REFS_NORMAL:
|
||||||
if (should_autocreate_reflog(refname))
|
if (should_autocreate_reflog(log_refs_cfg, refname))
|
||||||
return 1;
|
return 1;
|
||||||
return refs_reflog_exists(refs, refname);
|
return refs_reflog_exists(&refs->base, refname);
|
||||||
default:
|
default:
|
||||||
BUG("unhandled core.logAllRefUpdates value %d", log_all_ref_updates);
|
BUG("unhandled core.logAllRefUpdates value %d", log_refs_cfg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,6 +279,7 @@ static struct ref_store *reftable_be_init(struct repository *repo,
|
|||||||
base_ref_store_init(&refs->base, repo, gitdir, &refs_be_reftable);
|
base_ref_store_init(&refs->base, repo, gitdir, &refs_be_reftable);
|
||||||
strmap_init(&refs->worktree_stacks);
|
strmap_init(&refs->worktree_stacks);
|
||||||
refs->store_flags = store_flags;
|
refs->store_flags = store_flags;
|
||||||
|
refs->log_all_ref_updates = repo_settings_get_log_all_ref_updates(repo);
|
||||||
|
|
||||||
refs->write_options.hash_id = repo->hash_algo->format_id;
|
refs->write_options.hash_id = repo->hash_algo->format_id;
|
||||||
refs->write_options.default_permissions = calc_shared_perm(0666 & ~mask);
|
refs->write_options.default_permissions = calc_shared_perm(0666 & ~mask);
|
||||||
@@ -1218,7 +1222,7 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data
|
|||||||
} else if (!(u->flags & REF_SKIP_CREATE_REFLOG) &&
|
} else if (!(u->flags & REF_SKIP_CREATE_REFLOG) &&
|
||||||
(u->flags & REF_HAVE_NEW) &&
|
(u->flags & REF_HAVE_NEW) &&
|
||||||
(u->flags & REF_FORCE_CREATE_REFLOG ||
|
(u->flags & REF_FORCE_CREATE_REFLOG ||
|
||||||
should_write_log(&arg->refs->base, u->refname))) {
|
should_write_log(arg->refs, u->refname))) {
|
||||||
struct reftable_log_record *log;
|
struct reftable_log_record *log;
|
||||||
int create_reflog = 1;
|
int create_reflog = 1;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "repo-settings.h"
|
||||||
#include "repository.h"
|
#include "repository.h"
|
||||||
#include "midx.h"
|
#include "midx.h"
|
||||||
|
|
||||||
@@ -19,6 +20,7 @@ static void repo_cfg_int(struct repository *r, const char *key, int *dest,
|
|||||||
|
|
||||||
void prepare_repo_settings(struct repository *r)
|
void prepare_repo_settings(struct repository *r)
|
||||||
{
|
{
|
||||||
|
const struct repo_settings defaults = REPO_SETTINGS_INIT;
|
||||||
int experimental;
|
int experimental;
|
||||||
int value;
|
int value;
|
||||||
const char *strval;
|
const char *strval;
|
||||||
@@ -28,13 +30,11 @@ void prepare_repo_settings(struct repository *r)
|
|||||||
if (!r->gitdir)
|
if (!r->gitdir)
|
||||||
BUG("Cannot add settings for uninitialized repository");
|
BUG("Cannot add settings for uninitialized repository");
|
||||||
|
|
||||||
if (r->settings.initialized++)
|
if (r->settings.initialized)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Defaults */
|
memcpy(&r->settings, &defaults, sizeof(defaults));
|
||||||
r->settings.index_version = -1;
|
r->settings.initialized++;
|
||||||
r->settings.core_untracked_cache = UNTRACKED_CACHE_KEEP;
|
|
||||||
r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_CONSECUTIVE;
|
|
||||||
|
|
||||||
/* Booleans config or default, cascades to other settings */
|
/* Booleans config or default, cascades to other settings */
|
||||||
repo_cfg_bool(r, "feature.manyfiles", &manyfiles, 0);
|
repo_cfg_bool(r, "feature.manyfiles", &manyfiles, 0);
|
||||||
@@ -124,3 +124,28 @@ void prepare_repo_settings(struct repository *r)
|
|||||||
*/
|
*/
|
||||||
r->settings.command_requires_full_index = 1;
|
r->settings.command_requires_full_index = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum log_refs_config repo_settings_get_log_all_ref_updates(struct repository *repo)
|
||||||
|
{
|
||||||
|
const char *value;
|
||||||
|
|
||||||
|
if (!repo_config_get_string_tmp(repo, "core.logallrefupdates", &value)) {
|
||||||
|
if (value && !strcasecmp(value, "always"))
|
||||||
|
return LOG_REFS_ALWAYS;
|
||||||
|
else if (git_config_bool("core.logallrefupdates", value))
|
||||||
|
return LOG_REFS_NORMAL;
|
||||||
|
else
|
||||||
|
return LOG_REFS_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return LOG_REFS_UNSET;
|
||||||
|
}
|
||||||
|
|
||||||
|
int repo_settings_get_warn_ambiguous_refs(struct repository *repo)
|
||||||
|
{
|
||||||
|
prepare_repo_settings(repo);
|
||||||
|
if (repo->settings.warn_ambiguous_refs < 0)
|
||||||
|
repo_cfg_bool(repo, "core.warnambiguousrefs",
|
||||||
|
&repo->settings.warn_ambiguous_refs, 1);
|
||||||
|
return repo->settings.warn_ambiguous_refs;
|
||||||
|
}
|
||||||
|
|||||||
75
repo-settings.h
Normal file
75
repo-settings.h
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#ifndef REPO_SETTINGS_H
|
||||||
|
#define REPO_SETTINGS_H
|
||||||
|
|
||||||
|
struct fsmonitor_settings;
|
||||||
|
struct repository;
|
||||||
|
|
||||||
|
enum untracked_cache_setting {
|
||||||
|
UNTRACKED_CACHE_KEEP,
|
||||||
|
UNTRACKED_CACHE_REMOVE,
|
||||||
|
UNTRACKED_CACHE_WRITE,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum fetch_negotiation_setting {
|
||||||
|
FETCH_NEGOTIATION_CONSECUTIVE,
|
||||||
|
FETCH_NEGOTIATION_SKIPPING,
|
||||||
|
FETCH_NEGOTIATION_NOOP,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum log_refs_config {
|
||||||
|
LOG_REFS_UNSET = -1,
|
||||||
|
LOG_REFS_NONE = 0,
|
||||||
|
LOG_REFS_NORMAL,
|
||||||
|
LOG_REFS_ALWAYS
|
||||||
|
};
|
||||||
|
|
||||||
|
struct repo_settings {
|
||||||
|
int initialized;
|
||||||
|
|
||||||
|
int core_commit_graph;
|
||||||
|
int commit_graph_generation_version;
|
||||||
|
int commit_graph_changed_paths_version;
|
||||||
|
int gc_write_commit_graph;
|
||||||
|
int fetch_write_commit_graph;
|
||||||
|
int command_requires_full_index;
|
||||||
|
int sparse_index;
|
||||||
|
int pack_read_reverse_index;
|
||||||
|
int pack_use_bitmap_boundary_traversal;
|
||||||
|
int pack_use_multi_pack_reuse;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Does this repository have core.useReplaceRefs=true (on by
|
||||||
|
* default)? This provides a repository-scoped version of this
|
||||||
|
* config, though it could be disabled process-wide via some Git
|
||||||
|
* builtins or the --no-replace-objects option. See
|
||||||
|
* replace_refs_enabled() for more details.
|
||||||
|
*/
|
||||||
|
int read_replace_refs;
|
||||||
|
|
||||||
|
struct fsmonitor_settings *fsmonitor; /* lazily loaded */
|
||||||
|
|
||||||
|
int index_version;
|
||||||
|
int index_skip_hash;
|
||||||
|
enum untracked_cache_setting core_untracked_cache;
|
||||||
|
|
||||||
|
int pack_use_sparse;
|
||||||
|
enum fetch_negotiation_setting fetch_negotiation_algorithm;
|
||||||
|
|
||||||
|
int core_multi_pack_index;
|
||||||
|
int warn_ambiguous_refs; /* lazily loaded via accessor */
|
||||||
|
};
|
||||||
|
#define REPO_SETTINGS_INIT { \
|
||||||
|
.index_version = -1, \
|
||||||
|
.core_untracked_cache = UNTRACKED_CACHE_KEEP, \
|
||||||
|
.fetch_negotiation_algorithm = FETCH_NEGOTIATION_CONSECUTIVE, \
|
||||||
|
.warn_ambiguous_refs = -1, \
|
||||||
|
}
|
||||||
|
|
||||||
|
void prepare_repo_settings(struct repository *r);
|
||||||
|
|
||||||
|
/* Read the value for "core.logAllRefUpdates". */
|
||||||
|
enum log_refs_config repo_settings_get_log_all_ref_updates(struct repository *repo);
|
||||||
|
/* Read the value for "core.warnAmbiguousRefs". */
|
||||||
|
int repo_settings_get_warn_ambiguous_refs(struct repository *repo);
|
||||||
|
|
||||||
|
#endif /* REPO_SETTINGS_H */
|
||||||
40
repository.c
40
repository.c
@@ -91,6 +91,46 @@ static void expand_base_dir(char **out, const char *in,
|
|||||||
*out = xstrfmt("%s/%s", base_dir, def_in);
|
*out = xstrfmt("%s/%s", base_dir, def_in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *repo_get_git_dir(struct repository *repo)
|
||||||
|
{
|
||||||
|
if (!repo->gitdir)
|
||||||
|
BUG("repository hasn't been set up");
|
||||||
|
return repo->gitdir;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *repo_get_common_dir(struct repository *repo)
|
||||||
|
{
|
||||||
|
if (!repo->commondir)
|
||||||
|
BUG("repository hasn't been set up");
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *repo_get_index_file(struct repository *repo)
|
||||||
|
{
|
||||||
|
if (!repo->index_file)
|
||||||
|
BUG("repository hasn't been set up");
|
||||||
|
return repo->index_file;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *repo_get_graft_file(struct repository *repo)
|
||||||
|
{
|
||||||
|
if (!repo->graft_file)
|
||||||
|
BUG("repository hasn't been set up");
|
||||||
|
return repo->graft_file;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *repo_get_work_tree(struct repository *repo)
|
||||||
|
{
|
||||||
|
return repo->worktree;
|
||||||
|
}
|
||||||
|
|
||||||
static void repo_set_commondir(struct repository *repo,
|
static void repo_set_commondir(struct repository *repo,
|
||||||
const char *commondir)
|
const char *commondir)
|
||||||
{
|
{
|
||||||
|
|||||||
58
repository.h
58
repository.h
@@ -2,9 +2,9 @@
|
|||||||
#define REPOSITORY_H
|
#define REPOSITORY_H
|
||||||
|
|
||||||
#include "strmap.h"
|
#include "strmap.h"
|
||||||
|
#include "repo-settings.h"
|
||||||
|
|
||||||
struct config_set;
|
struct config_set;
|
||||||
struct fsmonitor_settings;
|
|
||||||
struct git_hash_algo;
|
struct git_hash_algo;
|
||||||
struct index_state;
|
struct index_state;
|
||||||
struct lock_file;
|
struct lock_file;
|
||||||
@@ -14,59 +14,12 @@ struct submodule_cache;
|
|||||||
struct promisor_remote_config;
|
struct promisor_remote_config;
|
||||||
struct remote_state;
|
struct remote_state;
|
||||||
|
|
||||||
enum untracked_cache_setting {
|
|
||||||
UNTRACKED_CACHE_KEEP,
|
|
||||||
UNTRACKED_CACHE_REMOVE,
|
|
||||||
UNTRACKED_CACHE_WRITE,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum fetch_negotiation_setting {
|
|
||||||
FETCH_NEGOTIATION_CONSECUTIVE,
|
|
||||||
FETCH_NEGOTIATION_SKIPPING,
|
|
||||||
FETCH_NEGOTIATION_NOOP,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ref_storage_format {
|
enum ref_storage_format {
|
||||||
REF_STORAGE_FORMAT_UNKNOWN,
|
REF_STORAGE_FORMAT_UNKNOWN,
|
||||||
REF_STORAGE_FORMAT_FILES,
|
REF_STORAGE_FORMAT_FILES,
|
||||||
REF_STORAGE_FORMAT_REFTABLE,
|
REF_STORAGE_FORMAT_REFTABLE,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct repo_settings {
|
|
||||||
int initialized;
|
|
||||||
|
|
||||||
int core_commit_graph;
|
|
||||||
int commit_graph_generation_version;
|
|
||||||
int commit_graph_changed_paths_version;
|
|
||||||
int gc_write_commit_graph;
|
|
||||||
int fetch_write_commit_graph;
|
|
||||||
int command_requires_full_index;
|
|
||||||
int sparse_index;
|
|
||||||
int pack_read_reverse_index;
|
|
||||||
int pack_use_bitmap_boundary_traversal;
|
|
||||||
int pack_use_multi_pack_reuse;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Does this repository have core.useReplaceRefs=true (on by
|
|
||||||
* default)? This provides a repository-scoped version of this
|
|
||||||
* config, though it could be disabled process-wide via some Git
|
|
||||||
* builtins or the --no-replace-objects option. See
|
|
||||||
* replace_refs_enabled() for more details.
|
|
||||||
*/
|
|
||||||
int read_replace_refs;
|
|
||||||
|
|
||||||
struct fsmonitor_settings *fsmonitor; /* lazily loaded */
|
|
||||||
|
|
||||||
int index_version;
|
|
||||||
int index_skip_hash;
|
|
||||||
enum untracked_cache_setting core_untracked_cache;
|
|
||||||
|
|
||||||
int pack_use_sparse;
|
|
||||||
enum fetch_negotiation_setting fetch_negotiation_algorithm;
|
|
||||||
|
|
||||||
int core_multi_pack_index;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct repo_path_cache {
|
struct repo_path_cache {
|
||||||
char *squash_msg;
|
char *squash_msg;
|
||||||
char *merge_msg;
|
char *merge_msg;
|
||||||
@@ -206,6 +159,13 @@ struct repository {
|
|||||||
extern struct repository *the_repository;
|
extern struct repository *the_repository;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *repo_get_git_dir(struct repository *repo);
|
||||||
|
const char *repo_get_common_dir(struct repository *repo);
|
||||||
|
const char *repo_get_object_directory(struct repository *repo);
|
||||||
|
const char *repo_get_index_file(struct repository *repo);
|
||||||
|
const char *repo_get_graft_file(struct repository *repo);
|
||||||
|
const char *repo_get_work_tree(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
|
||||||
* will default back to the path according to the default layout.
|
* will default back to the path according to the default layout.
|
||||||
@@ -266,8 +226,6 @@ int repo_read_index_unmerged(struct repository *);
|
|||||||
*/
|
*/
|
||||||
void repo_update_index_if_able(struct repository *, struct lock_file *);
|
void repo_update_index_if_able(struct repository *, struct lock_file *);
|
||||||
|
|
||||||
void prepare_repo_settings(struct repository *r);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return 1 if upgrade repository format to target_version succeeded,
|
* Return 1 if upgrade repository format to target_version succeeded,
|
||||||
* 0 if no upgrade is necessary, and -1 when upgrade is not possible.
|
* 0 if no upgrade is necessary, and -1 when upgrade is not possible.
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
140
setup.c
140
setup.c
@@ -7,16 +7,22 @@
|
|||||||
#include "exec-cmd.h"
|
#include "exec-cmd.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "hex.h"
|
#include "hex.h"
|
||||||
|
#include "object-file.h"
|
||||||
#include "object-name.h"
|
#include "object-name.h"
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
|
#include "replace-object.h"
|
||||||
#include "repository.h"
|
#include "repository.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
#include "shallow.h"
|
||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
|
#include "strvec.h"
|
||||||
#include "chdir-notify.h"
|
#include "chdir-notify.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "quote.h"
|
#include "quote.h"
|
||||||
|
#include "tmp-objdir.h"
|
||||||
|
#include "trace.h"
|
||||||
#include "trace2.h"
|
#include "trace2.h"
|
||||||
#include "worktree.h"
|
#include "worktree.h"
|
||||||
#include "exec-cmd.h"
|
#include "exec-cmd.h"
|
||||||
@@ -51,7 +57,7 @@ static int abspath_part_inside_repo(char *path)
|
|||||||
size_t wtlen;
|
size_t wtlen;
|
||||||
char *path0;
|
char *path0;
|
||||||
int off;
|
int off;
|
||||||
const char *work_tree = precompose_string_if_needed(get_git_work_tree());
|
const char *work_tree = precompose_string_if_needed(repo_get_work_tree(the_repository));
|
||||||
struct strbuf realpath = STRBUF_INIT;
|
struct strbuf realpath = STRBUF_INIT;
|
||||||
|
|
||||||
if (!work_tree)
|
if (!work_tree)
|
||||||
@@ -147,9 +153,9 @@ char *prefix_path(const char *prefix, int len, const char *path)
|
|||||||
{
|
{
|
||||||
char *r = prefix_path_gently(prefix, len, NULL, path);
|
char *r = prefix_path_gently(prefix, len, NULL, path);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
const char *hint_path = get_git_work_tree();
|
const char *hint_path = repo_get_work_tree(the_repository);
|
||||||
if (!hint_path)
|
if (!hint_path)
|
||||||
hint_path = get_git_dir();
|
hint_path = repo_get_git_dir(the_repository);
|
||||||
die(_("'%s' is outside repository at '%s'"), path,
|
die(_("'%s' is outside repository at '%s'"), path,
|
||||||
absolute_path(hint_path));
|
absolute_path(hint_path));
|
||||||
}
|
}
|
||||||
@@ -468,14 +474,14 @@ int is_nonbare_repository_dir(struct strbuf *path)
|
|||||||
int is_inside_git_dir(void)
|
int is_inside_git_dir(void)
|
||||||
{
|
{
|
||||||
if (inside_git_dir < 0)
|
if (inside_git_dir < 0)
|
||||||
inside_git_dir = is_inside_dir(get_git_dir());
|
inside_git_dir = is_inside_dir(repo_get_git_dir(the_repository));
|
||||||
return inside_git_dir;
|
return inside_git_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
int is_inside_work_tree(void)
|
int is_inside_work_tree(void)
|
||||||
{
|
{
|
||||||
if (inside_work_tree < 0)
|
if (inside_work_tree < 0)
|
||||||
inside_work_tree = is_inside_dir(get_git_work_tree());
|
inside_work_tree = is_inside_dir(repo_get_work_tree(the_repository));
|
||||||
return inside_work_tree;
|
return inside_work_tree;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -490,7 +496,7 @@ void setup_work_tree(void)
|
|||||||
if (work_tree_config_is_bogus)
|
if (work_tree_config_is_bogus)
|
||||||
die(_("unable to set up work tree using invalid config"));
|
die(_("unable to set up work tree using invalid config"));
|
||||||
|
|
||||||
work_tree = get_git_work_tree();
|
work_tree = repo_get_work_tree(the_repository);
|
||||||
if (!work_tree || chdir_notify(work_tree))
|
if (!work_tree || chdir_notify(work_tree))
|
||||||
die(_("this operation must be run in a work tree"));
|
die(_("this operation must be run in a work tree"));
|
||||||
|
|
||||||
@@ -547,7 +553,7 @@ static void setup_original_cwd(void)
|
|||||||
* Get our worktree; we only protect the current working directory
|
* Get our worktree; we only protect the current working directory
|
||||||
* if it's in the worktree.
|
* if it's in the worktree.
|
||||||
*/
|
*/
|
||||||
worktree = get_git_work_tree();
|
worktree = repo_get_work_tree(the_repository);
|
||||||
if (!worktree)
|
if (!worktree)
|
||||||
goto no_prevention_needed;
|
goto no_prevention_needed;
|
||||||
|
|
||||||
@@ -1062,9 +1068,9 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,
|
|||||||
set_git_work_tree(".");
|
set_git_work_tree(".");
|
||||||
|
|
||||||
/* set_git_work_tree() must have been called by now */
|
/* set_git_work_tree() must have been called by now */
|
||||||
worktree = get_git_work_tree();
|
worktree = repo_get_work_tree(the_repository);
|
||||||
|
|
||||||
/* both get_git_work_tree() and cwd are already normalized */
|
/* both repo_get_work_tree() and cwd are already normalized */
|
||||||
if (!strcmp(cwd->buf, worktree)) { /* cwd == worktree */
|
if (!strcmp(cwd->buf, worktree)) { /* cwd == worktree */
|
||||||
set_git_dir(gitdirenv, 0);
|
set_git_dir(gitdirenv, 0);
|
||||||
free(gitfile);
|
free(gitfile);
|
||||||
@@ -1613,6 +1619,106 @@ enum discovery_result discover_git_directory_reason(struct strbuf *commondir,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setup_git_env(const char *git_dir)
|
||||||
|
{
|
||||||
|
char *git_replace_ref_base;
|
||||||
|
const char *shallow_file;
|
||||||
|
const char *replace_ref_base;
|
||||||
|
struct set_gitdir_args args = { NULL };
|
||||||
|
struct strvec to_free = STRVEC_INIT;
|
||||||
|
|
||||||
|
args.commondir = getenv_safe(&to_free, GIT_COMMON_DIR_ENVIRONMENT);
|
||||||
|
args.object_dir = getenv_safe(&to_free, DB_ENVIRONMENT);
|
||||||
|
args.graft_file = getenv_safe(&to_free, GRAFT_ENVIRONMENT);
|
||||||
|
args.index_file = getenv_safe(&to_free, INDEX_ENVIRONMENT);
|
||||||
|
args.alternate_db = getenv_safe(&to_free, ALTERNATE_DB_ENVIRONMENT);
|
||||||
|
if (getenv(GIT_QUARANTINE_ENVIRONMENT)) {
|
||||||
|
args.disable_ref_updates = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
repo_set_gitdir(the_repository, git_dir, &args);
|
||||||
|
strvec_clear(&to_free);
|
||||||
|
|
||||||
|
if (getenv(NO_REPLACE_OBJECTS_ENVIRONMENT))
|
||||||
|
disable_replace_refs();
|
||||||
|
replace_ref_base = getenv(GIT_REPLACE_REF_BASE_ENVIRONMENT);
|
||||||
|
git_replace_ref_base = xstrdup(replace_ref_base ? replace_ref_base
|
||||||
|
: "refs/replace/");
|
||||||
|
update_ref_namespace(NAMESPACE_REPLACE, git_replace_ref_base);
|
||||||
|
|
||||||
|
shallow_file = getenv(GIT_SHALLOW_FILE_ENVIRONMENT);
|
||||||
|
if (shallow_file)
|
||||||
|
set_alternate_shallow_file(the_repository, shallow_file, 0);
|
||||||
|
|
||||||
|
if (git_env_bool(NO_LAZY_FETCH_ENVIRONMENT, 0))
|
||||||
|
fetch_if_missing = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void set_git_dir_1(const char *path)
|
||||||
|
{
|
||||||
|
xsetenv(GIT_DIR_ENVIRONMENT, path, 1);
|
||||||
|
setup_git_env(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void update_relative_gitdir(const char *name UNUSED,
|
||||||
|
const char *old_cwd,
|
||||||
|
const char *new_cwd,
|
||||||
|
void *data UNUSED)
|
||||||
|
{
|
||||||
|
char *path = reparent_relative_path(old_cwd, new_cwd,
|
||||||
|
repo_get_git_dir(the_repository));
|
||||||
|
struct tmp_objdir *tmp_objdir = tmp_objdir_unapply_primary_odb();
|
||||||
|
|
||||||
|
trace_printf_key(&trace_setup_key,
|
||||||
|
"setup: move $GIT_DIR to '%s'",
|
||||||
|
path);
|
||||||
|
set_git_dir_1(path);
|
||||||
|
if (tmp_objdir)
|
||||||
|
tmp_objdir_reapply_primary_odb(tmp_objdir, old_cwd, new_cwd);
|
||||||
|
free(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_git_dir(const char *path, int make_realpath)
|
||||||
|
{
|
||||||
|
struct strbuf realpath = STRBUF_INIT;
|
||||||
|
|
||||||
|
if (make_realpath) {
|
||||||
|
strbuf_realpath(&realpath, path, 1);
|
||||||
|
path = realpath.buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_git_dir_1(path);
|
||||||
|
if (!is_absolute_path(path))
|
||||||
|
chdir_notify_register(NULL, update_relative_gitdir, NULL);
|
||||||
|
|
||||||
|
strbuf_release(&realpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int git_work_tree_initialized;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note. This works only before you used a work tree. This was added
|
||||||
|
* primarily to support git-clone to work in a new repository it just
|
||||||
|
* created, and is not meant to flip between different work trees.
|
||||||
|
*/
|
||||||
|
void set_git_work_tree(const char *new_work_tree)
|
||||||
|
{
|
||||||
|
if (git_work_tree_initialized) {
|
||||||
|
struct strbuf realpath = STRBUF_INIT;
|
||||||
|
|
||||||
|
strbuf_realpath(&realpath, new_work_tree, 1);
|
||||||
|
new_work_tree = realpath.buf;
|
||||||
|
if (strcmp(new_work_tree, the_repository->worktree))
|
||||||
|
die("internal error: work tree has already been set\n"
|
||||||
|
"Current worktree: %s\nNew worktree: %s",
|
||||||
|
the_repository->worktree, new_work_tree);
|
||||||
|
strbuf_release(&realpath);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
git_work_tree_initialized = 1;
|
||||||
|
repo_set_worktree(the_repository, new_work_tree);
|
||||||
|
}
|
||||||
|
|
||||||
const char *setup_git_directory_gently(int *nongit_ok)
|
const char *setup_git_directory_gently(int *nongit_ok)
|
||||||
{
|
{
|
||||||
static struct strbuf cwd = STRBUF_INIT;
|
static struct strbuf cwd = STRBUF_INIT;
|
||||||
@@ -1836,7 +1942,7 @@ void check_repository_format(struct repository_format *fmt)
|
|||||||
struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT;
|
struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT;
|
||||||
if (!fmt)
|
if (!fmt)
|
||||||
fmt = &repo_fmt;
|
fmt = &repo_fmt;
|
||||||
check_repository_format_gently(get_git_dir(), fmt, NULL);
|
check_repository_format_gently(repo_get_git_dir(the_repository), fmt, NULL);
|
||||||
startup_info->have_repository = 1;
|
startup_info->have_repository = 1;
|
||||||
repo_set_hash_algo(the_repository, fmt->hash_algo);
|
repo_set_hash_algo(the_repository, fmt->hash_algo);
|
||||||
repo_set_compat_hash_algo(the_repository, fmt->compat_hash_algo);
|
repo_set_compat_hash_algo(the_repository, fmt->compat_hash_algo);
|
||||||
@@ -2068,7 +2174,7 @@ static void copy_templates(const char *option_template)
|
|||||||
goto close_free_return;
|
goto close_free_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
strbuf_addstr(&path, get_git_common_dir());
|
strbuf_addstr(&path, repo_get_common_dir(the_repository));
|
||||||
strbuf_complete(&path, '/');
|
strbuf_complete(&path, '/');
|
||||||
copy_templates_1(&path, &template_path, dir);
|
copy_templates_1(&path, &template_path, dir);
|
||||||
close_free_return:
|
close_free_return:
|
||||||
@@ -2192,7 +2298,7 @@ static int create_default_files(const char *template_path,
|
|||||||
char *path;
|
char *path;
|
||||||
int reinit;
|
int reinit;
|
||||||
int filemode;
|
int filemode;
|
||||||
const char *work_tree = get_git_work_tree();
|
const char *work_tree = repo_get_work_tree(the_repository);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* First copy the templates -- we might have the default
|
* First copy the templates -- we might have the default
|
||||||
@@ -2224,7 +2330,7 @@ static int create_default_files(const char *template_path,
|
|||||||
* shared-repository settings, we would need to fix them up.
|
* shared-repository settings, we would need to fix them up.
|
||||||
*/
|
*/
|
||||||
if (get_shared_repository()) {
|
if (get_shared_repository()) {
|
||||||
adjust_shared_perm(get_git_dir());
|
adjust_shared_perm(repo_get_git_dir(the_repository));
|
||||||
}
|
}
|
||||||
|
|
||||||
initialize_repository_version(fmt->hash_algo, fmt->ref_storage_format, 0);
|
initialize_repository_version(fmt->hash_algo, fmt->ref_storage_format, 0);
|
||||||
@@ -2248,7 +2354,7 @@ static int create_default_files(const char *template_path,
|
|||||||
else {
|
else {
|
||||||
git_config_set("core.bare", "false");
|
git_config_set("core.bare", "false");
|
||||||
/* allow template config file to override the default */
|
/* allow template config file to override the default */
|
||||||
if (log_all_ref_updates == LOG_REFS_UNSET)
|
if (repo_settings_get_log_all_ref_updates(the_repository) == LOG_REFS_UNSET)
|
||||||
git_config_set("core.logallrefupdates", "true");
|
git_config_set("core.logallrefupdates", "true");
|
||||||
if (needs_work_tree_config(original_git_dir, work_tree))
|
if (needs_work_tree_config(original_git_dir, work_tree))
|
||||||
git_config_set("core.worktree", work_tree);
|
git_config_set("core.worktree", work_tree);
|
||||||
@@ -2282,7 +2388,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);
|
||||||
@@ -2434,12 +2540,12 @@ int init_db(const char *git_dir, const char *real_git_dir,
|
|||||||
die(_("%s already exists"), real_git_dir);
|
die(_("%s already exists"), real_git_dir);
|
||||||
|
|
||||||
set_git_dir(real_git_dir, 1);
|
set_git_dir(real_git_dir, 1);
|
||||||
git_dir = get_git_dir();
|
git_dir = repo_get_git_dir(the_repository);
|
||||||
separate_git_dir(git_dir, original_git_dir);
|
separate_git_dir(git_dir, original_git_dir);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
set_git_dir(git_dir, 1);
|
set_git_dir(git_dir, 1);
|
||||||
git_dir = get_git_dir();
|
git_dir = repo_get_git_dir(the_repository);
|
||||||
}
|
}
|
||||||
startup_info->have_repository = 1;
|
startup_info->have_repository = 1;
|
||||||
|
|
||||||
|
|||||||
5
setup.h
5
setup.h
@@ -94,6 +94,9 @@ static inline int discover_git_directory(struct strbuf *commondir,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_git_dir(const char *path, int make_realpath);
|
||||||
|
void set_git_work_tree(const char *tree);
|
||||||
|
|
||||||
const char *setup_git_directory_gently(int *);
|
const char *setup_git_directory_gently(int *);
|
||||||
const char *setup_git_directory(void);
|
const char *setup_git_directory(void);
|
||||||
char *prefix_path(const char *prefix, int len, const char *path);
|
char *prefix_path(const char *prefix, int len, const char *path);
|
||||||
@@ -176,7 +179,7 @@ int verify_repository_format(const struct repository_format *format,
|
|||||||
struct strbuf *err);
|
struct strbuf *err);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check the repository format version in the path found in get_git_dir(),
|
* Check the repository format version in the path found in repo_get_git_dir(the_repository),
|
||||||
* and die if it is a version we don't understand. Generally one would
|
* and die if it is a version we don't understand. Generally one would
|
||||||
* set_git_dir() before calling this, and use it only for "are we in a valid
|
* set_git_dir() before calling this, and use it only for "are we in a valid
|
||||||
* repo?".
|
* repo?".
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "environment.h"
|
#include "environment.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "environment.h"
|
#include "environment.h"
|
||||||
#include "statinfo.h"
|
#include "statinfo.h"
|
||||||
|
|||||||
@@ -2464,7 +2464,7 @@ void absorb_git_dir_into_superproject(const char *path,
|
|||||||
} else {
|
} else {
|
||||||
/* Is it already absorbed into the superprojects git dir? */
|
/* Is it already absorbed into the superprojects git dir? */
|
||||||
char *real_sub_git_dir = real_pathdup(sub_git_dir, 1);
|
char *real_sub_git_dir = real_pathdup(sub_git_dir, 1);
|
||||||
char *real_common_git_dir = real_pathdup(get_git_common_dir(), 1);
|
char *real_common_git_dir = real_pathdup(repo_get_common_dir(the_repository), 1);
|
||||||
|
|
||||||
if (!starts_with(real_sub_git_dir, real_common_git_dir))
|
if (!starts_with(real_sub_git_dir, real_common_git_dir))
|
||||||
relocate_single_git_dir_into_superproject(path, super_prefix);
|
relocate_single_git_dir_into_superproject(path, super_prefix);
|
||||||
|
|||||||
@@ -96,7 +96,8 @@ int cmd__config(int argc, const char **argv)
|
|||||||
struct config_set cs;
|
struct config_set cs;
|
||||||
|
|
||||||
if (argc == 3 && !strcmp(argv[1], "read_early_config")) {
|
if (argc == 3 && !strcmp(argv[1], "read_early_config")) {
|
||||||
read_early_config(early_config_cb, (void *)argv[2]);
|
read_early_config(the_repository, early_config_cb,
|
||||||
|
(void *)argv[2]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "test-tool.h"
|
#include "test-tool.h"
|
||||||
#include "abspath.h"
|
#include "abspath.h"
|
||||||
#include "environment.h"
|
#include "environment.h"
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
10
trace.c
10
trace.c
@@ -21,9 +21,11 @@
|
|||||||
* along with this program; if not, see <https://www.gnu.org/licenses/>.
|
* along with this program; if not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "abspath.h"
|
#include "abspath.h"
|
||||||
#include "environment.h"
|
#include "repository.h"
|
||||||
#include "quote.h"
|
#include "quote.h"
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
@@ -305,14 +307,14 @@ void trace_repo_setup(void)
|
|||||||
|
|
||||||
cwd = xgetcwd();
|
cwd = xgetcwd();
|
||||||
|
|
||||||
if (!(git_work_tree = get_git_work_tree()))
|
if (!(git_work_tree = repo_get_work_tree(the_repository)))
|
||||||
git_work_tree = "(null)";
|
git_work_tree = "(null)";
|
||||||
|
|
||||||
if (!startup_info->prefix)
|
if (!startup_info->prefix)
|
||||||
prefix = "(null)";
|
prefix = "(null)";
|
||||||
|
|
||||||
trace_printf_key(&trace_setup_key, "setup: git_dir: %s\n", quote_crnl(get_git_dir()));
|
trace_printf_key(&trace_setup_key, "setup: git_dir: %s\n", quote_crnl(repo_get_git_dir(the_repository)));
|
||||||
trace_printf_key(&trace_setup_key, "setup: git_common_dir: %s\n", quote_crnl(get_git_common_dir()));
|
trace_printf_key(&trace_setup_key, "setup: git_common_dir: %s\n", quote_crnl(repo_get_common_dir(the_repository)));
|
||||||
trace_printf_key(&trace_setup_key, "setup: worktree: %s\n", quote_crnl(git_work_tree));
|
trace_printf_key(&trace_setup_key, "setup: worktree: %s\n", quote_crnl(git_work_tree));
|
||||||
trace_printf_key(&trace_setup_key, "setup: cwd: %s\n", quote_crnl(cwd));
|
trace_printf_key(&trace_setup_key, "setup: cwd: %s\n", quote_crnl(cwd));
|
||||||
trace_printf_key(&trace_setup_key, "setup: prefix: %s\n", quote_crnl(prefix));
|
trace_printf_key(&trace_setup_key, "setup: prefix: %s\n", quote_crnl(prefix));
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "strbuf.h"
|
#include "strbuf.h"
|
||||||
@@ -124,7 +126,7 @@ void tr2_cfg_list_config_fl(const char *file, int line)
|
|||||||
struct tr2_cfg_data data = { file, line };
|
struct tr2_cfg_data data = { file, line };
|
||||||
|
|
||||||
if (tr2_cfg_load_patterns() > 0)
|
if (tr2_cfg_load_patterns() > 0)
|
||||||
read_early_config(tr2_cfg_cb, &data);
|
read_early_config(the_repository, tr2_cfg_cb, &data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tr2_list_env_vars_fl(const char *file, int line)
|
void tr2_list_env_vars_fl(const char *file, int line)
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ static struct child_process *get_helper(struct transport *transport)
|
|||||||
|
|
||||||
if (have_git_dir())
|
if (have_git_dir())
|
||||||
strvec_pushf(&helper->env, "%s=%s",
|
strvec_pushf(&helper->env, "%s=%s",
|
||||||
GIT_DIR_ENVIRONMENT, get_git_dir());
|
GIT_DIR_ENVIRONMENT, repo_get_git_dir(the_repository));
|
||||||
|
|
||||||
helper->trace2_child_class = helper->args.v[0]; /* "remote-<name>" */
|
helper->trace2_child_class = helper->args.v[0]; /* "remote-<name>" */
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Helper functions for tree diff generation
|
* Helper functions for tree diff generation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "diff.h"
|
#include "diff.h"
|
||||||
#include "diffcore.h"
|
#include "diffcore.h"
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#define USE_THE_REPOSITORY_VARIABLE
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "userdiff.h"
|
#include "userdiff.h"
|
||||||
|
|||||||
12
worktree.c
12
worktree.c
@@ -57,7 +57,7 @@ static void add_head_info(struct worktree *wt)
|
|||||||
|
|
||||||
static int is_current_worktree(struct worktree *wt)
|
static int is_current_worktree(struct worktree *wt)
|
||||||
{
|
{
|
||||||
char *git_dir = absolute_pathdup(get_git_dir());
|
char *git_dir = absolute_pathdup(repo_get_git_dir(the_repository));
|
||||||
const char *wt_git_dir = get_worktree_git_dir(wt);
|
const char *wt_git_dir = get_worktree_git_dir(wt);
|
||||||
int is_current = !fspathcmp(git_dir, absolute_path(wt_git_dir));
|
int is_current = !fspathcmp(git_dir, absolute_path(wt_git_dir));
|
||||||
free(git_dir);
|
free(git_dir);
|
||||||
@@ -72,7 +72,7 @@ static struct worktree *get_main_worktree(int skip_reading_head)
|
|||||||
struct worktree *worktree = NULL;
|
struct worktree *worktree = NULL;
|
||||||
struct strbuf worktree_path = STRBUF_INIT;
|
struct strbuf worktree_path = STRBUF_INIT;
|
||||||
|
|
||||||
strbuf_add_real_path(&worktree_path, get_git_common_dir());
|
strbuf_add_real_path(&worktree_path, repo_get_common_dir(the_repository));
|
||||||
strbuf_strip_suffix(&worktree_path, "/.git");
|
strbuf_strip_suffix(&worktree_path, "/.git");
|
||||||
|
|
||||||
CALLOC_ARRAY(worktree, 1);
|
CALLOC_ARRAY(worktree, 1);
|
||||||
@@ -143,7 +143,7 @@ static struct worktree **get_worktrees_internal(int skip_reading_head)
|
|||||||
|
|
||||||
list[counter++] = get_main_worktree(skip_reading_head);
|
list[counter++] = get_main_worktree(skip_reading_head);
|
||||||
|
|
||||||
strbuf_addf(&path, "%s/worktrees", get_git_common_dir());
|
strbuf_addf(&path, "%s/worktrees", repo_get_common_dir(the_repository));
|
||||||
dir = opendir(path.buf);
|
dir = opendir(path.buf);
|
||||||
strbuf_release(&path);
|
strbuf_release(&path);
|
||||||
if (dir) {
|
if (dir) {
|
||||||
@@ -171,9 +171,9 @@ struct worktree **get_worktrees(void)
|
|||||||
const char *get_worktree_git_dir(const struct worktree *wt)
|
const char *get_worktree_git_dir(const struct worktree *wt)
|
||||||
{
|
{
|
||||||
if (!wt)
|
if (!wt)
|
||||||
return get_git_dir();
|
return repo_get_git_dir(the_repository);
|
||||||
else if (!wt->id)
|
else if (!wt->id)
|
||||||
return get_git_common_dir();
|
return repo_get_common_dir(the_repository);
|
||||||
else
|
else
|
||||||
return git_common_path("worktrees/%s", wt->id);
|
return git_common_path("worktrees/%s", wt->id);
|
||||||
}
|
}
|
||||||
@@ -626,7 +626,7 @@ static int is_main_worktree_path(const char *path)
|
|||||||
|
|
||||||
strbuf_add_real_path(&target, path);
|
strbuf_add_real_path(&target, path);
|
||||||
strbuf_strip_suffix(&target, "/.git");
|
strbuf_strip_suffix(&target, "/.git");
|
||||||
strbuf_add_real_path(&maindir, get_git_common_dir());
|
strbuf_add_real_path(&maindir, repo_get_common_dir(the_repository));
|
||||||
strbuf_strip_suffix(&maindir, "/.git");
|
strbuf_strip_suffix(&maindir, "/.git");
|
||||||
cmp = fspathcmp(maindir.buf, target.buf);
|
cmp = fspathcmp(maindir.buf, target.buf);
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#include "revision.h"
|
#include "revision.h"
|
||||||
#include "diffcore.h"
|
#include "diffcore.h"
|
||||||
#include "quote.h"
|
#include "quote.h"
|
||||||
|
#include "repository.h"
|
||||||
#include "run-command.h"
|
#include "run-command.h"
|
||||||
#include "strvec.h"
|
#include "strvec.h"
|
||||||
#include "remote.h"
|
#include "remote.h"
|
||||||
@@ -152,7 +153,7 @@ void wt_status_prepare(struct repository *r, struct wt_status *s)
|
|||||||
"HEAD", 0, NULL, NULL);
|
"HEAD", 0, NULL, NULL);
|
||||||
s->reference = "HEAD";
|
s->reference = "HEAD";
|
||||||
s->fp = stdout;
|
s->fp = stdout;
|
||||||
s->index_file = get_index_file();
|
s->index_file = repo_get_index_file(the_repository);
|
||||||
s->change.strdup_strings = 1;
|
s->change.strdup_strings = 1;
|
||||||
s->untracked.strdup_strings = 1;
|
s->untracked.strdup_strings = 1;
|
||||||
s->ignored.strdup_strings = 1;
|
s->ignored.strdup_strings = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user