зеркало из https://github.com/microsoft/git.git
Merge branch 'ci/forbid-unwanted-current-branch-update'
* ci/forbid-unwanted-current-branch-update: branch --set-upstream: regression fix
This commit is contained in:
Коммит
c103e9529c
17
branch.c
17
branch.c
|
@ -135,23 +135,25 @@ static int setup_tracking(const char *new_ref, const char *orig_ref,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int validate_new_branchname(const char *name, struct strbuf *ref, int force)
|
||||
int validate_new_branchname(const char *name, struct strbuf *ref,
|
||||
int force, int attr_only)
|
||||
{
|
||||
const char *head;
|
||||
unsigned char sha1[20];
|
||||
|
||||
if (strbuf_check_branch_ref(ref, name))
|
||||
die("'%s' is not a valid branch name.", name);
|
||||
|
||||
if (!ref_exists(ref->buf))
|
||||
return 0;
|
||||
else if (!force)
|
||||
else if (!force && !attr_only)
|
||||
die("A branch named '%s' already exists.", ref->buf + strlen("refs/heads/"));
|
||||
|
||||
if (!attr_only) {
|
||||
const char *head;
|
||||
unsigned char sha1[20];
|
||||
|
||||
head = resolve_ref("HEAD", sha1, 0, NULL);
|
||||
if (!is_bare_repository() && head && !strcmp(head, ref->buf))
|
||||
die("Cannot force update the current branch.");
|
||||
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -171,7 +173,8 @@ void create_branch(const char *head,
|
|||
if (track == BRANCH_TRACK_EXPLICIT || track == BRANCH_TRACK_OVERRIDE)
|
||||
explicit_tracking = 1;
|
||||
|
||||
if (validate_new_branchname(name, &ref, force || track == BRANCH_TRACK_OVERRIDE)) {
|
||||
if (validate_new_branchname(name, &ref, force,
|
||||
track == BRANCH_TRACK_OVERRIDE)) {
|
||||
if (!force)
|
||||
dont_change_ref = 1;
|
||||
else
|
||||
|
|
12
branch.h
12
branch.h
|
@ -20,8 +20,18 @@ void create_branch(const char *head, const char *name, const char *start_name,
|
|||
* interpreted ref in ref, force indicates whether (non-head) branches
|
||||
* may be overwritten. A non-zero return value indicates that the force
|
||||
* parameter was non-zero and the branch already exists.
|
||||
*
|
||||
* Contrary to all of the above, when attr_only is 1, the caller is
|
||||
* not interested in verifying if it is Ok to update the named
|
||||
* branch to point at a potentially different commit. It is merely
|
||||
* asking if it is OK to change some attribute for the named branch
|
||||
* (e.g. tracking upstream).
|
||||
*
|
||||
* NEEDSWORK: This needs to be split into two separate functions in the
|
||||
* longer run for sanity.
|
||||
*
|
||||
*/
|
||||
int validate_new_branchname(const char *name, struct strbuf *ref, int force);
|
||||
int validate_new_branchname(const char *name, struct strbuf *ref, int force, int attr_only);
|
||||
|
||||
/*
|
||||
* Remove information about the state of working on the current
|
||||
|
|
|
@ -566,7 +566,7 @@ static void rename_branch(const char *oldname, const char *newname, int force)
|
|||
die(_("Invalid branch name: '%s'"), oldname);
|
||||
}
|
||||
|
||||
validate_new_branchname(newname, &newref, force);
|
||||
validate_new_branchname(newname, &newref, force, 0);
|
||||
|
||||
strbuf_addf(&logmsg, "Branch: renamed %s to %s",
|
||||
oldref.buf, newref.buf);
|
||||
|
|
|
@ -1073,7 +1073,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
|
|||
if (opts.new_branch) {
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
||||
opts.branch_exists = validate_new_branchname(opts.new_branch, &buf, !!opts.new_branch_force);
|
||||
opts.branch_exists = validate_new_branchname(opts.new_branch, &buf,
|
||||
!!opts.new_branch_force, 0);
|
||||
|
||||
strbuf_release(&buf);
|
||||
}
|
||||
|
|
|
@ -554,4 +554,17 @@ test_expect_success 'attempt to delete a branch merged to its base' '
|
|||
test_must_fail git branch -d my10
|
||||
'
|
||||
|
||||
test_expect_success 'use set-upstream on the current branch' '
|
||||
git checkout master &&
|
||||
git --bare init myupstream.git &&
|
||||
git push myupstream.git master:refs/heads/frotz &&
|
||||
git remote add origin myupstream.git &&
|
||||
git fetch &&
|
||||
git branch --set-upstream master origin/frotz &&
|
||||
|
||||
test "z$(git config branch.master.remote)" = "zorigin" &&
|
||||
test "z$(git config branch.master.merge)" = "zrefs/heads/frotz"
|
||||
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Загрузка…
Ссылка в новой задаче