Tue Mar 11 17:41:45 2014 UTC ()
Add patch to avoid exception in git browser.

The underlying issue seems to be a race; if the spawned git log
command finishes before trac kills it, the os.kill() throws an
exception which is not caught.  Simply catch and ignore the exception.
I sent the patch to trac-devel@.


(gdt)
diff -r1.63 -r1.64 pkgsrc/www/trac/Makefile
diff -r1.32 -r1.33 pkgsrc/www/trac/distinfo
diff -r0 -r1.1 pkgsrc/www/trac/patches/patch-tracopt_versioncontrol_git_PyGIT.py

cvs diff -r1.63 -r1.64 pkgsrc/www/trac/Makefile (expand / switch to context diff)
--- pkgsrc/www/trac/Makefile 2014/01/25 10:45:22 1.63
+++ pkgsrc/www/trac/Makefile 2014/03/11 17:41:44 1.64
@@ -1,7 +1,8 @@
-# $NetBSD: Makefile,v 1.63 2014/01/25 10:45:22 wiz Exp $
+# $NetBSD: Makefile,v 1.64 2014/03/11 17:41:44 gdt Exp $
 
 DISTNAME=	Trac-1.0.1
 PKGNAME=	${DISTNAME:tl}
+PKGREVISION=	1
 CATEGORIES=	devel www
 MASTER_SITES=	http://ftp.edgewall.org/pub/trac/ \
 		ftp://ftp.edgewall.org/pub/trac/

cvs diff -r1.32 -r1.33 pkgsrc/www/trac/distinfo (expand / switch to context diff)
--- pkgsrc/www/trac/distinfo 2014/01/21 22:29:33 1.32
+++ pkgsrc/www/trac/distinfo 2014/03/11 17:41:44 1.33
@@ -1,5 +1,6 @@
-$NetBSD: distinfo,v 1.32 2014/01/21 22:29:33 gdt Exp $
+$NetBSD: distinfo,v 1.33 2014/03/11 17:41:44 gdt Exp $
 
 SHA1 (Trac-1.0.1.tar.gz) = b4fffeb171a64299597be616002aee44054673f6
 RMD160 (Trac-1.0.1.tar.gz) = db9abe8f7e52b28aa933187fd2be40bb4a544617
 Size (Trac-1.0.1.tar.gz) = 3479896 bytes
+SHA1 (patch-tracopt_versioncontrol_git_PyGIT.py) = e0ccdbe2c6a0dc83009460a214763d9d5eccdf04

File Added: pkgsrc/www/trac/patches/Attic/patch-tracopt_versioncontrol_git_PyGIT.py
$NetBSD: patch-tracopt_versioncontrol_git_PyGIT.py,v 1.1 2014/03/11 17:41:44 gdt Exp $

The git browser can fail if the git log process has already exited when
trac tries to terminate it (resulting in a python exception).

This patch should be applied upstream; Reported to trac-devel@ on 2014-03-11.

--- tracopt/versioncontrol/git/PyGIT.py.orig	2013-02-01 00:47:41.000000000 +0000
+++ tracopt/versioncontrol/git/PyGIT.py
@@ -913,7 +913,11 @@ class Storage(object):
                         except ValueError:
                             break
             f.close()
-            terminate(p[0])
+            # The process may or may not have finished.
+            try:
+                terminate(p[0])
+            except:
+                pass
             p[0].wait()
             p[:] = []
             while True:
@@ -930,7 +934,10 @@ class Storage(object):
 
         if p:
             p[0].stdout.close()
-            terminate(p[0])
+            try:
+                terminate(p[0])
+            except:
+                pass
             p[0].wait()
 
     def last_change(self, sha, path, historian=None):