diff --git a/tools/patman/README b/tools/patman/README index 16b51eb..2743da9 100644 --- a/tools/patman/README +++ b/tools/patman/README @@ -98,6 +98,22 @@ The checkpatch.pl in the U-Boot tools/ subdirectory will be located and used. Failing that you can put it into your path or ~/bin/checkpatch.pl +If you want to change the defaults for patman's command-line arguments, +you can add a [settings] section to your .patman file. This can be used +for any command line option by referring to the "dest" for the option in +patman.py. For reference, the useful ones (at the moment) shown below +(all with the non-default setting): + +>>> + +[settings] +ignore_errors: True +process_tags: False +verbose: True + +<<< + + How to run it ============= diff --git a/tools/patman/gitutil.py b/tools/patman/gitutil.py index 41a74a5..ca3ba4a 100644 --- a/tools/patman/gitutil.py +++ b/tools/patman/gitutil.py @@ -384,8 +384,6 @@ def GetDefaultUserEmail(): def Setup(): """Set up git utils, by reading the alias files.""" - settings.Setup('') - # Check for a git alias file also alias_fname = GetAliasFile() if alias_fname: diff --git a/tools/patman/patman.py b/tools/patman/patman.py index 4181d80..b327c67 100755 --- a/tools/patman/patman.py +++ b/tools/patman/patman.py @@ -34,6 +34,7 @@ import checkpatch import command import gitutil import patchstream +import settings import terminal import test @@ -64,6 +65,8 @@ parser.usage = """patman [options] Create patches from commits in a branch, check them and email them as specified by tags you place in the commits. Use -n to """ + +settings.Setup(parser, '') (options, args) = parser.parse_args() # Run our meagre tests diff --git a/tools/patman/settings.py b/tools/patman/settings.py index 4dda17b..5208f7d 100644 --- a/tools/patman/settings.py +++ b/tools/patman/settings.py @@ -88,13 +88,43 @@ def CreatePatmanConfigFile(config_fname): print >>f, "[alias]\nme: %s <%s>" % (name, email) f.close(); -def Setup(config_fname=''): +def _UpdateDefaults(parser, config): + """Update the given OptionParser defaults based on config. + + We'll walk through all of the settings from the parser + For each setting we'll look for a default in the option parser. + If it's found we'll update the option parser default. + + The idea here is that the .patman file should be able to update + defaults but that command line flags should still have the final + say. + + Args: + parser: An instance of an OptionParser whose defaults will be + updated. + config: An instance of SafeConfigParser that we will query + for settings. + """ + defaults = parser.get_default_values() + for name, val in config.items('settings'): + if hasattr(defaults, name): + default_val = getattr(defaults, name) + if isinstance(default_val, bool): + val = config.getboolean('settings', name) + elif isinstance(default_val, int): + val = config.getint('settings', name) + parser.set_default(name, val) + else: + print "WARNING: Unknown setting %s" % name + +def Setup(parser, config_fname=''): """Set up the settings module by reading config files. Args: + parser: The parser to update config_fname: Config filename to read ('' for default) """ - settings = ConfigParser.SafeConfigParser() + config = ConfigParser.SafeConfigParser() if config_fname == '': config_fname = '%s/.patman' % os.getenv('HOME') @@ -102,11 +132,12 @@ def Setup(config_fname=''): print "No config file found ~/.patman\nCreating one...\n" CreatePatmanConfigFile(config_fname) - settings.read(config_fname) + config.read(config_fname) - for name, value in settings.items('alias'): + for name, value in config.items('alias'): alias[name] = value.split(',') + _UpdateDefaults(parser, config) # These are the aliases we understand, indexed by alias. Each member is a list. alias = {}