aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2014-08-23 18:10:16 +0200
committerGuido Günther <agx@sigxcpu.org>2014-08-23 18:34:07 +0200
commit04aa92f1d283e5995998d70580de0c8c21c40133 (patch)
tree7ca43d46a61a5c11e5140460c09bc6479a6e418e
parent5f82f445abbab55a6b2ad8d82b8ddf21eff69628 (diff)
Allow to list all available commands
-rw-r--r--docs/manpages/gbp.sgml16
-rw-r--r--gbp/scripts/supercommand.py43
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)