diff options
author | skyostil@chromium.org <skyostil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-13 15:45:03 +0000 |
---|---|---|
committer | skyostil@chromium.org <skyostil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-13 15:45:03 +0000 |
commit | 40455399832889018e8071818b16cd7059ae01e0 (patch) | |
tree | 81307a092c3af0914a3ba4b2b5c76dd29fa88285 /tools/cr | |
parent | 3aef9d102783cad2d044734abdbba54cb2704f44 (diff) | |
download | chromium_src-40455399832889018e8071818b16cd7059ae01e0.zip chromium_src-40455399832889018e8071818b16cd7059ae01e0.tar.gz chromium_src-40455399832889018e8071818b16cd7059ae01e0.tar.bz2 |
cr: Print a list of closest matching targets when no match is found
When the user passes in an invalid target name, print a list of closest
matches as a hint:
$ cr build chromium_test_shell
Invalid target chromium_test_shell as chromium_test_shell
Did you mean chromium_testshell, libchromiumtestshell or chromium_testshell_paks?
NOTRY=true
Review URL: https://codereview.chromium.org/136553002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@244507 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/cr')
-rw-r--r-- | tools/cr/cr/actions/builder.py | 7 | ||||
-rw-r--r-- | tools/cr/cr/targets/target.py | 5 |
2 files changed, 12 insertions, 0 deletions
diff --git a/tools/cr/cr/actions/builder.py b/tools/cr/cr/actions/builder.py index 74959af..286d2ec 100644 --- a/tools/cr/cr/actions/builder.py +++ b/tools/cr/cr/actions/builder.py @@ -4,6 +4,8 @@ """A module for the Builder base class.""" +import difflib + import cr @@ -56,6 +58,11 @@ class Builder(cr.Action, cr.Plugin.Type): """Check if a target name is on the builder knows about.""" return target_name in self.GetTargets(context) + @cr.Plugin.activemethod + def GuessTargets(self, context, target_name): + """Returns a list of closest matching targets for a named target.""" + return difflib.get_close_matches(target_name, self.GetTargets(context)) + class SkipBuilder(Builder): """The "skip" version of a Builder, causes the build step to be skipped.""" diff --git a/tools/cr/cr/targets/target.py b/tools/cr/cr/targets/target.py index e02bdb0..0780ae9 100644 --- a/tools/cr/cr/targets/target.py +++ b/tools/cr/cr/targets/target.py @@ -117,6 +117,11 @@ class Target(cr.Config, cr.AutoExport): if not target.valid: print 'Invalid target {0} as {1}'.format( target_name, target.build_target) + guesses = cr.Builder.GuessTargets(context, target_name) + if guesses: + print 'Did you mean {0}?'.format( + ', '.join(guesses[:-1]) + ' or ' + guesses[-1] + if len(guesses) > 1 else guesses[0]) exit(1) return target print 'Unknown target {0}'.format(target_name) |