Short version:

1. In January yuppie did a fix on GenericSetup trunk (r130476), which deserves a release, as it fixes upgrade step sort order with setuptools 8 and higher. Thank you, yuppie!

2. But I just created a branch (maurits-versions-setuptools) with a minor fix for that fix, which deserves another pair of eyes. It avoids a warning by pkg_resources.

Long version:

Setuptools includes the pkg_resources module. This has gotten some changes recently in light of the package version numbering scheme, PEP 440. See https://www.python.org/dev/peps/pep-0440/

The upgrades.py file in GenericSetup uses pkg_resources.parse_version to parse source and destination of upgrade steps and of the profile revision, so it can see if an upgrade step applies, and what the order should be.

GenericSetup 1.7.5 orders the upgrade steps differently depending on which setuptools version you use. Not good.

For example:

1. Create a Plone 3.3.6 site, which has an old version of GenericSetup, but that does not matter.

2. Update the Plone version to latest 4.3.4, which has GenericSetup 1.7.5.

3. Go to the plone-upgrade page, which uses portal_setup.listUpgrades to list the upgrades available for the core Plone profile.

4. Now there are two possibilities.

A. When you use setuptools 7 or lower, all is well. There are lots of steps, but stripped to the essence it boils down to this:
all -> 4.0
3.3.6 -> 4.0
4.0 -> 4.1
4.1 -> 4.2
4.2 - 4.3
Apply them all and you end up on version 4.3.  Good.

B. When you use setuptools 8 or higher, the upgrade step order is wrong:
3.3.6 -> 4.0
4.0 -> 4.1
4.1 -> 4.2
4.2 - 4.3
all -> 4.0

After all the steps are done, you are at profile version 4.0, instead of 4.3. The following steps need to be done a second time before arriving at the final destination of 4.3:
4.0 -> 4.1
4.1 -> 4.2
4.2 - 4.3

Anyway, yuppie fixed this elegantly by changing normalize_version in upgrade.py to not return pkg_resources.parse_version(version), but to call tuple() around this parsed version. A release would be good.

All is well with that fix, except for this warning by pkg_resources:

  RuntimeWarning: You have iterated over the result of
  pkg_resources.parse_version. This is a legacy behavior which is
  inconsistent with the new version class introduced in setuptools
  8.0. In most cases, conversion to a tuple is unnecessary. For
  comparison of versions, sort the Version instances directly. If you
  have another use case requiring the tuple, please file a bug with
  the setuptools project describing that need.

So in subversion I created a branch maurits-versions-setuptools to fix this so it works in old and new setuptools, without this really really verbose warning.

See svn+ssh://svn.zope.org/repos/main/Products.GenericSetup/branches/maurits-versions-setuptools

Please have a look.


Maurits van Rees: http://maurits.vanrees.org/
Zest Software: http://zestsoftware.nl

Zope-CMF maillist  -  Zope-CMF@zope.org

See https://bugs.launchpad.net/zope-cmf/ for bug reports and feature requests

Reply via email to