diff options
Diffstat (limited to 'git_buildpackage.py')
-rw-r--r-- | git_buildpackage.py | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/git_buildpackage.py b/git_buildpackage.py new file mode 100644 index 0000000..d046c7f --- /dev/null +++ b/git_buildpackage.py @@ -0,0 +1,150 @@ +# helper classes for git-buildpackge and friends +# (C) 2006 Guido Guenther <agx@sigxcpu.org> + +import subprocess +import sys + +class CommandExecFailed(Exception): + pass + +class Command(object): + verbose=False + + def __init__(self, cmd, args=[]): + self.cmd=cmd + self.args=args + + def __run(self, args): + try: + if self.verbose: + print self.cmd, self.args, args + retcode = subprocess.call([self.cmd]+self.args+args) + if retcode < 0: + print >>sys.stderr, "%s was terminated by signal %d" % (self.cmd, -retcode) + elif retcode > 0: + print >>sys.stderr, "%s returned %d" % (self.cmd, retcode) + except OSError, e: + print >>sys.stderr, "Execution failed:", e + retcode=1 + if retcode: + print >>sys.stderr,self.run_error + return retcode + + def __call__(self, args=[]): + if self.__run(args): + raise CommandExecFailed + + +class UnpackTGZ(Command): + def __init__(self, tgz, dir): + self.tgz=tgz + self.dir=dir + Command.__init__(self, 'tar', [ '-C', dir, '-zxf', tgz ]) + self.run_error="Couldn't unpack %s" % (self.tgz,) + + +class RemoveTree(Command): + "Remove a whole directory tree" + def __init__(self, tree): + self.tree=tree + Command.__init__(self, 'rm', [ '-rf', tree ]) + self.run_error="Couldn't remove %s" % (self.tree,) + + +class Dch(Command): + def __init__(self, version, msg): + args=['-v', version] + if msg: + args.append(msg) + Command.__init__(self, 'dch', args) + self.run_error="Dch failed." + + +class DpkgSourceExtract(Command): + def __init__(self): + Command.__init__(self, 'dpkg-source', ['-x']) + + def __call__(self, dsc, output_dir): + self.run_error="Couldn't extract %s" % (dsc,) + Command.__call__(self, [dsc, output_dir]) + + +class GitLoadDirs(Command): + def __init__(self): + 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] + Command.__call__(self, args+[dir]) + + +class GitCommand(Command): + "Mother/Father of all git commands" + def __init__(self, cmd, args=[]): + Command.__init__(self, 'git-'+cmd, args) + + +class GitInitDB(GitCommand): + def __init__(self): + GitCommand.__init__(self,'init-db') + self.run_error="Couldn't init git repository" + + +class GitShowBranch(GitCommand): + def __init__(self): + GitCommand.__init__(self,'branch') + self.run_error="Couldn't list branches" + + +class GitBranch(GitCommand): + def __init__(self): + GitCommand.__init__(self,'branch') + + def __call__(self, branch): + self.run_error="Couldn't create branch %s" % (branch,) + GitCommand.__call__(self, [branch]) + + +class GitCheckoutBranch(GitCommand): + def __init__(self, branch): + GitCommand.__init__(self,'checkout', [branch]) + self.branch=branch + self.run_error="Couldn't switch to %s branch" % self.branch + + +class GitPull(GitCommand): + def __init__(self, repo, branch): + GitCommand.__init__(self,'pull', [repo, branch]) + self.run_error="Couldn't pull %s to %s" % (branch, repo) + + +class GitTag(GitCommand): + def __init__(self): + GitCommand.__init__(self,'tag') + + def __call__(self, tag): + self.run_error="Couldn't tag %s" % (tag,) + GitCommand.__call__(self, [tag]) + + +class GitAdd(GitCommand): + """add a lists of files""" + def __init__(self): + GitCommand.__init__(self,'add') + self.run_error="Couldn't add files" + + +class GitCommitAll(GitCommand): + """Commit files to the repository""" + def __init__(self): + 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) + GitCommand.__call__(self, args) + + +# vim:et:ts=4:sw=4: |