tests: add glob matching for unified tests
This adds a " (glob)" marker that works like a simpler version of
(re): "*" is converted to ".*", and "?" is converted to ".".
Both special characters can be escaped using "\", and the backslash
itself can be escaped as well.
Other glob-style syntax, like "**", "[chars]", or "[!chars]", isn't
supported.
tests: require regexes in unified tests to be marked with " (re)"
Consider this test:
$ hg glog --template '{rev}:{node|short} "{desc}"\n'
@ 2:
20c4f79fd7ac "3"
|
| o 1:
38f24201dcab "2"
|/
o 0:
2a18120dc1c9 "1"
Because each line beginning with "|" can be compiled as a regular
expression (equivalent to ".*|"), they will match any output.
Similarly:
$ echo foo
The blank output line can be compiled as a regular expression and will
also match any output.
With this patch, none of the above output lines will be matched as
regular expressions. A line must end in " (re)" in order to be matched
as one.
Lines are still matched literally first, so the following will pass:
$ echo 'foo (re)'
foo (re)
tests: ensure regexes match to the end of the string
Regular expressions in the test suite are currently written assuming
that you need a trailing ".*" to avoid matching to the end.
Instead of matching regular expressions using "^pattern", this patch
makes matching more restrictive by matching "^pattern$".
tests: don't match blank output lines as regexes in unified tests
Currently, the following unified test will pass:
$ echo foo
A blank output line (a line containing just two spaces) will match any
output.
The patch modifies the unified test runner to ignore empty strings
strings when do regular expression matching.
merge: delay writing the mergestate during until commit is called
This speeds up merges of lots of files considerably.