Like $GIT_CONFIG, $GIT_CONFIG_PARAMETERS needs to be suppressed by "git push" and its cousins when running local transport helpers to imitate remote transport well. Noticed-by: Jeff King <peff@xxxxxxxx> Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- Jeff King wrote: > Here's a first attempt. No idea if it has any bad side effects. :) Here's the transport boundary. cache.h | 3 ++- config.c | 8 ++++---- environment.c | 1 + t/t5400-send-pack.sh | 23 +++++++++++++++++++++++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/cache.h b/cache.h index 6f50ea8..181a305 100644 --- a/cache.h +++ b/cache.h @@ -379,6 +379,7 @@ static inline enum object_type object_type(unsigned int mode) #define GRAFT_ENVIRONMENT "GIT_GRAFT_FILE" #define TEMPLATE_DIR_ENVIRONMENT "GIT_TEMPLATE_DIR" #define CONFIG_ENVIRONMENT "GIT_CONFIG" +#define CONFIG_DATA_ENVIRONMENT "GIT_CONFIG_PARAMETERS" #define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH" #define CEILING_DIRECTORIES_ENVIRONMENT "GIT_CEILING_DIRECTORIES" #define NO_REPLACE_OBJECTS_ENVIRONMENT "GIT_NO_REPLACE_OBJECTS" @@ -397,7 +398,7 @@ static inline enum object_type object_type(unsigned int mode) * environment creation or simple walk of the list. * The number of non-NULL entries is available as a macro. */ -#define LOCAL_REPO_ENV_SIZE 8 +#define LOCAL_REPO_ENV_SIZE 9 extern const char *const local_repo_env[LOCAL_REPO_ENV_SIZE + 1]; extern int is_bare_repository_cfg; diff --git a/config.c b/config.c index e08e32b..c2c995f 100644 --- a/config.c +++ b/config.c @@ -38,13 +38,13 @@ static void lowercase(char *p) void git_config_push_parameter(const char *text) { struct strbuf env = STRBUF_INIT; - const char *old = getenv("GIT_CONFIG_PARAMETERS"); + const char *old = getenv(CONFIG_DATA_ENVIRONMENT); if (old) { strbuf_addstr(&env, old); strbuf_addch(&env, ' '); } sq_quote_buf(&env, text); - setenv("GIT_CONFIG_PARAMETERS", env.buf, 1); + setenv(CONFIG_DATA_ENVIRONMENT, env.buf, 1); strbuf_release(&env); } @@ -76,7 +76,7 @@ int git_config_parse_parameter(const char *text) } int git_config_parse_environment(void) { - const char *env = getenv("GIT_CONFIG_PARAMETERS"); + const char *env = getenv(CONFIG_DATA_ENVIRONMENT); char *envw; const char **argv = NULL; int nr = 0, alloc = 0; @@ -89,7 +89,7 @@ int git_config_parse_environment(void) { if (sq_dequote_to_argv(envw, &argv, &nr, &alloc) < 0) { free(envw); - return error("bogus format in GIT_CONFIG_PARAMETERS"); + return error("bogus format in " CONFIG_DATA_ENVIRONMENT); } for (i = 0; i < nr; i++) { diff --git a/environment.c b/environment.c index 83d38d3..a199f63 100644 --- a/environment.c +++ b/environment.c @@ -72,6 +72,7 @@ static char *git_object_dir, *git_index_file, *git_refs_dir, *git_graft_file; const char * const local_repo_env[LOCAL_REPO_ENV_SIZE + 1] = { ALTERNATE_DB_ENVIRONMENT, CONFIG_ENVIRONMENT, + CONFIG_DATA_ENVIRONMENT, DB_ENVIRONMENT, GIT_DIR_ENVIRONMENT, GIT_WORK_TREE_ENVIRONMENT, diff --git a/t/t5400-send-pack.sh b/t/t5400-send-pack.sh index c718253..5bcf0b8 100755 --- a/t/t5400-send-pack.sh +++ b/t/t5400-send-pack.sh @@ -94,6 +94,29 @@ test_expect_success 'refuse deleting push with denyDeletes' ' test_must_fail git send-pack ./victim :extra master ' +test_expect_success 'cannot override denyDeletes with git -c send-pack' ' + ( + cd victim && + test_might_fail git branch -D extra && + git config receive.denyDeletes true && + git branch extra master + ) && + test_must_fail git -c receive.denyDeletes=false \ + send-pack ./victim :extra master +' + +test_expect_success 'override denyDeletes with git -c receive-pack' ' + ( + cd victim && + test_might_fail git branch -D extra && + git config receive.denyDeletes true && + git branch extra master + ) && + git send-pack \ + --receive-pack="git -c receive.denyDeletes=false receive-pack" \ + ./victim :extra master +' + test_expect_success 'denyNonFastforwards trumps --force' ' ( cd victim && -- 1.7.2.2 -- 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