aboutsummaryrefslogtreecommitdiffhomepage
path: root/git-import-dscs
diff options
context:
space:
mode:
authorGuido Guenther <agx@sigxcpu.org>2008-05-17 21:20:35 +0200
committerGuido Guenther <agx@sigxcpu.org>2008-05-17 21:34:24 +0200
commit6ddf1687fc176575707a33be1b17aad8961953e5 (patch)
tree989eabae1e4cce7e220e48aebf47f47075c42ff8 /git-import-dscs
parentcd77e167e025880c7a872a0e3645ce702cde6d5d (diff)
add git-import-dscs
to import mutiple dscs in one go Closes: #471580
Diffstat (limited to 'git-import-dscs')
-rwxr-xr-xgit-import-dscs133
1 files changed, 133 insertions, 0 deletions
diff --git a/git-import-dscs b/git-import-dscs
new file mode 100755
index 00000000..8b6d99ee
--- /dev/null
+++ b/git-import-dscs
@@ -0,0 +1,133 @@
+#!/usr/bin/python
+# vim: set fileencoding=utf-8 :
+#
+# (C) 2008 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 multiple dsc files in one go"""
+
+import sys
+import re
+import os
+import tempfile
+import glob
+import pipes
+import gbp.deb_utils
+import gbp.command_wrappers as gbpc
+from gbp.deb_utils import parse_dsc, DscFile
+from gbp.config import GbpOptionParser
+from gbp.errors import GbpError
+from gbp.git_utils import GitRepository, GitRepositoryError
+
+class DpkgCompareVersions(gbpc.Command):
+ cmd='/usr/bin/dpkg'
+
+ def __init__(self):
+ if not os.access(self.cmd, os.X_OK):
+ raise GbpError, "%s not found - cannot use compare versions" % self.cmd
+ gbpc.Command.__init__(self, self.cmd, ['--compare-versions'])
+
+ def __call__(self, version1, version2):
+ self.run_error = "Couldn't compare %s with %s" % (version1, version2)
+ res = gbpc.Command.call(self, [ version1, 'lt', version2 ])
+ if res not in [ 0, 1 ]:
+ raise gbpc.CommandExecFailed, "%s: bad return code %d" % (self.run_error, res)
+ if res == 0:
+ return -1
+ elif res == 1:
+ res = gbpc.Command.call(self, [ version1, 'gt', version2 ])
+ if res not in [ 0, 1 ]:
+ raise gbpc.CommandExecFailed, "%s: bad return code %d" % (self.run_error, res)
+ if res == 0:
+ return 1
+ return 0
+
+
+class DscCompareVersions(DpkgCompareVersions):
+ def __init__(self):
+ DpkgCompareVersions.__init__(self)
+
+ def __call__(self, dsc1, dsc2):
+ return DpkgCompareVersions.__call__(self, dsc1.version, dsc2.version)
+
+
+class GitImportDsc(gbpc.Command):
+ cmd='/usr/bin/git-import-dsc'
+ def __init__(self, args):
+ if not os.access(self.cmd, os.X_OK):
+ raise GbpError, "%s not found - can't import packages" % self.cmd
+ gbpc.Command.__init__(self, self.cmd, args)
+
+ def __call__(self, dsc):
+ gbpc.Command.__call__(self, [dsc.dscfile])
+
+
+def usage():
+ print """Usage: git-import-dscs [git-import-dsc options] /path/to/dsc1 [/path/to/dsc2] ..."""
+
+
+def main(argv):
+ dirs = {'top': os.path.abspath(os.curdir)}
+ dscs = []
+ ret = 0
+ dsc_cmp = DscCompareVersions()
+
+ try:
+ import_args = argv[1:]
+
+ for arg in argv[::-1]:
+ if arg.endswith('.dsc'):
+ dscs.append(parse_dsc(arg))
+ import_args.remove(arg)
+
+ if not dscs:
+ usage()
+ sys.exit(1)
+
+ dscs.sort(cmp=dsc_cmp)
+ importer = GitImportDsc(import_args)
+
+ try:
+ repo = GitRepository('.')
+ (clean, out) = repo.is_clean()
+ if not clean:
+ print >>sys.stderr, "Repository has uncommitted changes, commit these first: "
+ raise GbpError, out
+ else:
+ dirs['pkg'] = dirs['top']
+ except GitRepositoryError:
+ # no git repository there yet
+ dirs['pkg'] = os.path.join(dirs['top'], dscs[0].pkg)
+
+ importer(dscs[0])
+ os.chdir(dirs['pkg'])
+
+ for dsc in dscs[1:]:
+ importer(dsc)
+
+ except (GbpError, gbpc.CommandExecFailed), err:
+ if len(err.__str__()):
+ print >>sys.stderr, err
+ ret = 1
+ finally:
+ os.chdir(dirs['top'])
+
+ if not ret:
+ print 'Everything imported under %s' % dirs['pkg']
+ return ret
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
+
+# vim:et:ts=4:sw=4:et:sts=4:ai:set list listchars=tab\:»·,trail\:·: