Merge branch 'jc/quote'
* jc/quote: Add core.quotepath configuration variable.
This commit is contained in:
commit
660d579d6f
@ -117,6 +117,18 @@ core.fileMode::
|
|||||||
the working copy are ignored; useful on broken filesystems like FAT.
|
the working copy are ignored; useful on broken filesystems like FAT.
|
||||||
See gitlink:git-update-index[1]. True by default.
|
See gitlink:git-update-index[1]. True by default.
|
||||||
|
|
||||||
|
core.quotepath::
|
||||||
|
The commands that output paths (e.g. `ls-files`,
|
||||||
|
`diff`), when not given the `-z` option, will quote
|
||||||
|
"unusual" characters in the pathname by enclosing the
|
||||||
|
pathname in a double-quote pair and with backslashes the
|
||||||
|
same way strings in C source code are quoted. If this
|
||||||
|
variable is set to false, the bytes higher than 0x80 are
|
||||||
|
not quoted but output as verbatim. Note that double
|
||||||
|
quote, backslash and control characters are always
|
||||||
|
quoted without `-z` regardless of the setting of this
|
||||||
|
variable.
|
||||||
|
|
||||||
core.autocrlf::
|
core.autocrlf::
|
||||||
If true, makes git convert `CRLF` at the end of lines in text files to
|
If true, makes git convert `CRLF` at the end of lines in text files to
|
||||||
`LF` when reading from the filesystem, and convert in reverse when
|
`LF` when reading from the filesystem, and convert in reverse when
|
||||||
|
1
cache.h
1
cache.h
@ -294,6 +294,7 @@ extern int delete_ref(const char *, const unsigned char *sha1);
|
|||||||
|
|
||||||
/* Environment bits from configuration mechanism */
|
/* Environment bits from configuration mechanism */
|
||||||
extern int trust_executable_bit;
|
extern int trust_executable_bit;
|
||||||
|
extern int quote_path_fully;
|
||||||
extern int has_symlinks;
|
extern int has_symlinks;
|
||||||
extern int assume_unchanged;
|
extern int assume_unchanged;
|
||||||
extern int prefer_symlink_refs;
|
extern int prefer_symlink_refs;
|
||||||
|
5
config.c
5
config.c
@ -271,6 +271,11 @@ int git_default_config(const char *var, const char *value)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strcmp(var, "core.quotepath")) {
|
||||||
|
quote_path_fully = git_config_bool(var, value);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "core.symlinks")) {
|
if (!strcmp(var, "core.symlinks")) {
|
||||||
has_symlinks = git_config_bool(var, value);
|
has_symlinks = git_config_bool(var, value);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
char git_default_email[MAX_GITNAME];
|
char git_default_email[MAX_GITNAME];
|
||||||
char git_default_name[MAX_GITNAME];
|
char git_default_name[MAX_GITNAME];
|
||||||
int trust_executable_bit = 1;
|
int trust_executable_bit = 1;
|
||||||
|
int quote_path_fully = 1;
|
||||||
int has_symlinks = 1;
|
int has_symlinks = 1;
|
||||||
int assume_unchanged;
|
int assume_unchanged;
|
||||||
int prefer_symlink_refs;
|
int prefer_symlink_refs;
|
||||||
|
5
quote.c
5
quote.c
@ -188,7 +188,8 @@ static int quote_c_style_counted(const char *name, int namelen,
|
|||||||
#define EMITQ() EMIT('\\')
|
#define EMITQ() EMIT('\\')
|
||||||
|
|
||||||
const char *sp;
|
const char *sp;
|
||||||
int ch, count = 0, needquote = 0;
|
unsigned char ch;
|
||||||
|
int count = 0, needquote = 0;
|
||||||
|
|
||||||
if (!no_dq)
|
if (!no_dq)
|
||||||
EMIT('"');
|
EMIT('"');
|
||||||
@ -197,7 +198,7 @@ static int quote_c_style_counted(const char *name, int namelen,
|
|||||||
if (!ch)
|
if (!ch)
|
||||||
break;
|
break;
|
||||||
if ((ch < ' ') || (ch == '"') || (ch == '\\') ||
|
if ((ch < ' ') || (ch == '"') || (ch == '\\') ||
|
||||||
(ch >= 0177)) {
|
(quote_path_fully && (ch >= 0177))) {
|
||||||
needquote = 1;
|
needquote = 1;
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case '\a': EMITQ(); ch = 'a'; break;
|
case '\a': EMITQ(); ch = 'a'; break;
|
||||||
|
126
t/t3902-quoted.sh
Executable file
126
t/t3902-quoted.sh
Executable file
@ -0,0 +1,126 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 Junio C Hamano
|
||||||
|
#
|
||||||
|
|
||||||
|
test_description='quoted output'
|
||||||
|
|
||||||
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
FN='濱野'
|
||||||
|
GN='純'
|
||||||
|
HT=' '
|
||||||
|
LF='
|
||||||
|
'
|
||||||
|
DQ='"'
|
||||||
|
|
||||||
|
for_each_name () {
|
||||||
|
for name in \
|
||||||
|
Name "Name and a${LF}LF" "Name and an${HT}HT" "Name${DQ}" \
|
||||||
|
"$FN$HT$GN" "$FN$LF$GN" "$FN $GN" "$FN$GN" "$FN$DQ$GN" \
|
||||||
|
"With SP in it"
|
||||||
|
do
|
||||||
|
eval "$1"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
test_expect_success setup '
|
||||||
|
|
||||||
|
for_each_name "echo initial >\"\$name\""
|
||||||
|
git add . &&
|
||||||
|
git commit -q -m Initial &&
|
||||||
|
|
||||||
|
for_each_name "echo second >\"\$name\"" &&
|
||||||
|
git commit -a -m Second
|
||||||
|
|
||||||
|
for_each_name "echo modified >\"\$name\""
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
cat >expect.quoted <<\EOF
|
||||||
|
Name
|
||||||
|
"Name and a\nLF"
|
||||||
|
"Name and an\tHT"
|
||||||
|
"Name\""
|
||||||
|
With SP in it
|
||||||
|
"\346\277\261\351\207\216\t\347\264\224"
|
||||||
|
"\346\277\261\351\207\216\n\347\264\224"
|
||||||
|
"\346\277\261\351\207\216 \347\264\224"
|
||||||
|
"\346\277\261\351\207\216\"\347\264\224"
|
||||||
|
"\346\277\261\351\207\216\347\264\224"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat >expect.raw <<\EOF
|
||||||
|
Name
|
||||||
|
"Name and a\nLF"
|
||||||
|
"Name and an\tHT"
|
||||||
|
"Name\""
|
||||||
|
With SP in it
|
||||||
|
"濱野\t純"
|
||||||
|
"濱野\n純"
|
||||||
|
濱野 純
|
||||||
|
"濱野\"純"
|
||||||
|
濱野純
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'check fully quoted output from ls-files' '
|
||||||
|
|
||||||
|
git ls-files >current && diff -u expect.quoted current
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'check fully quoted output from diff-files' '
|
||||||
|
|
||||||
|
git diff --name-only >current &&
|
||||||
|
diff -u expect.quoted current
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'check fully quoted output from diff-index' '
|
||||||
|
|
||||||
|
git diff --name-only HEAD >current &&
|
||||||
|
diff -u expect.quoted current
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'check fully quoted output from diff-tree' '
|
||||||
|
|
||||||
|
git diff --name-only HEAD^ HEAD >current &&
|
||||||
|
diff -u expect.quoted current
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'setting core.quotepath' '
|
||||||
|
|
||||||
|
git config --bool core.quotepath false
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'check fully quoted output from ls-files' '
|
||||||
|
|
||||||
|
git ls-files >current && diff -u expect.raw current
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'check fully quoted output from diff-files' '
|
||||||
|
|
||||||
|
git diff --name-only >current &&
|
||||||
|
diff -u expect.raw current
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'check fully quoted output from diff-index' '
|
||||||
|
|
||||||
|
git diff --name-only HEAD >current &&
|
||||||
|
diff -u expect.raw current
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'check fully quoted output from diff-tree' '
|
||||||
|
|
||||||
|
git diff --name-only HEAD^ HEAD >current &&
|
||||||
|
diff -u expect.raw current
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
Loading…
Reference in New Issue
Block a user