hgext/convert/subversion.py
changeset 22298 4ba35d4298a0
parent 22297 a74d05878a8d
child 22300 35ab037de989
equal deleted inserted replaced
22297:a74d05878a8d 22298:4ba35d4298a0
   345         if not self.head:
   345         if not self.head:
   346             raise util.Abort(_('no revision found in module %s')
   346             raise util.Abort(_('no revision found in module %s')
   347                              % self.module)
   347                              % self.module)
   348         self.last_changed = self.revnum(self.head)
   348         self.last_changed = self.revnum(self.head)
   349 
   349 
   350         self._changescache = None
   350         self._changescache = (None, None)
   351 
   351 
   352         if os.path.exists(os.path.join(url, '.svn/entries')):
   352         if os.path.exists(os.path.join(url, '.svn/entries')):
   353             self.wc = url
   353             self.wc = url
   354         else:
   354         else:
   355             self.wc = None
   355             self.wc = None
   442                     _('svn: no revision found after start revision %d')
   442                     _('svn: no revision found after start revision %d')
   443                                  % self.startrev)
   443                                  % self.startrev)
   444 
   444 
   445         return self.heads
   445         return self.heads
   446 
   446 
   447     def getchanges(self, rev):
   447     def _getchanges(self, rev):
   448         if self._changescache and self._changescache[0] == rev:
       
   449             return self._changescache[1]
       
   450         self._changescache = None
       
   451         (paths, parents) = self.paths[rev]
   448         (paths, parents) = self.paths[rev]
   452         if parents:
   449         if parents:
   453             files, self.removed, copies = self.expandpaths(rev, paths, parents)
   450             files, self.removed, copies = self.expandpaths(rev, paths, parents)
   454         else:
   451         else:
   455             # Perform a full checkout on roots
   452             # Perform a full checkout on roots
   461             copies = {}
   458             copies = {}
   462             self.removed = set()
   459             self.removed = set()
   463 
   460 
   464         files.sort()
   461         files.sort()
   465         files = zip(files, [rev] * len(files))
   462         files = zip(files, [rev] * len(files))
   466 
       
   467         # caller caches the result, so free it here to release memory
       
   468         del self.paths[rev]
       
   469         return (files, copies)
   463         return (files, copies)
   470 
   464 
       
   465     def getchanges(self, rev):
       
   466         # reuse cache from getchangedfiles
       
   467         if self._changescache[0] == rev:
       
   468             (files, copies) = self._changescache[1]
       
   469         else:
       
   470             (files, copies) = self._getchanges(rev)
       
   471             # caller caches the result, so free it here to release memory
       
   472             del self.paths[rev]
       
   473         return (files, copies)
       
   474 
   471     def getchangedfiles(self, rev, i):
   475     def getchangedfiles(self, rev, i):
   472         changes = self.getchanges(rev)
   476         # called from filemap - cache computed values for reuse in getchanges
   473         self._changescache = (rev, changes)
   477         (files, copies) = self._getchanges(rev)
   474         return [f[0] for f in changes[0]]
   478         self._changescache = (rev, (files, copies))
       
   479         return [f[0] for f in files]
   475 
   480 
   476     def getcommit(self, rev):
   481     def getcommit(self, rev):
   477         if rev not in self.commits:
   482         if rev not in self.commits:
   478             uuid, module, revnum = revsplit(rev)
   483             uuid, module, revnum = revsplit(rev)
   479             self.module = module
   484             self.module = module