From: Jeff King <peff@peff.net>
To: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Cc: Junio C Hamano <gitster@pobox.com>,
Michael Haggerty <mhagger@alum.mit.edu>,
git@vger.kernel.org
Subject: Re: push.default: current vs upstream
Date: Thu, 12 Apr 2012 03:55:35 -0400 [thread overview]
Message-ID: <20120412075535.GC31122@sigill.intra.peff.net> (raw)
In-Reply-To: <vpq62d6dyzr.fsf@bauges.imag.fr>
On Wed, Apr 11, 2012 at 06:17:28PM +0200, Matthieu Moy wrote:
> > This makes the first priority for 1.7.10 cycle to come up with a solid
> > implementation of the "beginner" mode, I guess.
>
> I guess so. I found the idea relevant the first time it came in the
> discussion, and I'm starting to get really convinced that this is the
> way to go. And if we're wrong, it will be much easier to migrate to
> either "current" or "upstream" later.
>
> No time to code this right now, but I may come up with a patch in a few
> days. Any idea on the real name? I'd call it "safeUpstream" or
> "safeCurrent", but that's probably by lack of a better name.
I think it is as simple as applying the usual upstream rules, then
checking the remote name against the local name. Like this:
diff --git a/builtin/push.c b/builtin/push.c
index b6c0fee..6077ecc 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -75,7 +75,7 @@ static int push_url_of_remote(struct remote *remote, const char ***url_p)
return remote->url_nr;
}
-static void setup_push_upstream(struct remote *remote)
+static void setup_push_upstream(struct remote *remote, int simple)
{
struct strbuf refspec = STRBUF_INIT;
struct branch *branch = branch_get(NULL);
@@ -103,6 +103,29 @@ static void setup_push_upstream(struct remote *remote)
"to update which remote branch."),
remote->name, branch->name);
+ if (simple && strcmp(branch->refname, branch->merge[0]->src)) {
+ /*
+ * There's no point in using shorten_unambiguous_ref here,
+ * as the ambiguity would be on the remote side, not what
+ * we have locally. Plus, this is supposed to be the simple
+ * mode. If the user is doing something crazy like setting
+ * upstream to a non-branch, we should probably be showing
+ * them the big ugly fully qualified ref.
+ */
+ const char *short_up = skip_prefix(branch->merge[0]->src, "refs/heads/");
+ die(_("The upstream branch of your current branch does not match\n"
+ "the name of your current branch. To push to the upstream branch\n"
+ "on the remote, use\n"
+ "\n"
+ " git push %s HEAD:%s\n"
+ "\n"
+ "To push to the branch of the same name on the remote, use\n"
+ "\n"
+ " git push %s %s\n"),
+ remote->name, short_up ? short_up : branch->merge[0]->src,
+ remote->name, branch->name);
+ }
+
strbuf_addf(&refspec, "%s:%s", branch->name, branch->merge[0]->src);
add_refspec(refspec.buf);
}
@@ -115,8 +138,12 @@ static void setup_default_push_refspecs(struct remote *remote)
add_refspec(":");
break;
+ case PUSH_DEFAULT_SIMPLE:
+ setup_push_upstream(remote, 1);
+ break;
+
case PUSH_DEFAULT_UPSTREAM:
- setup_push_upstream(remote);
+ setup_push_upstream(remote, 0);
break;
case PUSH_DEFAULT_CURRENT:
diff --git a/cache.h b/cache.h
index e12b15f..0f862dd 100644
--- a/cache.h
+++ b/cache.h
@@ -624,6 +624,7 @@ enum rebase_setup_type {
enum push_default_type {
PUSH_DEFAULT_NOTHING = 0,
PUSH_DEFAULT_MATCHING,
+ PUSH_DEFAULT_SIMPLE,
PUSH_DEFAULT_UPSTREAM,
PUSH_DEFAULT_CURRENT
};
diff --git a/config.c b/config.c
index ad03908..0ca0a6f 100644
--- a/config.c
+++ b/config.c
@@ -824,6 +824,8 @@ static int git_default_push_config(const char *var, const char *value)
push_default = PUSH_DEFAULT_NOTHING;
else if (!strcmp(value, "matching"))
push_default = PUSH_DEFAULT_MATCHING;
+ else if (!strcmp(value, "simple"))
+ push_default = PUSH_DEFAULT_SIMPLE;
else if (!strcmp(value, "upstream"))
push_default = PUSH_DEFAULT_UPSTREAM;
else if (!strcmp(value, "tracking")) /* deprecated */
diff --git a/environment.c b/environment.c
index c93b8f4..1defcd4 100644
--- a/environment.c
+++ b/environment.c
@@ -52,7 +52,7 @@ enum safe_crlf safe_crlf = SAFE_CRLF_WARN;
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_MATCHING;
+enum push_default_type push_default = PUSH_DEFAULT_SIMPLE;
#ifndef OBJECT_CREATION_MODE
#define OBJECT_CREATION_MODE OBJECT_CREATION_USES_HARDLINKS
#endif
next prev parent reply other threads:[~2012-04-12 7:55 UTC|newest]
Thread overview: 152+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-28 19:47 [ANNOUNCE] Git 1.7.10-rc3 Junio C Hamano
2012-03-29 9:52 ` Jeff King
2012-03-29 21:22 ` Junio C Hamano
2012-03-29 22:11 ` Jeff King
2012-03-30 1:54 ` Junio C Hamano
2012-03-30 7:13 ` push.default: current vs upstream Jeff King
2012-03-30 20:25 ` Junio C Hamano
2012-03-30 21:01 ` Jeff King
2012-03-30 21:28 ` Junio C Hamano
2012-03-30 21:53 ` Jeff King
2012-03-30 22:15 ` Junio C Hamano
2012-03-30 22:20 ` Jeff King
2012-03-30 23:12 ` Junio C Hamano
2012-03-31 22:49 ` Nathan Gray
2012-03-31 23:48 ` Seth Robertson
2012-04-01 2:22 ` Junio C Hamano
2012-04-01 5:58 ` Nathan Gray
2012-04-02 7:40 ` Matthieu Moy
2012-04-02 16:48 ` Junio C Hamano
2012-04-02 17:20 ` Matthieu Moy
2012-04-02 18:40 ` Junio C Hamano
2012-04-02 18:58 ` Matthieu Moy
2012-04-02 19:47 ` Junio C Hamano
2012-04-02 20:40 ` Matthieu Moy
2012-04-02 20:50 ` Junio C Hamano
2012-04-02 21:02 ` demerphq
2012-04-02 21:16 ` Matthieu Moy
2012-04-04 7:57 ` demerphq
2012-04-05 13:13 ` Jeff King
2012-04-05 16:46 ` Matthieu Moy
2012-04-06 7:15 ` Jeff King
2012-04-06 7:44 ` Matthieu Moy
2012-04-06 8:00 ` Jeff King
2012-04-06 17:41 ` Junio C Hamano
2012-04-06 18:01 ` Jehan Bing
2012-04-07 7:49 ` Michael Haggerty
2012-04-07 7:51 ` Jeff King
2012-04-07 8:40 ` Andrew Sayers
2012-04-12 7:11 ` Jeff King
2012-04-12 15:04 ` Junio C Hamano
2012-04-12 21:16 ` Andrew Sayers
2012-04-12 21:33 ` Junio C Hamano
2012-04-12 22:11 ` Jeff King
2012-04-12 22:59 ` Philip Oakley
2012-04-13 19:31 ` Junio C Hamano
2012-04-17 20:13 ` Andrew Sayers
2012-04-08 4:43 ` Junio C Hamano
2012-04-11 16:17 ` Matthieu Moy
2012-04-11 16:44 ` Junio C Hamano
2012-04-12 7:55 ` Jeff King [this message]
2012-04-12 8:09 ` Matthieu Moy
2012-04-12 8:14 ` Jeff King
2012-04-12 8:59 ` Matthieu Moy
2012-04-12 15:56 ` Junio C Hamano
2012-04-19 16:06 ` Junio C Hamano
2012-04-19 20:38 ` Matthieu Moy
2012-04-19 21:02 ` Junio C Hamano
2012-04-19 22:57 ` [RFC/PATCH 0/3] push.default upcomming change Matthieu Moy
2012-04-19 22:57 ` [PATCH 1/3] push: introduce new push.default mode "simple" Matthieu Moy
2012-04-19 23:46 ` Jeff King
2012-04-20 14:52 ` Matthieu Moy
2012-04-20 14:59 ` [PATCH 0/4 v2] push.default upcomming change Matthieu Moy
2012-04-20 14:59 ` [PATCH 1/4] Documentation: explain push.default option a bit more Matthieu Moy
2012-04-20 20:13 ` Jeff King
2012-04-20 21:28 ` Junio C Hamano
2012-04-21 3:51 ` Michael Haggerty
2012-04-21 4:08 ` Junio C Hamano
2012-04-21 5:01 ` Michael Haggerty
2012-04-21 5:42 ` Junio C Hamano
2012-04-20 14:59 ` [PATCH 2/4] push: introduce new push.default mode "simple" Matthieu Moy
2012-04-20 20:33 ` Jeff King
2012-04-22 16:24 ` Zbigniew Jędrzejewski-Szmek
2012-04-20 21:42 ` Junio C Hamano
2012-04-23 8:38 ` Matthieu Moy
2012-04-20 14:59 ` [PATCH 3/4] t5570: use explicit push refspec Matthieu Moy
2012-04-20 14:59 ` [PATCH 4/4] push: start warning upcoming default change for push.default Matthieu Moy
2012-04-20 20:35 ` [PATCH 0/4 v2] push.default upcomming change Jeff King
2012-04-22 11:05 ` Matthieu Moy
2012-04-23 2:50 ` Junio C Hamano
2012-04-23 8:37 ` [PATCH 0/7 v3] " Matthieu Moy
2012-04-23 8:37 ` [PATCH 1/7] Documentation: explain push.default option a bit more Matthieu Moy
2012-04-23 15:20 ` Junio C Hamano
2012-04-23 19:00 ` Philip Oakley
2012-04-23 19:11 ` Junio C Hamano
2012-04-23 21:01 ` Philip Oakley
2012-04-23 8:37 ` [PATCH 2/7] Undocument deprecated alias 'push.default=tracking' Matthieu Moy
2012-04-23 15:21 ` Junio C Hamano
2013-01-31 17:10 ` Ævar Arnfjörð Bjarmason
2013-01-31 17:35 ` Junio C Hamano
2013-01-31 19:07 ` Jonathan Nieder
2013-01-31 19:11 ` Jonathan Nieder
2013-01-31 19:58 ` Junio C Hamano
2013-01-31 19:41 ` Junio C Hamano
2013-01-31 19:57 ` Jonathan Nieder
2013-01-31 20:01 ` Junio C Hamano
2013-01-31 20:11 ` Jonathan Nieder
2013-01-31 20:42 ` Junio C Hamano
2013-01-31 20:44 ` Junio C Hamano
2013-01-31 20:04 ` Jonathan Nieder
2013-01-31 20:08 ` Matthieu Moy
2013-01-31 20:21 ` Junio C Hamano
2013-01-31 20:50 ` Junio C Hamano
2013-01-31 21:00 ` Jonathan Nieder
2013-02-01 1:15 ` Junio C Hamano
2013-01-31 21:08 ` Jonathan Nieder
2013-01-31 20:41 ` Philip Oakley
2012-04-23 8:38 ` [PATCH 3/7] t5528-push-default.sh: add helper functions Matthieu Moy
2012-04-23 15:36 ` Junio C Hamano
2012-04-23 16:02 ` Matthieu Moy
2012-04-23 16:16 ` Junio C Hamano
2012-04-23 16:20 ` Matthieu Moy
2012-04-23 16:57 ` Matthieu Moy
2012-04-23 17:09 ` Junio C Hamano
2012-04-23 16:42 ` Junio C Hamano
2012-04-23 16:45 ` [PATCH 2/3] fixup! " Junio C Hamano
2012-04-23 16:48 ` [PATCH 3/3] push: suggested updates to push configuration documentation Junio C Hamano
2012-04-23 8:38 ` [PATCH 4/7] push: introduce new push.default mode "simple" Matthieu Moy
2012-04-23 10:32 ` Michael Haggerty
2012-04-23 11:20 ` Matthieu Moy
2012-04-23 15:52 ` Junio C Hamano
2012-04-23 16:09 ` Matthieu Moy
2012-04-23 8:38 ` [PATCH 5/7] t5570: use explicit push refspec Matthieu Moy
2012-04-23 8:38 ` [PATCH 6/7] push: document the future default change for push.default (matching -> simple) Matthieu Moy
2012-04-23 8:38 ` [PATCH 7/7] push: start warning upcoming default change for push.default Matthieu Moy
2012-04-24 7:49 ` [PATCH 0/7 v4] push.default upcomming change Matthieu Moy
2012-04-24 7:50 ` [PATCH 1/7] Documentation: explain push.default option a bit more Matthieu Moy
2012-04-24 7:50 ` [PATCH 2/7] Undocument deprecated alias 'push.default=tracking' Matthieu Moy
2012-04-24 7:50 ` [PATCH 3/7] t5528-push-default.sh: add helper functions Matthieu Moy
2012-04-24 7:50 ` [PATCH 4/7] push: introduce new push.default mode "simple" Matthieu Moy
2012-04-25 1:53 ` Junio C Hamano
2012-04-25 11:01 ` Matthieu Moy
2012-04-24 7:50 ` [PATCH 5/7] t5570: use explicit push refspec Matthieu Moy
2012-04-24 7:50 ` [PATCH 6/7] push: document the future default change for push.default (matching -> simple) Matthieu Moy
2012-04-24 7:50 ` [PATCH 7/7] push: start warning upcoming default change for push.default Matthieu Moy
2012-04-24 19:28 ` [PATCH 0/7 v4] push.default upcomming change Junio C Hamano
2012-04-19 22:57 ` [PATCH 2/3] t5570: use explicit push refspec Matthieu Moy
2012-04-19 22:57 ` [PATCH 3/3] push: start warning upcoming default change for push.default Matthieu Moy
2012-04-26 5:44 ` [PATCH] t5541: warning message is given even with --quiet Junio C Hamano
2012-04-26 6:31 ` Matthieu Moy
2012-04-11 2:08 ` [RFC/PATCH] Give better 'pull' advice when pushing non-ff updates to current branch Christopher Tiwald
2012-04-06 11:38 ` push.default: current vs upstream Dmitry Potapov
2012-04-06 13:36 ` demerphq
2012-04-06 18:03 ` Dmitry Potapov
2012-04-06 18:48 ` demerphq
2012-04-06 19:38 ` Dmitry Potapov
2012-03-30 23:07 ` Junio C Hamano
2012-04-03 20:59 ` Jeff King
2012-04-03 21:04 ` Jeff King
2012-04-03 22:29 ` Junio C Hamano
2012-04-03 23:23 ` Junio C Hamano
2012-04-05 12:45 ` Jeff King
2012-04-08 12:52 ` Felipe Contreras
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120412075535.GC31122@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mhagger@alum.mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).