Changeset 1083

Show
Ignore:
Timestamp:
08/03/06 17:27:56 (2 years ago)
Author:
eblot
Message:

SvnCcHelpersScript:

  • Add a new feature to hide the dead/terminated branches
  • Several additional bug fixes
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • svncchelpersscript/0.10/revtree/revtree/templates/revtree.cs

    r967 r1083  
    7979      revisions on top</label> 
    8080   </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> 
    8188  </fieldset> 
    8289  <div class="buttons"> 
  • svncchelpersscript/0.10/revtree/revtree/view.py

    r1056 r1083  
    5555        return self._changeset.revision 
    5656 
     57    def branchname(self): 
     58        """Returns the name of the branch the changset belongs to""" 
     59        return self._changeset.branchname 
     60 
    5761    def operation_widget(self): 
    5862        """Provides the operation widget, i.e. the widget representation 
     
    98102        return "none" 
    99103 
    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""" 
    102106        url = "%s/changeset/%d" % (self._grapher.urlbase(), \ 
    103107                                   self._changeset.revision) 
     108        if linkparent: 
     109            url = "javascript:window.parent.location.href='%s'" % url 
    104110        log = self._changeset.log.replace('[[BR]]',' ').replace('\n',' ') 
    105111        log = log.replace('"',"'").replace('  ',' ') 
     
    161167        return self._branch 
    162168 
    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""" 
    165171        changesets = self._branch.changesets() 
    166172        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) \ 
    168187                  for c in inrngchgs] 
    169188        if not items: 
     
    177196                representation += "  %s\n" % transitions 
    178197         
    179         if len(inrngchgs) > 1 or inrngchgs[0].operation != Changeset.KILL
     198        if self.is_active(revrange)
    180199            url = "%s/browser%s%s" % (self._grapher.urlbase(),  
    181200                                      self._branch.name(),  
    182201                                      inrngchgs[-1].topdir) 
     202            if linkparent: 
     203                url = "javascript:window.parent.location.href='%s'" % url 
    183204            if inrngchgs[-1].operation == Changeset.KILL and \ 
    184205               len(inrngchgs) > 1: 
     
    247268        # Environment 
    248269        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) 
    251273        # Destination changeset (final end point of the changeset) 
    252274        self._dst = dst 
     
    270292 
    271293    def render(self, revrange=None, reverse=False): 
    272         """Returns a Graphviz representation of the widget""" 
     294        """Returns a Graphviz representation of the operation widget""" 
    273295        if revrange: 
    274296            src = [chg for chg in self._src if \ 
     
    369391            self._branch_widgets[b] = branchwdgt 
    370392 
    371     def render(self, reverse=False): 
     393    def render(self, reverse=False, hidetermbranch=False, linkparent=False): 
    372394        """Returns the graphviz data""" 
    373395        gviz = 'digraph versiontree {\n' 
     
    377399                'margin="0.05,0.05"]\n' 
    378400        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) 
    381408            brname = bwdgt.branch().name() 
    382409            if brname not in branchnames: 
    383410                branchnames.append(brname) 
    384         rankbranches = [brwdgt.id() for brwdgt in self._branch_widgets.values()
     411        rankbranches = [brwdgt.id() for brwdgt in branchwidgets
    385412                        if brwdgt.is_visible(self._revrange)] 
    386413        gviz += '{ rank = same; %s }' % '; '.join(rankbranches) 
     
    391418                if revision < rmin or revision > rmax: 
    392419                    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 
    393429            opwdgt = cwdgt.operation_widget() 
    394430            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  
    396436                if [name for name in branchnames \ 
    397437                    for srcname in srcnames if name == srcname]: 
  • svncchelpersscript/0.10/revtree/revtree/web_ui.py

    r1056 r1083  
    4848        self['author'] = user or self.anyauthor 
    4949        self['btup'] = '1' 
     50        self['hideterm'] = '1' 
    5051        self['nocache'] = '' 
    5152 
     
    5354        """Returns the sequence of supported fields""" 
    5455        return [ 'revmin', 'revmax', 'period', 'branch', 'author', 
    55                  'limits', 'btup'
     56                 'limits', 'btup', 'hideterm'
    5657         
    5758    def load(self, session): 
     
    9192            self.revrange = (int(self['revmin']), int(self['revmax'])) 
    9293        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 
    9599        else: 
    96100            self.revrange = self.revspan 
    97         self.env.log.debug("REVRANGE %d:%d" % 
    98                            (self.revrange[0], self.revrange[1])) 
    99101 
    100102    def can_be_rendered(self): 
     
    286288    def _get_cache_name(self, revtree): 
    287289        """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) 
    293296        sha_key  = sha.new(id).hexdigest() 
    294297        img_name = '%s.revtree' % (sha_key) 
     
    360363            props['branches'] = branches 
    361364            props['authors'] = authors 
    362             image_re = re.compile('<img\sid="(.*?)"') 
     365            image_re = re.compile('<object data="(.*?)"') 
    363366            mo = image_re.search(content) 
    364367            if mo: 
     
    413416        if revtree['author'] != revtree.anyauthor: 
    414417            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']) 
    422418        for b in brnames: 
    423419            if brfilter and brfilter != b: 
     
    429425            gvizbranches = trunks 
    430426            gvizbranches.extend(branches) 
    431         self.env.log.debug("gvizbranches: %s" % gvizbranches) 
    432427        repwdgt = RepositoryWidget(self.env, repos, req.base_url) 
    433428        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') 
    435432        macro = 'graphviz.%s/%s' % (self.image_engine, img_kind) 
    436433        wiki = WikiSystem(self.env) 
  • svncchelpersscript/0.10/revtree/setup.py

    r1057 r1083  
    1616 
    1717PACKAGE = 'TracRevisionTree' 
    18 VERSION = '0.2.7
     18VERSION = '0.3.0
    1919 
    2020setup(