check-code: catch Python 'is' comparing number or string literals
The Python 'is' operator compares object identity, so it should
definitely not be applied to string or number literals, which Python
implementations are free to represent with a temporary object.
This should catch the following kinds of bogus expressions (examples):
x is 'foo' x is not 'foo'
x is "bar" x is not "bar"
x is 42 x is not 42
x is -36 x is not -36
As originally proposed by Martin Geisler, amended with catching
negative numbers.
$ cat >findbranch.py <<EOF
> import re, sys
>
> head_re = re.compile('^#(?:(?:\\s+([A-Za-z][A-Za-z0-9_]*)(?:\\s.*)?)|(?:\\s*))$')
>
> for line in sys.stdin:
> hmatch = head_re.match(line)
> if not hmatch:
> sys.exit(1)
> if hmatch.group(1) == 'Branch':
> sys.exit(0)
> sys.exit(1)
> EOF
$ hg init a
$ cd a
$ echo "Rev 1" >rev
$ hg add rev
$ hg commit -m "No branch."
$ hg branch abranch
marked working directory as branch abranch
$ echo "Rev 2" >rev
$ hg commit -m "With branch."
$ if hg export 0 | python ../findbranch.py; then
> echo "Export of default branch revision has Branch header" 1>&2
> exit 1
> fi
$ if hg export 1 | python ../findbranch.py; then
> : # Do nothing
> else
> echo "Export of branch revision is missing Branch header" 1>&2
> exit 1
> fi
Make sure import still works with branch information in patches.
$ cd ..
$ hg init b
$ cd b
$ hg -R ../a export 0 | hg import -
applying patch from stdin
$ hg -R ../a export 1 | hg import -
applying patch from stdin
$ cd ..
$ rm -rf b
$ hg init b
$ cd b
$ hg -R ../a export 0 | hg import --exact -
applying patch from stdin
$ hg -R ../a export 1 | hg import --exact -
applying patch from stdin