From 12dce5f8469d5a6508df518134cae133d8da6efb Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Sun, 8 Jan 2012 19:35:34 +0100 Subject: Add wrapper for all gbp commands So like git you can now use gbp instead of git- or gbp-. The manpages and docs aren't adjusted yet. --- gbp/__init__.py | 2 +- gbp/scripts/command.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 5 +++- tests/16_test_wrapper.py | 29 +++++++++++++++++++++ 4 files changed, 101 insertions(+), 2 deletions(-) mode change 100644 => 100755 gbp/__init__.py create mode 100755 gbp/scripts/command.py create mode 100644 tests/16_test_wrapper.py diff --git a/gbp/__init__.py b/gbp/__init__.py old mode 100644 new mode 100755 index 30b5199..4b31a85 --- a/gbp/__init__.py +++ b/gbp/__init__.py @@ -1,6 +1,6 @@ # vim: set fileencoding=utf-8 : # -# (C) 2006,2007,2008 Guido Guenther +# (C) 2006,2007,2008 Guido Günther # 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 diff --git a/gbp/scripts/command.py b/gbp/scripts/command.py new file mode 100755 index 0000000..c6ae493 --- /dev/null +++ b/gbp/scripts/command.py @@ -0,0 +1,67 @@ +#!/usr/bin/python +# vim: set fileencoding=utf-8 : +# +# (C) 2013 Guido Günther +# 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 +"""Wrapper for all gbp commands""" + +import sys + +def sanitize(cmd): + return cmd.replace('-', '_') + +def usage(): + print """ +Usage: + gbp [] + +The most commonly used commands are: + + buildpackage - build a Debian package + import-orig - import a new upstream tarball + import-dsc - import a single Debian source package + import-dscs - import multiple Debian source packages +""" + +def import_command(cmd): + if '.' in cmd: + raise ImportError('Illegal module name') + + m = __import__('gbp.scripts.%s' % cmd, fromlist='main', level=0) + return m + + +def gbp_command(argv=None): + argv = argv or sys.argv + + if len(argv) < 2: + usage() + return 1 + + cmd = argv[1] + args = argv[1:] + + cmd = sanitize(cmd) + try: + module = import_command(cmd) + except ImportError as e: + print >>sys.stderr, "'%s' is not a valid command." % cmd + if '--debug' in args: + print >>sys.stderr, e + return 2 + + return module.main(args) + +# vim:et:ts=4:sw=4:et:sts=4:ai:set list listchars=tab\:»·,trail\:·: diff --git a/setup.py b/setup.py index 7fe71b7..fe7109a 100644 --- a/setup.py +++ b/setup.py @@ -58,5 +58,8 @@ setup(name = "gbp", packages = find_packages(exclude=['tests', 'tests.*']), data_files = [("/etc/git-buildpackage/", ["gbp.conf"]),], setup_requires=['nose>=0.11.1', 'coverage>=2.85', 'nosexcover>=1.0.7'] if \ - os.getenv('WITHOUT_NOSETESTS') is None else [] + os.getenv('WITHOUT_NOSETESTS') is None else [], + entry_points = { + 'console_scripts': [ 'gbp = gbp.scripts.command:gbp_command' ], + }, ) diff --git a/tests/16_test_wrapper.py b/tests/16_test_wrapper.py new file mode 100644 index 0000000..35f50bc --- /dev/null +++ b/tests/16_test_wrapper.py @@ -0,0 +1,29 @@ +# vim: set fileencoding=utf-8 : +# (C) 2013 Guido Günther +# 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 +"""Test L{gbp} command wrapper""" + +import unittest +import gbp.scripts.command + +class TestWrapper(unittest.TestCase): + + def test_invalid_command(self): + """Test if we can import a valid command""" + self.assertEqual(gbp.scripts.command.gbp_command(['argv0', 'asdf']), 2) + + def test_missing_arg(self): + self.assertEqual(gbp.scripts.command.gbp_command(['argv0']), 1) + -- cgit v1.2.3