diff -r 0cd6846e5200 -r 963000ed8cac hgext/convert/subversion.py --- a/hgext/convert/subversion.py Sun Feb 24 17:58:53 2008 +0100 +++ b/hgext/convert/subversion.py Sun Feb 24 17:58:55 2008 +0100 @@ -196,6 +196,15 @@ except ValueError: raise util.Abort('svn: revision %s is not an integer' % rev) + self.startrev = self.ui.config('convert', 'svn.startrev', default=0) + try: + self.startrev = int(self.startrev) + if self.startrev < 0: + self.startrev = 0 + except ValueError: + raise util.Abort(_('svn: start revision %s is not an integer') + % self.startrev) + try: self.get_blacklist() except IOError, e: @@ -283,6 +292,15 @@ (branch, self.revnum(brevid))) self.heads.append(brevid) + if self.startrev and self.heads: + if len(self.heads) > 1: + raise util.Abort(_('svn: start revision is not supported with ' + 'with more than one branch')) + revnum = self.revnum(self.heads[0]) + if revnum < self.startrev: + raise util.Abort(_('svn: no revision found after start revision %d') + % self.startrev) + return self.heads def getfile(self, file, rev): @@ -349,7 +367,7 @@ start = self.revnum(self.head) try: - for entry in get_log(self.url, [self.tags], 0, start): + for entry in get_log(self.url, [self.tags], self.startrev, start): orig_paths, revnum, author, date, message = entry for path in orig_paths: if not path.startswith(self.tags+'/'): @@ -686,10 +704,11 @@ # ent.copyfrom_rev may not be the actual last revision previd = self.latest(newpath, ent.copyfrom_rev) if previd is not None: - parents = [previd] prevmodule, prevnum = self.revsplit(previd)[1:] - self.ui.note('found parent of branch %s at %d: %s\n' % - (self.module, prevnum, prevmodule)) + if prevnum >= self.startrev: + parents = [previd] + self.ui.note('found parent of branch %s at %d: %s\n' % + (self.module, prevnum, prevmodule)) else: self.ui.debug("No copyfrom path, don't know what to do.\n") @@ -736,11 +755,14 @@ try: firstcset = None - branched = False + lastonbranch = False stream = get_log(self.url, [self.module], from_revnum, to_revnum) try: for entry in stream: paths, revnum, author, date, message = entry + if revnum < self.startrev: + lastonbranch = True + break if self.is_blacklisted(revnum): self.ui.note('skipping blacklisted revision %d\n' % revnum) @@ -748,16 +770,16 @@ if paths is None: self.ui.debug('revision %d has no entries\n' % revnum) continue - cset, branched = parselogentry(paths, revnum, author, - date, message) + cset, lastonbranch = parselogentry(paths, revnum, author, + date, message) if cset: firstcset = cset - if branched: + if lastonbranch: break finally: stream.close() - if not branched and firstcset and not firstcset.parents: + if not lastonbranch and firstcset and not firstcset.parents: # The first revision of the sequence (the last fetched one) # has invalid parents if not a branch root. Find the parent # revision now, if any.