The flag can be overridden with `--no-force-with-lease`, or by passing the config via the command line. Signed-off-by: Francesco Mazzoli <f@xxxxxxxx> --- Documentation/config.txt | 5 +++++ builtin/push.c | 3 +++ cache.h | 1 + config.c | 4 ++++ environment.c | 1 + 5 files changed, 14 insertions(+) diff --git a/Documentation/config.txt b/Documentation/config.txt index 06898a7..36fe882 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -2537,6 +2537,11 @@ push.default:: specific workflows; for instance, in a purely central workflow (i.e. the fetch source is equal to the push destination), `upstream` is probably what you want. Possible values are: + +push.alwaysforcewithlease:: + When true, `--force-with-lease` is the default behavior when + using `push --force`. Explicit invocations of `--force-with-lease` + or `--no-force-with-lease` if present, take precedence. + -- diff --git a/builtin/push.c b/builtin/push.c index 03846e8..96fc4b2 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -561,6 +561,9 @@ int cmd_push(int argc, const char **argv, const char *prefix) packet_trace_identity("push"); git_config(git_push_config, &flags); + if (push_always_force_with_lease) { + cas.use_tracking_for_rest = 1; + } argc = parse_options(argc, argv, prefix, options, push_usage, 0); set_push_cert_flags(&flags, push_cert); diff --git a/cache.h b/cache.h index 96055c2..d31c972 100644 --- a/cache.h +++ b/cache.h @@ -830,6 +830,7 @@ enum push_default_type { extern enum branch_track git_branch_track; extern enum rebase_setup_type autorebase; extern enum push_default_type push_default; +extern int push_always_force_with_lease; enum object_creation_mode { OBJECT_CREATION_USES_HARDLINKS = 0, diff --git a/config.c b/config.c index 1cd40a5..2a0dbe4 100644 --- a/config.c +++ b/config.c @@ -1317,6 +1317,10 @@ static int git_default_push_config(const char *var, const char *value) } return 0; } + if (!strcmp(var, "push.alwaysforcewithlease")) { + push_always_force_with_lease = git_config_bool(var, value); + return 0; + } /* Add other config variables here and to Documentation/config.txt. */ return 0; diff --git a/environment.c b/environment.c index d40b21f..79186c7 100644 --- a/environment.c +++ b/environment.c @@ -53,6 +53,7 @@ unsigned whitespace_rule_cfg = WS_DEFAULT_RULE; enum branch_track git_branch_track = BRANCH_TRACK_REMOTE; enum rebase_setup_type autorebase = AUTOREBASE_NEVER; enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED; +int push_always_force_with_lease = 0; #ifndef OBJECT_CREATION_MODE #define OBJECT_CREATION_MODE OBJECT_CREATION_USES_HARDLINKS #endif -- 2.7.4