branch: add --unset-upstream option
We have ways of setting the upstream information, but if we want to unset it, we need to resort to modifying the configuration manually. Teach branch an --unset-upstream option that unsets this information. Signed-off-by: Carlos Martín Nieto <cmn@elego.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
6183d826ba
commit
b84869ef14
@ -712,7 +712,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
|
||||
int delete = 0, rename = 0, force_create = 0, list = 0;
|
||||
int verbose = 0, abbrev = -1, detached = 0;
|
||||
int reflog = 0, edit_description = 0;
|
||||
int quiet = 0;
|
||||
int quiet = 0, unset_upstream = 0;
|
||||
const char *new_upstream = NULL;
|
||||
enum branch_track track;
|
||||
int kinds = REF_LOCAL_BRANCH;
|
||||
@ -728,6 +728,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
|
||||
OPT_SET_INT( 0, "set-upstream", &track, "change upstream info",
|
||||
BRANCH_TRACK_OVERRIDE),
|
||||
OPT_STRING('u', "set-upstream-to", &new_upstream, "upstream", "change the upstream info"),
|
||||
OPT_BOOLEAN(0, "unset-upstream", &unset_upstream, "Unset the upstream info"),
|
||||
OPT__COLOR(&branch_use_color, "use colored output"),
|
||||
OPT_SET_INT('r', "remotes", &kinds, "act on remote-tracking branches",
|
||||
REF_REMOTE_BRANCH),
|
||||
@ -796,10 +797,10 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
|
||||
argc = parse_options(argc, argv, prefix, options, builtin_branch_usage,
|
||||
0);
|
||||
|
||||
if (!delete && !rename && !edit_description && !new_upstream && argc == 0)
|
||||
if (!delete && !rename && !edit_description && !new_upstream && !unset_upstream && argc == 0)
|
||||
list = 1;
|
||||
|
||||
if (!!delete + !!rename + !!force_create + !!list + !!new_upstream > 1)
|
||||
if (!!delete + !!rename + !!force_create + !!list + !!new_upstream + !!unset_upstream > 1)
|
||||
usage_with_options(builtin_branch_usage, options);
|
||||
|
||||
if (abbrev == -1)
|
||||
@ -865,6 +866,20 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
|
||||
* info and making sure new_upstream is correct
|
||||
*/
|
||||
create_branch(head, branch->name, new_upstream, 0, 0, 0, quiet, BRANCH_TRACK_OVERRIDE);
|
||||
} else if (unset_upstream) {
|
||||
struct branch *branch = branch_get(argv[0]);
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
||||
if (!branch_has_merge_config(branch)) {
|
||||
die(_("Branch '%s' has no upstream information"), branch->name);
|
||||
}
|
||||
|
||||
strbuf_addf(&buf, "branch.%s.remote", branch->name);
|
||||
git_config_set_multivar(buf.buf, NULL, NULL, 1);
|
||||
strbuf_reset(&buf);
|
||||
strbuf_addf(&buf, "branch.%s.merge", branch->name);
|
||||
git_config_set_multivar(buf.buf, NULL, NULL, 1);
|
||||
strbuf_release(&buf);
|
||||
} else if (argc > 0 && argc <= 2) {
|
||||
if (kinds != REF_LOCAL_BRANCH)
|
||||
die(_("-a and -r options to 'git branch' do not make sense with a branch name"));
|
||||
|
Reference in New Issue
Block a user