comparison hgext/convert/__init__.py @ 5374:e710874247d1

convert: allow the converter_source to say "skip this revision" If getchanges returns a string, it's assumed to be the id of an already converted revision. We map the current revision to the same revision this converted revision was mapped to. To allow skipping a root revision, getchanges can return the special string 'hg-convert-skipped-revision' (a.k.a. common.SKIPREV), which hopefully won't clash with any real id. The converter_source is responsible for rewriting the parents of the commit objects to make sure the revision graph makes sense.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Thu, 04 Oct 2007 23:21:37 -0300
parents 6aba1835a7b3
children dae323e453aa
comparison
equal deleted inserted replaced
5373:6aba1835a7b3 5374:e710874247d1
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> 3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 # 4 #
5 # This software may be used and distributed according to the terms 5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference. 6 # of the GNU General Public License, incorporated herein by reference.
7 7
8 from common import NoRepo, converter_source, converter_sink 8 from common import NoRepo, SKIPREV, converter_source, converter_sink
9 from cvs import convert_cvs 9 from cvs import convert_cvs
10 from darcs import darcs_source 10 from darcs import darcs_source
11 from git import convert_git 11 from git import convert_git
12 from hg import mercurial_source, mercurial_sink 12 from hg import mercurial_source, mercurial_sink
13 from subversion import convert_svn, debugsvnlog 13 from subversion import convert_svn, debugsvnlog
200 def copy(self, rev): 200 def copy(self, rev):
201 commit = self.commitcache[rev] 201 commit = self.commitcache[rev]
202 do_copies = hasattr(self.dest, 'copyfile') 202 do_copies = hasattr(self.dest, 'copyfile')
203 filenames = [] 203 filenames = []
204 204
205 files, copies = self.source.getchanges(rev) 205 changes = self.source.getchanges(rev)
206 if isinstance(changes, basestring):
207 if changes == SKIPREV:
208 dest = SKIPREV
209 else:
210 dest = self.map[changes]
211 self.mapentry(rev, dest)
212 return
213 files, copies = changes
206 parents = [self.map[r] for r in commit.parents] 214 parents = [self.map[r] for r in commit.parents]
207 if commit.parents: 215 if commit.parents:
208 prev = commit.parents[0] 216 prev = commit.parents[0]
209 if prev not in self.commitcache: 217 if prev not in self.commitcache:
210 self.cachecommit(prev) 218 self.cachecommit(prev)
261 269
262 tags = self.source.gettags() 270 tags = self.source.gettags()
263 ctags = {} 271 ctags = {}
264 for k in tags: 272 for k in tags:
265 v = tags[k] 273 v = tags[k]
266 if v in self.map: 274 if self.map.get(v, SKIPREV) != SKIPREV:
267 ctags[k] = self.map[v] 275 ctags[k] = self.map[v]
268 276
269 if c and ctags: 277 if c and ctags:
270 nrev = self.dest.puttags(ctags) 278 nrev = self.dest.puttags(ctags)
271 # write another hash correspondence to override the previous 279 # write another hash correspondence to override the previous