diff --git a/pbr/d2to1/zestreleaser.py b/pbr/d2to1/zestreleaser.py index 896b6dbd..326bacae 100644 --- a/pbr/d2to1/zestreleaser.py +++ b/pbr/d2to1/zestreleaser.py @@ -25,6 +25,7 @@ ConfigParser = m.configparser.ConfigParser logger = logging.getLogger(__name__) + def update_setupcfg_version(filename, version): """Opens the given setup.cfg file, locates the version option in the [metadata] section, updates it to the new version. @@ -66,6 +67,92 @@ def prereleaser_middle(data): update_setupcfg_version(filename, data['new_version']) +def releaser_middle(data): + """ + releaser.middle hook to monkey-patch zest.releaser to support signed + tagging--currently this is the only way to do this. Also monkey-patches to + disable an annoyance where zest.releaser only creates .zip source + distributions. This is supposedly a workaround for a bug in Python 2.4, + but we don't care about Python 2.4. + """ + + import os + import sys + + from zest.releaser.git import Git + from zest.releaser.release import Releaser + + # Copied verbatim from zest.releaser, but with the cmd string modified to + # use the -s option to create a signed tag + def _my_create_tag(self, version): + msg = "Tagging %s" % (version,) + cmd = 'git tag -s %s -m "%s"' % (version, msg) + if os.path.isdir('.git/svn'): + print "\nEXPERIMENTAL support for git-svn tagging!\n" + cur_branch = open('.git/HEAD').read().strip().split('/')[-1] + print "You are on branch %s." % (cur_branch,) + if cur_branch != 'master': + print "Only the master branch is supported for git-svn tagging." + print "Please tag yourself." + print "'git tag' needs to list tag named %s." % (version,) + sys.exit() + cmd = [cmd] + local_head = open('.git/refs/heads/master').read() + trunk = open('.git/refs/remotes/trunk').read() + if local_head != trunk: + print "Your local master diverges from trunk.\n" + # dcommit before local tagging + cmd.insert(0, 'git svn dcommit') + # create tag in svn + cmd.append('git svn tag -m "%s" %s' % (msg, version)) + return cmd + + # Similarly copied from zer.releaser to support use of 'v' in front + # of the version number + def _my_make_tag(self): + from zest.releaser import utils + from os import system + + if self.data['tag_already_exists']: + return + cmds = self.vcs.cmd_create_tag(self.data['version']) + if not isinstance(cmds, list): + cmds = [cmds] + if len(cmds) == 1: + print "Tag needed to proceed, you can use the following command:" + for cmd in cmds: + print cmd + if utils.ask("Run this command"): + print system(cmd) + else: + # all commands are needed in order to proceed normally + print "Please create a tag for %s yourself and rerun." % \ + (self.data['version'],) + sys.exit() + if not self.vcs.tag_exists('v' + self.data['version']): + print "\nFailed to create tag %s!" % (self.data['version'],) + sys.exit() + + # Normally all this does is to return '--formats=zip', which is currently + # hard-coded as an option to always add to the sdist command; they ought to + # make this actually optional + def _my_sdist_options(self): + return '' + + Git.cmd_create_tag = _my_create_tag + Releaser._make_tag = _my_make_tag + Releaser._sdist_options = _my_sdist_options + + +def postreleaser_before(data): + """ + Fix the irritating .dev0 default appended to new development versions by + zest.releaser to just append ".dev" without the "0". + """ + + data['dev_version_template'] = '%(new_version)s.dev' + + def postreleaser_middle(data): filename = os.path.join(data['workingdir'], 'setup.cfg') if os.path.exists(filename):