Checkoutmanager is a
five-year old tool that I still use daily. The idea? A simple
~/.checkoutmanager.cfg
ini file that lists your checkouts/clones. Like
this (only much longer):
[local]
vcs = git
basedir = ~/local/
checkouts =
git@github.com:nens/syseggrecipe.git
git@github.com:buildout/buildout.git
git@github.com:reinout/reinout-media.git
git@github.com:rvanlaar/djangorecipe.git
[svn]
vcs = svn
basedir = ~/svn/
checkouts =
svn+ssh://reinout@svn.zope.org/repos/main/z3c.recipe.usercrontab/trunk
In the morning, I’ll normally do a checkoutmanager up
and it’ll go through
the list and do svn up
, git pull
, hg pull -u
, depending on the
version control system. Much better than going though a number of them by
hand!
Regularly, I’ll do checkoutmanager st
to see if I’ve got something I still
need to commit. If you just work on one project, no problem. But if you need
to do quick fixes on several projects and perhaps also store your laptop’s
configuration in git… it is easy to forget something:
$ checkoutmanager st
/Users/reinout/vm/veertien/efcis-site
M README.rst
And did you ever commit something but forgot to push it to the server?
checkoutmanager out
tells you if you did :-)
Porting to python 3. The repo was originally on bitbucket, but nowadays I keep having to look all over my screen, looking for buttons, to get anything done there. I’m just too used to github, it seems. So after merging a pull request I finally got down to moving it to github.
I also copied over the issues and added one that told me to make sure it runs on python 3, too. Why? Well, it is the good thing to do. And… we had a work meeting last week where we said that ideally we’d want to run everything on python 3.
Two years ago I started a django site with python 3. No real problems there. I had to fix two buildout recipes myself. And the python LDAP package didn’t work, but I could work around it. And supervisord didn’t run so I had to use the apt-get-installed global one. For the rest: fine.
Recently I got zest.releaser to work on python 3 (that is: someone else did most of the hard work, I helped getting the pull request properly merged :-) ). For that, several test dependencies needed to be fixed for python 3 (which, again, someone else did). Checkoutmanager had the same test dependencies, so getting the test machinery to run was just a matter of updating dependencies.
What had to be done?
print 'something'
is now a function: print('something')
. Boring
work, but easy.
Some __future__
imports, mostly for the print function and unicode
characters.
Oh, and setting up travis-ci.org testing. Very easy to get both python 2.7 and 3.4 testing your software that way. Otherwise you keep on switching back/forth between versions yourself.
(There’s also ‘tox’ you can use for local multi-python-version testing in case you really really need that all the time, I don’t use it myself though.)
Some from six.moves import xyz
to work around changed imports between 2
and 3. Easy peasy, just look at the list in the documentation.
It is now try... except SomeError as e
instead of try... except
SomeError, e
. The new syntax already works in 2.7, so there’s no problem
there.
The one tricky part was that checkoutmanager uses doctests instead of “regular” tests. And getting string comparison/printing right on both python 2 and 3 is a pain. You need an ugly change like this one to get it working. Bah.
But: most people don’t use doctests, so they won’t have this problem :-)
The full list of changes is in this pull request: https://github.com/reinout/checkoutmanager/pull/9 .
A handy resource is http://python3porting.com/problems.html . Many common problems are mentioned there. Including solution.
Django’s porting tips at https://docs.djangoproject.com/en/1.8/topics/python3/ are what I recommended to my colleagues as a useful initial guide on what to do. Sane, short advice.
Anyway… Another python 3 package! (And if I’ve written something that’s still used but that hasn’t been ported yet: feel free to bug me or to send a pull request!)
My name is Reinout van Rees and I program in Python, I live in the Netherlands, I cycle recumbent bikes and I have a model railway.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):