diff options
Diffstat (limited to 'bitbake/lib/bb/progress.py')
| -rw-r--r-- | bitbake/lib/bb/progress.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/bitbake/lib/bb/progress.py b/bitbake/lib/bb/progress.py index ee6b9536b8..343b18f8c4 100644 --- a/bitbake/lib/bb/progress.py +++ b/bitbake/lib/bb/progress.py | |||
| @@ -58,6 +58,37 @@ class ProgressHandler(object): | |||
| 58 | self._lastevent = ts | 58 | self._lastevent = ts |
| 59 | self._progress = progress | 59 | self._progress = progress |
| 60 | 60 | ||
| 61 | class LineFilterProgressHandler(ProgressHandler): | ||
| 62 | """ | ||
| 63 | A ProgressHandler variant that provides the ability to filter out | ||
| 64 | the lines if they contain progress information. Additionally, it | ||
| 65 | filters out anything before the last line feed on a line. This can | ||
| 66 | be used to keep the logs clean of output that we've only enabled for | ||
| 67 | getting progress, assuming that that can be done on a per-line | ||
| 68 | basis. | ||
| 69 | """ | ||
| 70 | def __init__(self, d, outfile=None): | ||
| 71 | self._linebuffer = '' | ||
| 72 | super(LineFilterProgressHandler, self).__init__(d, outfile) | ||
| 73 | |||
| 74 | def write(self, string): | ||
| 75 | self._linebuffer += string | ||
| 76 | while True: | ||
| 77 | breakpos = self._linebuffer.find('\n') + 1 | ||
| 78 | if breakpos == 0: | ||
| 79 | break | ||
| 80 | line = self._linebuffer[:breakpos] | ||
| 81 | self._linebuffer = self._linebuffer[breakpos:] | ||
| 82 | # Drop any line feeds and anything that precedes them | ||
| 83 | lbreakpos = line.rfind('\r') + 1 | ||
| 84 | if lbreakpos: | ||
| 85 | line = line[lbreakpos:] | ||
| 86 | if self.writeline(line): | ||
| 87 | super(LineFilterProgressHandler, self).write(line) | ||
| 88 | |||
| 89 | def writeline(self, line): | ||
| 90 | return True | ||
| 91 | |||
| 61 | class BasicProgressHandler(ProgressHandler): | 92 | class BasicProgressHandler(ProgressHandler): |
| 62 | def __init__(self, d, regex=r'(\d+)%', outfile=None): | 93 | def __init__(self, d, regex=r'(\d+)%', outfile=None): |
| 63 | super(BasicProgressHandler, self).__init__(d, outfile) | 94 | super(BasicProgressHandler, self).__init__(d, outfile) |
