hgext/convert/subversion.py
changeset 4812 1fcdf2fe3d7c
parent 4810 f7c8222920ee
child 4813 744371157212
equal deleted inserted replaced
4811:a5209b0487e0 4812:1fcdf2fe3d7c
    85             msg = 'subversion python bindings could not be loaded\n'
    85             msg = 'subversion python bindings could not be loaded\n'
    86             ui.warn(msg)
    86             ui.warn(msg)
    87             raise NoRepo(msg)
    87             raise NoRepo(msg)
    88 
    88 
    89         self.encoding = locale.getpreferredencoding()
    89         self.encoding = locale.getpreferredencoding()
       
    90         self.lastrevs = {}
       
    91 
    90         latest = None
    92         latest = None
    91         if rev:
    93         if rev:
    92             try:
    94             try:
    93                 latest = int(rev)
    95                 latest = int(rev)
    94             except ValueError:
    96             except ValueError:
   453             svn.ra.get_log(self.ra, [self.module], from_revnum, to_revnum, 0,
   455             svn.ra.get_log(self.ra, [self.module], from_revnum, to_revnum, 0,
   454                            discover_changed_paths, strict_node_history,
   456                            discover_changed_paths, strict_node_history,
   455                            receivelog)
   457                            receivelog)
   456             for entry in received:
   458             for entry in received:
   457                 parselogentry(*entry)
   459                 parselogentry(*entry)
   458             self.last_revnum = to_revnum
       
   459         except SubversionException, (_, num):
   460         except SubversionException, (_, num):
   460             if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
   461             if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
   461                 raise NoSuchRevision(branch=self, 
   462                 raise NoSuchRevision(branch=self, 
   462                     revision="Revision number %d" % to_revnum)
   463                     revision="Revision number %d" % to_revnum)
   463             raise
   464             raise
       
   465 
       
   466     def setrevmap(self, revmap):
       
   467         lastrevs = {}
       
   468         for revid in revmap.keys():
       
   469             uuid, module, revnum = self.revsplit(revid)
       
   470             lastrevnum = lastrevs.setdefault(module, revnum)
       
   471             if revnum > lastrevnum:
       
   472                 lastrevs[module] = revnum
       
   473         self.lastrevs = lastrevs
   464 
   474 
   465     def getheads(self):
   475     def getheads(self):
   466         # detect standard /branches, /tags, /trunk layout
   476         # detect standard /branches, /tags, /trunk layout
   467         optrev = svn.core.svn_opt_revision_t()
   477         optrev = svn.core.svn_opt_revision_t()
   468         optrev.kind = svn.core.svn_opt_revision_number
   478         optrev.kind = svn.core.svn_opt_revision_number
   530     def getcommit(self, rev):
   540     def getcommit(self, rev):
   531         if rev not in self.commits:
   541         if rev not in self.commits:
   532             uuid, module, revnum = self.revsplit(rev)
   542             uuid, module, revnum = self.revsplit(rev)
   533             self.module = module
   543             self.module = module
   534             self.reparent(module)
   544             self.reparent(module)
   535             self._fetch_revisions(from_revnum=revnum, to_revnum=0)
   545             stop = self.lastrevs.get(module, 0)
       
   546             self._fetch_revisions(from_revnum=revnum, to_revnum=stop)
   536         return self.commits[rev]
   547         return self.commits[rev]
   537 
   548 
   538     def gettags(self):
   549     def gettags(self):
   539         tags = {}
   550         tags = {}
   540         def parselogentry(*arg, **args):
   551         def parselogentry(*arg, **args):