[bitbake-devel] [PATCH] bitbake: knotty: Simplify footer tasklist generation
Ola x Nilsson
ola.x.nilsson at axis.com
Wed Feb 21 10:25:49 UTC 2018
Instead of using a string for tasks without progressbar and a tuple
for tasks with progressbar, collect the necessary state in a
namedtuple.
Only have two string variants instead of three, and get elapsed time
for tasks with progressbar.
Signed-off-by: Ola x Nilsson <olani at axis.com>
---
bitbake/lib/bb/ui/knotty.py | 52 ++++++++++++++++++++++-----------------------
1 file changed, 25 insertions(+), 27 deletions(-)
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py
index fa88e6ccdd..896baf2e86 100644
--- a/bitbake/lib/bb/ui/knotty.py
+++ b/bitbake/lib/bb/ui/knotty.py
@@ -32,6 +32,7 @@ import fcntl
import struct
import copy
import atexit
+from collections import namedtuple
from bb.ui import uihelper
@@ -239,29 +240,24 @@ class TerminalFilter(object):
self.clearFooter()
if (not self.helper.tasknumber_total or self.helper.tasknumber_current == self.helper.tasknumber_total) and not len(activetasks):
return
+ Task = namedtuple('task', 'title pid starttime progress pbar rate')
tasks = []
- for t in runningpids:
- progress = activetasks[t].get("progress", None)
+ for pid in runningpids:
+ title = activetasks[pid]["title"]
+ start_time = activetasks[pid].get("starttime", None)
+ progress = activetasks[pid].get("progress", None)
+ pbar = progress and activetasks[pid].get("progressbar", None)
+ rate = progress and activetasks[pid].get("rate", None)
if progress is not None:
- pbar = activetasks[t].get("progressbar", None)
- rate = activetasks[t].get("rate", None)
- start_time = activetasks[t].get("starttime", None)
if not pbar or pbar.bouncing != (progress < 0):
if progress < 0:
- pbar = BBProgress("0: %s (pid %s) " % (activetasks[t]["title"], t), 100, widgets=[progressbar.BouncingSlider(), ''], extrapos=2, resize_handler=self.sigwinch_handle)
+ pbar = BBProgress(title, 100, widgets=[progressbar.BouncingSlider(), ''], extrapos=2, resize_handler=self.sigwinch_handle)
pbar.bouncing = True
else:
- pbar = BBProgress("0: %s (pid %s) " % (activetasks[t]["title"], t), 100, widgets=[progressbar.Percentage(), ' ', progressbar.Bar(), ''], extrapos=4, resize_handler=self.sigwinch_handle)
+ pbar = BBProgress(title, 100, widgets=[progressbar.Percentage(), ' ', progressbar.Bar(), ''], extrapos=4, resize_handler=self.sigwinch_handle)
pbar.bouncing = False
- activetasks[t]["progressbar"] = pbar
- tasks.append((pbar, progress, rate, start_time))
- else:
- start_time = activetasks[t].get("starttime", None)
- if start_time:
- tasks.append("%s - %ds (pid %s)" % (activetasks[t]["title"], currenttime - start_time, t))
- else:
- tasks.append("%s (pid %s)" % (activetasks[t]["title"], t))
-
+ activetasks[pid]["progressbar"] = pbar
+ tasks.append(Task(title, pid, start_time, progress, pbar, rate))
if self.main.shutdown:
content = "Waiting for %s running tasks to finish:" % len(activetasks)
print(content)
@@ -286,21 +282,23 @@ class TerminalFilter(object):
lines = 1 + int(len(content) / (self.columns + 1))
if self.quiet == 0:
for tasknum, task in enumerate(tasks[:(self.rows - 2)]):
- if isinstance(task, tuple):
- pbar, progress, rate, start_time = task
- if not pbar.start_time:
- pbar.start(False)
+ if task.starttime:
+ content = "%s: %s - %ds (pid %d)" % (tasknum, task.title, currenttime - task.starttime, task.pid)
+ else:
+ content = "%s: %s (pid %d)" % (tasknum, task.title, task.pid)
+ if task.pbar:
+ if not task.pbar.start_time:
+ task.pbar.start(False)
if start_time:
- pbar.start_time = start_time
- pbar.setmessage('%s:%s' % (tasknum, pbar.msg.split(':', 1)[1]))
- if progress > -1:
- pbar.setextra(rate)
- content = pbar.update(progress)
+ task.pbar.start_time = start_time
+ task.pbar.setmessage(content)
+ if task.progress > -1:
+ task.pbar.setextra(task.rate)
+ content = task.pbar.update(task.progress)
else:
- content = pbar.update(1)
+ content = task.pbar.update(1)
print('')
else:
- content = "%s: %s" % (tasknum, task)
print(content)
lines = lines + 1 + int(len(content) / (self.columns + 1))
self.footer_present = lines
--
2.11.0
More information about the bitbake-devel
mailing list