From: Karthik Nayak Date: Fri, 06 Mar 2015 07:05:34 GMT Subject: [PATCH v3] git: make "git -C '' " not to barf Message-ID: <1425625534-11869-1-git-send-email-karthik.188@gmail.com> It now acts like "cd ''" and does not barf and treats it as a no-op. This is useful if a caller function does not want to change directory and hence gives no path value, which would have generally caused git to output an undesired error message. Included a simple test to check the same, as suggested by Junio. Signed-off-by: Karthik Nayak --- git.c | 12 ++++++++---- t/t0056-git-C.sh | 8 ++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/git.c b/git.c index 8c7ee9c..d734afa 100644 --- a/git.c +++ b/git.c @@ -204,10 +204,14 @@ 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]) == 0) + ; /* DO not change directory if no directory is given*/ + else { + 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..a6b52f1 100755 --- a/t/t0056-git-C.sh +++ b/t/t0056-git-C.sh @@ -14,6 +14,14 @@ 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 && -- 2.3.1.167.g7f4ba4b.dirty