In terms of adding "tail-like" functionality to Koji "watch-logs" sub-command:
https://fedorahosted.org/koji/ticket/41 https://fedorahosted.org/koji/ticket/76
$ ./koji-1.6.0/cli/koji watch-logs 3559606 --log=build.log --tail=10 Watching logs (this may be safely interrupted)... Wrote: /builddir/build/RPMS/calibre-0.8.29-1.fc15.i686.rpm Wrote: /builddir/build/RPMS/calibre-debuginfo-0.8.29-1.fc15.i686.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.RypJxm + umask 022 + cd /builddir/build/BUILD + cd calibre + /bin/rm -rf /builddir/build/BUILDROOT/calibre-0.8.29-1.fc15.i386 + exit 0 Child returncode was: 0 LEAVE do -->
$ diff -u /usr/bin/koji ./koji-1.6.0/cli/koji --- /usr/bin/koji 2010-12-16 16:13:17.000000000 -0500 +++ ./koji-1.6.0/cli/koji 2011-12-03 17:09:42.225650495 -0500 @@ -433,6 +433,7 @@ offsets[task_id] = {} lastlog = None + logline = "" while True: for task_id in tasklist[:]: if _isDone(session, task_id): @@ -458,15 +459,28 @@ currlog = "%d:%s:" % (task_id, log) if currlog != lastlog: if lastlog: - sys.stdout.write("\n") - sys.stdout.write("==> %s <==\n" % currlog) + logline += ("\n") + logline += ("==> %s <==\n" % currlog) lastlog = currlog - sys.stdout.write(contents) + logline += (contents) if not tasklist: break time.sleep(options.poll_interval) + + loglist = logline.strip("\n").split("\n") + endline = len(loglist) + try: + subvalue = int(opts.tail) + except: + subvalue = endline + if (subvalue > endline): + subvalue = endline + begline = (endline - subvalue) + for x in range(begline, endline): + print(loglist[x]) + except (KeyboardInterrupt): pass @@ -5083,6 +5097,7 @@ usage += _("\n(Specify the --help global option for a list of other help options)") parser = OptionParser(usage=usage) parser.add_option("--log", help=_("Watch only a specific log")) + parser.add_option("--tail", help=_("Watch only the last N lines")) (options, args) = parser.parse_args(args) activate_session(session)
buildsys@lists.fedoraproject.org