Ticket #1135: Timeline.py.diff
| File Timeline.py.diff, 7.8 KB (added by fog@…, 4 years ago) |
|---|
-
Timeline.
old new 35 35 template_rss_name = 'timeline_rss.cs' 36 36 37 37 def get_info (self, start, stop, maxrows, tickets, 38 changeset, wiki, milestone ):38 changeset, wiki, milestone, component, cfilter): 39 39 cursor = self.db.cursor () 40 40 41 41 tickets = tickets and self.perm.has_permission(perm.TICKET_VIEW) … … 53 53 WIKI = 5 54 54 MILESTONE = 6 55 55 56 try: 57 display_components = int(self.env.get_config('timeline', 'display_components', 0)) 58 except ValueError, e: 59 self.env.log.warning("Invalid 'display_components' value, " 60 "please edit trac.ini : %s" % e) 61 display_components = 0 62 63 try: 64 guess_component = int(self.env.get_config('timeline', 'changeset_guess_component', 0)) 65 except ValueError, e: 66 self.env.log.warning("Invalid 'changeset_guess_component' value, " 67 "please edit trac.ini : %s" % e) 68 guess_component = 0 69 56 70 q = [] 57 71 if changeset: 58 72 q.append("SELECT time, rev AS idata, '' AS tdata, 1 AS type, " 59 " message, author "73 " message, author, '' AS component " 60 74 "FROM revision WHERE time>=%s AND time<=%s" % 61 75 (start, stop)) 62 76 if tickets: 63 77 q.append("SELECT time, id AS idata, '' AS tdata, 2 AS type, " 64 "summary AS message, reporter AS author "78 "summary AS message, reporter AS author, component " 65 79 "FROM ticket WHERE time>=%s AND time<=%s" % 66 80 (start, stop)) 67 q.append("SELECT time, ticket AS idata, '' AS tdata, 4 AS type, " 68 "'' AS message, author " 69 "FROM ticket_change WHERE field='status' " 70 "AND newvalue='reopened' AND time>=%s AND time<=%s" % 81 q.append("SELECT t1.time, t1.ticket AS idata, '' AS tdata, 4 AS type, " 82 " '' AS message, t1.author, t2.component AS component " 83 "FROM ticket_change t1, ticket t2 " 84 "WHERE t1.field='status' " 85 " AND t1.newvalue='reopened' AND t1.ticket = t2.id " 86 " AND t1.time>=%s AND t1.time<=%s" % 71 87 (start, stop)) 72 88 q.append("SELECT t1.time AS time, t1.ticket AS idata," 73 89 " t2.newvalue AS tdata, 3 AS type," 74 " t3.newvalue AS message, t1.author AS author" 90 " t3.newvalue AS message, t1.author AS author," 91 " t4.component AS component" 75 92 " FROM ticket_change t1" 76 93 " INNER JOIN ticket_change t2 ON t1.ticket = t2.ticket" 77 94 " AND t1.time = t2.time" 78 " LEFT OUTER JOIN ticket_change t3 ON t1.time = t3.time" 95 " INNER JOIN ticket t4 ON t1.ticket = t4.id" 96 " LEFT OUTER JOIN ticket_change t3 ON t1.time = t3.time" 79 97 " AND t1.ticket = t3.ticket AND t3.field = 'comment'" 80 98 " WHERE t1.field = 'status' AND t1.newvalue = 'closed'" 81 99 " AND t2.field = 'resolution'" 82 100 " AND t1.time >= %s AND t1.time <= %s" % (start,stop)) 83 101 if wiki: 84 102 q.append("SELECT time, -1 AS idata, name AS tdata, 5 AS type, " 85 "comment AS message, author "103 "comment AS message, author, '' AS component " 86 104 "FROM wiki WHERE time>=%s AND time<=%s" % 87 105 (start, stop)) 88 106 if milestone: 89 107 q.append("SELECT time, -1 AS idata, '' AS tdata, 6 AS type, " 90 "name AS message, '' AS author "108 "name AS message, '' AS author, '' AS component " 91 109 "FROM milestone WHERE time>=%s AND time<=%s" % 92 110 (start, stop)) 93 111 … … 113 131 'tdata': row['tdata'], 114 132 'type': int(row['type']), 115 133 'message': row['message'] or '', 116 'author': util.escape(row['author'] or 'anonymous') 134 'author': util.escape(row['author'] or 'anonymous'), 135 'component': row['component'] or '' 117 136 } 118 137 119 138 if item['type'] == CHANGESET: 120 item['href'] = self.env.href.changeset(item['idata']) 139 changeset_component = '' 140 item['href'] = self.env.href.changeset(item['idata']) 121 141 msg = item['message'] 122 142 item['shortmsg'] = util.escape(util.shorten_line(msg)) 123 143 item['msg_nowiki'] = util.escape(msg) … … 134 154 self.env.log.warning("Invalid 'changeset_show_files' value, " 135 155 "please edit trac.ini : %s" % e) 136 156 max_node = 0 137 157 138 158 if max_node != 0: 139 159 cursor_node = self.db.cursor () 160 161 cursor_node.execute("SELECT name FROM component " 162 "ORDER BY name") 163 components = map(lambda x: x[0], cursor_node.fetchall()) 164 140 165 cursor_node.execute("SELECT name, change " 141 166 "FROM node_change WHERE rev=%d" % item['idata']) 142 167 node_list = '' … … 159 184 node_data = '<span class="diff-rem">' + row_node['name'] + "</span>" 160 185 node_list += node_data 161 186 node_count += 1 187 if guess_component and row_node['name'].split('/')[0] in components: 188 changeset_component = row_node['name'].split('/')[0] 162 189 item['node_list'] = node_list + ': ' 163 190 item['component'] = changeset_component; 191 164 192 elif item['type'] == WIKI: 165 193 item['href'] = self.env.href.wiki(row['tdata']) 166 194 item['message'] = wiki_to_oneliner(util.shorten_line(item['message']), … … 186 214 item['author.rss'] = '' 187 215 item['message.rss'] = util.escape(item['message'] or '') 188 216 189 info.append(item) 190 return info 217 if not component or item['component'] == '' or item['component'] == cfilter: 218 info.append(item) 219 220 # now, after appending, remove the component if asked for 221 if not display_components: 222 item['component'] = '' 223 224 return info 191 225 192 226 def render (self): 193 227 self.perm.assert_permission(perm.TIMELINE_VIEW) … … 223 257 ticket = self.args.has_key('ticket') 224 258 changeset = self.args.has_key('changeset') 225 259 milestone = self.args.has_key('milestone') 260 component = self.args.has_key('component') 261 226 262 if not (wiki or ticket or changeset or milestone): 227 263 wiki = ticket = changeset = milestone = 1 228 264 … … 234 270 self.req.hdf.setValue('timeline.changeset', 'checked') 235 271 if milestone: 236 272 self.req.hdf.setValue('timeline.milestone', 'checked') 237 273 if component: 274 self.req.hdf.setValue('timeline.component', 'checked') 275 276 if self.args.has_key('cfilter'): 277 cfilter = self.args['cfilter'] 278 else: 279 cfilter = '' 280 self.req.hdf.setValue('timeline.cfilter', cfilter) 281 238 282 info = self.get_info (start, stop, maxrows, ticket, 239 changeset, wiki, milestone )283 changeset, wiki, milestone, component, cfilter) 240 284 util.add_dictlist_to_hdf(info, self.req.hdf, 'timeline.items') 241 285 self.req.hdf.setValue('title', 'Timeline') 242 286 util.sql_to_hdf(self.db, 'SELECT name FROM component ORDER BY name', 287 self.req.hdf, 'timeline.components') 288 243 289 def display_rss(self): 244 290 self.req.display(self.template_rss_name, 'text/xml')
