diff --git a/Documentation/config.txt b/Documentation/config.txt index 5256c7fb81..a35b9181bc 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -113,6 +113,17 @@ For command-specific variables, you will find a more detailed description in the appropriate manual page. You will find a description of non-core porcelain configuration variables in the respective porcelain documentation. +advice.*:: + When set to 'true', display the given optional help message. + When set to 'false', do not display. The configuration variables + are: ++ +-- + pushNonFastForward:: + Advice shown when linkgit:git-push[1] refuses + non-fast-forward refs. Default: true. +-- + core.fileMode:: If false, the executable bit differences between the index and the working copy are ignored; useful on broken filesystems like FAT. diff --git a/Makefile b/Makefile index a614347568..9d9ff45fb2 100644 --- a/Makefile +++ b/Makefile @@ -397,6 +397,7 @@ export PERL_PATH LIB_FILE=libgit.a XDIFF_LIB=xdiff/lib.a +LIB_H += advice.h LIB_H += archive.h LIB_H += attr.h LIB_H += blob.h @@ -454,6 +455,7 @@ LIB_H += utf8.h LIB_H += wt-status.h LIB_OBJS += abspath.o +LIB_OBJS += advice.o LIB_OBJS += alias.o LIB_OBJS += alloc.o LIB_OBJS += archive.o diff --git a/advice.c b/advice.c new file mode 100644 index 0000000000..b5216a2456 --- /dev/null +++ b/advice.c @@ -0,0 +1,25 @@ +#include "cache.h" + +int advice_push_nonfastforward = 1; + +static struct { + const char *name; + int *preference; +} advice_config[] = { + { "pushnonfastforward", &advice_push_nonfastforward }, +}; + +int git_default_advice_config(const char *var, const char *value) +{ + const char *k = skip_prefix(var, "advice."); + int i; + + for (i = 0; i < ARRAY_SIZE(advice_config); i++) { + if (strcmp(k, advice_config[i].name)) + continue; + *advice_config[i].preference = git_config_bool(var, value); + return 0; + } + + return 0; +} diff --git a/advice.h b/advice.h new file mode 100644 index 0000000000..862bae37b8 --- /dev/null +++ b/advice.h @@ -0,0 +1,8 @@ +#ifndef ADVICE_H +#define ADVICE_H + +extern int advice_push_nonfastforward; + +int git_default_advice_config(const char *var, const char *value); + +#endif /* ADVICE_H */ diff --git a/builtin-push.c b/builtin-push.c index 787011f928..6eda372a55 100644 --- a/builtin-push.c +++ b/builtin-push.c @@ -157,7 +157,7 @@ static int do_push(const char *repo, int flags) continue; error("failed to push some refs to '%s'", url[i]); - if (nonfastforward) { + if (nonfastforward && advice_push_nonfastforward) { printf("To prevent you from losing history, non-fast-forward updates were rejected\n" "Merge the remote changes before pushing again. See the 'non-fast forward'\n" "section of 'git push --help' for details.\n"); diff --git a/cache.h b/cache.h index 5fad24ce21..e1ab09292f 100644 --- a/cache.h +++ b/cache.h @@ -4,6 +4,7 @@ #include "git-compat-util.h" #include "strbuf.h" #include "hash.h" +#include "advice.h" #include SHA1_HEADER #ifndef git_SHA_CTX diff --git a/config.c b/config.c index e87edeab0c..f21530cdbd 100644 --- a/config.c +++ b/config.c @@ -627,6 +627,9 @@ int git_default_config(const char *var, const char *value, void *dummy) if (!prefixcmp(var, "mailmap.")) return git_default_mailmap_config(var, value); + if (!prefixcmp(var, "advice.")) + return git_default_advice_config(var, value); + if (!strcmp(var, "pager.color") || !strcmp(var, "color.pager")) { pager_use_color = git_config_bool(var,value); return 0;