push: parse and set flag for "--force-if-includes"
The previous commit added the necessary machinery to implement the
"--force-if-includes" protection, when "--force-with-lease" is used
without giving exact object the remote still ought to have. Surface
the feature by adding a command line option and a configuration
variable to enable it.
- Add a flag: "TRANSPORT_PUSH_FORCE_IF_INCLUDES" to indicate that the
new option was passed from the command line of via configuration
settings; update command line and configuration parsers to set the
new flag accordingly.
- Introduce a new configuration option "push.useForceIfIncludes", which
is equivalent to setting "--force-if-includes" in the command line.
- Update "remote-curl" to recognize and pass this option to "send-pack"
when enabled.
- Update "advise" to catch the reject reason "REJECT_REF_NEEDS_UPDATE",
set when the ref status is "REF_STATUS_REJECT_REMOTE_UPDATED" and
(optionally) print a help message when the push fails.
- The new option is a "no-op" in the following scenarios:
* When used without "--force-with-lease".
* When used with "--force-with-lease", and if the expected commit
on the remote side is specified as an argument.
Signed-off-by: Srinidhi Kaushik <shrinidhi.kaushik@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
99a1f9ae10
commit
3b990aa645
@ -44,7 +44,8 @@ struct options {
|
||||
from_promisor : 1,
|
||||
|
||||
atomic : 1,
|
||||
object_format : 1;
|
||||
object_format : 1,
|
||||
force_if_includes : 1;
|
||||
const struct git_hash_algo *hash_algo;
|
||||
};
|
||||
static struct options options;
|
||||
@ -131,6 +132,14 @@ static int set_option(const char *name, const char *value)
|
||||
string_list_append(&cas_options, val.buf);
|
||||
strbuf_release(&val);
|
||||
return 0;
|
||||
} else if (!strcmp(name, TRANS_OPT_FORCE_IF_INCLUDES)) {
|
||||
if (!strcmp(value, "true"))
|
||||
options.force_if_includes = 1;
|
||||
else if (!strcmp(value, "false"))
|
||||
options.force_if_includes = 0;
|
||||
else
|
||||
return -1;
|
||||
return 0;
|
||||
} else if (!strcmp(name, "cloning")) {
|
||||
if (!strcmp(value, "true"))
|
||||
options.cloning = 1;
|
||||
@ -1318,6 +1327,9 @@ static int push_git(struct discovery *heads, int nr_spec, const char **specs)
|
||||
strvec_push(&args, cas_option->string);
|
||||
strvec_push(&args, url.buf);
|
||||
|
||||
if (options.force_if_includes)
|
||||
strvec_push(&args, "--force-if-includes");
|
||||
|
||||
strvec_push(&args, "--stdin");
|
||||
for (i = 0; i < nr_spec; i++)
|
||||
packet_buf_write(&preamble, "%s\n", specs[i]);
|
||||
|
||||
Reference in New Issue
Block a user