2007-07-06 15:45:10 +08:00
|
|
|
#!/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
|
|
|
|
|
2009-05-02 22:31:16 +08:00
|
|
|
builtin_patterns="bibtex cpp html java objc pascal php python ruby tex"
|
2008-09-23 07:19:05 +08:00
|
|
|
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
|
|
|
|
|
2007-07-06 15:45:10 +08:00
|
|
|
test_expect_success 'default behaviour' '
|
2008-09-23 07:19:05 +08:00
|
|
|
rm -f .gitattributes &&
|
2008-05-24 13:28:56 +08:00
|
|
|
git diff --no-index Beer.java Beer-correct.java |
|
2007-07-06 15:45:10 +08:00
|
|
|
grep "^@@.*@@ public class Beer"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'preset java pattern' '
|
2007-07-07 16:49:58 +08:00
|
|
|
echo "*.java diff=java" >.gitattributes &&
|
2008-05-24 13:28:56 +08:00
|
|
|
git diff --no-index Beer.java Beer-correct.java |
|
2007-07-06 15:45:10 +08:00
|
|
|
grep "^@@.*@@ public static void main("
|
|
|
|
'
|
|
|
|
|
2007-07-07 16:49:58 +08:00
|
|
|
git config diff.java.funcname '!static
|
2007-07-06 15:45:10 +08:00
|
|
|
!String
|
|
|
|
[^ ].*s.*'
|
|
|
|
|
|
|
|
test_expect_success 'custom pattern' '
|
2008-05-24 13:28:56 +08:00
|
|
|
git diff --no-index Beer.java Beer-correct.java |
|
2007-07-06 15:45:10 +08:00
|
|
|
grep "^@@.*@@ int special;$"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'last regexp must not be negated' '
|
2007-07-07 16:49:58 +08:00
|
|
|
git config diff.java.funcname "!static" &&
|
2008-10-16 08:58:49 +08:00
|
|
|
git diff --no-index Beer.java Beer-correct.java 2>&1 |
|
|
|
|
grep "fatal: Last expression must not be negated:"
|
2007-07-06 15:45:10 +08:00
|
|
|
'
|
|
|
|
|
2008-10-02 03:28:26 +08:00
|
|
|
test_expect_success 'pattern which matches to end of line' '
|
2008-10-16 08:58:50 +08:00
|
|
|
git config diff.java.funcname "Beer$" &&
|
|
|
|
git diff --no-index Beer.java Beer-correct.java |
|
|
|
|
grep "^@@.*@@ Beer"
|
2007-07-06 15:45:10 +08:00
|
|
|
'
|
|
|
|
|
2008-09-08 02:45:37 +08:00
|
|
|
test_expect_success 'alternation in pattern' '
|
diff.*.xfuncname which uses "extended" regex's for hunk header selection
Currently, the hunk headers produced by 'diff -p' are customizable by
setting the diff.*.funcname option in the config file. The 'funcname' option
takes a basic regular expression. This functionality was designed using the
GNU regex library which, by default, allows using backslashed versions of
some extended regular expression operators, even in Basic Regular Expression
mode. For example, the following characters, when backslashed, are
interpreted according to the extended regular expression rules: ?, +, and |.
As such, the builtin funcname patterns were created using some extended
regular expression operators.
Other platforms which adhere more strictly to the POSIX spec do not
interpret the backslashed extended RE operators in Basic Regular Expression
mode. This causes the pattern matching for the builtin funcname patterns to
fail on those platforms.
Introduce a new option 'xfuncname' which uses extended regular expressions,
and advertise it _instead_ of funcname. Since most users are on GNU
platforms, the majority of funcname patterns are created and tested there.
Advertising only xfuncname should help to avoid the creation of non-portable
patterns which work with GNU regex but not elsewhere.
Additionally, the extended regular expressions may be less ugly and
complicated compared to the basic RE since many common special operators do
not need to be backslashed.
For example, the GNU Basic RE:
^[ ]*\\(\\(public\\|static\\).*\\)$
becomes the following Extended RE:
^[ ]*((public|static).*)$
Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-09-19 06:44:33 +08:00
|
|
|
git config diff.java.xfuncname "^[ ]*((public|static).*)$" &&
|
2008-09-08 02:45:37 +08:00
|
|
|
git diff --no-index Beer.java Beer-correct.java |
|
|
|
|
grep "^@@.*@@ public static void main("
|
|
|
|
'
|
|
|
|
|
2007-07-06 15:45:10 +08:00
|
|
|
test_done
|