mirror of
https://github.com/git/git
synced 2024-10-30 14:03:28 +00:00
563d5a2c84
POSIX doth sayeth: "In the regular expression processing described in IEEE Std 1003.1-2001, the <newline> is regarded as an ordinary character and both a period and a non-matching list can match one. ... Those utilities (like grep) that do not allow <newline>s to match are responsible for eliminating any <newline> from strings before matching against the RE." Thus far git has not been removing the trailing newline from strings matched against regular expression patterns. This has the effect that (quoting Jonathan del Strother) "... a line containing just 'FUNCNAME' (terminated by a newline) will be matched by the pattern '^(FUNCNAME.$)' but not '^(FUNCNAME$)'", and more simply not '^FUNCNAME$'. Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
84 lines
2 KiB
Bash
Executable file
84 lines
2 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2007 Johannes E. Schindelin
|
|
#
|
|
|
|
test_description='Test custom diff function name patterns'
|
|
|
|
. ./test-lib.sh
|
|
|
|
LF='
|
|
'
|
|
|
|
cat > Beer.java << EOF
|
|
public class Beer
|
|
{
|
|
int special;
|
|
public static void main(String args[])
|
|
{
|
|
String s=" ";
|
|
for(int x = 99; x > 0; x--)
|
|
{
|
|
System.out.print(x + " bottles of beer on the wall "
|
|
+ x + " bottles of beer\n"
|
|
+ "Take one down, pass it around, " + (x - 1)
|
|
+ " bottles of beer on the wall.\n");
|
|
}
|
|
System.out.print("Go to the store, buy some more,\n"
|
|
+ "99 bottles of beer on the wall.\n");
|
|
}
|
|
}
|
|
EOF
|
|
|
|
sed 's/beer\\/beer,\\/' < Beer.java > Beer-correct.java
|
|
|
|
builtin_patterns="bibtex java pascal ruby tex"
|
|
for p in $builtin_patterns
|
|
do
|
|
test_expect_success "builtin $p pattern compiles" '
|
|
echo "*.java diff=$p" > .gitattributes &&
|
|
! ( git diff --no-index Beer.java Beer-correct.java 2>&1 |
|
|
grep "fatal" > /dev/null )
|
|
'
|
|
done
|
|
|
|
test_expect_success 'default behaviour' '
|
|
rm -f .gitattributes &&
|
|
git diff --no-index Beer.java Beer-correct.java |
|
|
grep "^@@.*@@ public class Beer"
|
|
'
|
|
|
|
test_expect_success 'preset java pattern' '
|
|
echo "*.java diff=java" >.gitattributes &&
|
|
git diff --no-index Beer.java Beer-correct.java |
|
|
grep "^@@.*@@ public static void main("
|
|
'
|
|
|
|
git config diff.java.funcname '!static
|
|
!String
|
|
[^ ].*s.*'
|
|
|
|
test_expect_success 'custom pattern' '
|
|
git diff --no-index Beer.java Beer-correct.java |
|
|
grep "^@@.*@@ int special;$"
|
|
'
|
|
|
|
test_expect_success 'last regexp must not be negated' '
|
|
git config diff.java.funcname "!static" &&
|
|
git diff --no-index Beer.java Beer-correct.java 2>&1 |
|
|
grep "fatal: Last expression must not be negated:"
|
|
'
|
|
|
|
test_expect_success 'pattern which matches to end of line' '
|
|
git config diff.java.funcname "Beer$" &&
|
|
git diff --no-index Beer.java Beer-correct.java |
|
|
grep "^@@.*@@ Beer"
|
|
'
|
|
|
|
test_expect_success 'alternation in pattern' '
|
|
git config diff.java.xfuncname "^[ ]*((public|static).*)$" &&
|
|
git diff --no-index Beer.java Beer-correct.java |
|
|
grep "^@@.*@@ public static void main("
|
|
'
|
|
|
|
test_done
|