Merge branch 'jk/push-config'

Restructure "git push" codepath to make it easier to add new
configuration bits and then add push.followTags configuration that
turns --follow-tags option on by default.

* jk/push-config:
  push: allow --follow-tags to be set by config push.followTags
  cmd_push: pass "flags" pointer to config callback
  cmd_push: set "atomic" bit directly
  git_push_config: drop cargo-culted wt_status pointer
This commit is contained in:
Junio C Hamano 2015-03-23 11:28:13 -07:00
commit 61ca378275
4 changed files with 24 additions and 9 deletions

View File

@ -2111,6 +2111,12 @@ new default).
--
push.followTags::
If set to true enable '--follow-tags' option by default. You
may override this configuration at time of push by specifying
'--no-follow-tags'.
rebase.stat::
Whether to show a diffstat of what changed upstream since the last
rebase. False by default.

View File

@ -128,7 +128,10 @@ already exists on the remote side.
Push all the refs that would be pushed without this option,
and also push annotated tags in `refs/tags` that are missing
from the remote but are pointing at commit-ish that are
reachable from the refs being pushed.
reachable from the refs being pushed. This can also be specified
with configuration variable 'push.followTags'. For more
information, see 'push.followTags' in linkgit:git-config[1].
--signed::
GPG-sign the push request to update refs on the receiving

View File

@ -473,13 +473,22 @@ static int option_parse_recurse_submodules(const struct option *opt,
static int git_push_config(const char *k, const char *v, void *cb)
{
struct wt_status *s = cb;
int *flags = cb;
int status;
status = git_gpg_config(k, v, NULL);
if (status)
return status;
return git_default_config(k, v, s);
if (!strcmp(k, "push.followtags")) {
if (git_config_bool(k, v))
*flags |= TRANSPORT_PUSH_FOLLOW_TAGS;
else
*flags &= ~TRANSPORT_PUSH_FOLLOW_TAGS;
return 0;
}
return git_default_config(k, v, NULL);
}
int cmd_push(int argc, const char **argv, const char *prefix)
@ -487,7 +496,6 @@ int cmd_push(int argc, const char **argv, const char *prefix)
int flags = 0;
int tags = 0;
int rc;
int atomic = 0;
const char *repo = NULL; /* default repository */
struct option options[] = {
OPT__VERBOSITY(&verbosity),
@ -519,12 +527,12 @@ int cmd_push(int argc, const char **argv, const char *prefix)
OPT_BIT(0, "follow-tags", &flags, N_("push missing but relevant tags"),
TRANSPORT_PUSH_FOLLOW_TAGS),
OPT_BIT(0, "signed", &flags, N_("GPG sign the push"), TRANSPORT_PUSH_CERT),
OPT_BOOL(0, "atomic", &atomic, N_("request atomic transaction on remote side")),
OPT_BIT(0, "atomic", &flags, N_("request atomic transaction on remote side"), TRANSPORT_PUSH_ATOMIC),
OPT_END()
};
packet_trace_identity("push");
git_config(git_push_config, NULL);
git_config(git_push_config, &flags);
argc = parse_options(argc, argv, prefix, options, push_usage, 0);
if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))
@ -535,9 +543,6 @@ int cmd_push(int argc, const char **argv, const char *prefix)
if (tags)
add_refspec("refs/tags/*");
if (atomic)
flags |= TRANSPORT_PUSH_ATOMIC;
if (argc > 0) {
repo = argv[0];
set_refspecs(argv + 1, argc - 1, repo);

View File

@ -2186,6 +2186,7 @@ _git_config ()
pull.octopus
pull.twohead
push.default
push.followTags
rebase.autosquash
rebase.stat
receive.autogc