Skip to content

Commit

Permalink
Merge branch 'jc/apply-ignore-whitespace'
Browse files Browse the repository at this point in the history
"--ignore-space-change" option of "git apply" ignored the
spaces at the beginning of line too aggressively, which is
inconsistent with the option of the same name "diff" and "git diff"
have.

* jc/apply-ignore-whitespace:
  apply --ignore-space-change: lines with and without leading whitespaces do not match
  • Loading branch information
Junio C Hamano committed Jun 3, 2014
2 parents 52df917 + 14d3bb4 commit f008cef
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 13 deletions.
12 changes: 7 additions & 5 deletions builtin/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,11 +300,13 @@ static int fuzzy_matchlines(const char *s1, size_t n1,
while ((*last2 == '\r') || (*last2 == '\n'))
last2--;

/* skip leading whitespace */
while (isspace(*s1) && (s1 <= last1))
s1++;
while (isspace(*s2) && (s2 <= last2))
s2++;
/* skip leading whitespaces, if both begin with whitespace */
if (s1 <= last1 && s2 <= last2 && isspace(*s1) && isspace(*s2)) {
while (isspace(*s1) && (s1 <= last1))
s1++;
while (isspace(*s2) && (s2 <= last2))
s2++;
}
/* early return if both lines are empty */
if ((s1 > last1) && (s2 > last2))
return 1;
Expand Down
12 changes: 4 additions & 8 deletions t/t4107-apply-ignore-whitespace.sh
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ sed -e 's/T/ /g' > main.c.final <<\EOF
#include <stdio.h>
void print_int(int num);
T/* a comment */
int func(int num);
int main() {
Expand Down Expand Up @@ -154,7 +153,8 @@ test_expect_success 'patch2 reverse applies with --ignore-space-change' '
git config apply.ignorewhitespace change

test_expect_success 'patch2 applies (apply.ignorewhitespace = change)' '
git apply patch2.patch
git apply patch2.patch &&
test_cmp main.c.final main.c
'

test_expect_success 'patch3 fails (missing string at EOL)' '
Expand All @@ -165,12 +165,8 @@ test_expect_success 'patch4 fails (missing EOL at EOF)' '
test_must_fail git apply patch4.patch
'

test_expect_success 'patch5 applies (leading whitespace)' '
git apply patch5.patch
'

test_expect_success 'patches do not mangle whitespace' '
test_cmp main.c main.c.final
test_expect_success 'patch5 fails (leading whitespace differences matter)' '
test_must_fail git apply patch5.patch
'

test_expect_success 're-create file (with --ignore-whitespace)' '
Expand Down

0 comments on commit f008cef

Please sign in to comment.