[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