hgext/convert/hg.py
changeset 5378 8a2915f57dfc
parent 5356 b98c377b3c16
child 5379 d3e51dc804f8
equal deleted inserted replaced
5377:756a43a30e34 5378:8a2915f57dfc
    26             self.repo = hg.repository(self.ui, path)
    26             self.repo = hg.repository(self.ui, path)
    27         except:
    27         except:
    28             raise NoRepo("could not open hg repo %s as sink" % path)
    28             raise NoRepo("could not open hg repo %s as sink" % path)
    29         self.lock = None
    29         self.lock = None
    30         self.wlock = None
    30         self.wlock = None
       
    31         self.filemapmode = False
    31 
    32 
    32     def before(self):
    33     def before(self):
    33         self.wlock = self.repo.wlock()
    34         self.wlock = self.repo.wlock()
    34         self.lock = self.repo.lock()
    35         self.lock = self.repo.lock()
    35         self.repo.dirstate.clear()
    36         self.repo.dirstate.clear()
    94         for p in parents:
    95         for p in parents:
    95             if p not in seen:
    96             if p not in seen:
    96                 pl.append(p)
    97                 pl.append(p)
    97                 seen[p] = 1
    98                 seen[p] = 1
    98         parents = pl
    99         parents = pl
       
   100         nparents = len(parents)
       
   101         if self.filemapmode and nparents == 1:
       
   102             m1node = self.repo.changelog.read(bin(parents[0]))[0]
       
   103             parent = parents[0]
    99 
   104 
   100         if len(parents) < 2: parents.append("0" * 40)
   105         if len(parents) < 2: parents.append("0" * 40)
   101         if len(parents) < 2: parents.append("0" * 40)
   106         if len(parents) < 2: parents.append("0" * 40)
   102         p2 = parents.pop(0)
   107         p2 = parents.pop(0)
   103 
   108 
   115                                     bin(p1), bin(p2), extra=extra)
   120                                     bin(p1), bin(p2), extra=extra)
   116             self.repo.dirstate.clear()
   121             self.repo.dirstate.clear()
   117             text = "(octopus merge fixup)\n"
   122             text = "(octopus merge fixup)\n"
   118             p2 = hg.hex(self.repo.changelog.tip())
   123             p2 = hg.hex(self.repo.changelog.tip())
   119 
   124 
       
   125         if self.filemapmode and nparents == 1:
       
   126             man = self.repo.manifest
       
   127             mnode = self.repo.changelog.read(bin(p2))[0]
       
   128             if not man.cmp(m1node, man.revision(mnode)):
       
   129                 self.repo.rollback()
       
   130                 self.repo.dirstate.clear()
       
   131                 return parent
   120         return p2
   132         return p2
   121 
   133 
   122     def puttags(self, tags):
   134     def puttags(self, tags):
   123         try:
   135         try:
   124             old = self.repo.wfile(".hgtags").read()
   136             old = self.repo.wfile(".hgtags").read()
   151                 tagparent = nullid
   163                 tagparent = nullid
   152             self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
   164             self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
   153                                 date, tagparent, nullid)
   165                                 date, tagparent, nullid)
   154             return hex(self.repo.changelog.tip())
   166             return hex(self.repo.changelog.tip())
   155 
   167 
       
   168     def setfilemapmode(self, active):
       
   169         self.filemapmode = active
       
   170 
   156 class mercurial_source(converter_source):
   171 class mercurial_source(converter_source):
   157     def __init__(self, ui, path, rev=None):
   172     def __init__(self, ui, path, rev=None):
   158         converter_source.__init__(self, ui, path, rev)
   173         converter_source.__init__(self, ui, path, rev)
   159         try:
   174         try:
   160             self.repo = hg.repository(self.ui, path)
   175             self.repo = hg.repository(self.ui, path)