public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Mike Frysinger" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/catalyst:master commit in: catalyst/
Date: Tue,  6 Oct 2015 17:03:11 +0000 (UTC)	[thread overview]
Message-ID: <1444149230.5d42738fb733ecb3fb92b69bb85f17a36bef60b7.vapier@gentoo> (raw)

commit:     5d42738fb733ecb3fb92b69bb85f17a36bef60b7
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Tue Oct  6 16:33:50 2015 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Tue Oct  6 16:33:50 2015 +0000
URL:        https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=5d42738f

main: switch to argparse

Switch from ad-hoc getopt parsing to the more powerful/standard argparse.

 catalyst/main.py | 191 +++++++++++++++++++++++++------------------------------
 1 file changed, 85 insertions(+), 106 deletions(-)

diff --git a/catalyst/main.py b/catalyst/main.py
index 604c6ab..2a25df4 100644
--- a/catalyst/main.py
+++ b/catalyst/main.py
@@ -6,9 +6,9 @@
 # Chris Gianelloni <wolf31o2@wolf31o2.org>
 # $Id$
 
+import argparse
 import os
 import sys
-import getopt
 import os.path
 
 __selfpath__ = os.path.abspath(os.path.dirname(__file__))
@@ -28,35 +28,6 @@ from catalyst.version import get_version
 conf_values={}
 
 
-def usage():
-	print """Usage catalyst [options] [-C variable=value...] [ -s identifier]
- -a --clear-autoresume  clear autoresume flags
- -c --config            use specified configuration file
- -C --cli               catalyst commandline (MUST BE LAST OPTION)
- -d --debug             enable debugging
- -f --file              read specfile
- -F --fetchonly         fetch files only
- -h --help              print this help message
- -p --purge             clear tmp dirs,package cache, autoresume flags
- -P --purgeonly         clear tmp dirs,package cache, autoresume flags and exit
- -T --purgetmponly      clear tmp dirs and autoresume flags and exit
- -s --snapshot          generate a release snapshot
- -V --version           display version information
- -v --verbose           verbose output
-
-Usage examples:
-
-Using the commandline option (-C, --cli) to build a Portage snapshot:
-catalyst -C target=snapshot version_stamp=my_date
-
-Using the snapshot option (-s, --snapshot) to build a release snapshot:
-catalyst -s 20071121"
-
-Using the specfile option (-f, --file) to build a stage target:
-catalyst -f stage1-specfile.spec
-"""
-
-
 def version():
 	print get_version()
 	print "Copyright 2003-2008 Gentoo Foundation"
@@ -167,96 +138,104 @@ def build_target(addlargs):
 	return target.run()
 
 
-def main():
-	# we need some options in order to work correctly
-	if len(sys.argv) < 2:
-		usage()
-		sys.exit(2)
-
-	# parse out the command line arguments
-	try:
-		opts, _args = getopt.getopt(sys.argv[1:], "apPThvdc:C:f:FVs:", ["purge", "purgeonly", "purgetmponly", "help", "version", "debug",
-			"clear-autoresume", "config=", "cli=", "file=", "fetch", "verbose","snapshot="])
-
-	except getopt.GetoptError:
-		usage()
-		sys.exit(2)
-
-	myconfig=""
-	myspecfile=""
-	mycmdline=[]
-
-	# check preconditions
-	if len(opts) == 0:
-		print "!!! catalyst: please specify one of either -f or -C\n"
-		usage()
-		sys.exit(2)
-
-	options = set()
-
-	run = False
-	for o, a in opts:
-		if o in ("-h", "--help"):
-			version()
-			usage()
-			sys.exit(1)
+class FilePath(object):
+	"""Argparse type for getting a path to a file."""
 
-		if o in ("-V", "--version"):
-			print get_version()
-			sys.exit(1)
+	def __init__(self, exists=True):
+		self.exists = exists
 
-		if o in ("-d", "--debug"):
-			conf_values["DEBUG"] = True
-			conf_values["VERBOSE"] = True
+	def __call__(self, string):
+		if not os.path.exists(string):
+			raise argparse.ArgumentTypeError('file does not exist: %s' % string)
+		return string
 
