On Fri, 2017-10-13 at 14:11 +0900, Junio C Hamano wrote:
>
> diff --git a/branch.c b/branch.c
> index 7404597678..2c3a364a0b 100644
> --- a/branch.c
> +++ b/branch.c
> @@ -178,19 +178,31 @@ int read_branch_desc(struct strbuf *buf, const char
> *branch_name)
> return 0;
> }
>
> -int validate_new_branchname(const char *name, struct strbuf *ref,
> - int force, int attr_only)
> +/*
> + * Check if 'name' can be a valid name for a branch; die otherwise.
> + * Return 1 if the named branch already exists; return 0 otherwise.
> + * Fill ref with the full refname for the branch.
> + */
> +int validate_branchname(const char *name, struct strbuf *ref)
> {
> - const char *head;
> -
> if (strbuf_check_branch_ref(ref, name))
> die(_("'%s' is not a valid branch name."), name);
>
> - if (!ref_exists(ref->buf))
> - return 0;
> + return ref_exists(ref->buf);
> +}
>
> - if (attr_only)
> - return 1;
> +/*
> + * Check if a branch 'name' can be created as a new branch; die otherwise.
> + * 'force' can be used when it is OK for the named branch already exists.
> + * Return 1 if the named branch already exists; return 0 otherwise.
> + * Fill ref with the full refname for the branch.
> + */
I guess it's better to avoid repeating the comments in both the .h and
.c file as they might quite easily become stale. I would prefer keeping
it in the header file alone.
> +int validate_new_branchname(const char *name, struct strbuf *ref, int force)
> +{
> + const char *head;
> +
> + if (!validate_branchname(name, ref))
> + return 0;
>
> if (!force)
> die(_("A branch named '%s' already exists."),
> @@ -246,9 +258,9 @@ void create_branch(const char *name, const char
> *start_name,
> if (track == BRANCH_TRACK_EXPLICIT || track == BRANCH_TRACK_OVERRIDE)
> explicit_tracking = 1;
>
> - if (validate_new_branchname(name, &ref, force,
> - track == BRANCH_TRACK_OVERRIDE ||
> - clobber_head)) {
> + if ((track == BRANCH_TRACK_OVERRIDE || clobber_head)
> + ? validate_branchname(name, &ref)
> + : validate_new_branchname(name, &ref, force)) {
> if (!force)
> dont_change_ref = 1;
>
The change was simple by splitting the function into two and calling
the right function as required at every call site! As far as I could
see this doesn't seem to be reducing the confusion that the 'attr_only'
parameter caused. That's because the new validate_branchname function
seems to be called in some cases when the 'force' parameter is true and
in other cases the 'force' parameter is sent to the
'validate_new_branchname' function. So, I think consistency is lacking
in this change. That's just my opinion, of course.
--
Kaartic