root/backrefpatch/0.11/backref.patch
| Revision 3372, 9.8 kB (checked in by nferchen, 10 months ago) |
|---|
-
trac/ticket/web_ui.py
old new 476 476 # Store a timestamp for detecting "mid air collisions" 477 477 'timestamp': str(ticket.time_changed)}) 478 478 479 data['backrefs'] = self._get_backrefs(context, ticket) 480 479 481 self._insert_ticket_data(req, ticket, data, 480 482 get_reporter_id(req, 'author'), field_changes) 481 483 … … 1000 1002 for key in field_changes: 1001 1003 ticket[key] = field_changes[key]['new'] 1002 1004 1005 def _get_backrefs(self, context, ticket): 1006 id = ticket.id 1007 cursor = context.db.cursor() 1008 refs = [] 1009 1010 cursor.execute("SELECT 'ticket', id, description " 1011 "FROM ticket WHERE description LIKE '%%#%s%%' " 1012 " OR description LIKE '%%ticket:%s%%' " 1013 "UNION " 1014 "SELECT 'ticket', t.id, newvalue " 1015 "FROM ticket_change c JOIN ticket t on c.ticket = t.id " 1016 "WHERE newvalue LIKE '%%#%s%%' " 1017 " OR newvalue LIKE '%%ticket:%s%%' " 1018 "UNION " 1019 "SELECT 'changeset', rev, message " 1020 "FROM revision WHERE message LIKE '%%#%s%%' " 1021 " OR message LIKE '%%ticket:%s%%' " 1022 "UNION " 1023 "SELECT 'wiki', name, text " 1024 "FROM wiki WHERE (text LIKE '%%#%s%%' " 1025 " OR text LIKE '%%ticket:%s%%') " 1026 "AND version = (SELECT max(version) FROM wiki w " 1027 " WHERE w.name = wiki.name) " 1028 "ORDER BY 1 desc, 2" 1029 % ((id,) * 8)) 1030 1031 for idx, row in enumerate(cursor): 1032 rtyp, rid, text = row 1033 # check whether the link is an single word 1034 if re.search(r"(\W|^)#%s(\W|$)" % id, text): 1035 refs.append(context(rtyp, rid)) 1036 return refs 1037 1003 1038 def _prepare_fields(self, req, ticket): 1004 1039 context = Context.from_request(req, ticket.resource) 1005 1040 fields = [] -
trac/ticket/templates/ticket.html
old new 186 186 </div> 187 187 <br py:if="not ticket.description" style="clear: both" /> 188 188 </div> 189 190 <div py:if="backrefs"> 191 <div class="description"> 192 <h3 id="comment:bakref">Referenced by</h3> 193 <div class="searchable"> 194 <py:for each="ref in backrefs"> 195 <a class="new ticket" 196 href="${ref.resource_href(q='#%i ticket:%i' % ((ticket.id, )*2))}" 197 title="${[ref.summary(),''][ref.summary()==ref.shortname()]}" 198 >${ref.shortname()}</a> 199 </py:for> 200 </div> 201 </div> 202 </div> 203 189 204 </div> 190 205 </fieldset> 191 206 <!--! End of ticket box --> -
trac/versioncontrol/web_ui/changeset.py
old new 611 611 info = None 612 612 changes.append(info) # the sequence should be immutable 613 613 614 data['backrefs'] = self._get_backrefs(context, rev) 615 614 616 data.update({'has_diffs': has_diffs, 'changes': changes, 'xhr': xhr, 615 617 'filestats': filestats, 'annotated': annotated, 616 618 'files': files, 'location': self._get_location(files), … … 931 933 old=data['old_rev']) + query 932 934 return tag.a(label, class_="changeset", title=title, href=href) 933 935 936 def _get_backrefs(self, context, rev): 937 cursor = context.db.cursor() 938 refs = [] 939 940 cursor.execute("SELECT 'ticket', id, description " 941 "FROM ticket WHERE description LIKE '%%[%s]%%' " 942 " OR description LIKE '%%r%s%%' " 943 " OR description LIKE '%%changeset:%s%%' " 944 "UNION " 945 "SELECT 'ticket', t.id, newvalue " 946 "FROM ticket_change c JOIN ticket t on c.ticket = t.id " 947 "WHERE newvalue LIKE '%%[%s%%' " 948 " OR newvalue LIKE '%%r:%s%%' " 949 " OR newvalue LIKE '%%changeset:%s%%' " 950 "UNION " 951 "SELECT 'changeset', rev, message " 952 "FROM revision WHERE message LIKE '%%[%s]%%' " 953 " OR message LIKE '%%r:%s%%' " 954 " OR message LIKE '%%changeset:%s%%' " 955 "UNION " 956 "SELECT 'wiki', name, text " 957 "FROM wiki WHERE (text LIKE '%%[%s]%%' " 958 " OR text LIKE '%%r:%s%%' " 959 " OR text LIKE '%%changeset:%s%%' ) " 960 " AND version = (SELECT max(version) FROM wiki w " 961 " WHERE w.name = wiki.name) " 962 "ORDER BY 1 desc, 2" 963 % ((rev,) * 12)) 964 965 for idx, row in enumerate(cursor): 966 rtyp, rid, text = row 967 # check whether the link is an single word 968 if re.search(r"(\W|^)(\[|r:|changeset:)%s\]?(\W|$)" % id, text) or 1: 969 refs.append(context(rtyp, rid)) 970 return refs 971 934 972 # ISearchSource methods 935 973 936 974 def get_search_filters(self, req): -
trac/versioncontrol/templates/changeset.html
old new 116 116 </py:when> 117 117 <py:otherwise><pre>${changeset.message}</pre></py:otherwise> 118 118 </dd> 119 120 <py:if test="backrefs"> 121 <dt class="property message">Referenced by:</dt> 122 <dd class="message searchable"> 123 <py:for each="ref in backrefs"> 124 <a class="new ticket" 125 href="${ref.resource_href(q='[%i] r%i changeset:%i' % ((context.id,)*3))}" 126 title="${[ref.summary(),''][ref.summary()==ref.shortname()]}" 127 >${ref.shortname()}</a> 128 </py:for> 129 </dd> 130 </py:if> 131 119 132 </py:if> 120 133 <py:if test="location and len(files) > 1"> 121 134 <dt class="property location">Location:</dt> -
trac/wiki/web_ui.py
old new 491 491 WikiSystem(self.env).get_pages(prefix) if 492 492 'WIKI_VIEW' in req.perm('wiki', template)] 493 493 494 data['backrefs'] = self._get_backrefs(context, page) 495 494 496 # -- prev/up/next links 495 497 if prev_version: 496 498 add_link(req, 'prev', … … 532 534 action='diff', 533 535 version=page.version)) 534 536 537 def _get_backrefs(self, context, page): 538 id = page.id 539 cursor = context.db.cursor() 540 refs = [] 541 542 cursor.execute("SELECT 'ticket', id, description " 543 "FROM ticket WHERE description LIKE '%%%s%%' " 544 "UNION " 545 "SELECT 'ticket', t.id, newvalue " 546 "FROM ticket_change c JOIN ticket t on c.ticket = t.id " 547 "WHERE newvalue LIKE '%%%s%%' " 548 "UNION " 549 "SELECT 'changeset', rev, message " 550 "FROM revision WHERE message LIKE '%%%s%%' " 551 "UNION " 552 "SELECT 'wiki', name, text " 553 "FROM wiki WHERE text LIKE '%%%s%%' " 554 "AND version = (SELECT max(version) FROM wiki w " 555 " WHERE w.name = wiki.name) " 556 "ORDER BY 1 desc, 2" 557 % ((id,) * 4)) 558 559 for idx, row in enumerate(cursor): 560 rtyp, rid, text = row 561 # check whether the link is an single word 562 if re.search(r"(\W|^)(wiki:)?%s(\W|$)" % id, text): 563 refs.append(context(rtyp, rid)) 564 return refs 565 535 566 # ITimelineEventProvider methods 536 567 537 568 def get_timeline_filters(self, req): -
trac/wiki/templates/wiki_view.html
old new 43 43 44 44 ${list_of_attachments(attachments, compact=True)} 45 45 46 <py:if test="backrefs"> 47 <p>Referenced by: 48 <py:for each="ref in backrefs"> 49 <a class="new ticket" 50 href="${ref.resource_href(q=context.id)}" 51 title="${[ref.summary(),''][ref.summary()==ref.shortname()]}" 52 >${ref.shortname()}</a> 53 </py:for></p> 54 </py:if> 55 46 56 <py:with vars="modify_perm = 'WIKI_MODIFY' in perm(page.resource); 47 57 delete_perm = 'WIKI_DELETE' in perm(page.resource); 48 58 admin_perm = 'WIKI_ADMIN' in perm(page.resource)">
Note: See TracBrowser for help on using the browser.