-		if o in ("-c", "--config"):
-			myconfig=a
+	def __repr__(self):
+		return '%s(exists=%s)' % (type(self).__name__, self.exists)
 
-		if o in ("-C", "--cli"):
-			run = True
-			x=sys.argv.index(o)+1
-			while x < len(sys.argv):
-				mycmdline.append(sys.argv[x])
-				x=x+1
 
-		if o in ("-f", "--file"):
-			run = True
-			myspecfile=a
+def get_parser():
+	"""Return an argument parser"""
+	epilog = """Usage examples:
 
-		if o in ("-F", "--fetchonly"):
-			options.add("fetch")
+Using the commandline option (-C, --cli) to build a Portage snapshot:
+$ catalyst -C target=snapshot version_stamp=my_date
 
-		if o in ("-v", "--verbose"):
-			conf_values["VERBOSE"]="1"
+Using the snapshot option (-s, --snapshot) to build a release snapshot:
+$ catalyst -s 20071121
 
-		if o in ("-s", "--snapshot"):
-			if len(sys.argv) < 3:
-				print "!!! catalyst: missing snapshot identifier\n"
-				usage()
-				sys.exit(2)
-			else:
-				run = True
-				mycmdline.append("target=snapshot")
-				mycmdline.append("version_stamp="+a)
+Using the specfile option (-f, --file) to build a stage target:
+$ catalyst -f stage1-specfile.spec"""
+
+	parser = argparse.ArgumentParser(epilog=epilog, formatter_class=argparse.RawDescriptionHelpFormatter)
+	parser.add_argument('-d', '--debug',
+		default=False, action='store_true',
+		help='enable debugging')
+	parser.add_argument('-v', '--verbose',
+		default=False, action='store_true',
+		help='verbose output')
+	parser.add_argument('-c', '--config',
+		type=FilePath(),
+		help='use specified configuration file')
+	parser.add_argument('-f', '--file',
+		type=FilePath(),
+		help='read specfile')
+	parser.add_argument('-F', '--fetchonly',
+		default=False, action='store_true',
+		help='fetch files only')
+	parser.add_argument('-a', '--clear-autoresume',
+		default=False, action='store_true',
+		help='clear autoresume flags')
+	parser.add_argument('-p', '--purge',
+		default=False, action='store_true',
+		help='clear tmp dirs, package cache, autoresume flags')
+	parser.add_argument('-P', '--purgeonly',
+		default=False, action='store_true',
+		help='clear tmp dirs, package cache, autoresume flags and exit')
+	parser.add_argument('-T', '--purgetmponly',
+		default=False, action='store_true',
+		help='clear tmp dirs and autoresume flags and exit')
+	parser.add_argument('-s', '--snapshot',
+		help='generate a release snapshot')
+	parser.add_argument('-V', '--version',
+		action='version', version=get_version(),
+		help='display version information')
+	parser.add_argument('-C', '--cli',
+		default=[], nargs=argparse.REMAINDER,
+		help='catalyst commandline (MUST BE LAST OPTION)')
+	return parser
 
-		if o in ("-p", "--purge"):
-			options.add("purge")
 
-		if o in ("-P", "--purgeonly"):
-			options.add("purgeonly")
+def main():
+	parser = get_parser()
+	opts = parser.parse_args(sys.argv[1:])
 
-		if o in ("-T", "--purgetmponly"):
-			options.add("purgetmponly")
+	# Parse the command line options.
+	myconfig = opts.config
+	myspecfile = opts.file
+	mycmdline = opts.cli[:]
 
-		if o in ("-a", "--clear-autoresume"):
-			options.add("clear-autoresume")
+	if opts.snapshot:
+		mycmdline.append('target=snapshot')
+		mycmdline.append('version_stamp=' + opts.snapshot)
 
-	#print "MAIN: cli options =", options
+	conf_values['DEBUG'] = opts.debug
+	conf_values['VERBOSE'] = opts.debug or opts.verbose
 
