summaryrefslogtreecommitdiffstats
path: root/tools/cr
diff options
context:
space:
mode:
authorskyostil@chromium.org <skyostil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-13 15:45:03 +0000
committerskyostil@chromium.org <skyostil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-13 15:45:03 +0000
commit40455399832889018e8071818b16cd7059ae01e0 (patch)
tree81307a092c3af0914a3ba4b2b5c76dd29fa88285 /tools/cr
parent3aef9d102783cad2d044734abdbba54cb2704f44 (diff)
downloadchromium_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.py7
-rw-r--r--tools/cr/cr/targets/target.py5
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)