diff options
author | Pratik Karki <predatoramigo@gmail.com> | 2018-08-08 21:21:30 +0545 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-10-11 14:16:05 +0900 |
commit | 8f5986d95a9154d2ecbc4dd16b893380875cc83d (patch) | |
tree | 0e131cf74b621a33501e85cb8e3239b45c24b1ce /builtin | |
parent | 9dba809a69a7cd2a60e73d1ccaea0812b72b2b79 (diff) | |
download | git-8f5986d95a9154d2ecbc4dd16b893380875cc83d.tar.gz |
builtin rebase: optionally auto-detect the upstream
The `git rebase` command, when called without the `<upstream>`
command-line argument, automatically looks for the upstream
branch configured for the current branch.
With this commit, the builtin rebase learned that trick, too.
Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/rebase.c | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/builtin/rebase.c b/builtin/rebase.c index b2cf779f1b..7e2f68eb28 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -622,6 +622,36 @@ static int parse_opt_interactive(const struct option *opt, const char *arg, return 0; } +static void NORETURN error_on_missing_default_upstream(void) +{ + struct branch *current_branch = branch_get(NULL); + + printf(_("%s\n" + "Please specify which branch you want to rebase against.\n" + "See git-rebase(1) for details.\n" + "\n" + " git rebase '<branch>'\n" + "\n"), + current_branch ? _("There is no tracking information for " + "the current branch.") : + _("You are not currently on a branch.")); + + if (current_branch) { + const char *remote = current_branch->remote_name; + + if (!remote) + remote = _("<remote>"); + + printf(_("If you wish to set tracking information for this " + "branch you can do so with:\n" + "\n" + " git branch --set-upstream-to=%s/<branch> %s\n" + "\n"), + remote, current_branch->name); + } + exit(1); +} + int cmd_rebase(int argc, const char **argv, const char *prefix) { struct rebase_options options = { @@ -1057,9 +1087,17 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) } if (!options.root) { - if (argc < 1) - die("TODO: handle @{upstream}"); - else { + if (argc < 1) { + struct branch *branch; + + branch = branch_get(NULL); + options.upstream_name = branch_get_upstream(branch, + NULL); + if (!options.upstream_name) + error_on_missing_default_upstream(); + if (fork_point < 0) + fork_point = 1; + } else { options.upstream_name = argv[0]; argc--; argv++; |