-	if not run:
-		print "!!! catalyst: please specify one of either -f or -C\n"
-		usage()
-		sys.exit(2)
+	options = set()
+	if opts.fetchonly:
+		options.add('fetch')
+	if opts.purge:
+		options.add('purge')
+	if opts.purgeonly:
+		options.add('purgeonly')
+	if opts.purgetmponly:
+		options.add('purgetmponly')
+	if opts.clear_autoresume:
+		options.add('clear-autoresume')
+
+	# Make sure we have some work before moving further.
+	if not myspecfile and not mycmdline:
+		parser.error('please specify one of either -f or -C or -s')
 
 	# made it this far so start by outputting our version info
 	version()


             reply	other threads:[~2015-10-06 17:03 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-06 17:03 Mike Frysinger [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-10-12 12:44 [gentoo-commits] proj/catalyst:master commit in: catalyst/ Andreas K. Hüttel
2024-07-30 11:08 Andreas K. Hüttel
2022-11-20  0:21 [gentoo-commits] proj/catalyst:wip/mattst88 " Matt Turner
2022-11-17 23:42 ` [gentoo-commits] proj/catalyst:master " Matt Turner
2022-02-16 22:34 Matt Turner
2021-06-11  3:30 Matt Turner
2021-06-10  0:48 [gentoo-commits] proj/catalyst:wip/mattst88 " Matt Turner
2021-02-20 21:27 ` [gentoo-commits] proj/catalyst:master " Matt Turner
2021-02-20 21:27 Matt Turner
2021-01-29 23:50 [gentoo-commits] proj/catalyst:wip/mattst88 " Matt Turner
2021-01-28  2:41 ` [gentoo-commits] proj/catalyst:master " Matt Turner
2020-11-14 16:37 Matt Turner
2020-10-30 22:41 Matt Turner
2020-10-30 22:41 Matt Turner
2020-10-08 21:17 Matt Turner
2020-06-05 21:13 Matt Turner
2020-05-21 20:26 Matt Turner
2020-05-21 20:25 Matt Turner
2020-05-21 20:25 Matt Turner
2020-05-21 20:25 Matt Turner
2020-05-20  3:39 [gentoo-commits] proj/catalyst:pending/mattst88 " Matt Turner
2020-05-21 20:25 ` [gentoo-commits] proj/catalyst:master " Matt Turner
2020-05-20  1:52 [gentoo-commits] proj/catalyst:wip/mattst88 " Matt Turner
2020-05-21 20:25 ` [gentoo-commits] proj/catalyst:master " Matt Turner
2020-05-20  1:52 [gentoo-commits] proj/catalyst:wip/mattst88 " Matt Turner
2020-05-21 20:25 ` [gentoo-commits] proj/catalyst:master " Matt Turner
2020-05-20  1:52 [gentoo-commits] proj/catalyst:wip/mattst88 " Matt Turner
2020-05-21 20:25 ` [gentoo-commits] proj/catalyst:master " Matt Turner
2020-05-20  1:52 [gentoo-commits] proj/catalyst:wip/mattst88 " Matt Turner
2020-05-21 20:25 ` [gentoo-commits] proj/catalyst:master " Matt Turner
2020-04-30 22:56 Matt Turner
2020-04-30 22:56 Matt Turner
2020-04-30 22:56 Matt Turner
2020-04-22  5:52 Matt Turner
2020-04-22  5:52 Matt Turner
2020-04-22  5:52 Matt Turner
2020-04-17 19:52 Matt Turner
2020-04-17 19:52 Matt Turner
2020-04-10 21:04 Matt Turner
2019-10-20  0:00 Matt Turner
2019-08-26 16:52 Matt Turner
2019-06-16 18:35 Matt Turner
2019-02-05  3:02 Matt Turner
2018-10-02 15:57 Brian Dolbec
2018-10-01 16:30 Brian Dolbec
2018-09-12  6:43 Brian Dolbec
2018-07-21 18:54 Brian Dolbec
2017-12-30 18:25 Brian Dolbec
2017-12-29  2:27 Brian Dolbec
2017-12-29  0:35 Brian Dolbec
2017-12-07  7:24 Brian Dolbec
2017-12-07  7:21 Brian Dolbec
2017-12-06 18:51 Robin H. Johnson
2017-11-22 15:52 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2017-11-29 17:20 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2017-03-14 20:52 Mike Frysinger
2016-06-25 15:46 Brian Dolbec
2016-05-22  3:48 Mike Frysinger
2016-05-22  3:36 Mike Frysinger
2016-02-17  5:26 Brian Dolbec
2016-02-11 13:59 Mike Frysinger
2016-02-02  6:11 Brian Dolbec
2016-02-02  6:11 Brian Dolbec
2015-12-18  1:53 Mike Frysinger
2015-12-18  1:53 Mike Frysinger
2015-11-21  1:33 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-11-09  2:06 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-10-29  0:28 Mike Frysinger
2015-10-28 16:50 Mike Frysinger
2015-10-28 16:50 Mike Frysinger
2015-10-24  6:58 Mike Frysinger
2015-10-24  6:58 Mike Frysinger
2015-10-24  6:58 Mike Frysinger
2015-10-11 17:26 Mike Frysinger
2015-10-11 17:26 Mike Frysinger
2015-10-09 21:06 Mike Frysinger
2015-10-09 21:06 Mike Frysinger
2015-10-09 21:06 Mike Frysinger
2015-10-09 20:08 Mike Frysinger
2015-10-09 19:35 Mike Frysinger
2015-10-09 19:35 Mike Frysinger
2015-10-09 19:35 Mike Frysinger
2015-10-08 22:20 Mike Frysinger
2015-10-08 22:11 Mike Frysinger
2015-10-08 17:19 Mike Frysinger
2015-10-06 17:03 Mike Frysinger
2015-10-06 15:31 Mike Frysinger
2015-10-06 15:31 Mike Frysinger
2015-10-06 15:31 Mike Frysinger
2015-10-06 15:31 Mike Frysinger
2015-10-06 13:46 Mike Frysinger
2015-10-06 13:46 Mike Frysinger
2015-10-06 13:46 Mike Frysinger
2015-10-06 13:46 Mike Frysinger
2015-10-06 13:46 Mike Frysinger
2015-09-08 14:14 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-09-08 14:17 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-09-06 21:21 Brian Dolbec
2015-09-06 21:18 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-09-06 21:21 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-09-01  5:58 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-09-01  4:50 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-09-01  5:58 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-09-01  4:50 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-09-01  4:50 Brian Dolbec
2015-08-31  3:16 Richard Farina
2015-08-30 20:58 Brian Dolbec
2015-08-30  2:15 Brian Dolbec
2015-08-29 16:20 Brian Dolbec
2015-08-29 16:11 Brian Dolbec
2015-08-29 14:41 Brian Dolbec
2015-05-24  0:08 Brian Dolbec
2015-02-26 20:44 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-02-26 22:18 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-02-26 20:44 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-02-26 22:18 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-02-26 19:25 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-02-26 20:12 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-02-26  4:12 Brian Dolbec
2015-01-01  5:59 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-02-26  4:12 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-01-01  5:59 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-02-26 20:12 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-01-01  5:59 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-02-26  4:12 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-01-01  5:59 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-02-26  4:12 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2015-01-01  5:59 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2015-02-26  4:12 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2014-09-11  3:26 Brian Dolbec
2014-09-11  3:26 Brian Dolbec
2014-05-05 19:17 Brian Dolbec
2014-04-02 20:09 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2014-05-05 19:17 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2014-04-02 20:09 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2014-05-05 19:17 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2014-04-02 20:09 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2014-05-05 19:17 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec
2014-03-22 22:25 [gentoo-commits] proj/catalyst:pending " Brian Dolbec
2014-03-02 22:55 ` [gentoo-commits] proj/catalyst:master " Brian Dolbec

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1444149230.5d42738fb733ecb3fb92b69bb85f17a36bef60b7.vapier@gentoo \
    --to=vapier@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox