convert: introduce hascommitfrommap sink method

Mercurial has stable revision identifiers and rollback and strip. Revisions
referenced in the shamap are thus not necessarily still present but we can
easily check for it.

Subversion do not have stable identifiers and no rollback or strip(?). We must
thus assume that all revisions referenced from a shamap still must be present.

This method is similar to hascommitforsplicemap but different ...
This commit is contained in:
Mads Kiilerich 2014-05-19 22:12:30 +02:00
parent a9f54d8782
commit 9d7774aea3
3 changed files with 14 additions and 0 deletions

View File

@ -260,6 +260,11 @@ class converter_sink(object):
"""
pass
def hascommitfrommap(self, rev):
"""Return False if a rev mentioned in a filemap is known to not be
present."""
raise NotImplementedError
def hascommitforsplicemap(self, rev):
"""This method is for the special needs for splicemap handling and not
for general use. Returns True if the sink contains rev, aborts on some

View File

@ -253,6 +253,10 @@ class mercurial_sink(converter_sink):
destmarks[bookmark] = bin(updatedbookmark[bookmark])
destmarks.write()
def hascommitfrommap(self, rev):
# the exact semantics of clonebranches is unclear so we can't say no
return rev in self.repo or self.clonebranches
def hascommitforsplicemap(self, rev):
if rev not in self.repo and self.clonebranches:
raise util.Abort(_('revision %s not found in destination '

View File

@ -1300,6 +1300,11 @@ class svn_sink(converter_sink, commandline):
self.ui.warn(_('writing Subversion tags is not yet implemented\n'))
return None, None
def hascommitfrommap(self, rev):
# We trust that revisions referenced in a map still is present
# TODO: implement something better if necessary and feasible
return True
def hascommitforsplicemap(self, rev):
# This is not correct as one can convert to an existing subversion
# repository and childmap would not list all revisions. Too bad.