summaryrefslogtreecommitdiff
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
parentcd77e167e025880c7a872a0e3645ce702cde6d5d (diff)
downloadgit-buildpackage-6ddf1687fc176575707a33be1b17aad8961953e5.tar.gz
git-buildpackage-6ddf1687fc176575707a33be1b17aad8961953e5.tar.bz2
git-buildpackage-6ddf1687fc176575707a33be1b17aad8961953e5.zip
add git-import-dscs
to import mutiple dscs in one go Closes: #471580
-rwxr-xr-xdebian/rules2
-rw-r--r--docs/common.ent1
-rw-r--r--docs/man.git-import-dscs.sgml11
-rw-r--r--docs/manpages/git-import-dscs.sgml79
-rw-r--r--docs/manpages/manpages.ent1
-rw-r--r--docs/manual.sgml1
-rwxr-xr-xgit-import-dscs133
-rw-r--r--setup.py2
8 files changed, 228 insertions, 2 deletions
diff --git a/debian/rules b/debian/rules
index 3f973bbc..ed34eca4 100755
--- a/debian/rules
+++ b/debian/rules
@@ -7,7 +7,7 @@ DEB_PYTHON_CLEAN_ARGS = --all
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/python-distutils.mk
-COMMANDS=git-buildpackage git-import-dsc git-import-orig git-dch
+COMMANDS=git-buildpackage git-import-dsc git-import-dscs git-import-orig git-dch
MANPAGES=$(patsubst %,docs/%.1,$(COMMANDS))
MANUAL=docs/manual-html
PYCHECKS=$(patsubst %,%.py,$(COMMANDS))
diff --git a/docs/common.ent b/docs/common.ent
index 28cd7d39..98974da2 100644
--- a/docs/common.ent
+++ b/docs/common.ent
@@ -6,6 +6,7 @@
<!ENTITY git-buildpackage "<command>git-buildpackage</command>">
<!ENTITY git-import-orig "<command>git-import-orig</command>">
<!ENTITY git-import-dsc "<command>git-import-dsc</command>">
+ <!ENTITY git-import-dscs "<command>git-import-dscs</command>">
<!ENTITY git-dch "<command>git-dch</command>">
<!ENTITY gitcmd "<command>git</command>">
<!ENTITY gitkcmd "<command>gitk</command>">
diff --git a/docs/man.git-import-dscs.sgml b/docs/man.git-import-dscs.sgml
new file mode 100644
index 00000000..3777e895
--- /dev/null
+++ b/docs/man.git-import-dscs.sgml
@@ -0,0 +1,11 @@
+<!DOCTYPE reference PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+ <!ENTITY % COMMON SYSTEM "common.ent">
+ %COMMON;
+ <!ENTITY % MANPAGES SYSTEM "manpages/manpages.ent">
+ %MANPAGES;
+]>
+
+<reference>
+<title>git-buildpackage Manual</title>
+&man.git.importdscs;
+</reference>
diff --git a/docs/manpages/git-import-dscs.sgml b/docs/manpages/git-import-dscs.sgml
new file mode 100644
index 00000000..c9ea7d8a
--- /dev/null
+++ b/docs/manpages/git-import-dscs.sgml
@@ -0,0 +1,79 @@
+<refentry id="gbp.man.git.import.dscs">
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>git-import-dscs</refentrytitle>
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&git-import-dscs;</refname>
+
+ <refpurpose>Import multiple versions of a Debian source packages into a Git repository</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ &git-import-dscs;
+ <arg><option>git-import-dsc ptions</option></arg>
+ <arg choice="plain"><replaceable>pkg_1.dsc</replaceable></arg>
+ <arg choice="plain"><replaceable>pkg_2.dsc</replaceable></arg>
+ <arg choice="plain"><replaceable>...</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+ <para>
+ &git-import-dscs; imports several versions of a Debian source package into
+ a &git; repository. To do so it sorts the packages by their versions first
+ and then imports them via calling &git-import-dsc; on each package.
+ </para>
+
+ <para>
+ If the current directory isn't a &git; repository already the repository is
+ created in a subdir of the current working directory, named after the first
+ imported package, otherwise the &git; repository in the current working
+ directory is being used. This allows for incremental imports.
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>OPTIONS</title>
+ <para>
+ All options are passed on verbatim to &git-import-dsc;.
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>SEE ALSO</title>
+
+ <para>
+ <citerefentry>
+ <refentrytitle>git-import-dsc</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>git-buildpackage</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>git-import-orig</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>git-dch</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>,
+ &man.seealso.common;
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>&dhusername; &dhemail;</para>
+
+ </refsect1>
+</refentry>
diff --git a/docs/manpages/manpages.ent b/docs/manpages/manpages.ent
index 6f22e564..21c5bf0d 100644
--- a/docs/manpages/manpages.ent
+++ b/docs/manpages/manpages.ent
@@ -1,5 +1,6 @@
<!ENTITY man.git.importorig SYSTEM "git-import-orig.sgml">
<!ENTITY man.git.importdsc SYSTEM "git-import-dsc.sgml">
+<!ENTITY man.git.importdscs SYSTEM "git-import-dscs.sgml">
<!ENTITY man.git.buildpackage SYSTEM "git-buildpackage.sgml">
<!ENTITY man.git.dch SYSTEM "git-dch.sgml">
<!ENTITY man.git.config-files SYSTEM "man.conffiles.sgml">
diff --git a/docs/manual.sgml b/docs/manual.sgml
index e72ebec5..eb977536 100644
--- a/docs/manual.sgml
+++ b/docs/manual.sgml
@@ -29,6 +29,7 @@
<title>Command Reference</title>
&man.git.buildpackage;
&man.git.importdsc;
+ &man.git.importdscs;
&man.git.importorig;
&man.git.dch;
</appendix>
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\:·:
diff --git a/setup.py b/setup.py
index 14adcb1a..ece0ea36 100644
--- a/setup.py
+++ b/setup.py
@@ -21,7 +21,7 @@ from distutils.core import setup
setup(name = "git_build_package",
author = 'Guido Guenther',
author_email = 'agx@sigxcpu.org',
- scripts = [ 'git-buildpackage', 'git-import-dsc', 'git-import-orig', 'git-dch' ],
+ scripts = [ 'git-buildpackage', 'git-import-dsc', 'git-import-orig', 'git-dch', 'git-import-dscs' ],
packages = [ 'gbp' ],
data_files = [("/etc/git-buildpackage/", ["gbp.conf" ]),],
)