Mercurial > hg
comparison hgext/convert/git.py @ 10985:7fab6ae3f688 stable
convert/git: rename gitcmd() into gitopen() for readability
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Sun, 25 Apr 2010 22:32:27 +0200 |
parents | 9f6731b03906 |
children | 610f047326b9 |
comparison
equal
deleted
inserted
replaced
10980:30ae8174a597 | 10985:7fab6ae3f688 |
---|---|
14 class convert_git(converter_source): | 14 class convert_git(converter_source): |
15 # Windows does not support GIT_DIR= construct while other systems | 15 # Windows does not support GIT_DIR= construct while other systems |
16 # cannot remove environment variable. Just assume none have | 16 # cannot remove environment variable. Just assume none have |
17 # both issues. | 17 # both issues. |
18 if hasattr(os, 'unsetenv'): | 18 if hasattr(os, 'unsetenv'): |
19 def gitcmd(self, s): | 19 def gitopen(self, s): |
20 prevgitdir = os.environ.get('GIT_DIR') | 20 prevgitdir = os.environ.get('GIT_DIR') |
21 os.environ['GIT_DIR'] = self.path | 21 os.environ['GIT_DIR'] = self.path |
22 try: | 22 try: |
23 return util.popen(s, 'rb') | 23 return util.popen(s, 'rb') |
24 finally: | 24 finally: |
25 if prevgitdir is None: | 25 if prevgitdir is None: |
26 del os.environ['GIT_DIR'] | 26 del os.environ['GIT_DIR'] |
27 else: | 27 else: |
28 os.environ['GIT_DIR'] = prevgitdir | 28 os.environ['GIT_DIR'] = prevgitdir |
29 else: | 29 else: |
30 def gitcmd(self, s): | 30 def gitopen(self, s): |
31 return util.popen('GIT_DIR=%s %s' % (self.path, s), 'rb') | 31 return util.popen('GIT_DIR=%s %s' % (self.path, s), 'rb') |
32 | 32 |
33 def __init__(self, ui, path, rev=None): | 33 def __init__(self, ui, path, rev=None): |
34 super(convert_git, self).__init__(ui, path, rev=rev) | 34 super(convert_git, self).__init__(ui, path, rev=rev) |
35 | 35 |
42 | 42 |
43 self.path = path | 43 self.path = path |
44 | 44 |
45 def getheads(self): | 45 def getheads(self): |
46 if not self.rev: | 46 if not self.rev: |
47 fh = self.gitcmd('git rev-parse --branches --remotes') | 47 fh = self.gitopen('git rev-parse --branches --remotes') |
48 return fh.read().splitlines() | 48 return fh.read().splitlines() |
49 else: | 49 else: |
50 fh = self.gitcmd("git rev-parse --verify %s" % self.rev) | 50 fh = self.gitopen("git rev-parse --verify %s" % self.rev) |
51 return [fh.read()[:-1]] | 51 return [fh.read()[:-1]] |
52 | 52 |
53 def catfile(self, rev, type): | 53 def catfile(self, rev, type): |
54 if rev == "0" * 40: | 54 if rev == "0" * 40: |
55 raise IOError() | 55 raise IOError() |
56 fh = self.gitcmd("git cat-file %s %s" % (type, rev)) | 56 fh = self.gitopen("git cat-file %s %s" % (type, rev)) |
57 return fh.read() | 57 return fh.read() |
58 | 58 |
59 def getfile(self, name, rev): | 59 def getfile(self, name, rev): |
60 return self.catfile(rev, "blob") | 60 return self.catfile(rev, "blob") |
61 | 61 |
62 def getmode(self, name, rev): | 62 def getmode(self, name, rev): |
63 return self.modecache[(name, rev)] | 63 return self.modecache[(name, rev)] |
64 | 64 |
65 def getchanges(self, version): | 65 def getchanges(self, version): |
66 self.modecache = {} | 66 self.modecache = {} |
67 fh = self.gitcmd("git diff-tree -z --root -m -r %s" % version) | 67 fh = self.gitopen("git diff-tree -z --root -m -r %s" % version) |
68 changes = [] | 68 changes = [] |
69 seen = set() | 69 seen = set() |
70 entry = None | 70 entry = None |
71 for l in fh.read().split('\x00'): | 71 for l in fh.read().split('\x00'): |
72 if not entry: | 72 if not entry: |
121 rev=version) | 121 rev=version) |
122 return c | 122 return c |
123 | 123 |
124 def gettags(self): | 124 def gettags(self): |
125 tags = {} | 125 tags = {} |
126 fh = self.gitcmd('git ls-remote --tags "%s"' % self.path) | 126 fh = self.gitopen('git ls-remote --tags "%s"' % self.path) |
127 prefix = 'refs/tags/' | 127 prefix = 'refs/tags/' |
128 for line in fh: | 128 for line in fh: |
129 line = line.strip() | 129 line = line.strip() |
130 if not line.endswith("^{}"): | 130 if not line.endswith("^{}"): |
131 continue | 131 continue |
138 return tags | 138 return tags |
139 | 139 |
140 def getchangedfiles(self, version, i): | 140 def getchangedfiles(self, version, i): |
141 changes = [] | 141 changes = [] |
142 if i is None: | 142 if i is None: |
143 fh = self.gitcmd("git diff-tree --root -m -r %s" % version) | 143 fh = self.gitopen("git diff-tree --root -m -r %s" % version) |
144 for l in fh: | 144 for l in fh: |
145 if "\t" not in l: | 145 if "\t" not in l: |
146 continue | 146 continue |
147 m, f = l[:-1].split("\t") | 147 m, f = l[:-1].split("\t") |
148 changes.append(f) | 148 changes.append(f) |
149 fh.close() | 149 fh.close() |
150 else: | 150 else: |
151 fh = self.gitcmd('git diff-tree --name-only --root -r %s "%s^%s" --' | 151 fh = self.gitopen('git diff-tree --name-only --root -r %s "%s^%s" --' |
152 % (version, version, i + 1)) | 152 % (version, version, i + 1)) |
153 changes = [f.rstrip('\n') for f in fh] | 153 changes = [f.rstrip('\n') for f in fh] |
154 fh.close() | 154 fh.close() |
155 | 155 |
156 return changes | 156 return changes |