##// END OF EJS Templates
convert: fix parents of last fetched svn revision
Patrick Mezard -
r5871:c1244685 default
parent child Browse files
Show More
@@ -258,7 +258,7 b' class svn_source(converter_source):'
258 self.module = module
258 self.module = module
259 self.reparent(module)
259 self.reparent(module)
260 stop = self.lastrevs.get(module, 0)
260 stop = self.lastrevs.get(module, 0)
261 self._fetch_revisions(from_revnum=revnum, to_revnum=stop)
261 self._fetch_revisions(revnum, stop)
262 commit = self.commits[rev]
262 commit = self.commits[rev]
263 # caller caches the result, so free it here to release memory
263 # caller caches the result, so free it here to release memory
264 del self.commits[rev]
264 del self.commits[rev]
@@ -571,7 +571,10 b' class svn_source(converter_source):'
571
571
572 return (entries, copies)
572 return (entries, copies)
573
573
574 def _fetch_revisions(self, from_revnum = 0, to_revnum = 347):
574 def _fetch_revisions(self, from_revnum, to_revnum):
575 if from_revnum < to_revnum:
576 from_revnum, to_revnum = to_revnum, from_revnum
577
575 self.child_cset = None
578 self.child_cset = None
576 def parselogentry(orig_paths, revnum, author, date, message):
579 def parselogentry(orig_paths, revnum, author, date, message):
577 self.ui.debug("parsing revision %d (%d changes)\n" %
580 self.ui.debug("parsing revision %d (%d changes)\n" %
@@ -585,9 +588,9 b' class svn_source(converter_source):'
585
588
586 rev = self.revid(revnum)
589 rev = self.revid(revnum)
587 # branch log might return entries for a parent we already have
590 # branch log might return entries for a parent we already have
588 if (rev in self.commits or
591
589 (revnum < self.lastrevs.get(self.module, 0))):
592 if (rev in self.commits or revnum < to_revnum):
590 return
593 return None
591
594
592 parents = []
595 parents = []
593 # check whether this revision is the start of a branch
596 # check whether this revision is the start of a branch
@@ -642,20 +645,36 b' class svn_source(converter_source):'
642 if self.child_cset and not self.child_cset.parents:
645 if self.child_cset and not self.child_cset.parents:
643 self.child_cset.parents = [rev]
646 self.child_cset.parents = [rev]
644 self.child_cset = cset
647 self.child_cset = cset
648 return cset
645
649
646 self.ui.note('fetching revision log for "%s" from %d to %d\n' %
650 self.ui.note('fetching revision log for "%s" from %d to %d\n' %
647 (self.module, from_revnum, to_revnum))
651 (self.module, from_revnum, to_revnum))
648
652
649 try:
653 try:
654 firstcset = None
650 for entry in self.get_log([self.module], from_revnum, to_revnum):
655 for entry in self.get_log([self.module], from_revnum, to_revnum):
651 orig_paths, revnum, author, date, message = entry
656 paths, revnum, author, date, message = entry
652 if self.is_blacklisted(revnum):
657 if self.is_blacklisted(revnum):
653 self.ui.note('skipping blacklisted revision %d\n' % revnum)
658 self.ui.note('skipping blacklisted revision %d\n' % revnum)
654 continue
659 continue
655 if orig_paths is None:
660 if paths is None:
656 self.ui.debug('revision %d has no entries\n' % revnum)
661 self.ui.debug('revision %d has no entries\n' % revnum)
657 continue
662 continue
658 parselogentry(orig_paths, revnum, author, date, message)
663 cset = parselogentry(paths, revnum, author, date, message)
664 if cset:
665 firstcset = cset
666
667 if firstcset and not firstcset.parents:
668 # The first revision of the sequence (the last fetched one)
669 # has invalid parents if not a branch root. Find the parent
670 # revision now, if any.
671 try:
672 firstrevnum = self.revnum(firstcset.rev)
673 if firstrevnum > 1:
674 latest = self.latest(self.module, firstrevnum - 1)
675 firstcset.parents.append(self.revid(latest))
676 except util.Abort:
677 pass
659 except SubversionException, (inst, num):
678 except SubversionException, (inst, num):
660 if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
679 if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
661 raise NoSuchRevision(branch=self,
680 raise NoSuchRevision(branch=self,
General Comments 0
You need to be logged in to leave comments. Login now