Simple change from using getopt to using argparse. Also fixes https://bugs.archlinux.org/task/56995



diff --git a/namcap.py b/namcap.py
index a7f532a..bb2754e 100755
--- a/namcap.py
+++ b/namcap.py
@@ -19,10 +19,10 @@
 #
 #
 
-import getopt
 import os
 import sys
 import tarfile
+import argparse
 
 import Namcap.depends
 import Namcap.tags
@@ -33,22 +33,6 @@ def get_modules():
     """Return all possible modules (rules)"""
     return Namcap.rules.all_rules
 
-def usage():
-    """Display usage information"""
-    print("")
-    print("Usage: " + sys.argv[0] + " [OPTIONS] packages")
-    print("")
-    print("Options are:")
-    print("    -L, --list                       : list available rules")
-    print("    -i                               : prints information (debug) responses from rules")
-    print("    -m                               : makes the output parseable (machine-readable)")
-    print("    -e rulelist, --exclude=rulelist  : don't apply RULELIST rules to the package")
-    print("    -r rulelist, --rules=rulelist    : only apply RULELIST rules to the package")
-    print("    -t tags                          : use a custom tag file")
-    print("    -v version                       : print version and exit")
-
-    sys.exit(2)
-
 def open_package(filename):
     try:
         tar = tarfile.open(filename, "r")
@@ -61,17 +45,6 @@ def open_package(filename):
         return None
     return tar
 
-def check_rules_exclude(optlist):   
-    '''Check if the -r (--rules) and the -r (--exclude) options
-    are being used at same time'''
-    args_used = 0
-    for i in optlist:   
-        if '-r' in i or '-e' in i:
-            args_used += 1
-        if '--rules' in i or '--exclude' in i:
-            args_used += 1           
-    return args_used
-
 def show_messages(name, key, messages):
     for msg in messages:
         print("%s %s: %s" % (name, key, Namcap.tags.format_message(msg)))
@@ -162,74 +135,57 @@ def process_pkgbuild(package, modules):
 
 # Main
 modules = get_modules()
-info_reporting = 0
-machine_readable = False
-filename = None
-
-# get our options and process them
-try:
-    optlist, args = getopt.getopt(sys.argv[1:], "ihmr:e:t:Lv",
-            ["info", "help", "machine-readable", "rules=",
-                "exclude=", "tags=", "list", "version"])
-except getopt.GetoptError:
-    usage()
-
-active_modules = {}
 
-# Verifying if we are using the -r and -r options at same time
-if check_rules_exclude(optlist) > 1:
-    print("You cannot use '-r' (--rules) and '-e' (-exclude) options at same time")
-    usage()
-
-for i, k in optlist:
-    if i in ('-L', '--list'):
+# Let's handle those options!
+version = Namcap.version.get_version()
+
+parser = argparse.ArgumentParser()
+parser.add_argument('-L', '--list', action='store_true', help='List available rules')
+parser.add_argument('-i', '--info', action='store_const', const=1, default=0, help='Prints information (debug) responses from rules')
+parser.add_argument('-m', '--machine-readable', action='store_true', help='Makes the output parseable (machine-readable)')
+parser.add_argument('-t', '--tags', action='store', help='Use a custom tag file')
+parser.add_argument('packages', nargs='+')
+pargroup = parser.add_mutually_exclusive_group()
+pargroup.add_argument('-e', '--exclude', action='store', metavar='RULELIST', help="Don't apply RULELIST rules to the package")
+pargroup.add_argument('-r', '--rules', action='store', metavar='RULELIST', help='Only apply RULELIST rules to the packag')
+parser.add_argument('-v', '--version', action='version', version=version)
+args = parser.parse_args()
+
+# Do something with all these options
+if (args.list):
         print("-"*20 + " Namcap rule list " + "-"*20)
         for j in sorted(modules):
             print("%-20s: %s" % (j, modules[j].description))
-        sys.exit(2)
-
-    if i in ('-r', '--rules'):
-        module_list = k.split(',')
-        for j in module_list:
-            if j in modules:
-                active_modules[j] = modules[j]
-            else:
-                print("Error: Rule '%s' does not exist" % j)
-                usage()
-
-    # Used to exclude some rules from the check
-    if i in ('-e', '--exclude'):
-        module_list = k.split(',')
-        active_modules.update(modules)
-        for j in module_list:
-            if j in modules:
-                active_modules.pop(j)
-            else:
-                print("Error: Rule '%s' does not exist" % j)
-                usage()
-
-    if i in ('-i', '--info'):
-        info_reporting = 1
-
-    if i in ('-h', '--help'):
-        usage()
-    if i in ('-m', '--machine-readable'):
-        machine_readable = True
-
-    if i in ('-t', '--tags'):
-        filename = k
-
-    if i in ('-v', '--version'):
-        print(Namcap.version.get_version())
-        sys.exit(0)
-
-# If there are no args, print usage
-if (args == []):
-    usage()
+        parser.exit(2)
 
-Namcap.tags.load_tags(filename = filename, machine = machine_readable)
+info_reporting = args.info
+machine_readable = args.machine_readable
+filename = args.tags
 
-packages = args
+if (args.rules):
+    module_list = args.rules
+    for j in module_list:
+        if j in modules:
+            active_modules[j] = modules[j]
+        else:
+            print("Error: Rule '%s' does not exist" % j)
+            parser.exit(2)
+
+if (args.exclude):
+    module_list = args.exclude
+    active_modules.update(modules)
+    for j in module_list:
+        if j in modules:
+            active_modules.pop(j)
+        else:
+            print("Error: Rule '%s' does not exist" % j)
+            parser.exit(2)
+
+packages = args.packages
+
+active_modules = {}
+
+Namcap.tags.load_tags(filename = filename, machine = machine_readable)
 
 # No rules selected?  Then select them all!
 if len(active_modules) == 0:
@@ -239,7 +195,7 @@ if len(active_modules) == 0:
 for package in packages:
     if not os.access(package, os.R_OK):
         print("Error: Problem reading %s" % package)
-        usage()
+        parser.print_usage()
 
     if os.path.isfile(package) and tarfile.is_tarfile(package):
         process_realpackage(package, active_modules)