From ed81b0856b4a3892b53d39871eaaa6273390ea75 Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Fri, 9 Aug 2013 13:52:05 +0000 Subject: 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 Signed-off-by: Richard Purdie --- lib/bb/taskdata.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'lib/bb/taskdata.py') 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): -- cgit 1.2.3-korg