hgext/convert/git.py
changeset 10282 08a0f04b56bd
parent 10263 25e572394f5c
child 10938 02d6149a480b
equal deleted inserted replaced
10281:e7d3b509af8b 10282:08a0f04b56bd
    41 
    41 
    42         self.path = path
    42         self.path = path
    43 
    43 
    44     def getheads(self):
    44     def getheads(self):
    45         if not self.rev:
    45         if not self.rev:
    46             return self.gitcmd('git rev-parse --branches --remotes').read().splitlines()
    46             fh = self.gitcmd('git rev-parse --branches --remotes')
       
    47             return fh.read().splitlines()
    47         else:
    48         else:
    48             fh = self.gitcmd("git rev-parse --verify %s" % self.rev)
    49             fh = self.gitcmd("git rev-parse --verify %s" % self.rev)
    49             return [fh.read()[:-1]]
    50             return [fh.read()[:-1]]
    50 
    51 
    51     def catfile(self, rev, type):
    52     def catfile(self, rev, type):
    52         if rev == "0" * 40: raise IOError()
    53         if rev == "0" * 40:
       
    54             raise IOError()
    53         fh = self.gitcmd("git cat-file %s %s" % (type, rev))
    55         fh = self.gitcmd("git cat-file %s %s" % (type, rev))
    54         return fh.read()
    56         return fh.read()
    55 
    57 
    56     def getfile(self, name, rev):
    58     def getfile(self, name, rev):
    57         return self.catfile(rev, "blob")
    59         return self.catfile(rev, "blob")
    84         return (changes, {})
    86         return (changes, {})
    85 
    87 
    86     def getcommit(self, version):
    88     def getcommit(self, version):
    87         c = self.catfile(version, "commit") # read the commit hash
    89         c = self.catfile(version, "commit") # read the commit hash
    88         end = c.find("\n\n")
    90         end = c.find("\n\n")
    89         message = c[end+2:]
    91         message = c[end + 2:]
    90         message = self.recode(message)
    92         message = self.recode(message)
    91         l = c[:end].splitlines()
    93         l = c[:end].splitlines()
    92         parents = []
    94         parents = []
    93         author = committer = None
    95         author = committer = None
    94         for e in l[1:]:
    96         for e in l[1:]:
   103                 p = v.split()
   105                 p = v.split()
   104                 tm, tz = p[-2:]
   106                 tm, tz = p[-2:]
   105                 committer = " ".join(p[:-2])
   107                 committer = " ".join(p[:-2])
   106                 if committer[0] == "<": committer = committer[1:-1]
   108                 if committer[0] == "<": committer = committer[1:-1]
   107                 committer = self.recode(committer)
   109                 committer = self.recode(committer)
   108             if n == "parent": parents.append(v)
   110             if n == "parent":
       
   111                 parents.append(v)
   109 
   112 
   110         if committer and committer != author:
   113         if committer and committer != author:
   111             message += "\ncommitter: %s\n" % committer
   114             message += "\ncommitter: %s\n" % committer
   112         tzs, tzh, tzm = tz[-5:-4] + "1", tz[-4:-2], tz[-2:]
   115         tzs, tzh, tzm = tz[-5:-4] + "1", tz[-4:-2], tz[-2:]
   113         tz = -int(tzs) * (int(tzh) * 3600 + int(tzm))
   116         tz = -int(tzs) * (int(tzh) * 3600 + int(tzm))
   143                 m, f = l[:-1].split("\t")
   146                 m, f = l[:-1].split("\t")
   144                 changes.append(f)
   147                 changes.append(f)
   145             fh.close()
   148             fh.close()
   146         else:
   149         else:
   147             fh = self.gitcmd('git diff-tree --name-only --root -r %s "%s^%s" --'
   150             fh = self.gitcmd('git diff-tree --name-only --root -r %s "%s^%s" --'
   148                              % (version, version, i+1))
   151                              % (version, version, i + 1))
   149             changes = [f.rstrip('\n') for f in fh]
   152             changes = [f.rstrip('\n') for f in fh]
   150             fh.close()
   153             fh.close()
   151 
   154 
   152         return changes
   155         return changes