Skip to content

Commit

Permalink
Merge branch 'jk/push-config'
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Junio C Hamano committed Mar 23, 2015
2 parents aa65b86 + a8bc269 commit 61ca378
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 9 deletions.
6 changes: 6 additions & 0 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
5 changes: 4 additions & 1 deletion Documentation/git-push.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 13 additions & 8 deletions builtin/push.c
Original file line number Diff line number Diff line change
Expand Up @@ -473,21 +473,29 @@ 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)
{
int flags = 0;
int tags = 0;
int rc;
int atomic = 0;
const char *repo = NULL; /* default repository */
struct option options[] = {
OPT__VERBOSITY(&verbosity),
Expand Down Expand Up @@ -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))))
Expand All @@ -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);
Expand Down
1 change: 1 addition & 0 deletions contrib/completion/git-completion.bash
Original file line number Diff line number Diff line change
Expand Up @@ -2186,6 +2186,7 @@ _git_config ()
pull.octopus
pull.twohead
push.default
push.followTags
rebase.autosquash
rebase.stat
receive.autogc
Expand Down

0 comments on commit 61ca378

Please sign in to comment.