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

Reply via email to