From cc11ada6b8871d7719fd0ea8a2ff382bba8a3bc2 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Fri, 9 Aug 2013 14:37:05 -0400 Subject: Options: reparse all arguments on each pass This ensures that required positional arguments are handled properly. If we only reparse the remaining arguments -- i.e., those that were not understood on previous passes -- then we may parse out all of the positional arguments on the first pass, and then on a subsequent pass parse_known_args() will fail because the positional argument is not provided. --- src/lib/Bcfg2/Options/Parser.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'src/lib/Bcfg2/Options') diff --git a/src/lib/Bcfg2/Options/Parser.py b/src/lib/Bcfg2/Options/Parser.py index b956ca089..343399db9 100644 --- a/src/lib/Bcfg2/Options/Parser.py +++ b/src/lib/Bcfg2/Options/Parser.py @@ -204,16 +204,12 @@ class Parser(argparse.ArgumentParser): while not self.parsed: self.parsed = True self._set_defaults() - remaining = self.parse_known_args(args=remaining, - namespace=self.namespace)[1] + self.parse_known_args(namespace=self.namespace)[1] self._parse_config_options() self._finalize() - - # phase 3: parse command line for real, with all components - # loaded and all options known self._parse_config_options() - # phase 4: fix up macros + # phase 3: fix up macros repo = getattr(self.namespace, "repository", repository.default) for attr in dir(self.namespace): value = getattr(self.namespace, attr) @@ -221,7 +217,7 @@ class Parser(argparse.ArgumentParser): setattr(self.namespace, attr, value.replace("", repo, 1)) - # phase 5: call post-parsing hooks + # phase 4: call post-parsing hooks for component in self.components: if hasattr(component, "options_parsed_hook"): getattr(component, "options_parsed_hook")() -- cgit v1.2.3-1-g7c22