Edgewall Software

Ticket #7715: 7715-optimize-eligible-r8342.diff

File 7715-optimize-eligible-r8342.diff, 2.0 KB (added by cboos, 3 years ago)

A hopefully faster way to compute eligible changesets, patch on 0.11.5rc1

  • trac/versioncontrol/svn_fs.py

     
    786786        return fs.node_prop(self.root, self._scoped_path_utf8, name, 
    787787                            self.pool()) 
    788788 
     789    def get_branch_origin(self): 
     790        root_and_path = fs.closest_copy(self.root, self._scoped_path_utf8) 
     791        if root_and_path: 
     792            return fs.revision_root_revision(root_path[0]) 
     793 
    789794    def get_copy_ancestry(self): 
    790795        ancestors = [] 
    791796        previous = (self._scoped_path_utf8, self._requested_rev, self.root) 
  • trac/versioncontrol/svn_prop.py

     
    142142                                               spath, revs)] 
    143143                    if has_eligible: 
    144144                        first_rev = branch_starts.get(spath) 
    145                         eligible = set(repos._get_node_revs(spath, target_rev, 
    146                                                             first_rev)) 
     145                        if not first_rev: 
     146                            first_rev = node.get_branch_origin() 
     147                        eligible = set(xrange(first_rev or 1, target_rev)) 
    147148                        eligible -= set(Ranges(revs)) 
    148149                        blocked = self._get_blocked_revs(props, name, spath) 
    149150                        eligible -= set(Ranges(blocked)) 
     151                        if eligible: 
     152                            noderevs = repos._get_node_revs(spath, target_rev,  
     153                                                            min(eligible)) 
     154                            eligible &= set(noderevs) 
    150155                        eligible = to_ranges(eligible) 
    151156                        row.append(self._get_revs_link(_('eligible'), context, 
    152157                                                       spath, eligible))