mirror of
https://github.com/git-for-windows/git.git
synced 2026-06-16 13:04:57 -05:00
Merge branch 'ob/more-repo-config-values'
Many core configuration variables have been migrated from global variables into 'repo_config_values' to tie them to a specific repository instance, avoiding cross-repository state leakage. * ob/more-repo-config-values: environment: move "warn_on_object_refname_ambiguity" into `struct repo_config_values` environment: move "sparse_expect_files_outside_of_patterns" into `struct repo_config_values` environment: move "core_sparse_checkout_cone" into `struct repo_config_values` environment: move "precomposed_unicode" into `struct repo_config_values` environment: move "pack_compression_level" into `struct repo_config_values` environment: move `zlib_compression_level` into `struct repo_config_values` environment: move "check_stat" into `struct repo_config_values` environment: move "trust_ctime" into `struct repo_config_values`
This commit is contained in:
@@ -930,6 +930,7 @@ static int batch_objects(struct batch_options *opt)
|
||||
struct strbuf input = STRBUF_INIT;
|
||||
struct strbuf output = STRBUF_INIT;
|
||||
struct expand_data data = EXPAND_DATA_INIT;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
int save_warning;
|
||||
int retval = 0;
|
||||
|
||||
@@ -1002,8 +1003,8 @@ static int batch_objects(struct batch_options *opt)
|
||||
* warn) ends up dwarfing the actual cost of the object lookups
|
||||
* themselves. We can work around it by just turning off the warning.
|
||||
*/
|
||||
save_warning = warn_on_object_refname_ambiguity;
|
||||
warn_on_object_refname_ambiguity = 0;
|
||||
save_warning = cfg->warn_on_object_refname_ambiguity;
|
||||
cfg->warn_on_object_refname_ambiguity = 0;
|
||||
|
||||
if (opt->batch_mode == BATCH_MODE_QUEUE_AND_DISPATCH) {
|
||||
batch_objects_command(opt, &output, &data);
|
||||
@@ -1031,7 +1032,7 @@ static int batch_objects(struct batch_options *opt)
|
||||
cleanup:
|
||||
strbuf_release(&input);
|
||||
strbuf_release(&output);
|
||||
warn_on_object_refname_ambiguity = save_warning;
|
||||
cfg->warn_on_object_refname_ambiguity = save_warning;
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
@@ -965,6 +965,7 @@ static int store_object(
|
||||
unsigned long hdrlen, deltalen;
|
||||
struct git_hash_ctx c;
|
||||
git_zstream s;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
hdrlen = format_object_header((char *)hdr, sizeof(hdr), type,
|
||||
dat->len);
|
||||
@@ -1005,7 +1006,7 @@ static int store_object(
|
||||
} else
|
||||
delta = NULL;
|
||||
|
||||
git_deflate_init(&s, pack_compression_level);
|
||||
git_deflate_init(&s, cfg->pack_compression_level);
|
||||
if (delta) {
|
||||
s.next_in = delta;
|
||||
s.avail_in = deltalen;
|
||||
@@ -1032,7 +1033,7 @@ static int store_object(
|
||||
if (delta) {
|
||||
FREE_AND_NULL(delta);
|
||||
|
||||
git_deflate_init(&s, pack_compression_level);
|
||||
git_deflate_init(&s, cfg->pack_compression_level);
|
||||
s.next_in = (void *)dat->buf;
|
||||
s.avail_in = dat->len;
|
||||
s.avail_out = git_deflate_bound(&s, s.avail_in);
|
||||
@@ -1115,6 +1116,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
|
||||
struct git_hash_ctx c;
|
||||
git_zstream s;
|
||||
struct hashfile_checkpoint checkpoint;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
int status = Z_OK;
|
||||
|
||||
/* Determine if we should auto-checkpoint. */
|
||||
@@ -1134,7 +1136,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
|
||||
|
||||
crc32_begin(pack_file);
|
||||
|
||||
git_deflate_init(&s, pack_compression_level);
|
||||
git_deflate_init(&s, cfg->pack_compression_level);
|
||||
|
||||
hdrlen = encode_in_pack_object_header(out_buf, out_sz, OBJ_BLOB, len);
|
||||
|
||||
|
||||
@@ -1417,8 +1417,9 @@ static int write_compressed(struct hashfile *f, void *in, unsigned int size)
|
||||
git_zstream stream;
|
||||
int status;
|
||||
unsigned char outbuf[4096];
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
git_deflate_init(&stream, zlib_compression_level);
|
||||
git_deflate_init(&stream, cfg->zlib_compression_level);
|
||||
stream.next_in = in;
|
||||
stream.avail_in = size;
|
||||
|
||||
|
||||
@@ -575,7 +575,7 @@ remove_entry:
|
||||
|
||||
if (ignore_sparse &&
|
||||
cfg->apply_sparse_checkout &&
|
||||
core_sparse_checkout_cone) {
|
||||
cfg->core_sparse_checkout_cone) {
|
||||
/*
|
||||
* NEEDSWORK: we are *not* paying attention to
|
||||
* "out-to-out" move (<source> is out-of-cone and
|
||||
|
||||
@@ -386,8 +386,9 @@ static unsigned long do_compress(void **pptr, unsigned long size)
|
||||
git_zstream stream;
|
||||
void *in, *out;
|
||||
unsigned long maxsize;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
git_deflate_init(&stream, pack_compression_level);
|
||||
git_deflate_init(&stream, cfg->pack_compression_level);
|
||||
maxsize = git_deflate_bound(&stream, size);
|
||||
|
||||
in = *pptr;
|
||||
@@ -413,8 +414,9 @@ static unsigned long write_large_blob_data(struct odb_read_stream *st, struct ha
|
||||
unsigned char ibuf[1024 * 16];
|
||||
unsigned char obuf[1024 * 16];
|
||||
unsigned long olen = 0;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
git_deflate_init(&stream, pack_compression_level);
|
||||
git_deflate_init(&stream, cfg->pack_compression_level);
|
||||
|
||||
for (;;) {
|
||||
ssize_t readlen;
|
||||
@@ -4801,6 +4803,7 @@ static void get_object_list(struct rev_info *revs, struct strvec *argv)
|
||||
struct setup_revision_opt s_r_opt = {
|
||||
.allow_exclude_promisor_objects = 1,
|
||||
};
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
char line[1000];
|
||||
int flags = 0;
|
||||
int save_warning;
|
||||
@@ -4811,8 +4814,8 @@ static void get_object_list(struct rev_info *revs, struct strvec *argv)
|
||||
/* make sure shallows are read */
|
||||
is_repository_shallow(the_repository);
|
||||
|
||||
save_warning = warn_on_object_refname_ambiguity;
|
||||
warn_on_object_refname_ambiguity = 0;
|
||||
save_warning = cfg->warn_on_object_refname_ambiguity;
|
||||
cfg->warn_on_object_refname_ambiguity = 0;
|
||||
|
||||
while (fgets(line, sizeof(line), stdin) != NULL) {
|
||||
int len = strlen(line);
|
||||
@@ -4840,7 +4843,7 @@ static void get_object_list(struct rev_info *revs, struct strvec *argv)
|
||||
die(_("bad revision '%s'"), line);
|
||||
}
|
||||
|
||||
warn_on_object_refname_ambiguity = save_warning;
|
||||
cfg->warn_on_object_refname_ambiguity = save_warning;
|
||||
|
||||
if (use_bitmap_index && !get_object_list_from_bitmap(revs))
|
||||
return;
|
||||
@@ -5023,6 +5026,7 @@ int cmd_pack_objects(int argc,
|
||||
struct string_list keep_pack_list = STRING_LIST_INIT_NODUP;
|
||||
struct list_objects_filter_options filter_options =
|
||||
LIST_OBJECTS_FILTER_INIT;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
struct option pack_objects_options[] = {
|
||||
OPT_CALLBACK_F('q', "quiet", &progress, NULL,
|
||||
@@ -5104,7 +5108,7 @@ int cmd_pack_objects(int argc,
|
||||
N_("ignore packs that have companion .keep file")),
|
||||
OPT_STRING_LIST(0, "keep-pack", &keep_pack_list, N_("name"),
|
||||
N_("ignore this pack")),
|
||||
OPT_INTEGER(0, "compression", &pack_compression_level,
|
||||
OPT_INTEGER(0, "compression", &cfg->pack_compression_level,
|
||||
N_("pack compression level")),
|
||||
OPT_BOOL(0, "keep-true-parents", &grafts_keep_true_parents,
|
||||
N_("do not hide commits by grafts")),
|
||||
@@ -5260,10 +5264,10 @@ int cmd_pack_objects(int argc,
|
||||
|
||||
if (!reuse_object)
|
||||
reuse_delta = 0;
|
||||
if (pack_compression_level == -1)
|
||||
pack_compression_level = Z_DEFAULT_COMPRESSION;
|
||||
else if (pack_compression_level < 0 || pack_compression_level > Z_BEST_COMPRESSION)
|
||||
die(_("bad pack compression level %d"), pack_compression_level);
|
||||
if (cfg->pack_compression_level == -1)
|
||||
cfg->pack_compression_level = Z_DEFAULT_COMPRESSION;
|
||||
else if (cfg->pack_compression_level < 0 || cfg->pack_compression_level > Z_BEST_COMPRESSION)
|
||||
die(_("bad pack compression level %d"), cfg->pack_compression_level);
|
||||
|
||||
if (!delta_search_threads) /* --threads=0 means autodetect */
|
||||
delta_search_threads = online_cpus();
|
||||
|
||||
@@ -73,7 +73,7 @@ static int sparse_checkout_list(int argc, const char **argv, const char *prefix,
|
||||
|
||||
memset(&pl, 0, sizeof(pl));
|
||||
|
||||
pl.use_cone_patterns = core_sparse_checkout_cone;
|
||||
pl.use_cone_patterns = cfg->core_sparse_checkout_cone;
|
||||
|
||||
sparse_filename = get_sparse_checkout_filename();
|
||||
res = add_patterns_from_file_to_list(sparse_filename, "", 0, &pl, NULL, 0);
|
||||
@@ -334,6 +334,7 @@ static int write_patterns_and_update(struct repository *repo,
|
||||
FILE *fp;
|
||||
struct lock_file lk = LOCK_INIT;
|
||||
int result;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
sparse_filename = get_sparse_checkout_filename();
|
||||
|
||||
@@ -353,7 +354,7 @@ static int write_patterns_and_update(struct repository *repo,
|
||||
if (!fp)
|
||||
die_errno(_("unable to fdopen %s"), get_lock_file_path(&lk));
|
||||
|
||||
if (core_sparse_checkout_cone)
|
||||
if (cfg->core_sparse_checkout_cone)
|
||||
write_cone_to_file(fp, pl);
|
||||
else
|
||||
write_patterns_to_file(fp, pl);
|
||||
@@ -402,15 +403,15 @@ static enum sparse_checkout_mode update_cone_mode(int *cone_mode) {
|
||||
|
||||
/* If not specified, use previous definition of cone mode */
|
||||
if (*cone_mode == -1 && cfg->apply_sparse_checkout)
|
||||
*cone_mode = core_sparse_checkout_cone;
|
||||
*cone_mode = cfg->core_sparse_checkout_cone;
|
||||
|
||||
/* Set cone/non-cone mode appropriately */
|
||||
cfg->apply_sparse_checkout = 1;
|
||||
if (*cone_mode == 1 || *cone_mode == -1) {
|
||||
core_sparse_checkout_cone = 1;
|
||||
cfg->core_sparse_checkout_cone = 1;
|
||||
return MODE_CONE_PATTERNS;
|
||||
}
|
||||
core_sparse_checkout_cone = 0;
|
||||
cfg->core_sparse_checkout_cone = 0;
|
||||
return MODE_ALL_PATTERNS;
|
||||
}
|
||||
|
||||
@@ -577,7 +578,9 @@ static void add_patterns_from_input(struct pattern_list *pl,
|
||||
FILE *file)
|
||||
{
|
||||
int i;
|
||||
if (core_sparse_checkout_cone) {
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (cfg->core_sparse_checkout_cone) {
|
||||
struct strbuf line = STRBUF_INIT;
|
||||
|
||||
hashmap_init(&pl->recursive_hashmap, pl_hashmap_cmp, NULL, 0);
|
||||
@@ -636,13 +639,14 @@ static void add_patterns_cone_mode(int argc, const char **argv,
|
||||
struct pattern_entry *pe;
|
||||
struct hashmap_iter iter;
|
||||
struct pattern_list existing;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
char *sparse_filename = get_sparse_checkout_filename();
|
||||
|
||||
add_patterns_from_input(pl, argc, argv,
|
||||
use_stdin ? stdin : NULL);
|
||||
|
||||
memset(&existing, 0, sizeof(existing));
|
||||
existing.use_cone_patterns = core_sparse_checkout_cone;
|
||||
existing.use_cone_patterns = cfg->core_sparse_checkout_cone;
|
||||
|
||||
if (add_patterns_from_file_to_list(sparse_filename, "", 0,
|
||||
&existing, NULL, 0))
|
||||
@@ -690,7 +694,7 @@ static int modify_pattern_list(struct repository *repo,
|
||||
|
||||
switch (m) {
|
||||
case ADD:
|
||||
if (core_sparse_checkout_cone)
|
||||
if (cfg->core_sparse_checkout_cone)
|
||||
add_patterns_cone_mode(args->nr, args->v, pl, use_stdin);
|
||||
else
|
||||
add_patterns_literal(args->nr, args->v, pl, use_stdin);
|
||||
@@ -723,11 +727,12 @@ static void sanitize_paths(struct repository *repo,
|
||||
const char *prefix, int skip_checks)
|
||||
{
|
||||
int i;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (!args->nr)
|
||||
return;
|
||||
|
||||
if (prefix && *prefix && core_sparse_checkout_cone) {
|
||||
if (prefix && *prefix && cfg->core_sparse_checkout_cone) {
|
||||
/*
|
||||
* The args are not pathspecs, so unfortunately we
|
||||
* cannot imitate how cmd_add() uses parse_pathspec().
|
||||
@@ -745,10 +750,10 @@ static void sanitize_paths(struct repository *repo,
|
||||
if (skip_checks)
|
||||
return;
|
||||
|
||||
if (prefix && *prefix && !core_sparse_checkout_cone)
|
||||
if (prefix && *prefix && !cfg->core_sparse_checkout_cone)
|
||||
die(_("please run from the toplevel directory in non-cone mode"));
|
||||
|
||||
if (core_sparse_checkout_cone) {
|
||||
if (cfg->core_sparse_checkout_cone) {
|
||||
for (i = 0; i < args->nr; i++) {
|
||||
if (args->v[i][0] == '/')
|
||||
die(_("specify directories rather than patterns (no leading slash)"));
|
||||
@@ -770,7 +775,7 @@ static void sanitize_paths(struct repository *repo,
|
||||
if (S_ISSPARSEDIR(ce->ce_mode))
|
||||
continue;
|
||||
|
||||
if (core_sparse_checkout_cone)
|
||||
if (cfg->core_sparse_checkout_cone)
|
||||
die(_("'%s' is not a directory; to treat it as a directory anyway, rerun with --skip-checks"), args->v[i]);
|
||||
else
|
||||
warning(_("pass a leading slash before paths such as '%s' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual)."), args->v[i]);
|
||||
@@ -837,6 +842,7 @@ static struct sparse_checkout_set_opts {
|
||||
static int sparse_checkout_set(int argc, const char **argv, const char *prefix,
|
||||
struct repository *repo)
|
||||
{
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
int default_patterns_nr = 2;
|
||||
const char *default_patterns[] = {"/*", "!/*/", NULL};
|
||||
|
||||
@@ -874,7 +880,7 @@ static int sparse_checkout_set(int argc, const char **argv, const char *prefix,
|
||||
* non-cone mode, if nothing is specified, manually select just the
|
||||
* top-level directory (much as 'init' would do).
|
||||
*/
|
||||
if (!core_sparse_checkout_cone && !set_opts.use_stdin && argc == 0) {
|
||||
if (!cfg->core_sparse_checkout_cone && !set_opts.use_stdin && argc == 0) {
|
||||
for (int i = 0; i < default_patterns_nr; i++)
|
||||
strvec_push(&patterns, default_patterns[i]);
|
||||
} else {
|
||||
@@ -978,7 +984,7 @@ static int sparse_checkout_clean(int argc, const char **argv,
|
||||
setup_work_tree(the_repository);
|
||||
if (!cfg->apply_sparse_checkout)
|
||||
die(_("must be in a sparse-checkout to clean directories"));
|
||||
if (!core_sparse_checkout_cone)
|
||||
if (!cfg->core_sparse_checkout_cone)
|
||||
die(_("must be in a cone-mode sparse-checkout to clean directories"));
|
||||
|
||||
argc = parse_options(argc, argv, prefix,
|
||||
@@ -1142,6 +1148,7 @@ static int sparse_checkout_check_rules(int argc, const char **argv, const char *
|
||||
FILE *fp;
|
||||
int ret;
|
||||
struct pattern_list pl = {0};
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
char *sparse_filename;
|
||||
check_rules_opts.cone_mode = -1;
|
||||
|
||||
@@ -1153,7 +1160,7 @@ static int sparse_checkout_check_rules(int argc, const char **argv, const char *
|
||||
check_rules_opts.cone_mode = 1;
|
||||
|
||||
update_cone_mode(&check_rules_opts.cone_mode);
|
||||
pl.use_cone_patterns = core_sparse_checkout_cone;
|
||||
pl.use_cone_patterns = cfg->core_sparse_checkout_cone;
|
||||
if (check_rules_opts.rules_file) {
|
||||
fp = xfopen(check_rules_opts.rules_file, "r");
|
||||
add_patterns_from_input(&pl, argc, argv, fp);
|
||||
|
||||
@@ -48,16 +48,18 @@ void probe_utf8_pathname_composition(void)
|
||||
static const char *auml_nfc = "\xc3\xa4";
|
||||
static const char *auml_nfd = "\x61\xcc\x88";
|
||||
int output_fd;
|
||||
if (precomposed_unicode != -1)
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (cfg->precomposed_unicode != -1)
|
||||
return; /* We found it defined in the global config, respect it */
|
||||
repo_git_path_replace(the_repository, &path, "%s", auml_nfc);
|
||||
output_fd = open(path.buf, O_CREAT|O_EXCL|O_RDWR, 0600);
|
||||
if (output_fd >= 0) {
|
||||
close(output_fd);
|
||||
repo_git_path_replace(the_repository, &path, "%s", auml_nfd);
|
||||
precomposed_unicode = access(path.buf, R_OK) ? 0 : 1;
|
||||
cfg->precomposed_unicode = access(path.buf, R_OK) ? 0 : 1;
|
||||
repo_config_set(the_repository, "core.precomposeunicode",
|
||||
precomposed_unicode ? "true" : "false");
|
||||
cfg->precomposed_unicode ? "true" : "false");
|
||||
repo_git_path_replace(the_repository, &path, "%s", auml_nfc);
|
||||
if (unlink(path.buf))
|
||||
die_errno(_("failed to unlink '%s'"), path.buf);
|
||||
@@ -69,14 +71,16 @@ const char *precompose_string_if_needed(const char *in)
|
||||
{
|
||||
size_t inlen;
|
||||
size_t outlen;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (!in)
|
||||
return NULL;
|
||||
if (has_non_ascii(in, (size_t)-1, &inlen)) {
|
||||
iconv_t ic_prec;
|
||||
char *out;
|
||||
if (precomposed_unicode < 0)
|
||||
repo_config_get_bool(the_repository, "core.precomposeunicode", &precomposed_unicode);
|
||||
if (precomposed_unicode != 1)
|
||||
if (cfg->precomposed_unicode < 0)
|
||||
repo_config_get_bool(the_repository, "core.precomposeunicode", &cfg->precomposed_unicode);
|
||||
if (cfg->precomposed_unicode != 1)
|
||||
return in;
|
||||
ic_prec = iconv_open(repo_encoding, path_encoding);
|
||||
if (ic_prec == (iconv_t) -1)
|
||||
@@ -130,7 +134,9 @@ PREC_DIR *precompose_utf8_opendir(const char *dirname)
|
||||
|
||||
struct dirent_prec_psx *precompose_utf8_readdir(PREC_DIR *prec_dir)
|
||||
{
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
struct dirent *res;
|
||||
|
||||
res = readdir(prec_dir->dirp);
|
||||
if (res) {
|
||||
size_t namelenz = strlen(res->d_name) + 1; /* \0 */
|
||||
@@ -149,7 +155,7 @@ struct dirent_prec_psx *precompose_utf8_readdir(PREC_DIR *prec_dir)
|
||||
prec_dir->dirent_nfc->d_ino = res->d_ino;
|
||||
prec_dir->dirent_nfc->d_type = res->d_type;
|
||||
|
||||
if ((precomposed_unicode == 1) && has_non_ascii(res->d_name, (size_t)-1, NULL)) {
|
||||
if ((cfg->precomposed_unicode == 1) && has_non_ascii(res->d_name, (size_t)-1, NULL)) {
|
||||
if (prec_dir->ic_precompose == (iconv_t)-1) {
|
||||
die("iconv_open(%s,%s) failed, but needed:\n"
|
||||
" precomposed unicode is not supported.\n"
|
||||
|
||||
3
diff.c
3
diff.c
@@ -3612,8 +3612,9 @@ static unsigned char *deflate_it(char *data,
|
||||
int bound;
|
||||
unsigned char *deflated;
|
||||
git_zstream stream;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
git_deflate_init(&stream, zlib_compression_level);
|
||||
git_deflate_init(&stream, cfg->zlib_compression_level);
|
||||
bound = git_deflate_bound(&stream, size);
|
||||
deflated = xmalloc(bound);
|
||||
stream.next_out = deflated;
|
||||
|
||||
3
dir.c
3
dir.c
@@ -3508,8 +3508,9 @@ int get_sparse_checkout_patterns(struct pattern_list *pl)
|
||||
{
|
||||
int res;
|
||||
char *sparse_filename = get_sparse_checkout_filename();
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
pl->use_cone_patterns = core_sparse_checkout_cone;
|
||||
pl->use_cone_patterns = cfg->core_sparse_checkout_cone;
|
||||
res = add_patterns_from_file_to_list(sparse_filename, "", 0, pl, NULL, 0);
|
||||
|
||||
free(sparse_filename);
|
||||
|
||||
3
entry.c
3
entry.c
@@ -443,7 +443,8 @@ static int check_path(const char *path, int len, struct stat *st, int skiplen)
|
||||
static void mark_colliding_entries(const struct checkout *state,
|
||||
struct cache_entry *ce, struct stat *st)
|
||||
{
|
||||
int trust_ino = check_stat;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
int trust_ino = cfg->check_stat;
|
||||
|
||||
#if defined(GIT_WINDOWS_NATIVE) || defined(__CYGWIN__)
|
||||
trust_ino = 0;
|
||||
|
||||
@@ -42,20 +42,15 @@ static int pack_compression_seen;
|
||||
static int zlib_compression_seen;
|
||||
|
||||
int trust_executable_bit = 1;
|
||||
int trust_ctime = 1;
|
||||
int check_stat = 1;
|
||||
int has_symlinks = 1;
|
||||
int minimum_abbrev = 4, default_abbrev = -1;
|
||||
int ignore_case;
|
||||
int assume_unchanged;
|
||||
int is_bare_repository_cfg = -1; /* unspecified */
|
||||
int warn_on_object_refname_ambiguity = 1;
|
||||
char *git_commit_encoding;
|
||||
char *git_log_output_encoding;
|
||||
char *apply_default_whitespace;
|
||||
char *apply_default_ignorewhitespace;
|
||||
int zlib_compression_level = Z_BEST_SPEED;
|
||||
int pack_compression_level = Z_DEFAULT_COMPRESSION;
|
||||
int fsync_object_files = -1;
|
||||
int use_fsync = -1;
|
||||
enum fsync_method fsync_method = FSYNC_METHOD_DEFAULT;
|
||||
@@ -74,9 +69,6 @@ enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED;
|
||||
#endif
|
||||
enum object_creation_mode object_creation_mode = OBJECT_CREATION_MODE;
|
||||
int grafts_keep_true_parents;
|
||||
int core_sparse_checkout_cone;
|
||||
int sparse_expect_files_outside_of_patterns;
|
||||
int precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */
|
||||
unsigned long pack_size_limit_cfg;
|
||||
|
||||
#ifndef PROTECT_HFS_DEFAULT
|
||||
@@ -309,16 +301,16 @@ int git_default_core_config(const char *var, const char *value,
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(var, "core.trustctime")) {
|
||||
trust_ctime = git_config_bool(var, value);
|
||||
cfg->trust_ctime = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(var, "core.checkstat")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
if (!strcasecmp(value, "default"))
|
||||
check_stat = 1;
|
||||
cfg->check_stat = 1;
|
||||
else if (!strcasecmp(value, "minimal"))
|
||||
check_stat = 0;
|
||||
cfg->check_stat = 0;
|
||||
else
|
||||
return error(_("invalid value for '%s': '%s'"),
|
||||
var, value);
|
||||
@@ -379,7 +371,7 @@ int git_default_core_config(const char *var, const char *value,
|
||||
level = Z_DEFAULT_COMPRESSION;
|
||||
else if (level < 0 || level > Z_BEST_COMPRESSION)
|
||||
die(_("bad zlib compression level %d"), level);
|
||||
zlib_compression_level = level;
|
||||
cfg->zlib_compression_level = level;
|
||||
zlib_compression_seen = 1;
|
||||
return 0;
|
||||
}
|
||||
@@ -391,9 +383,9 @@ int git_default_core_config(const char *var, const char *value,
|
||||
else if (level < 0 || level > Z_BEST_COMPRESSION)
|
||||
die(_("bad zlib compression level %d"), level);
|
||||
if (!zlib_compression_seen)
|
||||
zlib_compression_level = level;
|
||||
cfg->zlib_compression_level = level;
|
||||
if (!pack_compression_seen)
|
||||
pack_compression_level = level;
|
||||
cfg->pack_compression_level = level;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -531,12 +523,12 @@ int git_default_core_config(const char *var, const char *value,
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.sparsecheckoutcone")) {
|
||||
core_sparse_checkout_cone = git_config_bool(var, value);
|
||||
cfg->core_sparse_checkout_cone = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.precomposeunicode")) {
|
||||
precomposed_unicode = git_config_bool(var, value);
|
||||
cfg->precomposed_unicode = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -556,8 +548,10 @@ int git_default_core_config(const char *var, const char *value,
|
||||
|
||||
static int git_default_sparse_config(const char *var, const char *value)
|
||||
{
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (!strcmp(var, "sparse.expectfilesoutsideofpatterns")) {
|
||||
sparse_expect_files_outside_of_patterns = git_config_bool(var, value);
|
||||
cfg->sparse_expect_files_outside_of_patterns = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -665,6 +659,8 @@ static int git_default_attr_config(const char *var, const char *value)
|
||||
int git_default_config(const char *var, const char *value,
|
||||
const struct config_context *ctx, void *cb)
|
||||
{
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (starts_with(var, "core."))
|
||||
return git_default_core_config(var, value, ctx, cb);
|
||||
|
||||
@@ -704,7 +700,7 @@ int git_default_config(const char *var, const char *value,
|
||||
level = Z_DEFAULT_COMPRESSION;
|
||||
else if (level < 0 || level > Z_BEST_COMPRESSION)
|
||||
die(_("bad pack compression level %d"), level);
|
||||
pack_compression_level = level;
|
||||
cfg->pack_compression_level = level;
|
||||
pack_compression_seen = 1;
|
||||
return 0;
|
||||
}
|
||||
@@ -721,4 +717,12 @@ void repo_config_values_init(struct repo_config_values *cfg)
|
||||
cfg->attributes_file = NULL;
|
||||
cfg->apply_sparse_checkout = 0;
|
||||
cfg->branch_track = BRANCH_TRACK_REMOTE;
|
||||
cfg->trust_ctime = 1;
|
||||
cfg->check_stat = 1;
|
||||
cfg->zlib_compression_level = Z_BEST_SPEED;
|
||||
cfg->pack_compression_level = Z_DEFAULT_COMPRESSION;
|
||||
cfg->precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */
|
||||
cfg->core_sparse_checkout_cone = 0;
|
||||
cfg->sparse_expect_files_outside_of_patterns = 0;
|
||||
cfg->warn_on_object_refname_ambiguity = 1;
|
||||
}
|
||||
|
||||
@@ -91,6 +91,16 @@ struct repo_config_values {
|
||||
/* section "core" config values */
|
||||
char *attributes_file;
|
||||
int apply_sparse_checkout;
|
||||
int trust_ctime;
|
||||
int check_stat;
|
||||
int zlib_compression_level;
|
||||
int pack_compression_level;
|
||||
int precomposed_unicode;
|
||||
int core_sparse_checkout_cone;
|
||||
int warn_on_object_refname_ambiguity;
|
||||
|
||||
/* section "sparse" config values */
|
||||
int sparse_expect_files_outside_of_patterns;
|
||||
|
||||
/* section "branch" config values */
|
||||
enum branch_track branch_track;
|
||||
@@ -153,26 +163,17 @@ extern char *git_work_tree_cfg;
|
||||
|
||||
/* Environment bits from configuration mechanism */
|
||||
extern int trust_executable_bit;
|
||||
extern int trust_ctime;
|
||||
extern int check_stat;
|
||||
extern int has_symlinks;
|
||||
extern int minimum_abbrev, default_abbrev;
|
||||
extern int ignore_case;
|
||||
extern int assume_unchanged;
|
||||
extern int warn_on_object_refname_ambiguity;
|
||||
extern char *apply_default_whitespace;
|
||||
extern char *apply_default_ignorewhitespace;
|
||||
extern int zlib_compression_level;
|
||||
extern int pack_compression_level;
|
||||
extern unsigned long pack_size_limit_cfg;
|
||||
|
||||
extern int precomposed_unicode;
|
||||
extern int protect_hfs;
|
||||
extern int protect_ntfs;
|
||||
|
||||
extern int core_sparse_checkout_cone;
|
||||
extern int sparse_expect_files_outside_of_patterns;
|
||||
|
||||
enum rebase_setup_type {
|
||||
AUTOREBASE_NEVER = 0,
|
||||
AUTOREBASE_LOCAL,
|
||||
|
||||
@@ -369,13 +369,14 @@ static void start_put(struct transfer_request *request)
|
||||
int hdrlen;
|
||||
ssize_t size;
|
||||
git_zstream stream;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
unpacked = odb_read_object(the_repository->objects, &request->obj->oid,
|
||||
&type, &len);
|
||||
hdrlen = format_object_header(hdr, sizeof(hdr), type, len);
|
||||
|
||||
/* Set it up */
|
||||
git_deflate_init(&stream, zlib_compression_level);
|
||||
git_deflate_init(&stream, cfg->zlib_compression_level);
|
||||
size = git_deflate_bound(&stream, len + hdrlen);
|
||||
strbuf_grow(&request->buffer.buf, size);
|
||||
request->buffer.posn = 0;
|
||||
|
||||
@@ -662,6 +662,7 @@ static int start_loose_object_common(struct odb_source_loose *loose,
|
||||
const struct git_hash_algo *algo = loose->base.odb->repo->hash_algo;
|
||||
const struct git_hash_algo *compat = loose->base.odb->repo->compat_hash_algo;
|
||||
int fd;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
fd = create_tmpfile(loose->base.odb->repo, tmp_file, filename);
|
||||
if (fd < 0) {
|
||||
@@ -677,7 +678,7 @@ static int start_loose_object_common(struct odb_source_loose *loose,
|
||||
}
|
||||
|
||||
/* Setup zlib stream for compression */
|
||||
git_deflate_init(stream, zlib_compression_level);
|
||||
git_deflate_init(stream, cfg->zlib_compression_level);
|
||||
stream->next_out = buf;
|
||||
stream->avail_out = buflen;
|
||||
algo->init_fn(c);
|
||||
@@ -1175,9 +1176,10 @@ static void stream_blob_to_pack(struct transaction_packfile *state,
|
||||
unsigned char obuf[16384];
|
||||
unsigned hdrlen;
|
||||
int status = Z_OK;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
size_t bytes_read = 0;
|
||||
|
||||
git_deflate_init(&s, pack_compression_level);
|
||||
git_deflate_init(&s, cfg->pack_compression_level);
|
||||
|
||||
hdrlen = encode_in_pack_object_header(obuf, sizeof(obuf), OBJ_BLOB, size);
|
||||
s.next_out = obuf + hdrlen;
|
||||
|
||||
@@ -684,11 +684,12 @@ static int get_oid_basic(struct repository *r, const char *str, int len,
|
||||
int refs_found = 0;
|
||||
int at, reflog_len, nth_prior = 0;
|
||||
int fatal = !(flags & GET_OID_QUIETLY);
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (len == r->hash_algo->hexsz && !get_oid_hex(str, oid)) {
|
||||
if (!(flags & GET_OID_SKIP_AMBIGUITY_CHECK) &&
|
||||
repo_settings_get_warn_ambiguous_refs(r) &&
|
||||
warn_on_object_refname_ambiguity) {
|
||||
cfg->warn_on_object_refname_ambiguity) {
|
||||
refs_found = repo_dwim_ref(r, str, len, &tmp_oid, &real_ref, 0);
|
||||
if (refs_found > 0) {
|
||||
warning(warn_msg, len, str);
|
||||
|
||||
@@ -2928,9 +2928,10 @@ static void read_revisions_from_stdin(struct rev_info *revs,
|
||||
int seen_end_of_options = 0;
|
||||
int save_warning;
|
||||
int flags = 0;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
save_warning = warn_on_object_refname_ambiguity;
|
||||
warn_on_object_refname_ambiguity = 0;
|
||||
save_warning = cfg->warn_on_object_refname_ambiguity;
|
||||
cfg->warn_on_object_refname_ambiguity = 0;
|
||||
|
||||
strbuf_init(&sb, 1000);
|
||||
while (strbuf_getline(&sb, stdin) != EOF) {
|
||||
@@ -2964,7 +2965,7 @@ static void read_revisions_from_stdin(struct rev_info *revs,
|
||||
read_pathspec_from_stdin(&sb, prune);
|
||||
|
||||
strbuf_release(&sb);
|
||||
warn_on_object_refname_ambiguity = save_warning;
|
||||
cfg->warn_on_object_refname_ambiguity = save_warning;
|
||||
}
|
||||
|
||||
static void NORETURN diagnose_missing_default(const char *def)
|
||||
|
||||
@@ -154,7 +154,7 @@ int is_sparse_index_allowed(struct index_state *istate, int flags)
|
||||
{
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (!cfg->apply_sparse_checkout || !core_sparse_checkout_cone)
|
||||
if (!cfg->apply_sparse_checkout || !cfg->core_sparse_checkout_cone)
|
||||
return 0;
|
||||
|
||||
if (!(flags & SPARSE_INDEX_MEMORY_ONLY)) {
|
||||
@@ -675,7 +675,7 @@ void clear_skip_worktree_from_present_files(struct index_state *istate)
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (!cfg->apply_sparse_checkout ||
|
||||
sparse_expect_files_outside_of_patterns)
|
||||
cfg->sparse_expect_files_outside_of_patterns)
|
||||
return;
|
||||
|
||||
if (clear_skip_worktree_from_present_files_sparse(istate)) {
|
||||
|
||||
12
statinfo.c
12
statinfo.c
@@ -3,6 +3,7 @@
|
||||
#include "git-compat-util.h"
|
||||
#include "environment.h"
|
||||
#include "statinfo.h"
|
||||
#include "repository.h"
|
||||
|
||||
/*
|
||||
* Munge st_size into an unsigned int.
|
||||
@@ -63,22 +64,23 @@ void fake_lstat_data(const struct stat_data *sd, struct stat *st)
|
||||
int match_stat_data(const struct stat_data *sd, struct stat *st)
|
||||
{
|
||||
int changed = 0;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (sd->sd_mtime.sec != (unsigned int)st->st_mtime)
|
||||
changed |= MTIME_CHANGED;
|
||||
if (trust_ctime && check_stat &&
|
||||
if (cfg->trust_ctime && cfg->check_stat &&
|
||||
sd->sd_ctime.sec != (unsigned int)st->st_ctime)
|
||||
changed |= CTIME_CHANGED;
|
||||
|
||||
#ifdef USE_NSEC
|
||||
if (check_stat && sd->sd_mtime.nsec != ST_MTIME_NSEC(*st))
|
||||
if (cfg->check_stat && sd->sd_mtime.nsec != ST_MTIME_NSEC(*st))
|
||||
changed |= MTIME_CHANGED;
|
||||
if (trust_ctime && check_stat &&
|
||||
if (cfg->trust_ctime && cfg->check_stat &&
|
||||
sd->sd_ctime.nsec != ST_CTIME_NSEC(*st))
|
||||
changed |= CTIME_CHANGED;
|
||||
#endif
|
||||
|
||||
if (check_stat) {
|
||||
if (cfg->check_stat) {
|
||||
if (sd->sd_uid != (unsigned int) st->st_uid ||
|
||||
sd->sd_gid != (unsigned int) st->st_gid)
|
||||
changed |= OWNER_CHANGED;
|
||||
@@ -92,7 +94,7 @@ int match_stat_data(const struct stat_data *sd, struct stat *st)
|
||||
* clients will have different views of what "device"
|
||||
* the filesystem is on
|
||||
*/
|
||||
if (check_stat && sd->sd_dev != (unsigned int) st->st_dev)
|
||||
if (cfg->check_stat && sd->sd_dev != (unsigned int) st->st_dev)
|
||||
changed |= INODE_CHANGED;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -898,12 +898,13 @@ static void collect_changed_submodules(struct repository *r,
|
||||
struct setup_revision_opt s_r_opt = {
|
||||
.assume_dashdash = 1,
|
||||
};
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
save_warning = warn_on_object_refname_ambiguity;
|
||||
warn_on_object_refname_ambiguity = 0;
|
||||
save_warning = cfg->warn_on_object_refname_ambiguity;
|
||||
cfg->warn_on_object_refname_ambiguity = 0;
|
||||
repo_init_revisions(r, &rev, NULL);
|
||||
setup_revisions_from_strvec(argv, &rev, &s_r_opt);
|
||||
warn_on_object_refname_ambiguity = save_warning;
|
||||
cfg->warn_on_object_refname_ambiguity = save_warning;
|
||||
if (prepare_revision_walk(&rev))
|
||||
die(_("revision walk setup failed"));
|
||||
|
||||
|
||||
@@ -1336,6 +1336,7 @@ static int upload_pack_config(const char *var, const char *value,
|
||||
void *cb_data)
|
||||
{
|
||||
struct upload_pack_data *data = cb_data;
|
||||
struct repo_config_values *cfg = repo_config_values(the_repository);
|
||||
|
||||
if (!strcmp("uploadpack.allowtipsha1inwant", var)) {
|
||||
if (git_config_bool(var, value))
|
||||
@@ -1366,7 +1367,7 @@ static int upload_pack_config(const char *var, const char *value,
|
||||
if (value)
|
||||
data->allow_packfile_uris = 1;
|
||||
} else if (!strcmp("core.precomposeunicode", var)) {
|
||||
precomposed_unicode = git_config_bool(var, value);
|
||||
cfg->precomposed_unicode = git_config_bool(var, value);
|
||||
} else if (!strcmp("transfer.advertisesid", var)) {
|
||||
data->advertise_sid = git_config_bool(var, value);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user