diff options
author | Guido Günther <agx@sigxcpu.org> | 2014-08-23 18:10:16 +0200 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2014-08-23 18:34:07 +0200 |
commit | 04aa92f1d283e5995998d70580de0c8c21c40133 (patch) | |
tree | 7ca43d46a61a5c11e5140460c09bc6479a6e418e | |
parent | 5f82f445abbab55a6b2ad8d82b8ddf21eff69628 (diff) |
Allow to list all available commands
-rw-r--r-- | docs/manpages/gbp.sgml | 16 | ||||
-rw-r--r-- | gbp/scripts/supercommand.py | 43 |
2 files changed, 58 insertions, 1 deletions
diff --git a/docs/manpages/gbp.sgml b/docs/manpages/gbp.sgml index 00c9e77f..c0fdddc7 100644 --- a/docs/manpages/gbp.sgml +++ b/docs/manpages/gbp.sgml @@ -21,6 +21,8 @@ &gbp; <group choice='req'> <arg><option>--help</option></arg> + <arg><option>--version</option></arg> + <arg><option>--list-cmds</option></arg> <arg><option>command</option><arg choice='opt' rep='repeat'><option>args</option></arg></arg> </group> </cmdsynopsis> @@ -41,6 +43,20 @@ <para>Print help</para> </listitem> </varlistentry> + <varlistentry> + <term><option>--version</option> + </term> + <listitem> + <para>Print the programs version</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>--list-cmds</option> + </term> + <listitem> + <para>List all available commands</para> + </listitem> + </varlistentry> </variablelist> </refsect1> <refsect1> diff --git a/gbp/scripts/supercommand.py b/gbp/scripts/supercommand.py index e529b38c..83c8446b 100644 --- a/gbp/scripts/supercommand.py +++ b/gbp/scripts/supercommand.py @@ -17,6 +17,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """Supercommand for all gbp commands""" +import glob import os import re import sys @@ -43,6 +44,8 @@ The most commonly used commands are: import-orig - import a new upstream tarball import-dsc - import a single Debian source package import-dscs - import multiple Debian source packages + +Use '--list-cmds' to list all available commands. """ def version(prog): @@ -52,6 +55,7 @@ def version(prog): gbp_version = '[Unknown version]' print("%s %s" % (os.path.basename(prog), gbp_version)) + def import_command(cmd): """ Import the module that implements the given command @@ -64,6 +68,40 @@ def import_command(cmd): return __import__('gbp.scripts.%s' % modulename, fromlist='main', level=0) +def pymod_to_cmd(mod): + """ + >>> pymod_to_cmd('/x/y/z/a_cmd.py') + 'a-cmd' + """ + return os.path.basename(mod.rsplit('.', 1)[0]).replace('_','-') + + +def get_available_commands(path): + cmds = [] + for f in glob.glob(os.path.join(path, '*.py')): + if os.path.basename(f) in ['__init__.py', 'supercommand.py']: + continue + cmds.append((pymod_to_cmd(f), f)) + return cmds + + +def list_available_commands(): + mod = __import__('gbp.scripts', fromlist='main', level=0) + path = os.path.dirname(mod.__file__) + maxlen = 0 + + print("Available commands in %s\n" % path) + cmds = sorted(get_available_commands(path)) + for cmd in cmds: + if len(cmd[0]) > maxlen: + maxlen = len(cmd[0]) + for cmd in cmds: + mod = import_command(cmd[0]) + doc = mod.__doc__ + print(" %s - %s" % (cmd[0].rjust(maxlen), doc)) + print('') + + def supercommand(argv=None): argv = argv or sys.argv @@ -74,12 +112,15 @@ def supercommand(argv=None): prg, cmd = argv[0:2] args = argv[1:] - if cmd in ['--help', '-h']: + if cmd in ['--help', '-h', 'help' ]: usage() return 0 elif cmd in [ '--version', 'version' ]: version(argv[0]) return 0 + elif cmd in [ '--list-cmds', 'list-cmds' ]: + list_available_commands() + return 0 try: module = import_command(cmd) |