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 <karthik.188@xxxxxxxxx> --- 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 <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 && -- 2.3.1.167.g7f4ba4b.dirty -- 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