Edgewall Software

Ticket #1271: limited-sync.diff

File limited-sync.diff, 2.9 KB (added by Manuzhai, 3 years ago)

Sorry, wrong file. Here's the diff.

  • cache.py

     
    4242        return CachedChangeset(self.repos.normalize_rev(rev), self.db, 
    4343                               self.authz) 
    4444 
    45     def sync(self): 
     45    def sync(self, first = None, last = None): 
    4646        self.log.debug("Checking whether sync with repository is needed") 
    4747        cursor = self.db.cursor() 
    4848 
     
    5959                              "a 'trac-admin resync' operation is needed.") 
    6060 
    6161        youngest_stored = self.repos.get_youngest_rev_in_cache(self.db) 
    62  
    63         if youngest_stored != str(self.repos.youngest_rev): 
     62        if youngest_stored != str(self.repos.youngest_rev) or first or last: 
    6463            authz = self.repos.authz 
    6564            self.repos.authz = Authorizer() # remove permission checking 
    6665 
    6766            kindmap = dict(zip(_kindmap.values(), _kindmap.keys())) 
    6867            actionmap = dict(zip(_actionmap.values(), _actionmap.keys())) 
    69             self.log.info("Syncing with repository (%s to %s)" 
    70                           % (youngest_stored, self.repos.youngest_rev)) 
    71             if youngest_stored: 
    72                 current_rev = self.repos.next_rev(youngest_stored) 
     68             
     69            if first == None and not youngest_stored: 
     70                first = self.repos.oldest_rev 
     71            elif first == None or self.rev_older_than(youngest_stored, first): 
     72                first = self.repos.next_rev(youngest_stored) 
    7373            else: 
    74                 current_rev = self.repos.oldest_rev 
    75             while current_rev is not None: 
     74                first = self.normalize_rev(first) 
     75             
     76            if last == None: 
     77                last = self.repos.youngest_rev 
     78            else: 
     79                last = self.normalize_rev(last) 
     80             
     81            self.log.info("Syncing with repository (%s to %s)" % (first, last)) 
     82             
     83            current_rev = first 
     84            while current_rev is not None or self.repos.rev_older_than(last, current_rev): 
    7685                changeset = self.repos.get_changeset(current_rev) 
    77                 cursor.execute("INSERT INTO revision (rev,time,author,message) " 
    78                                "VALUES (%s,%s,%s,%s)", (str(current_rev), 
    79                                changeset.date, changeset.author, 
    80                                changeset.message)) 
     86                cursor.execute("INSERT OR REPLACE INTO revision (rev, time, " 
     87                               "author, message) VALUES (%s,%s,%s,%s)", 
     88                               (str(current_rev), changeset.date, 
     89                                changeset.author, changeset.message)) 
    8190                for path,kind,action,base_path,base_rev in changeset.get_changes(): 
    8291                    self.log.debug("Caching node change in [%s]: %s" 
    8392                                   % (current_rev, (path, kind, action,