summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2014-03-14 14:23:37 -0700
committerJunio C Hamano <gitster@pobox.com>2014-03-14 14:23:37 -0700
commitdfcd354cdf38ff119c05e6e5f0e434bbc163ba41 (patch)
treeaf829295b55c89013ff1502b06a39476c35ce0cf /dir.c
parent28b68216de080405f8eb1030982b8b1e79ffd6f0 (diff)
parent35e4d775875603c748a127c82909f5d62a410ac8 (diff)
downloadgit-dfcd354cdf38ff119c05e6e5f0e434bbc163ba41.tar.gz
Merge branch 'nd/gitignore-trailing-whitespace'
Trailing whitespaces in .gitignore files, unless they are quoted for fnmatch(3), e.g. "path\ ", are warned and ignored. Strictly speaking, this is a backward incompatible change, but very unlikely to bite any sane user and adjusting should be obvious and easy. * nd/gitignore-trailing-whitespace: t0008: skip trailing space test on Windows dir: ignore trailing spaces in exclude patterns dir: warn about trailing spaces in exclude patterns
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/dir.c b/dir.c
index 98bb50fbab..6c6a5d13c2 100644
--- a/dir.c
+++ b/dir.c
@@ -503,6 +503,25 @@ void clear_exclude_list(struct exclude_list *el)
el->filebuf = NULL;
}
+static void trim_trailing_spaces(char *buf)
+{
+ int i, last_space = -1, nr_spaces, len = strlen(buf);
+ for (i = 0; i < len; i++)
+ if (buf[i] == '\\')
+ i++;
+ else if (buf[i] == ' ') {
+ if (last_space == -1) {
+ last_space = i;
+ nr_spaces = 1;
+ } else
+ nr_spaces++;
+ } else
+ last_space = -1;
+
+ if (last_space != -1 && last_space + nr_spaces == len)
+ buf[last_space] = '\0';
+}
+
int add_excludes_from_file_to_list(const char *fname,
const char *base,
int baselen,
@@ -554,6 +573,7 @@ int add_excludes_from_file_to_list(const char *fname,
if (buf[i] == '\n') {
if (entry != buf + i && entry[0] != '#') {
buf[i - (i && buf[i-1] == '\r')] = 0;
+ trim_trailing_spaces(entry);
add_exclude(entry, base, baselen, el, lineno);
}
lineno++;