##// END OF EJS Templates
Remove specific version requirement and point to latest versions of Mac Python downloads.
Remove specific version requirement and point to latest versions of Mac Python downloads.

File last commit:

r4768:f52bfe56 default
r4786:4bd0b2f8 default
Show More
git.py
102 lines | 3.3 KiB | text/x-python | PythonLexer
Brendan Cully
Split convert extension into common and repository type modules
r4536 # git support for the convert extension
import os
from common import NoRepo, commit, converter_source
class convert_git(converter_source):
Brendan Cully
convert: gitcmd wrapper for os.popen
r4767 def gitcmd(self, s):
return os.popen('GIT_DIR=%s %s' % (self.path, s))
Brendan Cully
convert: add -r argument specifying latest revision to convert
r4760 def __init__(self, ui, path, rev=None):
Brendan Cully
Split convert extension into common and repository type modules
r4536 if os.path.isdir(path + "/.git"):
path += "/.git"
Brendan Cully
convert: ove recode method into converter_source
r4759 if not os.path.exists(path + "/objects"):
raise NoRepo("couldn't open GIT repo %s" % path)
Brendan Cully
Split convert extension into common and repository type modules
r4536 self.path = path
self.ui = ui
Brendan Cully
convert: add -r argument specifying latest revision to convert
r4760 self.rev = rev
Brendan Cully
convert: ove recode method into converter_source
r4759 self.encoding = 'utf-8'
Brendan Cully
Split convert extension into common and repository type modules
r4536
def getheads(self):
Brendan Cully
convert: import all branches from git repositories
r4768 if not self.rev:
return self.gitcmd('git-rev-parse --branches').read().splitlines()
else:
fh = self.gitcmd("git-rev-parse --verify %s" % self.rev)
return [fh.read()[:-1]]
Brendan Cully
Split convert extension into common and repository type modules
r4536
def catfile(self, rev, type):
if rev == "0" * 40: raise IOError()
Brendan Cully
convert: gitcmd wrapper for os.popen
r4767 fh = self.gitcmd("git-cat-file %s %s 2>/dev/null" % (type, rev))
Brendan Cully
Split convert extension into common and repository type modules
r4536 return fh.read()
def getfile(self, name, rev):
return self.catfile(rev, "blob")
def getmode(self, name, rev):
return self.modecache[(name, rev)]
def getchanges(self, version):
self.modecache = {}
Brendan Cully
convert: gitcmd wrapper for os.popen
r4767 fh = self.gitcmd("git-diff-tree --root -m -r %s" % version)
Brendan Cully
Split convert extension into common and repository type modules
r4536 changes = []
for l in fh:
if "\t" not in l: continue
m, f = l[:-1].split("\t")
m = m.split()
h = m[3]
p = (m[1] == "100755")
s = (m[1] == "120000")
self.modecache[(f, h)] = (p and "x") or (s and "l") or ""
changes.append((f, h))
return changes
def getcommit(self, version):
c = self.catfile(version, "commit") # read the commit hash
end = c.find("\n\n")
message = c[end+2:]
Brendan Cully
convert: ove recode method into converter_source
r4759 message = self.recode(message)
Brendan Cully
Split convert extension into common and repository type modules
r4536 l = c[:end].splitlines()
manifest = l[0].split()[1]
parents = []
for e in l[1:]:
n, v = e.split(" ", 1)
if n == "author":
p = v.split()
tm, tz = p[-2:]
author = " ".join(p[:-2])
if author[0] == "<": author = author[1:-1]
Brendan Cully
convert: ove recode method into converter_source
r4759 author = self.recode(author)
Brendan Cully
Split convert extension into common and repository type modules
r4536 if n == "committer":
p = v.split()
tm, tz = p[-2:]
committer = " ".join(p[:-2])
if committer[0] == "<": committer = committer[1:-1]
Brendan Cully
convert: ove recode method into converter_source
r4759 committer = self.recode(committer)
Brendan Cully
Split convert extension into common and repository type modules
r4536 message += "\ncommitter: %s\n" % committer
if n == "parent": parents.append(v)
tzs, tzh, tzm = tz[-5:-4] + "1", tz[-4:-2], tz[-2:]
tz = -int(tzs) * (int(tzh) * 3600 + int(tzm))
date = tm + " " + str(tz)
Alexis S. L. Carvalho
convert: "unknown" is a string
r4721 author = author or "unknown"
Brendan Cully
Split convert extension into common and repository type modules
r4536
c = commit(parents=parents, date=date, author=author, desc=message)
return c
def gettags(self):
tags = {}
Brendan Cully
convert: gitcmd wrapper for os.popen
r4767 fh = self.gitcmd('git-ls-remote --tags "%s" 2>/dev/null' % self.path)
Brendan Cully
Split convert extension into common and repository type modules
r4536 prefix = 'refs/tags/'
for line in fh:
line = line.strip()
if not line.endswith("^{}"):
continue
node, tag = line.split(None, 1)
if not tag.startswith(prefix):
continue
tag = tag[len(prefix):-3]
tags[tag] = node
return tags