comparison hgext/convert/subversion.py @ 4812:1fcdf2fe3d7c

convert: svn: use revmap to parse only new revisions in incremental conversions
author Brendan Cully <brendan@kublai.com>
date Thu, 05 Jul 2007 12:41:58 -0700
parents f7c8222920ee
children 744371157212
comparison
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):