The run-command library advertises what process it is running through the GIT_TRACE stream (see 575ba9d6, 2006-06-25) to provide context during debugging for error messages that might come from the child process. In the same spirit, since v1.7.4-rc0~4^2~46 (builtins: print setup info if repo is found, 2010-11-26) the repo-setup library prints its result to GIT_TRACE, so the cwd, location of the git directory, and so on are readily available during debug. In practice, four extra lines of trace output per git process is too much noise. So stop printing repository discovery info except when running tests. Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- .gitignore | 1 + Makefile | 1 + git.c | 53 ------------------------------------------- t/t1510-repo-setup.sh | 2 +- test-repo-setup.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 63 insertions(+), 54 deletions(-) create mode 100644 test-repo-setup.c diff --git a/.gitignore b/.gitignore index 3dd6ef7..e1fc557 100644 --- a/.gitignore +++ b/.gitignore @@ -173,6 +173,7 @@ /test-obj-pool /test-parse-options /test-path-utils +/test-repo-setup /test-run-command /test-sha1 /test-sigchain diff --git a/Makefile b/Makefile index 775ee83..01cc5c0 100644 --- a/Makefile +++ b/Makefile @@ -427,6 +427,7 @@ TEST_PROGRAMS_NEED_X += test-match-trees TEST_PROGRAMS_NEED_X += test-obj-pool TEST_PROGRAMS_NEED_X += test-parse-options TEST_PROGRAMS_NEED_X += test-path-utils +TEST_PROGRAMS_NEED_X += test-repo-setup TEST_PROGRAMS_NEED_X += test-run-command TEST_PROGRAMS_NEED_X += test-sha1 TEST_PROGRAMS_NEED_X += test-sigchain diff --git a/git.c b/git.c index d1b15f1..d532576 100644 --- a/git.c +++ b/git.c @@ -238,55 +238,6 @@ static int handle_alias(int *argcp, const char ***argv) return ret; } -static const char *quote_crnl(const char *path) -{ - static char new_path[PATH_MAX]; - const char *p2 = path; - char *p1 = new_path; - - if (!path) - return NULL; - - while (*p2) { - switch (*p2) { - case '\\': *p1++ = '\\'; *p1++ = '\\'; break; - case '\n': *p1++ = '\\'; *p1++ = 'n'; break; - case '\r': *p1++ = '\\'; *p1++ = 'r'; break; - default: - *p1++ = *p2; - } - p2++; - } - *p1 = '\0'; - return new_path; -} - -static void trace_repo_setup(void) -{ - const char *git_work_tree; - const char *prefix = startup_info->prefix; - char cwd[PATH_MAX]; - char *trace = getenv("GIT_TRACE"); - - if (!trace || !strcmp(trace, "") || - !strcmp(trace, "0") || !strcasecmp(trace, "false")) - return; - - if (!getcwd(cwd, PATH_MAX)) - die("Unable to get current working directory"); - - if (!(git_work_tree = get_git_work_tree())) - git_work_tree = "(null)"; - - if (!prefix) - prefix = "(null)"; - - trace_printf("setup: git_dir: %s\n", quote_crnl(get_git_dir())); - trace_printf("setup: worktree: %s\n", quote_crnl(git_work_tree)); - trace_printf("setup: cwd: %s\n", quote_crnl(cwd)); - trace_printf("setup: prefix: %s\n", quote_crnl(prefix)); -} - const char git_version_string[] = GIT_VERSION; #define RUN_SETUP (1<<0) @@ -324,10 +275,6 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv) use_pager = check_pager_config(p->cmd); if (use_pager == -1 && p->option & USE_PAGER) use_pager = 1; - - if ((p->option & (RUN_SETUP | RUN_SETUP_GENTLY)) && - startup_info->have_repository) /* get_git_dir() may set up repo, avoid that */ - trace_repo_setup(); } commit_pager_choice(); diff --git a/t/t1510-repo-setup.sh b/t/t1510-repo-setup.sh index 15101d5..c2edf6f 100755 --- a/t/t1510-repo-setup.sh +++ b/t/t1510-repo-setup.sh @@ -57,7 +57,7 @@ test_repo () { export GIT_WORK_TREE fi && rm -f trace && - GIT_TRACE="$(pwd)/trace" git symbolic-ref HEAD >/dev/null && + GIT_TRACE="$(pwd)/trace" test-repo-setup && grep '^setup: ' trace >result && test_cmp expected result ) diff --git a/test-repo-setup.c b/test-repo-setup.c new file mode 100644 index 0000000..3b66237 --- /dev/null +++ b/test-repo-setup.c @@ -0,0 +1,60 @@ +#include "cache.h" + +static const char *quote_crnl(const char *path) +{ + static char new_path[PATH_MAX]; + const char *p2 = path; + char *p1 = new_path; + + if (!path) + return NULL; + + while (*p2) { + switch (*p2) { + case '\\': *p1++ = '\\'; *p1++ = '\\'; break; + case '\n': *p1++ = '\\'; *p1++ = 'n'; break; + case '\r': *p1++ = '\\'; *p1++ = 'r'; break; + default: + *p1++ = *p2; + } + p2++; + } + *p1 = '\0'; + return new_path; +} + +static void trace_repo_setup(void) +{ + const char *git_work_tree; + const char *prefix = startup_info->prefix; + char cwd[PATH_MAX]; + char *trace = getenv("GIT_TRACE"); + + if (!trace || !strcmp(trace, "") || + !strcmp(trace, "0") || !strcasecmp(trace, "false")) + return; + + if (!getcwd(cwd, PATH_MAX)) + die("Unable to get current working directory"); + + if (!(git_work_tree = get_git_work_tree())) + git_work_tree = "(null)"; + + if (!prefix) + prefix = "(null)"; + + trace_printf("setup: git_dir: %s\n", quote_crnl(get_git_dir())); + trace_printf("setup: worktree: %s\n", quote_crnl(git_work_tree)); + trace_printf("setup: cwd: %s\n", quote_crnl(cwd)); + trace_printf("setup: prefix: %s\n", quote_crnl(prefix)); +} + +int main(int argc, char **argv) +{ + static struct startup_info test_startup_info; + + startup_info = &test_startup_info; + setup_git_directory(); + trace_repo_setup(); + return 0; +} -- 1.7.4.rc3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html