hgext/convert/hg.py
changeset 6217 fe8dbbe9520d
parent 6212 e75aab656f46
child 6716 c9b8d2565b92
equal deleted inserted replaced
6216:a88259018f79 6217:fe8dbbe9520d
    13 #   following option: "--config convert.hg.saverev=false"
    13 #   following option: "--config convert.hg.saverev=false"
    14 
    14 
    15 
    15 
    16 import os, time
    16 import os, time
    17 from mercurial.i18n import _
    17 from mercurial.i18n import _
       
    18 from mercurial.repo import RepoError
    18 from mercurial.node import bin, hex, nullid
    19 from mercurial.node import bin, hex, nullid
    19 from mercurial import hg, revlog, util
    20 from mercurial import hg, revlog, util
    20 
    21 
    21 from common import NoRepo, commit, converter_source, converter_sink
    22 from common import NoRepo, commit, converter_source, converter_sink
    22 
    23 
    30         if os.path.isdir(path) and len(os.listdir(path)) > 0:
    31         if os.path.isdir(path) and len(os.listdir(path)) > 0:
    31             try:
    32             try:
    32                 self.repo = hg.repository(self.ui, path)
    33                 self.repo = hg.repository(self.ui, path)
    33                 if not self.repo.local():
    34                 if not self.repo.local():
    34                     raise NoRepo(_('%s is not a local Mercurial repo') % path)
    35                     raise NoRepo(_('%s is not a local Mercurial repo') % path)
    35             except hg.RepoError, err:
    36             except RepoError, err:
    36                 ui.print_exc()
    37                 ui.print_exc()
    37                 raise NoRepo(err.args[0])
    38                 raise NoRepo(err.args[0])
    38         else:
    39         else:
    39             try:
    40             try:
    40                 ui.status(_('initializing destination %s repository\n') % path)
    41                 ui.status(_('initializing destination %s repository\n') % path)
    41                 self.repo = hg.repository(self.ui, path, create=True)
    42                 self.repo = hg.repository(self.ui, path, create=True)
    42                 if not self.repo.local():
    43                 if not self.repo.local():
    43                     raise NoRepo(_('%s is not a local Mercurial repo') % path)
    44                     raise NoRepo(_('%s is not a local Mercurial repo') % path)
    44                 self.created.append(path)
    45                 self.created.append(path)
    45             except hg.RepoError, err:
    46             except RepoError, err:
    46                 ui.print_exc()
    47                 ui.print_exc()
    47                 raise NoRepo("could not create hg repo %s as sink" % path)
    48                 raise NoRepo("could not create hg repo %s as sink" % path)
    48         self.lock = None
    49         self.lock = None
    49         self.wlock = None
    50         self.wlock = None
    50         self.filemapmode = False
    51         self.filemapmode = False
   153             p2 = parents.pop(0)
   154             p2 = parents.pop(0)
   154             a = self.repo.rawcommit(files, text, commit.author, commit.date,
   155             a = self.repo.rawcommit(files, text, commit.author, commit.date,
   155                                     bin(p1), bin(p2), extra=extra)
   156                                     bin(p1), bin(p2), extra=extra)
   156             self.repo.dirstate.clear()
   157             self.repo.dirstate.clear()
   157             text = "(octopus merge fixup)\n"
   158             text = "(octopus merge fixup)\n"
   158             p2 = hg.hex(self.repo.changelog.tip())
   159             p2 = hex(self.repo.changelog.tip())
   159 
   160 
   160         if self.filemapmode and nparents == 1:
   161         if self.filemapmode and nparents == 1:
   161             man = self.repo.manifest
   162             man = self.repo.manifest
   162             mnode = self.repo.changelog.read(bin(p2))[0]
   163             mnode = self.repo.changelog.read(bin(p2))[0]
   163             if not man.cmp(m1node, man.revision(mnode)):
   164             if not man.cmp(m1node, man.revision(mnode)):
   192             extra = {}
   193             extra = {}
   193             if self.tagsbranch != 'default':
   194             if self.tagsbranch != 'default':
   194                 extra['branch'] = self.tagsbranch
   195                 extra['branch'] = self.tagsbranch
   195             try:
   196             try:
   196                 tagparent = self.repo.changectx(self.tagsbranch).node()
   197                 tagparent = self.repo.changectx(self.tagsbranch).node()
   197             except hg.RepoError, inst:
   198             except RepoError, inst:
   198                 tagparent = nullid
   199                 tagparent = nullid
   199             self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
   200             self.repo.rawcommit([".hgtags"], "update tags", "convert-repo",
   200                                 date, tagparent, nullid, extra=extra)
   201                                 date, tagparent, nullid, extra=extra)
   201             return hex(self.repo.changelog.tip())
   202             return hex(self.repo.changelog.tip())
   202 
   203 
   210         try:
   211         try:
   211             self.repo = hg.repository(self.ui, path)
   212             self.repo = hg.repository(self.ui, path)
   212             # try to provoke an exception if this isn't really a hg
   213             # try to provoke an exception if this isn't really a hg
   213             # repo, but some other bogus compatible-looking url
   214             # repo, but some other bogus compatible-looking url
   214             if not self.repo.local():
   215             if not self.repo.local():
   215                 raise hg.RepoError()
   216                 raise RepoError()
   216         except hg.RepoError:
   217         except RepoError:
   217             ui.print_exc()
   218             ui.print_exc()
   218             raise NoRepo("%s is not a local Mercurial repo" % path)
   219             raise NoRepo("%s is not a local Mercurial repo" % path)
   219         self.lastrev = None
   220         self.lastrev = None
   220         self.lastctx = None
   221         self.lastctx = None
   221         self._changescache = None
   222         self._changescache = None