зеркало из https://github.com/microsoft/git.git
Merge branch 'tb/precompose-prefix-simplify'
Streamline the codepath to fix the UTF-8 encoding issues in the argv[] and the prefix on macOS. * tb/precompose-prefix-simplify: macOS: precompose startup_info->prefix precompose_utf8: make precompose_string_if_needed() public
This commit is contained in:
Коммит
4c6ac2da2c
|
@ -60,10 +60,12 @@ void probe_utf8_pathname_composition(void)
|
|||
strbuf_release(&path);
|
||||
}
|
||||
|
||||
static inline const char *precompose_string_if_needed(const char *in)
|
||||
const char *precompose_string_if_needed(const char *in)
|
||||
{
|
||||
size_t inlen;
|
||||
size_t outlen;
|
||||
if (!in)
|
||||
return NULL;
|
||||
if (has_non_ascii(in, (size_t)-1, &inlen)) {
|
||||
iconv_t ic_prec;
|
||||
char *out;
|
||||
|
@ -96,10 +98,7 @@ const char *precompose_argv_prefix(int argc, const char **argv, const char *pref
|
|||
argv[i] = precompose_string_if_needed(argv[i]);
|
||||
i++;
|
||||
}
|
||||
if (prefix) {
|
||||
prefix = precompose_string_if_needed(prefix);
|
||||
}
|
||||
return prefix;
|
||||
return precompose_string_if_needed(prefix);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ typedef struct {
|
|||
} PREC_DIR;
|
||||
|
||||
const char *precompose_argv_prefix(int argc, const char **argv, const char *prefix);
|
||||
const char *precompose_string_if_needed(const char *in);
|
||||
void probe_utf8_pathname_composition(void);
|
||||
|
||||
PREC_DIR *precompose_utf8_opendir(const char *dirname);
|
||||
|
|
|
@ -256,6 +256,11 @@ static inline const char *precompose_argv_prefix(int argc, const char **argv, co
|
|||
{
|
||||
return prefix;
|
||||
}
|
||||
static inline const char *precompose_string_if_needed(const char *in)
|
||||
{
|
||||
return in;
|
||||
}
|
||||
|
||||
#define probe_utf8_pathname_composition()
|
||||
#endif
|
||||
|
||||
|
|
2
git.c
2
git.c
|
@ -423,7 +423,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
|
|||
int nongit_ok;
|
||||
prefix = setup_git_directory_gently(&nongit_ok);
|
||||
}
|
||||
prefix = precompose_argv_prefix(argc, argv, prefix);
|
||||
precompose_argv_prefix(argc, argv, NULL);
|
||||
if (use_pager == -1 && p->option & (RUN_SETUP | RUN_SETUP_GENTLY) &&
|
||||
!(p->option & DELAY_PAGER_CONFIG))
|
||||
use_pager = check_pager_config(p->cmd);
|
||||
|
|
28
setup.c
28
setup.c
|
@ -1274,18 +1274,10 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
|||
* the GIT_PREFIX environment variable must always match. For details
|
||||
* see Documentation/config/alias.txt.
|
||||
*/
|
||||
if (nongit_ok && *nongit_ok) {
|
||||
if (nongit_ok && *nongit_ok)
|
||||
startup_info->have_repository = 0;
|
||||
startup_info->prefix = NULL;
|
||||
setenv(GIT_PREFIX_ENVIRONMENT, "", 1);
|
||||
} else {
|
||||
else
|
||||
startup_info->have_repository = 1;
|
||||
startup_info->prefix = prefix;
|
||||
if (prefix)
|
||||
setenv(GIT_PREFIX_ENVIRONMENT, prefix, 1);
|
||||
else
|
||||
setenv(GIT_PREFIX_ENVIRONMENT, "", 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Not all paths through the setup code will call 'set_git_dir()' (which
|
||||
|
@ -1311,6 +1303,22 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
|||
if (startup_info->have_repository)
|
||||
repo_set_hash_algo(the_repository, repo_fmt.hash_algo);
|
||||
}
|
||||
/*
|
||||
* Since precompose_string_if_needed() needs to look at
|
||||
* the core.precomposeunicode configuration, this
|
||||
* has to happen after the above block that finds
|
||||
* out where the repository is, i.e. a preparation
|
||||
* for calling git_config_get_bool().
|
||||
*/
|
||||
if (prefix) {
|
||||
prefix = precompose_string_if_needed(prefix);
|
||||
startup_info->prefix = prefix;
|
||||
setenv(GIT_PREFIX_ENVIRONMENT, prefix, 1);
|
||||
} else {
|
||||
startup_info->prefix = NULL;
|
||||
setenv(GIT_PREFIX_ENVIRONMENT, "", 1);
|
||||
}
|
||||
|
||||
|
||||
strbuf_release(&dir);
|
||||
strbuf_release(&gitdir);
|
||||
|
|
Загрузка…
Ссылка в новой задаче