Merge branches 'bw/ls-files-sans-the-index' and 'bw/config-h' into bw/repo-object
* bw/ls-files-sans-the-index: ls-files: factor out tag calculation ls-files: factor out debug info into a function ls-files: convert show_files to take an index ls-files: convert show_ce_entry to take an index ls-files: convert prune_cache to take an index ls-files: convert ce_excluded to take an index ls-files: convert show_ru_info to take an index ls-files: convert show_other_files to take an index ls-files: convert show_killed_files to take an index ls-files: convert write_eolinfo to take an index ls-files: convert overlay_tree_on_cache to take an index tree: convert read_tree to take an index parameter convert: convert renormalize_buffer to take an index convert: convert convert_to_git to take an index convert: convert convert_to_git_filter_fd to take an index convert: convert crlf_to_git to take an index convert: convert get_cached_convert_stats_ascii to take an index * bw/config-h: config: don't implicitly use gitdir or commondir config: respect commondir setup: teach discover_git_directory to respect the commondir config: don't include config.h by default config: remove git_config_iter config: create config.h alias: use the early config machinery to expand aliases t7006: demonstrate a problem with aliases in subdirectories t1308: relax the test verifying that empty alias values are disallowed help: use early config when autocorrecting aliases config: report correct line number upon error discover_git_directory(): avoid setting invalid git_dir
This commit is contained in:
56
git.c
56
git.c
@ -1,4 +1,5 @@
|
||||
#include "builtin.h"
|
||||
#include "config.h"
|
||||
#include "exec_cmd.h"
|
||||
#include "help.h"
|
||||
#include "run-command.h"
|
||||
@ -16,53 +17,9 @@ const char git_more_info_string[] =
|
||||
"to read about a specific subcommand or concept.");
|
||||
|
||||
static int use_pager = -1;
|
||||
static char *orig_cwd;
|
||||
static const char *env_names[] = {
|
||||
GIT_DIR_ENVIRONMENT,
|
||||
GIT_WORK_TREE_ENVIRONMENT,
|
||||
GIT_IMPLICIT_WORK_TREE_ENVIRONMENT,
|
||||
GIT_PREFIX_ENVIRONMENT
|
||||
};
|
||||
static char *orig_env[4];
|
||||
static int save_restore_env_balance;
|
||||
|
||||
static void list_builtins(void);
|
||||
|
||||
static void save_env_before_alias(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
assert(save_restore_env_balance == 0);
|
||||
save_restore_env_balance = 1;
|
||||
orig_cwd = xgetcwd();
|
||||
for (i = 0; i < ARRAY_SIZE(env_names); i++) {
|
||||
orig_env[i] = getenv(env_names[i]);
|
||||
orig_env[i] = xstrdup_or_null(orig_env[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void restore_env(int external_alias)
|
||||
{
|
||||
int i;
|
||||
|
||||
assert(save_restore_env_balance == 1);
|
||||
save_restore_env_balance = 0;
|
||||
if (!external_alias && orig_cwd && chdir(orig_cwd))
|
||||
die_errno("could not move to %s", orig_cwd);
|
||||
free(orig_cwd);
|
||||
for (i = 0; i < ARRAY_SIZE(env_names); i++) {
|
||||
if (external_alias &&
|
||||
!strcmp(env_names[i], GIT_PREFIX_ENVIRONMENT))
|
||||
continue;
|
||||
if (orig_env[i]) {
|
||||
setenv(env_names[i], orig_env[i], 1);
|
||||
free(orig_env[i]);
|
||||
} else {
|
||||
unsetenv(env_names[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void commit_pager_choice(void) {
|
||||
switch (use_pager) {
|
||||
case 0:
|
||||
@ -255,19 +212,18 @@ static int handle_alias(int *argcp, const char ***argv)
|
||||
const char **new_argv;
|
||||
const char *alias_command;
|
||||
char *alias_string;
|
||||
int unused_nongit;
|
||||
|
||||
save_env_before_alias();
|
||||
setup_git_directory_gently(&unused_nongit);
|
||||
|
||||
alias_command = (*argv)[0];
|
||||
alias_string = alias_lookup(alias_command);
|
||||
if (alias_string) {
|
||||
if (alias_string[0] == '!') {
|
||||
struct child_process child = CHILD_PROCESS_INIT;
|
||||
int nongit_ok;
|
||||
|
||||
/* Aliases expect GIT_PREFIX, GIT_DIR etc to be set */
|
||||
setup_git_directory_gently(&nongit_ok);
|
||||
|
||||
commit_pager_choice();
|
||||
restore_env(1);
|
||||
|
||||
child.use_shell = 1;
|
||||
argv_array_push(&child.args, alias_string + 1);
|
||||
@ -313,8 +269,6 @@ static int handle_alias(int *argcp, const char ***argv)
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
restore_env(0);
|
||||
|
||||
errno = saved_errno;
|
||||
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user