зеркало из https://github.com/microsoft/git.git
Merge branch 'jk/save-getenv-result'
There were many places the code relied on the string returned from getenv() to be non-volatile, which is not true, that have been corrected. * jk/save-getenv-result: builtin_diff(): read $GIT_DIFF_OPTS closer to use merge-recursive: copy $GITHEAD strings init: make a copy of $GIT_DIR string config: make a copy of $GIT_CONFIG string commit: copy saved getenv() result get_super_prefix(): copy getenv() result
This commit is contained in:
Коммит
773e408881
|
@ -351,7 +351,7 @@ static const char *prepare_index(int argc, const char **argv, const char *prefix
|
|||
if (write_locked_index(&the_index, &index_lock, 0))
|
||||
die(_("unable to create temporary index"));
|
||||
|
||||
old_index_env = getenv(INDEX_ENVIRONMENT);
|
||||
old_index_env = xstrdup_or_null(getenv(INDEX_ENVIRONMENT));
|
||||
setenv(INDEX_ENVIRONMENT, get_lock_file_path(&index_lock), 1);
|
||||
|
||||
if (interactive_add(argc, argv, prefix, patch_interactive) != 0)
|
||||
|
@ -361,6 +361,7 @@ static const char *prepare_index(int argc, const char **argv, const char *prefix
|
|||
setenv(INDEX_ENVIRONMENT, old_index_env, 1);
|
||||
else
|
||||
unsetenv(INDEX_ENVIRONMENT);
|
||||
FREE_AND_NULL(old_index_env);
|
||||
|
||||
discard_cache();
|
||||
read_cache_from(get_lock_file_path(&index_lock));
|
||||
|
|
|
@ -599,7 +599,7 @@ int cmd_config(int argc, const char **argv, const char *prefix)
|
|||
int nongit = !startup_info->have_repository;
|
||||
char *value;
|
||||
|
||||
given_config_source.file = getenv(CONFIG_ENVIRONMENT);
|
||||
given_config_source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT));
|
||||
|
||||
argc = parse_options(argc, argv, prefix, builtin_config_options,
|
||||
builtin_config_usage,
|
||||
|
|
|
@ -542,8 +542,8 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
|
|||
* GIT_WORK_TREE makes sense only in conjunction with GIT_DIR
|
||||
* without --bare. Catch the error early.
|
||||
*/
|
||||
git_dir = getenv(GIT_DIR_ENVIRONMENT);
|
||||
work_tree = getenv(GIT_WORK_TREE_ENVIRONMENT);
|
||||
git_dir = xstrdup_or_null(getenv(GIT_DIR_ENVIRONMENT));
|
||||
work_tree = xstrdup_or_null(getenv(GIT_WORK_TREE_ENVIRONMENT));
|
||||
if ((!git_dir || is_bare_repository_cfg == 1) && work_tree)
|
||||
die(_("%s (or --work-tree=<directory>) not allowed without "
|
||||
"specifying %s (or --git-dir=<directory>)"),
|
||||
|
@ -582,6 +582,8 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
|
|||
}
|
||||
|
||||
UNLEAK(real_git_dir);
|
||||
UNLEAK(git_dir);
|
||||
UNLEAK(work_tree);
|
||||
|
||||
flags |= INIT_DB_EXIST_OK;
|
||||
return init_db(git_dir, real_git_dir, template_dir, flags);
|
||||
|
|
|
@ -7,16 +7,16 @@
|
|||
static const char builtin_merge_recursive_usage[] =
|
||||
"git %s <base>... -- <head> <remote> ...";
|
||||
|
||||
static const char *better_branch_name(const char *branch)
|
||||
static char *better_branch_name(const char *branch)
|
||||
{
|
||||
static char githead_env[8 + GIT_MAX_HEXSZ + 1];
|
||||
char *name;
|
||||
|
||||
if (strlen(branch) != the_hash_algo->hexsz)
|
||||
return branch;
|
||||
return xstrdup(branch);
|
||||
xsnprintf(githead_env, sizeof(githead_env), "GITHEAD_%s", branch);
|
||||
name = getenv(githead_env);
|
||||
return name ? name : branch;
|
||||
return xstrdup(name ? name : branch);
|
||||
}
|
||||
|
||||
int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
|
||||
|
@ -26,6 +26,7 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
|
|||
int i, failed;
|
||||
struct object_id h1, h2;
|
||||
struct merge_options o;
|
||||
char *better1, *better2;
|
||||
struct commit *result;
|
||||
|
||||
init_merge_options(&o);
|
||||
|
@ -70,13 +71,17 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
|
|||
if (get_oid(o.branch2, &h2))
|
||||
die(_("could not resolve ref '%s'"), o.branch2);
|
||||
|
||||
o.branch1 = better_branch_name(o.branch1);
|
||||
o.branch2 = better_branch_name(o.branch2);
|
||||
o.branch1 = better1 = better_branch_name(o.branch1);
|
||||
o.branch2 = better2 = better_branch_name(o.branch2);
|
||||
|
||||
if (o.verbosity >= 3)
|
||||
printf(_("Merging %s with %s\n"), o.branch1, o.branch2);
|
||||
|
||||
failed = merge_recursive_generic(&o, &h1, &h2, bases_count, bases, &result);
|
||||
|
||||
free(better1);
|
||||
free(better2);
|
||||
|
||||
if (failed < 0)
|
||||
return 128; /* die() error code */
|
||||
return failed;
|
||||
|
|
5
diff.c
5
diff.c
|
@ -3544,7 +3544,7 @@ static void builtin_diff(const char *name_a,
|
|||
o->found_changes = 1;
|
||||
} else {
|
||||
/* Crazy xdl interfaces.. */
|
||||
const char *diffopts = getenv("GIT_DIFF_OPTS");
|
||||
const char *diffopts;
|
||||
const char *v;
|
||||
xpparam_t xpp;
|
||||
xdemitconf_t xecfg;
|
||||
|
@ -3587,12 +3587,15 @@ static void builtin_diff(const char *name_a,
|
|||
xecfg.flags |= XDL_EMIT_FUNCCONTEXT;
|
||||
if (pe)
|
||||
xdiff_set_find_func(&xecfg, pe->pattern, pe->cflags);
|
||||
|
||||
diffopts = getenv("GIT_DIFF_OPTS");
|
||||
if (!diffopts)
|
||||
;
|
||||
else if (skip_prefix(diffopts, "--unified=", &v))
|
||||
xecfg.ctxlen = strtoul(v, NULL, 10);
|
||||
else if (skip_prefix(diffopts, "-u", &v))
|
||||
xecfg.ctxlen = strtoul(v, NULL, 10);
|
||||
|
||||
if (o->word_diff)
|
||||
init_diff_words_data(&ecbdata, o, one, two);
|
||||
if (xdi_diff_outf(&mf1, &mf2, NULL, fn_out_consume,
|
||||
|
|
|
@ -107,7 +107,7 @@ char *git_work_tree_cfg;
|
|||
|
||||
static char *git_namespace;
|
||||
|
||||
static const char *super_prefix;
|
||||
static char *super_prefix;
|
||||
|
||||
/*
|
||||
* Repository-local GIT_* environment variables; see cache.h for details.
|
||||
|
@ -240,7 +240,7 @@ const char *get_super_prefix(void)
|
|||
{
|
||||
static int initialized;
|
||||
if (!initialized) {
|
||||
super_prefix = getenv(GIT_SUPER_PREFIX_ENVIRONMENT);
|
||||
super_prefix = xstrdup_or_null(getenv(GIT_SUPER_PREFIX_ENVIRONMENT));
|
||||
initialized = 1;
|
||||
}
|
||||
return super_prefix;
|
||||
|
|
Загрузка…
Ссылка в новой задаче