From: Junio C Hamano Date: Sat, 07 Mar 2015 01:44:29 GMT Subject: Re: [PATCH v4] git: treat "-C " as a no-op when is empty Message-ID: In-Reply-To: <1425640688-26513-1-git-send-email-karthik.188@gmail.com> Karthik Nayak 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 " when is > empty, written by Junio C Hamano. > > Helped-by: Junio C Hamano > Helped-by: Eric Sunchine > Signed-off-by: Karthik Nayak > --- 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 " runs git from the directory ' ' > test_cmp expected actual > ' > > +test_expect_success '"git -C " with an empty 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 &&