[projects/pld-ftp-admin] pfa-genindex: use argparse, add --help

arekm arekm at pld-linux.org
Tue Oct 20 13:17:22 CEST 2026


commit 6e7ea5e9604f0af83ab1ff6c4020cc78a05bc2f2
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Tue Oct 20 13:09:03 2026 +0200

    pfa-genindex: use argparse, add --help
    
    Unknown --index values and a missing tree are now errors (exit 2).
    --[no]poldek and --[no]yum apply after --index wherever they appear.

 bin/pfa-genindex         | 98 ++++++++++++++++++++++++------------------------
 shell/bash-completion.sh |  2 +-
 2 files changed, 51 insertions(+), 49 deletions(-)
---
diff --git a/bin/pfa-genindex b/bin/pfa-genindex
index 58d85f8..ddd1ac0 100755
--- a/bin/pfa-genindex
+++ b/bin/pfa-genindex
@@ -3,64 +3,66 @@
 
 from __future__ import print_function
 
-import getopt
+import argparse
 import sys, os
+
+INDEXES = ('poldek', 'yum')
+
+
+def index_list(value):
+    indexes = {v.strip() for v in value.split(',')} - {''}
+    unknown = indexes - set(INDEXES)
+    if unknown:
+        raise argparse.ArgumentTypeError(
+            f"unknown index type: {', '.join(sorted(unknown))} (known: {', '.join(INDEXES)})")
+    return indexes
+
+
+parser = argparse.ArgumentParser(
+    description='Generate poldek indexes and yum/dnf repodata for ftp trees.',
+    epilog='examples:\n  %(prog)s PLD\n  %(prog)s --index=poldek PLD test',
+    formatter_class=argparse.RawDescriptionHelpFormatter)
+parser.add_argument('-q', '--quiet', action='store_true',
+    help='less output; errors are still shown')
+parser.add_argument('--index', type=index_list, default='poldek,yum', metavar='LIST',
+    help=f"comma separated index types to generate: {', '.join(INDEXES)} (default: %(default)s)")
+group = parser.add_argument_group('per-index switches',
+    'applied after --index; for the same index the last switch wins')
+for name in INDEXES:
+    group.add_argument(f'--{name}', dest=name, action='store_true', default=None,
+        help=f'enable {name}')
+    group.add_argument(f'--no{name}', dest=name, action='store_false', default=None,
+        help=f'disable {name}')
+parser.add_argument('trees', nargs='+', metavar='tree',
+    help='ftp tree name, e.g. PLD, test, ready')
+args = parser.parse_intermixed_args()
+
+indexes = args.index
+for name in INDEXES:
+    if getattr(args, name) is True:
+        indexes.add(name)
+    elif getattr(args, name) is False:
+        indexes.discard(name)
+if not indexes:
+    parser.error('nothing to generate')
+
+do_poldek = 'poldek' in indexes
+do_yum = 'yum' in indexes
+quiet = args.quiet
+trees = args.trees
+# update only if changed (applicable to yum)
+freshen = True
+
+# config reads ~/.ftpadmrc on import; parse options first so --help works without it
 sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
 from common import checkdir
 from config import ftp_dir,all_ftp_archs
 import config
 import ftpio
 
-try:
-    opts, args = getopt.getopt(sys.argv[1:], 'q',
-        [
-            "quiet", "index=",
-            "nopoldek", "noyum",
-            "poldek", "yum"
-        ]
-    )
-except getopt.GetoptError:
-    print("ERR: not enough parameters given", file=sys.stderr)
-    print("pfa-genindex [--quiet] [--[no]poldek] [--[no]yum] tree [tree2...]", file=sys.stderr)
-    sys.exit(1)
-
-do_poldek = True
-do_yum = True
-quiet = False
-# update only if changed (applicable to yum)
-freshen = True
-
-for o, a in opts:
-    if o == "--nopoldek":
-        do_poldek = False
-    if o == "--noyum":
-        do_yum = False
-
-    if o == "--poldek":
-        do_poldek = True
-    if o == "--yum":
-        do_yum = True
-
-    if o == "-q" or o == "--quiet":
-        quiet = True
-
-    if o == "--index":
-        do_poldek = do_yum = False
-        for v in a.split(','):
-            if v == 'poldek':
-                do_poldek = True
-            if v == 'yum':
-                do_yum = True
-
 if not quiet:
     print("poldek: %s; yum: %s" % (do_poldek, do_yum))
 
-if not do_poldek and not do_yum:
-    print("ERR: speciy at least one action", file=sys.stderr)
-    sys.exit(1)
-
-trees = args
-
 for tree in trees:
     checkdir(tree)
 
diff --git a/shell/bash-completion.sh b/shell/bash-completion.sh
index 49bb7fa..bf6e60a 100644
--- a/shell/bash-completion.sh
+++ b/shell/bash-completion.sh
@@ -43,7 +43,7 @@ _pfa-genindex()
 
     if [[ "$cur" == -* ]]; then
         COMPREPLY=( $( compgen -W '\
-            -q --quiet --index \
+            -h --help -q --quiet --index \
             --nopoldek --noyum \
             --poldek --yum \
             ' \
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/projects/pld-ftp-admin.git/commitdiff/0e823b7af918fae7f654eb4f72e63d95a1af8cdb



More information about the pld-cvs-commit mailing list