rust-matchers: add PatternMatcher
This should match the behavior of the Python patternmatcher. We need
this for status [FILES] support.
#require execbit
$ cat <<EOF >> $HGRCPATH
> [extensions]
> autodiff = $TESTDIR/autodiff.py
> [diff]
> nodates = 1
> EOF
$ hg init repo
$ cd repo
make a combination of new, changed and deleted file
$ echo regular > regular
$ echo rmregular > rmregular
$ "$PYTHON" -c "open('bintoregular', 'wb').write(b'\0')"
$ touch rmempty
$ echo exec > exec
$ chmod +x exec
$ echo rmexec > rmexec
$ chmod +x rmexec
$ echo setexec > setexec
$ echo unsetexec > unsetexec
$ chmod +x unsetexec
$ echo binary > binary
$ "$PYTHON" -c "open('rmbinary', 'wb').write(b'\0')"
$ hg ci -Am addfiles
adding binary
adding bintoregular
adding exec
adding regular
adding rmbinary
adding rmempty
adding rmexec
adding rmregular
adding setexec
adding unsetexec
$ echo regular >> regular
$ echo newregular >> newregular
$ rm rmempty
$ touch newempty
$ rm rmregular
$ echo exec >> exec
$ echo newexec > newexec
$ echo bintoregular > bintoregular
$ chmod +x newexec
$ rm rmexec
$ chmod +x setexec
$ chmod -x unsetexec
$ "$PYTHON" -c "open('binary', 'wb').write(b'\0\0')"
$ "$PYTHON" -c "open('newbinary', 'wb').write(b'\0')"
$ rm rmbinary
$ hg addremove -s 0
adding newbinary
adding newempty
adding newexec
adding newregular
removing rmbinary
removing rmempty
removing rmexec
removing rmregular
git=no: regular diff for all files
$ hg autodiff --git=no
diff -r a66d19b9302d binary
Binary file binary has changed
diff -r a66d19b9302d bintoregular
Binary file bintoregular has changed
diff -r a66d19b9302d exec
--- a/exec
+++ b/exec
@@ -1,1 +1,2 @@
exec
+exec
diff -r a66d19b9302d newbinary
Binary file newbinary has changed
diff -r a66d19b9302d newexec
--- /dev/null
+++ b/newexec
@@ -0,0 +1,1 @@
+newexec
diff -r a66d19b9302d newregular
--- /dev/null
+++ b/newregular
@@ -0,0 +1,1 @@
+newregular
diff -r a66d19b9302d regular
--- a/regular
+++ b/regular
@@ -1,1 +1,2 @@
regular
+regular
diff -r a66d19b9302d rmbinary
Binary file rmbinary has changed
diff -r a66d19b9302d rmexec
--- a/rmexec
+++ /dev/null
@@ -1,1 +0,0 @@
-rmexec
diff -r a66d19b9302d rmregular
--- a/rmregular
+++ /dev/null
@@ -1,1 +0,0 @@
-rmregular
git=yes: git diff for single regular file
$ hg autodiff --git=yes regular
diff --git a/regular b/regular
--- a/regular
+++ b/regular
@@ -1,1 +1,2 @@
regular
+regular
git=auto: regular diff for regular files and non-binary removals
$ hg autodiff --git=auto regular newregular rmregular rmexec
diff -r a66d19b9302d newregular
--- /dev/null
+++ b/newregular
@@ -0,0 +1,1 @@
+newregular
diff -r a66d19b9302d regular
--- a/regular
+++ b/regular
@@ -1,1 +1,2 @@
regular
+regular
diff -r a66d19b9302d rmexec
--- a/rmexec
+++ /dev/null
@@ -1,1 +0,0 @@
-rmexec
diff -r a66d19b9302d rmregular
--- a/rmregular
+++ /dev/null
@@ -1,1 +0,0 @@
-rmregular
$ for f in exec newexec setexec unsetexec binary newbinary newempty rmempty rmbinary bintoregular; do
> echo
> echo '% git=auto: git diff for' $f
> hg autodiff --git=auto $f
> done
% git=auto: git diff for exec
diff -r a66d19b9302d exec
--- a/exec
+++ b/exec
@@ -1,1 +1,2 @@
exec
+exec
% git=auto: git diff for newexec
diff --git a/newexec b/newexec
new file mode 100755
--- /dev/null
+++ b/newexec
@@ -0,0 +1,1 @@
+newexec
% git=auto: git diff for setexec
diff --git a/setexec b/setexec
old mode 100644
new mode 100755
% git=auto: git diff for unsetexec
diff --git a/unsetexec b/unsetexec
old mode 100755
new mode 100644
% git=auto: git diff for binary
diff --git a/binary b/binary
index a9128c283485202893f5af379dd9beccb6e79486..09f370e38f498a462e1ca0faa724559b6630c04f
GIT binary patch
literal 2
Jc${Nk0000200961
% git=auto: git diff for newbinary
diff --git a/newbinary b/newbinary
new file mode 100644
index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d
GIT binary patch
literal 1
Ic${MZ000310RR91
% git=auto: git diff for newempty
diff --git a/newempty b/newempty
new file mode 100644
% git=auto: git diff for rmempty
diff --git a/rmempty b/rmempty
deleted file mode 100644
% git=auto: git diff for rmbinary
diff --git a/rmbinary b/rmbinary
deleted file mode 100644
index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
% git=auto: git diff for bintoregular
diff --git a/bintoregular b/bintoregular
index f76dd238ade08917e6712764a16a22005a50573d..9c42f2b6427d8bf034b7bc23986152dc01bfd3ab
GIT binary patch
literal 13
Uc$`bh%qz(+N=+}#Ni5<5043uE82|tP
git=warn: regular diff with data loss warnings
$ hg autodiff --git=warn
diff -r a66d19b9302d binary
Binary file binary has changed
diff -r a66d19b9302d bintoregular
Binary file bintoregular has changed
diff -r a66d19b9302d exec
--- a/exec
+++ b/exec
@@ -1,1 +1,2 @@
exec
+exec
diff -r a66d19b9302d newbinary
Binary file newbinary has changed
diff -r a66d19b9302d newexec
--- /dev/null
+++ b/newexec
@@ -0,0 +1,1 @@
+newexec
diff -r a66d19b9302d newregular
--- /dev/null
+++ b/newregular
@@ -0,0 +1,1 @@
+newregular
diff -r a66d19b9302d regular
--- a/regular
+++ b/regular
@@ -1,1 +1,2 @@
regular
+regular
diff -r a66d19b9302d rmbinary
Binary file rmbinary has changed
diff -r a66d19b9302d rmexec
--- a/rmexec
+++ /dev/null
@@ -1,1 +0,0 @@
-rmexec
diff -r a66d19b9302d rmregular
--- a/rmregular
+++ /dev/null
@@ -1,1 +0,0 @@
-rmregular
data lost for: binary
data lost for: bintoregular
data lost for: newbinary
data lost for: newempty
data lost for: newexec
data lost for: rmbinary
data lost for: rmempty
data lost for: setexec
data lost for: unsetexec
git=abort: fail on execute bit change
$ hg autodiff --git=abort regular setexec
abort: losing data for setexec
[255]
git=abort: succeed on regular file
$ hg autodiff --git=abort regular
diff -r a66d19b9302d regular
--- a/regular
+++ b/regular
@@ -1,1 +1,2 @@
regular
+regular
$ cd ..