diff --git a/Documentation/config.txt b/Documentation/config.txt
index 50d9249..6e86681 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -138,8 +138,8 @@ advice.*::
+
--
pushNonFastForward::
- Advice shown when linkgit:git-push[1] refuses
- non-fast-forward refs.
+ Advice shown when linkgit:git-push[1] fails due to a
+ non-fast-forward update.
statusHints::
Directions on how to stage/unstage/add shown in the
output of linkgit:git-status[1] and the template shown
@@ -158,21 +158,6 @@ advice.*::
Advice shown when you used linkgit:git-checkout[1] to
move to the detach HEAD state, to instruct how to create
a local branch after the fact.
- pullBeforePush::
- Advice shown when you ran linkgit:git-push[1] and pushed
- a non-fast-forward update to HEAD, instructing you to
- linkgit:git-pull[1] before pushing again.
- useUpstream::
- Advice to set 'push.default' to 'upstream' when you ran
- linkgit:git-push[1] and pushed 'matching refs' by default
- (i.e. you did not have any explicit refspec on the command
- line, and no 'push.default' configuration was set) and it
- resulted in a non-fast-forward error.
- checkoutPullPush::
- Advice shown when you ran linkgit:git-push[1] and pushed
- a non-fast-forward update to a non-HEAD branch, instructing
- you to checkout the branch and run linkgit:git-pull[1]
- before pushing again.
--
core.fileMode::
diff --git a/advice.c b/advice.c
index 608e90d..01130e5 100644
--- a/advice.c
+++ b/advice.c
@@ -6,9 +6,6 @@ int advice_commit_before_merge = 1;
int advice_resolve_conflict = 1;
int advice_implicit_identity = 1;
int advice_detached_head = 1;
-int advice_pull_before_push = 1;
-int advice_use_upstream = 1;
-int advice_checkout_pull_push = 1;
static struct {
const char *name;@@ -20,9 +17,6 @@ static struct {
{ "resolveconflict", &advice_resolve_conflict },
{ "implicitidentity", &advice_implicit_identity },
{ "detachedhead", &advice_detached_head },
- { "pullbeforepush", &advice_pull_before_push },
- { "useupstream", &advice_use_upstream },
- { "checkoutpullpush", &advice_checkout_pull_push }
};
void advise(const char *advice, ...)diff --git a/advice.h b/advice.h
index ac07a44..7bda45b 100644
--- a/advice.h
+++ b/advice.h
@@ -9,9 +9,6 @@ extern int advice_commit_before_merge;
extern int advice_resolve_conflict;
extern int advice_implicit_identity;
extern int advice_detached_head;
-extern int advice_use_upstream;
-extern int advice_pull_before_push;
-extern int advice_checkout_pull_push;
int git_default_advice_config(const char *var, const char *value);
void advise(const char *advice, ...);
diff --git a/builtin/push.c b/builtin/push.c
index 0fecf06..d7587d7 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -118,57 +118,45 @@ static void setup_default_push_refspecs(struct remote *remote)
}
}
-static const char *message_advice_pull_before_push[] = {
- "To prevent you from losing history, non-fast-forward updates to HEAD",
- "were rejected. Merge the remote changes (e.g. 'git pull') before",
- "pushing again. See the 'Note about fast-forwards' section of",
- "'git push --help' for details."
-};
-
-static const char *message_advice_use_upstream[] = {
- "By default, git pushes all branches that have a matching counterpart",
- "on the remote. In this case, some of your local branches were stale",
- "with respect to their remote counterparts. If you did not intend to",
- "push these branches, you may want to set the 'push.default'",
- "configuration variable to 'upstream' to push only the current branch."
-};
-
-static const char *message_advice_checkout_pull_push[] = {
- "To prevent you from losing history, your non-fast-forward branch",
- "updates were rejected. Checkout the branch and merge the remote",
- "changes (e.g. 'git pull') before pushing again. See the",
- "'Note about fast-forwards' section of 'git push --help' for",
- "details."
-};
+static const char message_advice_pull_before_push[] =
+ N_("Update was rejected because the tip of your current branch is behind\n"
+ "the remote. Merge the remote changes (e.g. 'git pull') before\n"
+ "pushing again. See the 'Note about fast-forwards' section of\n"
+ "'git push --help' for details.");
+
+
+static const char message_advice_use_upstream[] =
+ N_("Some of your local branches were stale with respect to their\n"
+ "remote counterparts. If you did not intend to push these branches,\n"
+ "you may want to set the 'push.default' configuration variable to\n"
+ "'current' or 'upstream' to push only the current branch.");
+
+static const char message_advice_checkout_pull_push[] =
+ N_("Updates were rejected because the tip of some of your branches are\n"
+ "behind the remote. Check out the branch and merge the remote\n"
+ "changes (e.g. 'git pull') before pushing again. See the\n"
+ "'Note about fast-forwards' section of 'git push --help'\n"
+ "for details.");
static void advise_pull_before_push(void)
{
- int i;
-
- if (!advice_pull_before_push)
+ if (!advice_push_nonfastforward)
return;
- for (i = 0; i < ARRAY_SIZE(message_advice_pull_before_push); i++)
- advise(message_advice_pull_before_push[i]);
+ advise(_(message_advice_pull_before_push));
}
static void advise_use_upstream(void)
{
- int i;
-
- if (!advice_use_upstream)
+ if (!advice_push_nonfastforward)
return;
- for (i = 0; i < ARRAY_SIZE(message_advice_use_upstream); i++)
- advise(message_advice_use_upstream[i]);
+ advise(_(message_advice_use_upstream));
}
static void advise_checkout_pull_push(void)
{
- int i;
-
- if (!advice_checkout_pull_push)
+ if (!advice_push_nonfastforward)
return;
- for (i = 0; i < ARRAY_SIZE(message_advice_checkout_pull_push); i++)
- advise(message_advice_checkout_pull_push[i]);
+ advise(_(message_advice_checkout_pull_push));
}
static int push_with_options(struct transport *transport, int flags)@@ -192,19 +180,23 @@ static int push_with_options(struct transport *transport, int flags)
error(_("failed to push some refs to '%s'"), transport->url);
err |= transport_disconnect(transport);
+ if (!err)
+ return 0;
- if (nonfastforward == NONFASTFORWARD_HEAD) {
+ switch (nonfastforward) {
+ default:
+ break;
+ case NON_FF_HEAD:
advise_pull_before_push();
- } else if (nonfastforward == NONFASTFORWARD_OTHER) {
+ break;
+ case NON_FF_OTHER:
if (default_matching_used)
advise_use_upstream();
else
advise_checkout_pull_push();
+ break;
}
- if (!err)
- return 0;
-
return 1;
}
diff --git a/builtin/send-pack.c b/builtin/send-pack.c
index 09895b9..9df341c 100644
--- a/builtin/send-pack.c
+++ b/builtin/send-pack.c
@@ -409,7 +409,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
int send_all = 0;
const char *receivepack = "git-receive-pack";
int flags;
- int nonfastforward = NONFASTFORWARD_NONE;
+ int nonfastforward = 0;
argv++;
for (i = 1; i < argc; i++, argv++) {diff --git a/cache.h b/cache.h
index 14bc305..427b600 100644
--- a/cache.h
+++ b/cache.h
@@ -1020,9 +1020,8 @@ struct ref {
REF_STATUS_EXPECTING_REPORT
} status;
enum {
- NONFASTFORWARD_NONE = 0,
- NONFASTFORWARD_HEAD,
- NONFASTFORWARD_OTHER
+ NON_FF_HEAD = 1,
+ NON_FF_OTHER
} nonfastforward;
char *remote_status;
struct ref *peer_ref; /* when renaming */diff --git a/transport.c b/transport.c
index 23210d5..7864007 100644
--- a/transport.c
+++ b/transport.c
@@ -736,18 +736,18 @@ void transport_print_push_status(const char *dest, struct ref *refs,
if (ref->status == REF_STATUS_OK)
n += print_one_push_status(ref, dest, n, porcelain);
- *nonfastforward = NONFASTFORWARD_NONE;
+ *nonfastforward = 0;
for (ref = refs; ref; ref = ref->next) {
if (ref->status != REF_STATUS_NONE &&
ref->status != REF_STATUS_UPTODATE &&
ref->status != REF_STATUS_OK)
n += print_one_push_status(ref, dest, n, porcelain);
if (ref->status == REF_STATUS_REJECT_NONFASTFORWARD &&
- *nonfastforward != NONFASTFORWARD_HEAD) {
+ *nonfastforward != NON_FF_HEAD) {
if (!strcmp(head, ref->name))
- *nonfastforward = NONFASTFORWARD_HEAD;
+ *nonfastforward = NON_FF_HEAD;
else
- *nonfastforward = NONFASTFORWARD_OTHER;
+ *nonfastforward = NON_FF_OTHER;
}
}
}@@ -1017,7 +1017,7 @@ int transport_push(struct transport *transport,
int refspec_nr, const char **refspec, int flags,
int *nonfastforward)
{
- *nonfastforward = NONFASTFORWARD_NONE;
+ *nonfastforward = 0;
transport_verify_remote_names(refspec_nr, refspec);
if (transport->push) {--
1.7.10.rc1.22.g07e85