summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik M. Bray <embray@stsci.edu>2013-04-10 15:47:22 +0000
committerErik M. Bray <embray@stsci.edu>2013-04-10 15:47:22 +0000
commit0d335d080445d9a657a9e9e3397ccbb682ac5025 (patch)
tree0e00cfe4af0111b3fcf6da048404c2bbe7676bb7
parentd1d4f9c2344d1efe655c9068774fcf7cb42bd053 (diff)
downloadpbr-0d335d080445d9a657a9e9e3397ccbb682ac5025.tar.gz
Added some additional zest.releaser hooks to deal with some perpetual annoyances of doing releases.
git-svn-id: https://svn.stsci.edu/svn/ssb/stsci_python/d2to1/trunk@24209 fe389314-cf27-0410-b35b-8c050e845b92
-rw-r--r--pbr/d2to1/zestreleaser.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/pbr/d2to1/zestreleaser.py b/pbr/d2to1/zestreleaser.py
index 896b6db..326baca 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):