# This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # trac-announcer # trac-announcer/Makefile # trac-announcer/pkg-descr # trac-announcer/distinfo # trac-announcer/files # trac-announcer/files/patch-old-ticket-link-style # trac-announcer/files/patch-mail-dont-encode-ascii-headers # echo c - trac-announcer mkdir -p trac-announcer > /dev/null 2>&1 echo x - trac-announcer/Makefile sed 's/^X//' >trac-announcer/Makefile << '4191deb4b14f33f5f7f510320a1a8136' X# New ports collection makefile for: trac-autocomplete X# Date created: December 23, 2009 X# Whom: Eygene Ryabinkin X# X# $FreeBSD$ X# X XPORTNAME= announcer XPORTVERSION= 1.0 XCATEGORIES= www python XMASTER_SITES= http://dist.codelabs.ru/fbsd/ XPKGNAMEPREFIX= trac- XDISTNAME= announcerplugin-r${REL} X XMAINTAINER= rea-fbsd@codelabs.ru XCOMMENT= A plugin for making user-customizable notifications X XBUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}Babel>=0.9:${PORTSDIR}/devel/py-babel XRUN_DEPENDS+= trac>=0.11:${PORTSDIR}/www/trac X XUSE_PYTHON= 2.5+ XUSE_ZIP= yes XUSE_PYDISTUTILS= yes XPYDISTUTILS_PKGNAME= AnnouncerPlugin XPYDISTUTILS_NOEGGINFO= yes X XWRKSRC= ${WRKDIR}/announcerplugin/trunk XREL= 8411 XEGG_VER= 0.12_p2.dev X XPLIST_SUB+= PORTVERSION=${PORTVERSION:S/.a/_a/} \ X PYTHONVERSION=${_PYTHON_VERSION} XPLIST_FILES+= %%PYTHON_SITELIBDIR%%/AnnouncerPlugin-${EGG_VER}-py%%PYTHONVERSION%%.egg X X# We must fix file permissions -- ZIP file have 0000 for every file. X# Directory permissions are fine (they aren't stored inside ZIP X# file), but we set them too -- just in case. Xpost-extract: X @${FIND} ${WRKSRC} -type f | ${XARGS} chmod 644 X @${FIND} ${WRKSRC} -type d | ${XARGS} chmod 755 X X# Build phase: create locale stuff Xbuild: configure X cd ${WRKSRC} && ${PYTHON_CMD} setup.py compile_catalog X X.include 4191deb4b14f33f5f7f510320a1a8136 echo x - trac-announcer/pkg-descr sed 's/^X//' >trac-announcer/pkg-descr << 'd5b2bd71903c359ac5e7c1f04ab04fd5' XThe AnnouncerPlugin is meant to provide an extensible, Xuser-customizable notification system that can be used Xto completely replace Trac's default notifications. X XWWW: http://trac-hacks.org/wiki/AnnouncertPlugin d5b2bd71903c359ac5e7c1f04ab04fd5 echo x - trac-announcer/distinfo sed 's/^X//' >trac-announcer/distinfo << '7eb8bb3a4fa59f0fbba92a88826d11d1' XMD5 (announcerplugin-r8411.zip) = 9bce5288566802a5a85c85868876c19c XSHA256 (announcerplugin-r8411.zip) = d67bc92713733205babf0c3437910c7dc72424d73597913199808df14efefb27 XSIZE (announcerplugin-r8411.zip) = 121238 7eb8bb3a4fa59f0fbba92a88826d11d1 echo c - trac-announcer/files mkdir -p trac-announcer/files > /dev/null 2>&1 echo x - trac-announcer/files/patch-old-ticket-link-style sed 's/^X//' >trac-announcer/files/patch-old-ticket-link-style << 'fa56cf01c268e5cb817c949bf7d71fb2' X--- ./announcer/formatters/ticket.py.orig 2010-09-10 19:37:52.000000000 +0400 X+++ ./announcer/formatters/ticket.py 2010-09-10 21:03:38.000000000 +0400 X@@ -36,7 +36,7 @@ X from genshi.template import NewTextTemplate, MarkupTemplate X from genshi.template import TemplateLoader X X-from trac.config import Option, IntOption, ListOption X+from trac.config import Option, IntOption, ListOption, BoolOption X from trac.core import * X from trac.mimeview import Context X from trac.test import Mock, MockPerm X@@ -72,6 +72,11 @@ X 'owner, reporter, milestone, priority, severity', X doc="""Comma seperated list of fields to appear in tickets. X Use * to include all headers.""") X+ X+ ticket_link_with_comment = BoolOption('announcer', X+ 'ticket_link_with_comment', X+ 'false', X+ """Include last change anchor to the ticket URL.""") X X def styles(self, transport, realm): X if realm == "ticket": X@@ -89,6 +94,38 @@ X elif style == "text/html": X return self._format_html(event) X X+ def _ticket_link(self, ticket): X+ ticket_link = self.env.abs_href('ticket', ticket.id) X+ if self.ticket_link_with_comment == False: X+ return ticket_link X+ X+ cnum = self._ticket_last_comment(ticket) X+ if cnum != None: X+ ticket_link += "#comment:%s" % str(cnum) X+ X+ return ticket_link X+ X+ def _ticket_last_comment(self, ticket): X+ cnum = -1 X+ X+ for entry in ticket.get_changelog(): X+ (time, author, field, oldvalue, newvalue, permanent) = entry X+ if field != "comment": X+ continue X+ X+ try: X+ n = int(oldvalue) X+ except: X+ continue X+ X+ if cnum < n: X+ cnum = n X+ X+ if cnum == -1: X+ return None X+ else: X+ return cnum X+ X def _format_plaintext(self, event): X ticket = event.target X short_changes = {} X@@ -109,7 +146,7 @@ X comment = event.comment, X fields = self._header_fields(ticket), X category = event.category, X- ticket_link = self.env.abs_href('ticket', ticket.id), X+ ticket_link = self._ticket_link(ticket), X project_name = self.env.project_name, X project_desc = self.env.project_description, X project_link = self.env.project_url or self.env.abs_href(), X@@ -189,7 +226,7 @@ X fields = self._header_fields(ticket), X comment = temp, X category = event.category, X- ticket_link = self.env.abs_href('ticket', ticket.id), X+ ticket_link = self._ticket_link(ticket), X project_name = self.env.project_name, X project_desc = self.env.project_description, X project_link = self.env.project_url or self.env.abs_href(), fa56cf01c268e5cb817c949bf7d71fb2 echo x - trac-announcer/files/patch-mail-dont-encode-ascii-headers sed 's/^X//' >trac-announcer/files/patch-mail-dont-encode-ascii-headers << '3b0b8711e63fb00952c1f725fcc1d882' X--- announcer/util/mail.py.orig 2010-09-10 21:05:17.000000000 +0400 X+++ announcer/util/mail.py 2010-09-10 21:07:34.000000000 +0400 X@@ -48,7 +48,11 @@ X def set_header(message, key, value, charset=None): X if not charset: X charset = message.get_charset() or 'ascii' X- value = Header(value, charset, MAXHEADERLEN-(len(key)+2)) X+ # Don't encode pure ASCII headers. X+ try: X+ value = Header(value, 'ascii', MAXHEADERLEN-(len(key)+2)) X+ except: X+ value = Header(value, charset, MAXHEADERLEN-(len(key)+2)) X if message.has_key(key): X message.replace_header(key, value) X else: 3b0b8711e63fb00952c1f725fcc1d882 exit