summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGuido Guenther <agx@sigxcpu.org>2006-09-25 12:38:30 +0200
committerGuido Guenther <agx@bogon.sigxcpu.org>2006-09-25 12:38:30 +0200
commit0a64daeff9162e6c160f405b04cad7d7cb95e427 (patch)
tree8ea94b8340a8a9148fc63c999f1cf49cf7d61725
parent72f2e696deb1d2b86f8ad7530d0b41f6e5649a80 (diff)
add git-import-orig
-rw-r--r--README1
-rw-r--r--debian/README.Debian6
-rw-r--r--debian/control3
-rw-r--r--debian/copyright20
-rwxr-xr-xgit-import-orig195
-rw-r--r--setup.py2
6 files changed, 204 insertions, 23 deletions
diff --git a/README b/README
index 4c3eebea..81e0b3f2 100644
--- a/README
+++ b/README
@@ -3,6 +3,7 @@ This is a bunch of scripts to ease the development of Debian packages with git:
Usage: git-import-dsc dsc-file
This will import the upstream source onto the upstream branch and add the Debian
paches on the master branch
+ - git-import-orig: import a new upstream version into the repository
- git-debuild: build a package out of a git repository, check for local
modifications and tag appropriately
Usage: git-debuild [--git-ignore-new] [-git-tag]
diff --git a/debian/README.Debian b/debian/README.Debian
deleted file mode 100644
index 77d5ffec..00000000
--- a/debian/README.Debian
+++ /dev/null
@@ -1,6 +0,0 @@
-git-buildpackage for Debian
----------------------------
-
-<possible notes regarding this package - if none, delete this file>
-
- -- Guido Guenther <agx@sigxcpu.org>, Tue, 12 Sep 2006 14:55:57 +0200
diff --git a/debian/control b/debian/control
index 5112ab46..6173620a 100644
--- a/debian/control
+++ b/debian/control
@@ -7,8 +7,7 @@ Standards-Version: 3.7.2
Package: git-buildpackage
Architecture: all
-Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends}, devscripts
-Suggests: git-load-dirs
+Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends}, devscripts, git-load-dirs
Description: bunch of scripts to ease the development of Debian packages with git
This package contains the following tools:
* git-import-dsc: import an existing Debian source package into a git
diff --git a/debian/copyright b/debian/copyright
index 6e2a6ac7..8ebeb174 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -1,22 +1,14 @@
This package was debianized by Guido Guenther <agx@sigxcpu.org> on
Tue, 12 Sep 2006 14:55:57 +0200.
-It was downloaded from <fill in http/ftp site>
+It was downloaded from http://honk.sigxcpu.org/git/git-buildpackage/
-Upstream Author: <put author(s) name and email here>
+Upstream Author: Guido Günther <agx@sigxcpu.org>
-Copyright: <put the year(s) of the copyright, and the names of the
- copyright holder(s) here>
+Copyright: 2006, Guido Günther
License:
-<Put the license of the package here>
-
-
-The Debian packaging is (C) 2006, Guido Guenther <agx@sigxcpu.org> and
-is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
-
-
-# Please also look if there are files or directories which have a
-# different copyright/license attached and list them here.
-
+You are free to distribute this software under the terms of the GNU General
+Public License Version 2. The full text of this license can be found in the
+file /usr/share/common-licenses/GPL-2
diff --git a/git-import-orig b/git-import-orig
new file mode 100755
index 00000000..273a2de3
--- /dev/null
+++ b/git-import-orig
@@ -0,0 +1,195 @@
+#!/usr/bin/python
+#
+# (C) 2006 Guido Guenther <agx@sigxcpu.org>
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Import a new upstream version
+
+import sys
+import os
+import subprocess
+import tempfile
+import re
+import glob
+from optparse import OptionParser
+
+class CommandExecFailed:
+ pass
+
+class Command(object):
+ def __init__(self, cmd, args=[]):
+ self.cmd=cmd
+ self.args=args
+
+ def run(self):
+ try:
+ retcode = subprocess.call([self.cmd]+self.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
+ return retcode
+
+ def __call__(self):
+ if self.run():
+ 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", 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 ", 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 GitLoadDirs(Command):
+ def __init__(self, upstream_dir):
+ self.upstream_dir=upstream_dir
+ Command.__init__(self, 'git_load_dirs', [ self.upstream_dir ])
+ self.run_error="Couldn't import %s", self.upstream_dir
+
+class GitCommand(Command):
+ "Mother/Father of all git commands"
+ def __init__(self, cmd, args=[]):
+ Command.__init__(self, 'git-'+cmd, args)
+
+class GitShowBranch(GitCommand):
+ def __init__(self):
+ GitCommand.__init__(self,'branch')
+ self.run_error="Couldn't list branches"
+
+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, version):
+ GitCommand.__init__(self,'tag', [version])
+ self.run_error="Couldn't tag %s" % (version,)
+
+# Used GIT Commands
+gitCheckoutUpstream=GitCheckoutBranch('upstream')
+gitCheckoutMaster=GitCheckoutBranch('master')
+gitShowBranch=GitShowBranch()
+gitPullUpstream=GitPull('.', 'upstream')
+
+def cleanupTmpTree(tree):
+ RemoveTree(tree)()
+
+
+def unpackOrig(tgz):
+ try:
+ unpackTGZ=UnpackTGZ(tgz, tempfile.mkdtemp(dir='../'))
+ unpackTGZ()
+ except CommandExecFailed:
+ print "Unpacking of %s failed" % (tgz,)
+ cleanupTmpTree(unpackTGZ.dir)
+ return
+ return unpackTGZ.dir
+
+
+def get_version(tgz):
+ origre=re.compile('^[a-z\d-]+_(?P<version>[a-z\d\.\~\-]+)\.orig\.tar\.gz')
+ m=origre.match(os.path.basename(tgz))
+ if m:
+ return m.group('version')
+
+def main():
+ parser = OptionParser('%prog [-u version] /path/to/upstream-version.tar.gz')
+
+ parser.add_option("-u", "--upstreamversion", dest="version",
+ help="Upstream Version")
+ (options, args) = parser.parse_args()
+
+ if len(args) != 1:
+ parser.print_help()
+ return 1
+ else:
+ tgz=args[0]
+
+ try:
+ os.stat('.git')
+ except:
+ print >>sys.stderr,"%s not a git repository" % (os.path.abspath('.'),)
+ return 1
+
+ if options.version:
+ version = options.version
+ else:
+ version=get_version(tgz)
+ if version:
+ print "Upstream version is %s" % (version,)
+ else:
+ print >>sys.stderr,"Cannot determine upstream version from %s - use -u" % (tgz,)
+ parser.print_help()
+ return 1
+
+ tmpdir=unpackOrig(tgz)
+ if not tmpdir:
+ return 1
+ else:
+ print "Unpacked orig to %s" % (tmpdir, )
+ origdir=glob.glob(tmpdir+'/*')[0]
+
+ try:
+ print "Importing %s to upstream branch..." % (tgz,)
+ gitCheckoutUpstream()
+ gitShowBranch()
+ GitLoadDirs(origdir)()
+ GitTag(version)()
+
+ print "Merging to master..."
+ gitCheckoutMaster()
+ gitShowBranch()
+ gitPullUpstream()
+ Dch("%s-1" % (version,), 'New Upstream Version')()
+ except CommandExecFailed:
+ print >>sys.stderr, "Import of %s failed" % (tgz,)
+ cleanupTmpTree(tmpdir)
+ return 1
+ cleanupTmpTree(tmpdir)
+
+ print "Merged version %s of %s into ." % (version, tgz)
+ return 0
+
+if __name__ == "__main__":
+ sys.exit(main())
+
+# vim:et:ts=4:sw=4:
diff --git a/setup.py b/setup.py
index 7b6f8753..6447dc49 100644
--- a/setup.py
+++ b/setup.py
@@ -21,6 +21,6 @@ from distutils.core import setup
setup(name = "git_build_package",
author = 'Guido Guenther',
author_email = 'agx@sigxcpu.org',
- scripts = ['git-import-dsc', 'git-debuild']
+ scripts = ['git-import-dsc', 'git-debuild', 'git-import-orig']
)