On Sun, 2017-07-09 at 11:57 -0700, Junio C Hamano wrote:
> This is borderline "meh" at least to me. An argument against a
> hypothetical version of Git that "fixes" your issue would be that no
> matter what the source of renaming is, as long as 'master' exists,
> "branch -m" shouldn't overwrite it, and it is a good thing to remind
> the user that 'master' exists and the user meant to rename it to
> something else.
>
I'm not against the fact of reminding the user about an existing
branch. I'm with the fact that, warn him when he really has to care
about a branch being overwritten i.e., when he tries to rename an
"existing" branch to one that refers to another existing branch.
I found this behaviour odd as I try to relate it with the 'mv' command.
It's behaviour is as follows,
$ ls
file some_file
$ mv nothing file
mv: cannot stat 'nothing': No such file or directory
If I haven't missed anything the following patch seems to fix the
problem,
diff --git a/builtin/branch.c b/builtin/branch.c
index 48a513a84..2869aaca8 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -476,7 +476,10 @@ static void rename_branch(const char *oldname, const char
*newname, int force)
*/
clobber_head_ok = !strcmp(oldname, newname);
- validate_new_branchname(newname, &newref, force, clobber_head_ok);
+ if(ref_exists(oldref.buf))
+ validate_new_branchname(newname, &newref, force,
clobber_head_ok);
+ else
+ die(_("Branch '%s' does not exist."), oldname);
reject_rebase_or_bisect_branch(oldref.buf);
--
Kaartic