* [PATCH 0/2] Show close matches for invalid task/target
@ 2013-08-13 14:18 Paul Eggleton
2013-08-13 14:18 ` [PATCH 1/2] runqueue: report close matches for an invalid task name Paul Eggleton
2013-08-13 14:18 ` [PATCH 2/2] taskdata: report close matches with NoProvider errors Paul Eggleton
0 siblings, 2 replies; 5+ messages in thread
From: Paul Eggleton @ 2013-08-13 14:18 UTC (permalink / raw)
To: bitbake-devel
The following changes (against poky, but apply cleanly with -p2 against
bitbake master) are available in the git repository at:
git://git.yoctoproject.org/poky-contrib paule/closematch
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=paule/closematch
Paul Eggleton (2):
runqueue: report close matches for an invalid task name
taskdata: report close matches with NoProvider errors
bitbake/lib/bb/event.py | 3 ++-
bitbake/lib/bb/runqueue.py | 6 +++++-
bitbake/lib/bb/taskdata.py | 13 ++++++++++++-
bitbake/lib/bb/ui/crumbs/runningbuild.py | 10 ++++++++--
bitbake/lib/bb/ui/knotty.py | 9 +++++++--
5 files changed, 34 insertions(+), 7 deletions(-)
--
1.8.1.2
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] runqueue: report close matches for an invalid task name
2013-08-13 14:18 [PATCH 0/2] Show close matches for invalid task/target Paul Eggleton
@ 2013-08-13 14:18 ` Paul Eggleton
2013-08-13 20:18 ` Richard Purdie
2013-08-13 14:18 ` [PATCH 2/2] taskdata: report close matches with NoProvider errors Paul Eggleton
1 sibling, 1 reply; 5+ messages in thread
From: Paul Eggleton @ 2013-08-13 14:18 UTC (permalink / raw)
To: bitbake-devel
Help to pick up mistakes such as "bitbake -c cleanstate xyz" (instead
of "bitbake -c cleansstate xyz".)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
bitbake/lib/bb/runqueue.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index b2c9703..b3374f1 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -601,7 +601,11 @@ class RunQueueData:
continue
if target[1] not in taskData.tasks_lookup[fnid]:
- bb.msg.fatal("RunQueue", "Task %s does not exist for target %s" % (target[1], target[0]))
+ import difflib
+ close_matches = difflib.get_close_matches(target[1], taskData.tasks_lookup[fnid], cutoff=0.7)
+ if close_matches:
+ extra = ". Close matches:\n %s" % "\n ".join(close_matches)
+ bb.msg.fatal("RunQueue", "Task %s does not exist for target %s%s" % (target[1], target[0], extra))
listid = taskData.tasks_lookup[fnid][target[1]]
--
1.8.1.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] taskdata: report close matches with NoProvider errors
2013-08-13 14:18 [PATCH 0/2] Show close matches for invalid task/target Paul Eggleton
2013-08-13 14:18 ` [PATCH 1/2] runqueue: report close matches for an invalid task name Paul Eggleton
@ 2013-08-13 14:18 ` Paul Eggleton
1 sibling, 0 replies; 5+ messages in thread
From: Paul Eggleton @ 2013-08-13 14:18 UTC (permalink / raw)
To: bitbake-devel
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>
---
bitbake/lib/bb/event.py | 3 ++-
bitbake/lib/bb/taskdata.py | 13 ++++++++++++-
bitbake/lib/bb/ui/crumbs/runningbuild.py | 10 ++++++++--
bitbake/lib/bb/ui/knotty.py | 9 +++++++--
4 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py
index 9c134ee..ba25d38 100644
--- a/bitbake/lib/bb/event.py
+++ b/bitbake/lib/bb/event.py
@@ -341,12 +341,13 @@ class DiskFull(Event):
class NoProvider(Event):
"""No Provider for an Event"""
- def __init__(self, item, runtime=False, dependees=None, reasons=[]):
+ def __init__(self, item, runtime=False, dependees=None, reasons=[], close_matches=[]):
Event.__init__(self)
self._item = item
self._runtime = runtime
self._dependees = dependees
self._reasons = reasons
+ self._close_matches = close_matches
def getItem(self):
return self._item
diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py
index c08186a..58fe199 100644
--- a/bitbake/lib/bb/taskdata.py
+++ b/bitbake/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):
diff --git a/bitbake/lib/bb/ui/crumbs/runningbuild.py b/bitbake/lib/bb/ui/crumbs/runningbuild.py
index 78fa141..abd3300 100644
--- a/bitbake/lib/bb/ui/crumbs/runningbuild.py
+++ b/bitbake/lib/bb/ui/crumbs/runningbuild.py
@@ -375,10 +375,16 @@ class RunningBuild (gobject.GObject):
r = "R"
else:
r = ""
+
+ extra = ''
+ if not event._reasons:
+ if event._close_matches:
+ extra = ". Close matches:\n %s" % '\n '.join(event._close_matches)
+
if event._dependees:
- msg = "Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)\n" % (r, event._item, ", ".join(event._dependees), r)
+ msg = "Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)%s\n" % (r, event._item, ", ".join(event._dependees), r, extra)
else:
- msg = "Nothing %sPROVIDES '%s'\n" % (r, event._item)
+ msg = "Nothing %sPROVIDES '%s'%s\n" % (r, event._item, extra)
if event._reasons:
for reason in event._reasons:
msg += ("%s\n" % reason)
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py
index 2c8293d..09ad99e 100644
--- a/bitbake/lib/bb/ui/knotty.py
+++ b/bitbake/lib/bb/ui/knotty.py
@@ -416,10 +416,15 @@ def main(server, eventHandler, params, tf = TerminalFilter):
else:
r = ""
+ extra = ''
+ if not event._reasons:
+ if event._close_matches:
+ extra = ". Close matches:\n %s" % '\n '.join(event._close_matches)
+
if event._dependees:
- logger.error("Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)", r, event._item, ", ".join(event._dependees), r)
+ logger.error("Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)%s", r, event._item, ", ".join(event._dependees), r, extra)
else:
- logger.error("Nothing %sPROVIDES '%s'", r, event._item)
+ logger.error("Nothing %sPROVIDES '%s'%s", r, event._item, extra)
if event._reasons:
for reason in event._reasons:
logger.error("%s", reason)
--
1.8.1.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] runqueue: report close matches for an invalid task name
2013-08-13 14:18 ` [PATCH 1/2] runqueue: report close matches for an invalid task name Paul Eggleton
@ 2013-08-13 20:18 ` Richard Purdie
2013-08-13 20:46 ` Paul Eggleton
0 siblings, 1 reply; 5+ messages in thread
From: Richard Purdie @ 2013-08-13 20:18 UTC (permalink / raw)
To: Paul Eggleton; +Cc: bitbake-devel
On Tue, 2013-08-13 at 15:18 +0100, Paul Eggleton wrote:
> Help to pick up mistakes such as "bitbake -c cleanstate xyz" (instead
> of "bitbake -c cleansstate xyz".)
>
> Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
> ---
> bitbake/lib/bb/runqueue.py | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
> index b2c9703..b3374f1 100644
> --- a/bitbake/lib/bb/runqueue.py
> +++ b/bitbake/lib/bb/runqueue.py
> @@ -601,7 +601,11 @@ class RunQueueData:
> continue
>
> if target[1] not in taskData.tasks_lookup[fnid]:
> - bb.msg.fatal("RunQueue", "Task %s does not exist for target %s" % (target[1], target[0]))
> + import difflib
> + close_matches = difflib.get_close_matches(target[1], taskData.tasks_lookup[fnid], cutoff=0.7)
> + if close_matches:
> + extra = ". Close matches:\n %s" % "\n ".join(close_matches)
> + bb.msg.fatal("RunQueue", "Task %s does not exist for target %s%s" % (target[1], target[0], extra))
Missing else: extra = ""?
Cheers,
Richard
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] runqueue: report close matches for an invalid task name
2013-08-13 20:18 ` Richard Purdie
@ 2013-08-13 20:46 ` Paul Eggleton
0 siblings, 0 replies; 5+ messages in thread
From: Paul Eggleton @ 2013-08-13 20:46 UTC (permalink / raw)
To: Richard Purdie; +Cc: bitbake-devel
On Tuesday 13 August 2013 21:18:18 Richard Purdie wrote:
> On Tue, 2013-08-13 at 15:18 +0100, Paul Eggleton wrote:
> > Help to pick up mistakes such as "bitbake -c cleanstate xyz" (instead
> > of "bitbake -c cleansstate xyz".)
> >
> > Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
> > ---
> >
> > bitbake/lib/bb/runqueue.py | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
> > index b2c9703..b3374f1 100644
> > --- a/bitbake/lib/bb/runqueue.py
> > +++ b/bitbake/lib/bb/runqueue.py
> >
> > @@ -601,7 +601,11 @@ class RunQueueData:
> > continue
> >
> > if target[1] not in taskData.tasks_lookup[fnid]:
> > - bb.msg.fatal("RunQueue", "Task %s does not exist for
> > target %s" % (target[1], target[0])) + import difflib
> > + close_matches = difflib.get_close_matches(target[1],
> > taskData.tasks_lookup[fnid], cutoff=0.7) + if
> > close_matches:
> > + extra = ". Close matches:\n %s" % "\n
> > ".join(close_matches) + bb.msg.fatal("RunQueue", "Task %s
> > does not exist for target %s%s" % (target[1], target[0], extra))
> Missing else: extra = ""?
Oops. Fixed on the branch.
Thanks,
Paul
--
Paul Eggleton
Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-08-13 20:46 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-13 14:18 [PATCH 0/2] Show close matches for invalid task/target Paul Eggleton
2013-08-13 14:18 ` [PATCH 1/2] runqueue: report close matches for an invalid task name Paul Eggleton
2013-08-13 20:18 ` Richard Purdie
2013-08-13 20:46 ` Paul Eggleton
2013-08-13 14:18 ` [PATCH 2/2] taskdata: report close matches with NoProvider errors Paul Eggleton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox