aboutsummaryrefslogtreecommitdiffhomepage
path: root/examples/gbp-posttag-push
diff options
context:
space:
mode:
Diffstat (limited to 'examples/gbp-posttag-push')
-rwxr-xr-xexamples/gbp-posttag-push123
1 files changed, 92 insertions, 31 deletions
diff --git a/examples/gbp-posttag-push b/examples/gbp-posttag-push
index cd8968dc..91d3eb16 100755
--- a/examples/gbp-posttag-push
+++ b/examples/gbp-posttag-push
@@ -1,7 +1,7 @@
#!/usr/bin/python
# vim: set fileencoding=utf-8 :
#
-# (C) 2009,2012,2015 Guido Guenther <agx@sigxcpu.org>
+# (C) 2009,2012,2015,2016 Guido Guenther <agx@sigxcpu.org>
#
# gbp-posttag-push: post tag hook to be called by git-buildpackage to push out
# the newly created tag and to forward the remote branch to that position
@@ -11,7 +11,7 @@
# signed.
#
# use:
-# [git-buildpackage]
+# [buildpackage]
# posttag = gbp-posttag-push
#
# Options:
@@ -21,15 +21,19 @@
from __future__ import print_function
-from six.moves import configparser
+import glob
import os
import subprocess
import sys
import gbp.log
-from gbp.config import GbpOptionParser
+from gbp.command_wrappers import Command, CommandExecFailed
+from gbp.config import GbpOptionParserDebian
from gbp.deb.git import DebianGitRepository
-
+from gbp.deb.source import DebianSource
+from gbp.errors import GbpError
+from gbp.git.vfs import GitVfs
+from gbp.scripts.common import ExitCodes
class Env(object):
@@ -44,9 +48,9 @@ def get_push_targets(env):
if not len(remote):
continue
repo, refspec = remote.split()
- repo = ".".join(repo.split('.')[1:-1]) # remote.<repo>.push
+ repo = ".".join(repo.split('.')[1:-1]) # remote.<repo>.push
try:
- remote = refspec.split(':')[1] # src:dest
+ remote = refspec.split(':')[1] # src:dest
except IndexError:
remote = refspec
dests[repo] = remote
@@ -56,10 +60,10 @@ def get_push_targets(env):
def get_pull(env):
"""where did we pull from?"""
cmd = 'git config --get branch."%s".remote' % env.branch
- remote = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True).communicate()[0].strip()
+ remote = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True).communicate()[0].strip()
if not remote:
remote = 'origin'
- return { remote: env.branch }
+ return {remote: env.branch}
def git_push_sim(*args):
@@ -69,7 +73,6 @@ def git_push_sim(*args):
def get_upstream_tag(repo, tag, tag_format):
# FIXME: This assumes the debian version is the last part after the slash:
version = tag.split('/')[-1]
- no_epoch = version.split(':')[-1]
upstream = version.rsplit('-')[0]
tag = tag_format % dict(version=upstream)
if repo.has_tag(tag):
@@ -77,16 +80,19 @@ def get_upstream_tag(repo, tag, tag_format):
return None
-def main(argv):
- env = Env()
- upstream_sha1 = None
+def build_parser(name):
+
+ # Until we moved this out of examples
+ os.environ['GBP_DISABLE_SECTION_DEPRECTATION'] = '1'
+ GbpOptionParserDebian.defaults['upload-cmd'] = ""
+ GbpOptionParserDebian.help['upload-cmd'] = "Upload command, default is '%(upload-cmd)s'"
try:
- parser = GbpOptionParser(command=os.path.basename(argv[0]), prefix='',
- usage='%prog [options] paths')
- except configparser.ParsingError as err:
- gbp.log.error(err)
- return 1
+ parser = GbpOptionParserDebian(command=os.path.basename(name),
+ usage='%prog [options]')
+ except GbpError as err:
+ gbp.log.err(err)
+ return None
parser.add_option("-d", "--dry-run", dest="dryrun", default=False,
action="store_true", help="dry run, don't push.")
@@ -98,25 +104,67 @@ def main(argv):
dest="upstream_branch")
parser.add_config_file_option(option_name="upstream-tag",
dest="upstream_tag")
+ parser.add_config_file_option(option_name="debian-tag",
+ dest="debian_tag")
+ parser.add_config_file_option(option_name="upload-cmd",
+ dest="upload_cmd")
+ parser.add_config_file_option(option_name="color", dest="color", type='tristate')
+ parser.add_config_file_option(option_name="color-scheme",
+ dest="color_scheme")
parser.add_option("--verbose", action="store_true", dest="verbose",
default=False, help="verbose command execution")
+ return parser
- (options, args) = parser.parse_args()
- gbp.log.setup(False, options.verbose)
- repo = DebianGitRepository('.')
+def parse_args(argv):
+ parser = build_parser(argv[0])
+ if not parser:
+ return None, None
+ return parser.parse_args(argv)
+
+
+def find_changes(sourcename, version):
+ glob_ex = "../%s_%s_*.changes" % (sourcename, version)
+ gbp.log.info("Looking for changes at %s" % glob_ex)
+ return glob.glob(glob_ex)
+
+
+def upload_changes(changes, cmd, dryrun):
+ ret = 0
+ for name in changes:
+ gbp.log.info("Running %s" % " ".join([cmd, name]))
+ try:
+ if not dryrun:
+ Command(cmd, [name], shell=False)()
+ except CommandExecFailed:
+ gbp.log.err("Upload of '%s' failed." % name)
+ ret = 1
+ return ret
+
+def main(argv):
+ retval = 0
+ env = Env()
+ upstream_sha1 = None
+
+ (options, args) = parse_args(argv)
+ if not options:
+ return ExitCodes.parse_error
+
+ gbp.log.setup(options.color, options.verbose, options.color_scheme)
+
+ repo = DebianGitRepository('.')
if options.dryrun:
- print("Dry run mode. Not pushing.")
+ gbp.log.warn("Dry run mode. Not pushing, not uploading.")
repo.push = git_push_sim
repo.push_tag = git_push_sim
- for envvar in [ "GBP_TAG", "GBP_BRANCH", "GBP_SHA1" ]:
+ for envvar in ["GBP_TAG", "GBP_BRANCH", "GBP_SHA1"]:
var = os.getenv(envvar)
if var:
- env.__dict__.setdefault( "%s" % envvar.split("_")[1].lower(), var)
+ env.__dict__.setdefault("%s" % envvar.split("_")[1].lower(), var)
else:
- print("%s not set." % envvar, file=sys.stderr)
+ gbp.log.err("%s not set." % envvar, file=sys.stderr)
return 1
dests = get_push_targets(env)
@@ -128,22 +176,35 @@ def main(argv):
upstream_sha1 = repo.rev_parse("%s^{}" % upstream_tag)
if not repo.verify_tag(env.tag):
- print("Not pushing nonexistent or unsigned tag '%s'." % env.tag, file=sys.stderr)
+ gbp.log.info("Not pushing non-existent or unsigned tag '%s'." % env.tag, file=sys.stderr)
return 0
+ source = DebianSource(GitVfs(repo, env.tag))
+
for dest in dests:
- print("Pushing %s to %s" % (env.tag, dest))
+ gbp.log.info("Pushing %s to %s" % (env.tag, dest))
repo.push_tag(dest, env.tag)
- print("Pushing %s to %s" % (env.sha1, dest))
+ gbp.log.info("Pushing %s to %s %s" % (env.sha1, dest, dests[dest]))
repo.push(dest, env.sha1, dests[dest])
if options.push_upstream and upstream_tag:
- print("Pushing %s to %s" % (upstream_tag, dest))
+ gbp.log.info("Pushing %s to %s" % (upstream_tag, dest))
repo.push_tag(dest, upstream_tag)
if not repo.branch_contains("%s/%s" % (dest, options.upstream_branch),
upstream_sha1, remote=True):
- print("Pushing %s to %s" % (upstream_sha1, dest))
+ gbp.log.info("Pushing %s to %s %s" % (upstream_sha1, dest, options.upstream_branch))
repo.push(dest, upstream_sha1, options.upstream_branch)
- print("done.")
+
+ if options.upload_cmd:
+ version = repo.tag_to_version(env.tag, options.debian_tag)
+ changes = find_changes(source.sourcepkg, version)
+ if len(changes):
+ retval = upload_changes(changes, options.upload_cmd, options.dryrun)
+ else:
+ gbp.log.info("No changes file found, nothing to upload.")
+ else:
+ gbp.log.info("No upload command defined, not uploading to the archive")
+ return retval
+
if __name__ == '__main__':
sys.exit(main(sys.argv))