Mercurial > hg
view tests/test-bundle2-pushback.t @ 27279:40eb385f798f
tests: add test for Python 3 compatibility
Python 3 is inevitable. There have been incremental movements towards
converting the code base to be Python 3 compatible. Unfortunately, we
don't have any tests that look for Python 3 compatibility. This patch
changes that.
We introduce a check-py3-compat.py script whose role is to verify
Python 3 compatibility of the files passed in. We add a test that
calls this script with all .py files from the source checkout.
The script currently only verifies that absolute_import and
print_function are used. These are the low hanging fruits for Python
compatbility. Over time, we can include more checks, including
verifying we're able to load each Python file with Python 3. You
have to start somewhere.
Accepting this patch means that all new .py files must have
absolute_import and print_function (if "print" is used) to avoid
a new warning about Python 3 incompatibility. We've already
converted several files to use absolute_import and print_function
is in the same boat, so I don't think this is such a radical
proposition.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 06 Dec 2015 22:39:12 -0800 |
parents | c63bf97cf7c7 |
children | 622782ea9cf3 |
line wrap: on
line source
$ cat > bundle2.py << EOF > """A small extension to test bundle2 pushback parts. > Current bundle2 implementation doesn't provide a way to generate those > parts, so they must be created by extensions. > """ > from mercurial import bundle2, pushkey, exchange, util > def _newhandlechangegroup(op, inpart): > """This function wraps the changegroup part handler for getbundle. > It issues an additional pushkey part to send a new > bookmark back to the client""" > result = bundle2.handlechangegroup(op, inpart) > if 'pushback' in op.reply.capabilities: > params = {'namespace': 'bookmarks', > 'key': 'new-server-mark', > 'old': '', > 'new': 'tip'} > encodedparams = [(k, pushkey.encode(v)) for (k,v) in params.items()] > op.reply.newpart('pushkey', mandatoryparams=encodedparams) > else: > op.reply.newpart('output', data='pushback not enabled') > return result > _newhandlechangegroup.params = bundle2.handlechangegroup.params > bundle2.parthandlermapping['changegroup'] = _newhandlechangegroup > EOF $ cat >> $HGRCPATH <<EOF > [ui] > ssh = python "$TESTDIR/dummyssh" > username = nobody <no.reply@example.com> > > [alias] > tglog = log -G -T "{desc} [{phase}:{node|short}]" > EOF Set up server repository $ hg init server $ cd server $ echo c0 > f0 $ hg commit -Am 0 adding f0 Set up client repository $ cd .. $ hg clone ssh://user@dummy/server client -q $ cd client Enable extension $ cat >> $HGRCPATH <<EOF > [extensions] > bundle2=$TESTTMP/bundle2.py > [experimental] > bundle2-exp = True > EOF Without config $ cd ../client $ echo c1 > f1 $ hg commit -Am 1 adding f1 $ hg push pushing to ssh://user@dummy/server searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files remote: pushback not enabled $ hg bookmark no bookmarks set $ cd ../server $ hg tglog o 1 [public:2b9c7234e035] | @ 0 [public:6cee5c8f3e5b] With config $ cd ../client $ echo '[experimental]' >> .hg/hgrc $ echo 'bundle2.pushback = True' >> .hg/hgrc $ echo c2 > f2 $ hg commit -Am 2 adding f2 $ hg push pushing to ssh://user@dummy/server searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files $ hg bookmark new-server-mark 2:0a76dfb2e179 $ cd ../server $ hg tglog o 2 [public:0a76dfb2e179] | o 1 [public:2b9c7234e035] | @ 0 [public:6cee5c8f3e5b]