Re: [PATCH v6 2/5] branch: make create_branch() always create a branch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Glen Choo <chooglen@xxxxxxxxxx> writes:
> create_branch() was formerly used to set tracking without creating a
> branch. Since the previous commit replaces this use case with
> dwim_and_setup_tracking(), we can simplify create_branch() so that it
> always creates a branch.
> 
> Do this simplification, in particular:
> 
> * remove the special handling of BRANCH_TRACK_OVERRIDE because it is no
>   longer used
> * assert that clobber_head_ok can only be provided with force
> * check that we're handling clobber_head_ok and force correctly by
>   introducing tests for `git branch --force`

This might have been more simply explained as:

  With the previous commit, these are true of create_branch():
   * BRANCH_TRACK_OVERRIDE is no longer passed
   * if clobber_head_ok is true, force is also true

  Assert these situations, delete dead code, and ensure that we're
  handling clobber_head_ok and force correctly by introducing tests for
  `git branch --force`. This also means that create_branch() now always
  creates a branch.

> @@ -426,15 +426,17 @@ void create_branch(struct repository *r, const char *name,
>  	char *real_ref;
>  	struct strbuf ref = STRBUF_INIT;
>  	int forcing = 0;
> -	int dont_change_ref = 0;
> -
> -	if ((track == BRANCH_TRACK_OVERRIDE || clobber_head_ok)
> -	    ? validate_branchname(name, &ref)
> -	    : validate_new_branchname(name, &ref, force)) {
> -		if (!force)
> -			dont_change_ref = 1;
> -		else
> -			forcing = 1;
> +	struct ref_transaction *transaction;
> +	struct strbuf err = STRBUF_INIT;
> +	char *msg;
> +
> +	if (clobber_head_ok && !force)
> +		BUG("'clobber_head_ok' can only be used with 'force'");
> +
> +	if (clobber_head_ok ?
> +			  validate_branchname(name, &ref) :
> +			  validate_new_branchname(name, &ref, force)) {
> +		forcing = 1;
>  	}

Also assert that track is not BRANCH_TRACK_OVERRIDE.

> @@ -42,6 +42,23 @@ test_expect_success 'git branch abc should create a branch' '
>  	git branch abc && test_path_is_file .git/refs/heads/abc
>  '
>  
> +test_expect_success 'git branch abc should fail when abc exists' '
> +	test_must_fail git branch abc
> +'
> +
> +test_expect_success 'git branch --force abc should fail when abc is checked out' '
> +	test_when_finished git switch main &&
> +	git switch abc &&
> +	test_must_fail git branch --force abc HEAD~1
> +'
> +
> +test_expect_success 'git branch --force abc should succeed when abc exists' '
> +	git rev-parse HEAD~1 >expect &&
> +	git branch --force abc HEAD~1 &&
> +	git rev-parse abc >actual &&
> +	test_cmp expect actual
> +'

These tests make sense.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux