[PATCH v3] git: make "git -C '' <cmd>" not to barf
From: Karthik Nayak <hidden>
Date: 2016-06-15 23:03:59
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- 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