Re: [PATCH v4] worktree add: shouldn't dwim if -b or -B is given

Junio C Hamano <[email protected]>
Newsgroups org.kernel.vger.git
Message-ID <[email protected]>
"Yoichi NAKAYAMA via GitGitGadget" <[email protected]> writes:

>       @@ builtin/worktree.c: static int add(int ac, const char **av, const char *prefix,
>      + 
>        		/* DWIM: Infer --orphan when repo has no refs. */
>        		opts.orphan = (!s) && dwim_orphan(&opts, !!opt_track, 1);
>      ++	} else if (ac == 2 && new_branch) {
>      ++		if (!strcmp(branch, "HEAD"))
>      ++			can_use_local_refs(&opts);
>        	} else if (ac == 2) {
>      --		struct object_id oid;
>      --		struct commit *commit;
>      --		char *remote;
>      --
>      --		commit = lookup_commit_reference_by_name(branch);
>      --		if (!commit) {
>      --			remote = unique_tracking_name(branch, &oid, NULL);
>      --			if (remote) {
>      --				new_branch = branch;
>      --				branch = new_branch_to_free = remote;
>      -+		if (!new_branch) {
>      -+			struct object_id oid;
>      -+			struct commit *commit;
>      -+			char *remote;
>      -+
>      -+			commit = lookup_commit_reference_by_name(branch);
>      -+			if (!commit) {
>      -+				remote = unique_tracking_name(branch, &oid, NULL);
>      -+				if (remote) {
>      -+					new_branch = branch;
>      -+					branch = new_branch_to_free = remote;
>      -+				}
>      - 			}
>      - 		}
>      - 
>      + 		struct object_id oid;
>      + 		struct commit *commit;
>       
>        ## t/t2400-worktree-add.sh ##
>       @@ t/t2400-worktree-add.sh: test_expect_success '"add" <path> <branch> dwims' '
>
>
>  builtin/worktree.c      |  3 +++
>  t/t2400-worktree-add.sh | 10 ++++++++++
>  2 files changed, 13 insertions(+)
>
> diff --git a/builtin/worktree.c b/builtin/worktree.c
> index 654d27c3e1..15a1c9624a 100644
> --- a/builtin/worktree.c
> +++ b/builtin/worktree.c
> @@ -897,6 +897,9 @@ static int add(int ac, const char **av, const char *prefix,
>  
>  		/* DWIM: Infer --orphan when repo has no refs. */
>  		opts.orphan = (!s) && dwim_orphan(&opts, !!opt_track, 1);
> +	} else if (ac == 2 && new_branch) {
> +		if (!strcmp(branch, "HEAD"))
> +			can_use_local_refs(&opts);
>  	} else if (ac == 2) {
>  		struct object_id oid;
>  		struct commit *commit;

Ah, that is a much smaller patch, and does not share the same issue
as the very initial iteration.

Will queue.  Thanks.

> diff --git a/t/t2400-worktree-add.sh b/t/t2400-worktree-add.sh
> index 87b926728a..ba3bec078f 100755
> --- a/t/t2400-worktree-add.sh
> +++ b/t/t2400-worktree-add.sh
> @@ -621,6 +621,16 @@ test_expect_success '"add" <path> <branch> dwims' '
>  	)
>  '
>  
> +test_expect_success '"add" <path> <branch> does not dwim with -b' '
> +	test_when_finished rm -rf repo_upstream repo_dwim wt &&
> +	setup_remote_repo repo_upstream repo_dwim &&
> +	(
> +		cd repo_dwim &&
> +		test_must_fail git worktree add -b branch ../wt foo 2>actual &&
> +		test_grep "^fatal: invalid reference: foo" actual
> +	)
> +'
> +
>  test_expect_success '"add" <path> <branch> dwims with checkout.defaultRemote' '
>  	test_when_finished rm -rf repo_upstream repo_dwim foo &&
>  	setup_remote_repo repo_upstream repo_dwim &&
>
> base-commit: dea0ea3582e6980ddbc1173cc8e3e9f9db91cde0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.