git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/3] checkout: fix ambiguity check in subdir

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 8, 2016, 20:04 UTC
Message-ID
<xmqq37lagnuy.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20160907111941.2342-4-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:
> The two functions in parse_branchname_arg(), verify_non_filename and
> check_filename, need correct prefix in order to reconstruct the paths
> and check for their existence. With NULL prefix, they just check paths
> at top dir instead.
Good eyes.  Will queue.
Show 73 quoted lines
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
>  builtin/checkout.c            |  4 ++--
>  t/t2010-checkout-ambiguous.sh |  9 +++++++++
>  t/t2024-checkout-dwim.sh      | 12 ++++++++++++
>  3 files changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/checkout.c b/builtin/checkout.c
> index 1f71d06..53c7284 100644
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -985,7 +985,7 @@ static int parse_branchname_arg(int argc, const char **argv,
>  		int recover_with_dwim = dwim_new_local_branch_ok;
>  
>  		if (!has_dash_dash &&
> -		    (check_filename(NULL, arg) || !no_wildcard(arg)))
> +		    (check_filename(opts->prefix, arg) || !no_wildcard(arg)))
>  			recover_with_dwim = 0;
>  		/*
>  		 * Accept "git checkout foo" and "git checkout foo --"
> @@ -1046,7 +1046,7 @@ static int parse_branchname_arg(int argc, const char **argv,
>  		 * it would be extremely annoying.
>  		 */
>  		if (argc)
> -			verify_non_filename(NULL, arg);
> +			verify_non_filename(opts->prefix, arg);
>  	} else {
>  		argcount++;
>  		argv++;
> diff --git a/t/t2010-checkout-ambiguous.sh b/t/t2010-checkout-ambiguous.sh
> index e76e84a..2e47fe0 100755
> --- a/t/t2010-checkout-ambiguous.sh
> +++ b/t/t2010-checkout-ambiguous.sh
> @@ -41,6 +41,15 @@ test_expect_success 'check ambiguity' '
>  	test_must_fail git checkout world all
>  '
>  
> +test_expect_success 'check ambiguity in subdir' '
> +	mkdir sub &&
> +	# not ambiguous because sub/world does not exist
> +	git -C sub checkout world ../all &&
> +	echo hello >sub/world &&
> +	# ambiguous because sub/world does exist
> +	test_must_fail git -C sub checkout world ../all
> +'
> +
>  test_expect_success 'disambiguate checking out from a tree-ish' '
>  	echo bye > world &&
>  	git checkout world -- world &&
> diff --git a/t/t2024-checkout-dwim.sh b/t/t2024-checkout-dwim.sh
> index 468a000..3e5ac81 100755
> --- a/t/t2024-checkout-dwim.sh
> +++ b/t/t2024-checkout-dwim.sh
> @@ -174,6 +174,18 @@ test_expect_success 'checkout of branch with a file having the same name fails'
>  	test_branch master
>  '
>  
> +test_expect_success 'checkout of branch with a file in subdir having the same name fails' '
> +	git checkout -B master &&
> +	test_might_fail git branch -D spam &&
> +
> +	>spam &&
> +	mkdir sub &&
> +	mv spam sub/spam &&
> +	test_must_fail git -C sub checkout spam &&
> +	test_must_fail git rev-parse --verify refs/heads/spam &&
> +	test_branch master
> +'
> +
>  test_expect_success 'checkout <branch> -- succeeds, even if a file with the same name exists' '
>  	git checkout -B master &&
>  	test_might_fail git branch -D spam &&
Previous: Nguyễn Thái Ngọc Duy
Message 12 of 12 in “checkout: swap the order of ambiguity check for :/ syntax”
  1. checkout: swap the order of ambiguity check for :/ syntaxNguyễn Thái Ngọc Duy, Aug 22, 2016
  2. Junio C HamanoAug 24, 2016
  3. Duy NguyenAug 25, 2016
  4. Junio C HamanoAug 25, 2016
  5. Duy NguyenAug 26, 2016
  6. 0/3 fix checkout ambiguation in subdirNguyễn Thái Ngọc Duy, Sep 7, 2016
  7. 1/3 checkout: add some spaces between code and commentNguyễn Thái Ngọc Duy, Sep 7, 2016
  8. 2/3 checkout.txt: document a common case that ignores ambiguation rulesNguyễn Thái Ngọc Duy, Sep 7, 2016
  9. Junio C HamanoSep 8, 2016
  10. Junio C HamanoSep 9, 2016
  11. 3/3 checkout: fix ambiguity check in subdirNguyễn Thái Ngọc Duy, Sep 7, 2016
  12. Junio C HamanoSep 8, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.