hgext/convert/git.py
changeset 21873 cf599f8a2da8
parent 21630 a204fd9b5ba9
parent 21868 3420346174b1
child 21958 9663a7855798
equal deleted inserted replaced
21872:abae1eb695c0 21873:cf599f8a2da8
   131         # read the trailing newline
   131         # read the trailing newline
   132         self.catfilepipe[1].read(1)
   132         self.catfilepipe[1].read(1)
   133         return data
   133         return data
   134 
   134 
   135     def getfile(self, name, rev):
   135     def getfile(self, name, rev):
       
   136         if rev == hex(nullid):
       
   137             raise IOError
   136         if name == '.hgsub':
   138         if name == '.hgsub':
   137             data = '\n'.join([m.hgsub() for m in self.submoditer()])
   139             data = '\n'.join([m.hgsub() for m in self.submoditer()])
   138             mode = ''
   140             mode = ''
   139         elif name == '.hgsubstate':
   141         elif name == '.hgsubstate':
   140             data = '\n'.join([m.hgsubstate() for m in self.submoditer()])
   142             data = '\n'.join([m.hgsubstate() for m in self.submoditer()])
   182         fh = self.gitopen("git diff-tree -z --root -m -r %s" % version)
   184         fh = self.gitopen("git diff-tree -z --root -m -r %s" % version)
   183         changes = []
   185         changes = []
   184         seen = set()
   186         seen = set()
   185         entry = None
   187         entry = None
   186         subexists = False
   188         subexists = False
       
   189         subdeleted = False
   187         for l in fh.read().split('\x00'):
   190         for l in fh.read().split('\x00'):
   188             if not entry:
   191             if not entry:
   189                 if not l.startswith(':'):
   192                 if not l.startswith(':'):
   190                     continue
   193                     continue
   191                 entry = l
   194                 entry = l
   198                 p = (entry[1] == "100755")
   201                 p = (entry[1] == "100755")
   199                 s = (entry[1] == "120000")
   202                 s = (entry[1] == "120000")
   200 
   203 
   201                 if f == '.gitmodules':
   204                 if f == '.gitmodules':
   202                     subexists = True
   205                     subexists = True
   203                     changes.append(('.hgsub', ''))
   206                     if entry[4] == 'D':
       
   207                         subdeleted = True
       
   208                         changes.append(('.hgsub', hex(nullid)))
       
   209                     else:
       
   210                         changes.append(('.hgsub', ''))
   204                 elif entry[1] == '160000' or entry[0] == ':160000':
   211                 elif entry[1] == '160000' or entry[0] == ':160000':
   205                     subexists = True
   212                     subexists = True
   206                 else:
   213                 else:
   207                     self.modecache[(f, h)] = (p and "x") or (s and "l") or ""
   214                     self.modecache[(f, h)] = (p and "x") or (s and "l") or ""
   208                     changes.append((f, h))
   215                     changes.append((f, h))
   209             entry = None
   216             entry = None
   210         if fh.close():
   217         if fh.close():
   211             raise util.Abort(_('cannot read changes in %s') % version)
   218             raise util.Abort(_('cannot read changes in %s') % version)
   212 
   219 
   213         if subexists:
   220         if subexists:
   214             self.retrievegitmodules(version)
   221             if subdeleted:
   215             changes.append(('.hgsubstate', ''))
   222                 changes.append(('.hgsubstate', hex(nullid)))
       
   223             else:
       
   224                 self.retrievegitmodules(version)
       
   225                 changes.append(('.hgsubstate', ''))
   216         return (changes, {})
   226         return (changes, {})
   217 
   227 
   218     def getcommit(self, version):
   228     def getcommit(self, version):
   219         c = self.catfile(version, "commit") # read the commit hash
   229         c = self.catfile(version, "commit") # read the commit hash
   220         end = c.find("\n\n")
   230         end = c.find("\n\n")