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)