[PATCH v9 1/4] checkout: extract function to display advice for ambiguous remotes
From: Yoichi NAKAYAMA <yoichi.nakayama@gmail.com>
Signed-off-by: Yoichi NAKAYAMA <yoichi.nakayama@gmail.com>
---
builtin/checkout.c | 62 ++++++++++++++++++++++++----------------------
1 file changed, 33 insertions(+), 29 deletions(-)
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 55e3a89a85..650eda735f 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -1343,6 +1343,34 @@ enum checkout_command {
CHECKOUT_RESTORE = 3,
};
+static void advice_disambiguating_remotes(enum checkout_command which_command)
+{
+ const char *cmdname;
+
+ switch (which_command) {
+ case CHECKOUT_CHECKOUT:
+ cmdname = "checkout";
+ break;
+ case CHECKOUT_SWITCH:
+ cmdname = "switch";
+ break;
+ default:
+ BUG("command <%d> should not reach parse_remote_branch",
+ which_command);
+ break;
+ }
+
+ advise(_("If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
+ "you can do so by fully qualifying the name with the --track option:\n"
+ "\n"
+ " git %s --track origin/<name>\n"
+ "\n"
+ "If you'd like to always have checkouts of an ambiguous <name> prefer\n"
+ "one remote, e.g. the 'origin' remote, consider setting\n"
+ "checkout.defaultRemote=origin in your config."),
+ cmdname);
+}
+
static char *parse_remote_branch(const char *arg,
struct object_id *rev,
int could_be_checkout_paths,
@@ -1358,35 +1386,11 @@ static char *parse_remote_branch(const char *arg,
}
if (!remote && num_matches > 1) {
- if (advice_enabled(ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME)) {
- const char *cmdname;
-
- switch (which_command) {
- case CHECKOUT_CHECKOUT:
- cmdname = "checkout";
- break;
- case CHECKOUT_SWITCH:
- cmdname = "switch";
- break;
- default:
- BUG("command <%d> should not reach parse_remote_branch",
- which_command);
- break;
- }
-
- advise(_("If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
- "you can do so by fully qualifying the name with the --track option:\n"
- "\n"
- " git %s --track origin/<name>\n"
- "\n"
- "If you'd like to always have checkouts of an ambiguous <name> prefer\n"
- "one remote, e.g. the 'origin' remote, consider setting\n"
- "checkout.defaultRemote=origin in your config."),
- cmdname);
- }
-
- die(_("'%s' matched multiple (%d) remote tracking branches"),
- arg, num_matches);
+ if (advice_enabled(ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME))
+ advice_disambiguating_remotes(which_command);
+
+ die(_("'%s' matched multiple (%d) remote tracking branches"),
+ arg, num_matches);
}
return remote;
--
gitgitgadget