hgfixes: add a fixer to convert plain strings to bytestrings
This patch implements a 2to3 fixer that converts all plain strings in a python
source file to byte strings syntax. Example:
foo = 'Normal string'
would become
foo = b'Normal string'
The motivation behind this fixer can be found in
http://selenic.com/pipermail/mercurial-devel/2010-June/022363.html or, in other
words: the current hg source assumes that _most_ strings are "meant" to be byte
sequences, so it makes sense to make the convertion implemented by this patch.
As mentioned above, not all mercurial modules want to use strings as bytes,
examples include i18n (which uses unicode), and demandimport (in py3k, module
names are normal strings, thus unicode, and there's no need for a convertion).
Therefore, these modules are blacklisted in the fixer. There are also a few
functions that can take only unicode arguments, thus the convertion shouldn't
be done for those.
#!/bin/sh
hg
hg -q
hg help
hg -q help
echo %% test short command list with verbose option
hg -v help shortlist | sed 's/[(]version [^)]*[)]/(version xxx)/'
hg add -h
echo %% verbose help for add
hg add -hv
echo %% test help option with version option
hg add -h --version | sed 's/[(]version [^)]*[)]/(version xxx)/'
hg add --skjdfks
echo %% test ambiguous command help
hg help ad
echo %% test command without options
hg help verify
hg help diff
hg help status
hg -q help status
hg help foo
hg skjdfks
cat > helpext.py <<EOF
import os
from mercurial import commands
def nohelp(ui, *args, **kwargs):
pass
cmdtable = {
"nohelp": (nohelp, [], "hg nohelp"),
}
commands.norepo += ' nohelp'
EOF
abspath=`pwd`/helpext.py
echo '[extensions]' >> $HGRCPATH
echo "helpext = $abspath" >> $HGRCPATH
echo %% test command with no help text
hg help nohelp
echo %% test that default list of commands omits extension commands
hg help
echo %% test list of commands with command with no help text
hg help helpext
echo %% test a help topic
hg help revs
exit 0