contrib/convert-repo
changeset 1715 40346aa66b0f
parent 1656 14d73fff4c45
child 2093 5cc414722587
equal deleted inserted replaced
1714:eabfbd220f39 1715:40346aa66b0f
    19 #
    19 #
    20 # This updates the mapfile on each commit copied, so it can be
    20 # This updates the mapfile on each commit copied, so it can be
    21 # interrupted and can be run repeatedly to copy new commits.
    21 # interrupted and can be run repeatedly to copy new commits.
    22 
    22 
    23 import sys, os, zlib, sha, time
    23 import sys, os, zlib, sha, time
    24 from mercurial import hg, ui, util, commands
    24 from mercurial import hg, ui, util
    25 
    25 
    26 class convert_git:
    26 class convert_git:
    27     def __init__(self, path):
    27     def __init__(self, path):
    28         self.path = path
    28         self.path = path
    29 
    29 
   111             os.unlink(self.repo.wjoin(f))
   111             os.unlink(self.repo.wjoin(f))
   112             #self.repo.remove([f])
   112             #self.repo.remove([f])
   113         except:
   113         except:
   114             pass
   114             pass
   115 
   115 
   116     def putcommit(self, files, parents, author, date, text):
   116     def putcommit(self, files, parents, author, dest, text):
   117         seen = {}
   117         seen = {}
   118         pl = []
   118         pl = []
   119         for p in parents:
   119         for p in parents:
   120             if p not in seen:
   120             if p not in seen:
   121                 pl.append(p)
   121                 pl.append(p)
   127         p2 = parents.pop(0)
   127         p2 = parents.pop(0)
   128 
   128 
   129         while parents:
   129         while parents:
   130             p1 = p2
   130             p1 = p2
   131             p2 = parents.pop(0)
   131             p2 = parents.pop(0)
   132             self.repo.dirstate.setparents(hg.bin(p1), hg.bin(p2))
   132             self.repo.rawcommit(files, text, author, dest,
   133             if len(files) > 0:
   133                                 hg.bin(p1), hg.bin(p2))
   134                 olddir = os.getcwd()
       
   135                 os.chdir(self.path)
       
   136                 commands.addremove(self.repo.ui, self.repo, *files)
       
   137                 os.chdir(olddir)
       
   138             self.repo.commit(files, text, author, date)
       
   139             text = "(octopus merge fixup)\n"
   134             text = "(octopus merge fixup)\n"
   140             p2 = hg.hex(self.repo.changelog.tip())
   135             p2 = hg.hex(self.repo.changelog.tip())
   141 
   136 
   142         return p2
   137         return p2
   143 
   138 
   263         heads = self.source.getheads()
   258         heads = self.source.getheads()
   264         parents = self.walktree(heads)
   259         parents = self.walktree(heads)
   265         t = self.toposort(parents)
   260         t = self.toposort(parents)
   266         t = [n for n in t if n not in self.map]
   261         t = [n for n in t if n not in self.map]
   267         num = len(t)
   262         num = len(t)
       
   263         c = None
   268 
   264 
   269         for c in t:
   265         for c in t:
   270             num -= 1
   266             num -= 1
   271             desc = self.commitcache[c][3].splitlines()[0]
   267             desc = self.commitcache[c][3].splitlines()[0]
   272             #print num, desc
   268             #print num, desc
   277         for k in tags:
   273         for k in tags:
   278             v = tags[k]
   274             v = tags[k]
   279             if v in self.map:
   275             if v in self.map:
   280                 ctags[k] = self.map[v]
   276                 ctags[k] = self.map[v]
   281 
   277 
   282         if ctags:
   278         if c and ctags:
   283             nrev = self.dest.puttags(ctags)
   279             nrev = self.dest.puttags(ctags)
   284             # write another hash correspondence to override the previous
   280             # write another hash correspondence to override the previous
   285             # one so we don't end up with extra tag heads
   281             # one so we don't end up with extra tag heads
   286             file(self.mapfile, "a").write("%s %s\n" % (c, nrev))
   282             file(self.mapfile, "a").write("%s %s\n" % (c, nrev))
   287 
   283