Changeset 1083
- Timestamp:
- 08/03/06 17:27:56 (2 years ago)
- Files:
-
- svncchelpersscript/0.10/revtree/revtree/templates/revtree.cs (modified) (1 diff)
- svncchelpersscript/0.10/revtree/revtree/view.py (modified) (9 diffs)
- svncchelpersscript/0.10/revtree/revtree/web_ui.py (modified) (7 diffs)
- svncchelpersscript/0.10/revtree/setup.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
svncchelpersscript/0.10/revtree/revtree/templates/revtree.cs
r967 r1083 79 79 revisions on top</label> 80 80 </div> 81 <div class="field"> 82 <input type="hidden" name="checkbox_hideterm"> 83 <input type="checkbox" id="hideterm" 84 name="hideterm" <?cs if:revtree.hideterm 85 ?>checked="checked"<?cs /if ?> value="1"/><label for="hideterm">Hide 86 terminated branches</label> 87 </div> 81 88 </fieldset> 82 89 <div class="buttons"> svncchelpersscript/0.10/revtree/revtree/view.py
r1056 r1083 55 55 return self._changeset.revision 56 56 57 def branchname(self): 58 """Returns the name of the branch the changset belongs to""" 59 return self._changeset.branchname 60 57 61 def operation_widget(self): 58 62 """Provides the operation widget, i.e. the widget representation … … 98 102 return "none" 99 103 100 def render(self ):101 """Returns a Graphviz representation of the widget"""104 def render(self, linkparent=False): 105 """Returns a Graphviz representation of the changeset widget""" 102 106 url = "%s/changeset/%d" % (self._grapher.urlbase(), \ 103 107 self._changeset.revision) 108 if linkparent: 109 url = "javascript:window.parent.location.href='%s'" % url 104 110 log = self._changeset.log.replace('[[BR]]',' ').replace('\n',' ') 105 111 log = log.replace('"',"'").replace(' ',' ') … … 161 167 return self._branch 162 168 163 def render(self, revrange=None, reverse=False):164 """ Returns a Graphviz representation of the widget"""169 def is_active(self, revrange): 170 """Tells whether the branch still exist in the upper revision""" 165 171 changesets = self._branch.changesets() 166 172 inrngchgs = [c for c in changesets if self._inrange(c.revision, revrange)] 167 items = ["%s" % self._grapher.changeset_widget(c.revision).render() \ 173 if not inrngchgs: 174 return False 175 if inrngchgs[0].operation == Changeset.KILL: 176 return False 177 if inrngchgs[-1].operation == Changeset.KILL: 178 return False 179 return True 180 #return len(inrngchgs) > 1 181 182 def render(self, revrange=None, reverse=False, linkparent=False): 183 """Returns a Graphviz representation of the branch widget""" 184 changesets = self._branch.changesets() 185 inrngchgs = [c for c in changesets if self._inrange(c.revision, revrange)] 186 items = ["%s" % self._grapher.changeset_widget(c.revision).render(linkparent) \ 168 187 for c in inrngchgs] 169 188 if not items: … … 177 196 representation += " %s\n" % transitions 178 197 179 if len(inrngchgs) > 1 or inrngchgs[0].operation != Changeset.KILL:198 if self.is_active(revrange): 180 199 url = "%s/browser%s%s" % (self._grapher.urlbase(), 181 200 self._branch.name(), 182 201 inrngchgs[-1].topdir) 202 if linkparent: 203 url = "javascript:window.parent.location.href='%s'" % url 183 204 if inrngchgs[-1].operation == Changeset.KILL and \ 184 205 len(inrngchgs) > 1: … … 247 268 # Environment 248 269 self.env = env 249 # Source changeset (initial end point of the changeset) 250 self._src = src 270 # Source changesets (initial end points of the changeset), 271 # discards out-of-range source end points 272 self._src = filter(None, src) 251 273 # Destination changeset (final end point of the changeset) 252 274 self._dst = dst … … 270 292 271 293 def render(self, revrange=None, reverse=False): 272 """Returns a Graphviz representation of the widget"""294 """Returns a Graphviz representation of the operation widget""" 273 295 if revrange: 274 296 src = [chg for chg in self._src if \ … … 369 391 self._branch_widgets[b] = branchwdgt 370 392 371 def render(self, reverse=False ):393 def render(self, reverse=False, hidetermbranch=False, linkparent=False): 372 394 """Returns the graphviz data""" 373 395 gviz = 'digraph versiontree {\n' … … 377 399 'margin="0.05,0.05"]\n' 378 400 branchnames = [] 379 for bwdgt in self._branch_widgets.values(): 380 gviz += ' %s\n' % bwdgt.render(self._revrange, reverse) 401 if hidetermbranch: 402 branchwidgets = filter(lambda x: x.is_active(self._revrange), 403 self._branch_widgets.values()) 404 else: 405 branchwidgets = self._branch_widgets.values() 406 for bwdgt in branchwidgets: 407 gviz += ' %s\n' % bwdgt.render(self._revrange, reverse, linkparent) 381 408 brname = bwdgt.branch().name() 382 409 if brname not in branchnames: 383 410 branchnames.append(brname) 384 rankbranches = [brwdgt.id() for brwdgt in self._branch_widgets.values()\411 rankbranches = [brwdgt.id() for brwdgt in branchwidgets \ 385 412 if brwdgt.is_visible(self._revrange)] 386 413 gviz += '{ rank = same; %s }' % '; '.join(rankbranches) … … 391 418 if revision < rmin or revision > rmax: 392 419 continue 420 if hidetermbranch: 421 # check whether the branch of the destination widget 422 # is still active 423 branch = self.repository().branch(cwdgt.branchname()) 424 if branch: 425 chgsets = branch.changesets() 426 if chgsets: 427 if chgsets[-1].operation == Changeset.KILL: 428 continue 393 429 opwdgt = cwdgt.operation_widget() 394 430 if opwdgt: 395 srcnames = [src.branchname for src in opwdgt.sources()] 431 try: 432 srcnames = [src.branchname for src in opwdgt.sources()] 433 except AttributeError, e: 434 self.env.log.warn("Attribute error at changeset %s" % cwdgt.id()) 435 raise AttributeError, e 396 436 if [name for name in branchnames \ 397 437 for srcname in srcnames if name == srcname]: svncchelpersscript/0.10/revtree/revtree/web_ui.py
r1056 r1083 48 48 self['author'] = user or self.anyauthor 49 49 self['btup'] = '1' 50 self['hideterm'] = '1' 50 51 self['nocache'] = '' 51 52 … … 53 54 """Returns the sequence of supported fields""" 54 55 return [ 'revmin', 'revmax', 'period', 'branch', 'author', 55 'limits', 'btup' ]56 'limits', 'btup', 'hideterm' ] 56 57 57 58 def load(self, session): … … 91 92 self.revrange = (int(self['revmin']), int(self['revmax'])) 92 93 elif self['limits'] == 'limperiod': 93 self.revrange = repos.get_revisions_by_date((int(self['period']),\ 94 0)) 94 period = int(self['period']) 95 if period: 96 self.revrange = repos.get_revisions_by_date((period, 0)) 97 else: 98 self.revrange = self.revspan 95 99 else: 96 100 self.revrange = self.revspan 97 self.env.log.debug("REVRANGE %d:%d" %98 (self.revrange[0], self.revrange[1]))99 101 100 102 def can_be_rendered(self): … … 286 288 def _get_cache_name(self, revtree): 287 289 """Generates a unique filename for the current revtree""" 288 id = "%d-%d-%s-%s-%d" % (revtree.revrange[0], \ 289 revtree.revrange[1], \ 290 revtree['branch'] or ' ', \ 291 revtree['author'] or ' ', \ 292 revtree['btup'] != '0' and 1 or 0) 290 id = "%d-%d-%s-%s-%d-%d" % (revtree.revrange[0], \ 291 revtree.revrange[1], \ 292 revtree['branch'] or ' ', \ 293 revtree['author'] or ' ', \ 294 revtree['btup'] != '0' and 1 or 0, \ 295 revtree['hideterm'] != '0' and 1 or 0) 293 296 sha_key = sha.new(id).hexdigest() 294 297 img_name = '%s.revtree' % (sha_key) … … 360 363 props['branches'] = branches 361 364 props['authors'] = authors 362 image_re = re.compile('< img\sid="(.*?)"')365 image_re = re.compile('<object data="(.*?)"') 363 366 mo = image_re.search(content) 364 367 if mo: … … 413 416 if revtree['author'] != revtree.anyauthor: 414 417 authfilter = revtree['author'] 415 self.env.log.debug("brnames: %s" % brnames)416 self.env.log.debug("authors: %s" % authors)417 self.env.log.debug("revtree branch: %s (%s)" % (revtree['branch'], revtree.anybranch))418 self.env.log.debug("revtree author: %s (%s)" % (revtree['author'], revtree.anyauthor))419 self.env.log.debug("brfilter: %s" % brfilter)420 self.env.log.debug("authfilter: %s" % authfilter)421 self.env.log.debug("btup: %s" % revtree['btup'])422 418 for b in brnames: 423 419 if brfilter and brfilter != b: … … 429 425 gvizbranches = trunks 430 426 gvizbranches.extend(branches) 431 self.env.log.debug("gvizbranches: %s" % gvizbranches)432 427 repwdgt = RepositoryWidget(self.env, repos, req.base_url) 433 428 repwdgt.build(revtree.revrange, gvizbranches, authors) 434 gviz = repwdgt.render(revtree['btup'] != '0') 429 gviz = repwdgt.render(revtree['btup'] != '0', 430 revtree['hideterm'] != '0', 431 img_kind == 'svg') 435 432 macro = 'graphviz.%s/%s' % (self.image_engine, img_kind) 436 433 wiki = WikiSystem(self.env) svncchelpersscript/0.10/revtree/setup.py
r1057 r1083 16 16 17 17 PACKAGE = 'TracRevisionTree' 18 VERSION = '0. 2.7'18 VERSION = '0.3.0' 19 19 20 20 setup(
