Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> 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. > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > 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 &&