Development quote of the week
Still, even with this, it was never going to be a matter of just following
some standard porting advice and
calling it good. Launchpad has almost a million lines of Python code in its
main git tree, and around
250 dependencies of which a number are quite Launchpad-specific. In a
project that size, not only is following standard porting advice an
extremely time-consuming task in its own right, but just about every
strange corner case is going to show up somewhere. (Did you know that
StringIO.StringIO(None) and io.StringIO(None) do different
things even after you account for the native string vs. Unicode text
difference? How about the behaviour of .union() on a
subclass of frozenset?) Launchpad’s test suite is fortunately
extremely thorough, but even just starting up the test suite involves
importing most of the data model code, so before you can start taking
advantage of it you have to make a large fraction of the codebase be at
least syntactically-correct Python 3 code and use only modules that exist
in Python 3 while still working in Python 2; in a project this size that
turns out to be a large effort on its own, and can be quite risky
in places.
— Colin
Watson (Thanks to Paul Wise)
