aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bb/taskdata.py
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2013-08-09 13:52:05 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-08-16 11:19:16 +0100
commited81b0856b4a3892b53d39871eaaa6273390ea75 (patch)
treed6b746af60fea3d012eb1d8589d01736fa540cfd /lib/bb/taskdata.py
parent15c3db1cffdffd85641c6b12e77f19ce7a553472 (diff)
downloadbitbake-ed81b0856b4a3892b53d39871eaaa6273390ea75.tar.gz
taskdata: report close matches with NoProvider errors
Assuming there is no known reason why an item is not provided, show close matches on the assumption that it might have been a typo or other mistake. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/taskdata.py')
-rw-r--r--lib/bb/taskdata.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/bb/taskdata.py b/lib/bb/taskdata.py
index c08186a71..58fe1995f 100644
--- a/lib/bb/taskdata.py
+++ b/lib/bb/taskdata.py
@@ -390,6 +390,17 @@ class TaskData:
reasons.append("%s PROVIDES %s but was skipped: %s" % (skipitem.pn, item, skipitem.skipreason))
return reasons
+ def get_close_matches(self, item, provider_list):
+ import difflib
+ if self.skiplist:
+ skipped = []
+ for fn in self.skiplist:
+ skipped.append(self.skiplist[fn].pn)
+ full_list = provider_list + skipped
+ else:
+ full_list = provider_list
+ return difflib.get_close_matches(item, full_list, cutoff=0.7)
+
def add_provider(self, cfgData, dataCache, item):
try:
self.add_provider_internal(cfgData, dataCache, item)
@@ -411,7 +422,7 @@ class TaskData:
return
if not item in dataCache.providers:
- bb.event.fire(bb.event.NoProvider(item, dependees=self.get_dependees_str(item), reasons=self.get_reasons(item)), cfgData)
+ bb.event.fire(bb.event.NoProvider(item, dependees=self.get_dependees_str(item), reasons=self.get_reasons(item), close_matches=self.get_close_matches(item, dataCache.providers.keys())), cfgData)
raise bb.providers.NoProvider(item)
if self.have_build_target(item):