Karthik Nayak <karthik.188@xxxxxxxxx> writes: > 'git -C ""' unhelpfully dies with error "Cannot change to ''", > whereas the shell treats `cd ""' as a no-op. Taking the shell's > behavior as a precedent, teach git to treat `-C ""' as a no-op, as > well. > > Test to check the no-op behaviour of "-C <path>" when <path> is > empty, written by Junio C Hamano. > > Helped-by: Junio C Hamano <gitster@xxxxxxxxx> > Helped-by: Eric Sunchine <sunshine@xxxxxxxxxxxxxx> > Signed-off-by: Karthik Nayak <karthik.188@xxxxxxxxx> > --- This iteration looks sensible, except that the Subject reads strange. Will queue with minor tweaks to the log message, and perhaps with a fix to unreadable *(*argv)[1] that was mentioned elsewhere. Thanks. > git.c | 10 ++++++---- > t/t0056-git-C.sh | 10 ++++++++++ > 2 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/git.c b/git.c > index 8c7ee9c..b062e0e 100644 > --- a/git.c > +++ b/git.c > @@ -204,10 +204,12 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) > fprintf(stderr, "No directory given for -C.\n" ); > usage(git_usage_string); > } > - if (chdir((*argv)[1])) > - die_errno("Cannot change to '%s'", (*argv)[1]); > - if (envchanged) > - *envchanged = 1; > + if (*(*argv)[1]) { > + if (chdir((*argv)[1])) > + die_errno("Cannot change to '%s'", (*argv)[1]); > + if (envchanged) > + *envchanged = 1; > + } > (*argv)++; > (*argc)--; > } else { > diff --git a/t/t0056-git-C.sh b/t/t0056-git-C.sh > index 99c0377..2630e75 100755 > --- a/t/t0056-git-C.sh > +++ b/t/t0056-git-C.sh > @@ -14,6 +14,16 @@ test_expect_success '"git -C <path>" runs git from the directory <path>' ' > test_cmp expected actual > ' > > +test_expect_success '"git -C <path>" with an empty <path> is a no-op' ' > + ( > + mkdir -p dir1/subdir && > + cd dir1/subdir && > + git -C "" rev-parse --show-prefix >actual && > + echo subdir/ >expect && > + test_cmp expect actual > + ) > +' > + > test_expect_success 'Multiple -C options: "-C dir1 -C dir2" is equivalent to "-C dir1/dir2"' ' > test_create_repo dir1/dir2 && > echo 1 >dir1/dir2/b.txt && -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html