aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Soffian <jaysoffian@gmail.com>2012-06-27 17:58:01 -0400
committerJunio C Hamano <gitster@pobox.com>2012-06-27 19:53:04 -0700
commitff59f6da840bb58058fef06721a2646daae50509 (patch)
tree7c97265323ad29ac389cf13c8d868803081d1dbe
parentd9f5ef7a4a760d58f1f824f9fb8c12ef0371d3a9 (diff)
downloadgit-ff59f6da840bb58058fef06721a2646daae50509.tar.gz
git-ff59f6da840bb58058fef06721a2646daae50509.tar.xz
fast-export: quote paths with spaces
A path containing a space must be quoted when used as an argument to either the copy or rename commands (because unlike other commands, the path is not the final thing on the line for those commands). Commit 6280dfdc3b (fast-export: quote paths in output, 2011-08-05) previously attempted to fix fast-export's quoting by passing all paths through quote_c_style(). However, that function does not consider the space to be a character which requires quoting, so let's special-case the space inside print_path(). This will cause space-containing paths to also be quoted in other commands where such quoting is not strictly necessary, but it does not hurt to do so. The test from 6280dfdc3b did not detect this because, while it does introduce renames in the export stream, it does not actually turn on rename detection, so they were presented as pairs of deletions/adds. Using "-M" reveals the bug. Signed-off-by: Jay Soffian <jaysoffian@gmail.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/fast-export.c2
-rwxr-xr-xt/t9350-fast-export.sh2
2 files changed, 3 insertions, 1 deletions
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 9836e6b7c..e8a07c95e 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -185,6 +185,8 @@ static void print_path(const char *path)
int need_quote = quote_c_style(path, NULL, NULL, 0);
if (need_quote)
quote_c_style(path, NULL, stdout, 0);
+ else if (strchr(path, ' '))
+ printf("\"%s\"", path);
else
printf("%s", path);
}
diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh
index 950d0ff49..79deef988 100755
--- a/t/t9350-fast-export.sh
+++ b/t/t9350-fast-export.sh
@@ -430,7 +430,7 @@ test_expect_success 'fast-export quotes pathnames' '
git commit -m rename &&
git read-tree --empty &&
git commit -m deletion &&
- git fast-export HEAD >export.out &&
+ git fast-export -M HEAD >export.out &&
git rev-list HEAD >expect &&
git init result &&
cd result &&