summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Guenther <agx@sigxcpu.org>2007-01-22 19:06:22 +0100
committerGuido Guenther <agx@bogon.sigxcpu.org>2007-01-22 19:06:22 +0100
commit55664883c7d0a6f42a672eca947c908cfae971e1 (patch)
treedc454a172d3577169b650ead66f1339b466cdeaf
parent1d82e52b4c768006b8ad7759a1c23f2af69c189d (diff)
downloadgit-buildpackage-55664883c7d0a6f42a672eca947c908cfae971e1.tar.gz
git-buildpackage-55664883c7d0a6f42a672eca947c908cfae971e1.tar.bz2
git-buildpackage-55664883c7d0a6f42a672eca947c908cfae971e1.zip
add --git-posttag to git-buildpackage
for easy push after a sucessful build
-rw-r--r--TODO2
-rw-r--r--debian/changelog9
-rw-r--r--docs/manpages/git-buildpackage.sgml8
-rw-r--r--gbp.conf2
-rwxr-xr-xgit-buildpackage8
-rw-r--r--git_buildpackage/__init__.py71
-rw-r--r--git_buildpackage/config.py1
7 files changed, 64 insertions, 37 deletions
diff --git a/TODO b/TODO
index 2c885d59..7301b776 100644
--- a/TODO
+++ b/TODO
@@ -1,7 +1,5 @@
- git-buildpackage:
- allow to export the hole source tree to tmpdir before building
- - easy push/pull to/from remote repositories (like alioth) after a
- successful build/for getting the sources (--git-post-tag-hook)
- git-import-orig:
- allow to import from an unpacked source tree
- git-import-dsc:
diff --git a/debian/changelog b/debian/changelog
index 584d3db8..f9d44174 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+git-buildpackage (0.2.25) unstable; urgency=low
+
+ * UNRELEASED
+ * posttag suport for git-buildpackage: use --git-posttag to run a command
+ after a successfull build with tag (e.g. --git-posttag='git-push --tags
+ git.alioth.org')
+
+ -- Guido Guenther <agx@sigxcpu.org> Fri, 19 Jan 2007 00:07:14 +0100
+
git-buildpackage (0.2.24) unstable; urgency=low
* add XS-Vcs-Git
diff --git a/docs/manpages/git-buildpackage.sgml b/docs/manpages/git-buildpackage.sgml
index ea7db3e1..751cf447 100644
--- a/docs/manpages/git-buildpackage.sgml
+++ b/docs/manpages/git-buildpackage.sgml
@@ -28,6 +28,7 @@
<arg><option>--git-cleaner=</option><replaceable>CLEAN_CMD</replaceable></arg>
<arg><option>--git-sign-tags</option></arg>
<arg><option>--git-keyid=</option><replaceable>gpg-keyid</replaceable></arg>
+ <arg><option>--git-posttag=</option><replaceable>command</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
@@ -130,6 +131,13 @@
<para>use this keyid for gpg signing tags</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--git-posttag=</option><replaceable>command</replaceable>
+ </term>
+ <listitem>
+ <para>excecute <replaceable>command</replaceable> after tagging a new version</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
<refsect1>
diff --git a/gbp.conf b/gbp.conf
index 02357fac..98d8aa54 100644
--- a/gbp.conf
+++ b/gbp.conf
@@ -15,6 +15,8 @@
#sign-tags = True
# Keyid to GPG sign tags with
#keyid = 0xdeadbeef
+# Push to a remote repository after a successful tag:
+#posttag = git-push git.example.com
# Special options for git-import-orig
[git-import-orig]
diff --git a/git-buildpackage b/git-buildpackage
index b07cb52d..cd3749d6 100755
--- a/git-buildpackage
+++ b/git-buildpackage
@@ -82,6 +82,8 @@ def main(argv):
help="branch the debian patch is being developed on, default is '%(debian-branch)s'")
parser.add_config_file_option(option_name="sign-tags", dest="sign_tag",
help="sign git tags", action="store_true")
+ parser.add_config_file_option(option_name="posttag", dest="posttag_hook",
+ help="hook to execute after a successfull tag operation")
parser.add_config_file_option(option_name="keyid", dest="keyid",
help="GPG keyid to sign tags with")
(options, args) = parser.parse_args(args)
@@ -97,7 +99,7 @@ def main(argv):
try:
if not options.ignore_new:
- Command(options.clean_cmd)()
+ Command(options.clean_cmd, shell=True)()
(ret, out) = repo.is_clean()
if not ret:
print >>sys.stderr, "You have uncommitted changes in your source tree:"
@@ -116,7 +118,7 @@ def main(argv):
if not create_orig(cp, output_dir, options.upstream_branch):
raise GbpError
- Command(options.build_cmd, [ '-i\.git/', '-I.git' ] + dpkg_args)()
+ Command(options.build_cmd, [ '-i\.git/', '-I.git' ] + dpkg_args, shell=True)()
if options.tag:
try:
version = cp['Version']
@@ -125,6 +127,8 @@ def main(argv):
else:
print "Tagging", version
GitTag(options.sign_tag, options.keyid)(sanitize_version(version))
+ if(options.posttag_hook):
+ Command(options.posttag_hook, shell=True)()
except CommandExecFailed:
return 1
except GbpError, err:
diff --git a/git_buildpackage/__init__.py b/git_buildpackage/__init__.py
index 74814bda..4cac9cf5 100644
--- a/git_buildpackage/__init__.py
+++ b/git_buildpackage/__init__.py
@@ -17,25 +17,30 @@ class Command(object):
Wraps a shell command, so we don't have to store any kind of command line options in
one of the git-buildpackage commands
"""
- verbose=False
+ verbose = False
- def __init__(self, cmd, args=[]):
- self.cmd=cmd.split()
- self.args=args
- self.run_error="Couldn't run '%s'" % (" ".join(self.cmd+args))
+ def __init__(self, cmd, args=[], shell=False):
+ self.cmd = cmd
+ self.args = args
+ self.run_error = "Couldn't run '%s'" % (" ".join([self.cmd] + self.args))
+ self.shell = shell
def __run(self, args):
+ """run self.cmd adding args as additional arguments"""
try:
if self.verbose:
print self.cmd, self.args, args
- retcode = subprocess.call(self.cmd + self.args + args)
+ cmd = [ self.cmd ] + self.args + args
+ if self.shell: # subprocess.call only cares about the first argument if shell=True
+ cmd = " ".join(cmd)
+ retcode = subprocess.call(cmd, shell=self.shell)
if retcode < 0:
- print >>sys.stderr, "%s was terminated by signal %d" % (self.cmd[0], -retcode)
+ print >>sys.stderr, "%s was terminated by signal %d" % (self.cmd, -retcode)
elif retcode > 0:
- print >>sys.stderr, "%s returned %d" % (self.cmd[0], retcode)
+ print >>sys.stderr, "%s returned %d" % (self.cmd, retcode)
except OSError, e:
print >>sys.stderr, "Execution failed:", e
- retcode=1
+ retcode = 1
if retcode:
print >>sys.stderr,self.run_error
return retcode
@@ -48,28 +53,28 @@ class Command(object):
class UnpackTGZ(Command):
"""Wrap tar to Unpack a gzipped tar archive"""
def __init__(self, tgz, dir):
- self.tgz=tgz
- self.dir=dir
+ self.tgz = tgz
+ self.dir = dir
Command.__init__(self, 'tar', [ '-C', dir, '-zxf', tgz ])
- self.run_error="Couldn't unpack %s" % (self.tgz,)
+ self.run_error = "Couldn't unpack %s" % self.tgz
class RemoveTree(Command):
"Wrap rm to remove a whole directory tree"
def __init__(self, tree):
- self.tree=tree
+ self.tree = tree
Command.__init__(self, 'rm', [ '-rf', tree ])
- self.run_error="Couldn't remove %s" % (self.tree,)
+ self.run_error = "Couldn't remove %s" % self.tree
class Dch(Command):
"""Wrap dch and set a specific version"""
def __init__(self, version, msg):
- args=['-v', version]
+ args = ['-v', version]
if msg:
args.append(msg)
Command.__init__(self, 'dch', args)
- self.run_error="Dch failed."
+ self.run_error = "Dch failed."
class DpkgSourceExtract(Command):
@@ -81,7 +86,7 @@ class DpkgSourceExtract(Command):
Command.__init__(self, 'dpkg-source', ['-x'])
def __call__(self, dsc, output_dir):
- self.run_error="Couldn't extract %s" % (dsc,)
+ self.run_error = "Couldn't extract %s" % dsc
Command.__call__(self, [dsc, output_dir])
@@ -91,9 +96,9 @@ class GitLoadDirs(Command):
Command.__init__(self, 'git_load_dirs')
def __call__(self, dir, log=''):
- self.dir=dir
- self.run_error="Couldn't import %s" % self.dir
- args=[ [],['-L', log] ] [len(log) > 0]
+ self.dir = dir
+ self.run_error = "Couldn't import %s" % self.dir
+ args =[ [],['-L', log] ] [len(log) > 0]
Command.__call__(self, args+[dir])
@@ -106,39 +111,39 @@ class GitCommand(Command):
class GitInitDB(GitCommand):
"""Wrap git-init-db"""
def __init__(self):
- GitCommand.__init__(self,'init-db')
- self.run_error="Couldn't init git repository"
+ GitCommand.__init__(self, 'init-db')
+ self.run_error = "Couldn't init git repository"
class GitShowBranch(GitCommand):
"""Wrap git-show-branch"""
def __init__(self):
- GitCommand.__init__(self,'branch')
- self.run_error="Couldn't list branches"
+ GitCommand.__init__(self, 'branch')
+ self.run_error = "Couldn't list branches"
class GitBranch(GitCommand):
"""Wrap git-branch"""
def __init__(self):
- GitCommand.__init__(self,'branch')
+ GitCommand.__init__(self, 'branch')
def __call__(self, branch):
- self.run_error="Couldn't create branch %s" % (branch,)
+ self.run_error = "Couldn't create branch %s" % (branch,)
GitCommand.__call__(self, [branch])
class GitCheckoutBranch(GitCommand):
"""Wrap git-checkout in order tos switch to a certain branch"""
def __init__(self, branch):
- GitCommand.__init__(self,'checkout', [branch])
- self.branch=branch
- self.run_error="Couldn't switch to %s branch" % self.branch
+ GitCommand.__init__(self, 'checkout', [branch])
+ self.branch = branch
+ self.run_error = "Couldn't switch to %s branch" % self.branch
class GitPull(GitCommand):
"""Wrap git-pull"""
def __init__(self, repo, branch):
- GitCommand.__init__(self,'pull', [repo, branch])
+ GitCommand.__init__(self, 'pull', [repo, branch])
self.run_error = "Couldn't pull %s to %s" % (branch, repo)
@@ -150,7 +155,7 @@ class GitTag(GitCommand):
self.keyid = keyid
def __call__(self, version, msg="Tagging %(version)s"):
- self.run_error="Couldn't tag %s" % (version,)
+ self.run_error = "Couldn't tag %s" % (version,)
if self.sign_tag:
if self.keyid:
sign_opts = [ '-u', self.keyid ]
@@ -171,11 +176,11 @@ class GitAdd(GitCommand):
class GitCommitAll(GitCommand):
"""Wrap git-commit to commit all changes"""
def __init__(self):
- GitCommand.__init__(self,'commit', ['-a'])
+ GitCommand.__init__(self, 'commit', ['-a'])
def __call__(self, msg=''):
args = [ [], ['-m', msg] ][len(msg) > 0]
- self.run_error="Couldn't commit -a %s" % " ".join(args)
+ self.run_error = "Couldn't commit -a %s" % " ".join(args)
GitCommand.__call__(self, args)
diff --git a/git_buildpackage/config.py b/git_buildpackage/config.py
index cff42553..67b2be15 100644
--- a/git_buildpackage/config.py
+++ b/git_buildpackage/config.py
@@ -29,6 +29,7 @@ class GBPOptionParser(OptionParser):
'upstream-branch' : 'upstream',
'sign-tags' : '', # empty means False
'keyid' : '',
+ 'posttag' : '',
}
config_files=['/etc/git-buildpackage/gbp.conf',
os.path.expanduser('~/.gbp.conf'),