Merge branch 'jk/push-config'
authorJunio C Hamano <gitster@pobox.com>
Mon, 23 Mar 2015 18:28:13 +0000 (11:28 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 23 Mar 2015 18:28:14 +0000 (11:28 -0700)
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

Documentation/config.txt
Documentation/git-push.txt
builtin/push.c
contrib/completion/git-completion.bash
index e119d06d2b1855faf6d4dcbef9e1a1a3f61a3e04..2e5ceaf71974b1e5404de79103648da1829eaf42 100644 (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.
index e1a46a79581d62596625f9896a77538f6f42faff..5171086181f86b995f89ddc68de94bd2359561a3 100644 (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
index fc771a9f6f83a4a8de153c47a2422e82b66adc6f..57c138bd7bc972bfa337de4c615cbfffb99ecc71 100644 (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);
index 731c28998f4d2ec6a2339b40a8380c97394b220e..51d81d85990a061a6a95b67a153e335dc0fef0a8 100644 (file)
@@ -2186,6 +2186,7 @@ _git_config ()
                pull.octopus
                pull.twohead
                push.default
+               push.followTags
                rebase.autosquash
                rebase.stat
                receive.autogc