Mercurial > hg-git
annotate hggit/overlay.py @ 612:bf8518b09d57
overlays: fix incoming support for hg 2.8
This was crafted mostly via a bunch of aimless flailing in the
code. I'm pretty well convinced at this point that the incoming
support needs to be rewritten slightly to behave properly in the new
world order (specifically, the overlayrepo class probably should be
subclassing localrepo, or else more directly reimplementing things
instead of trying to forward methods.)
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Sat, 05 Oct 2013 17:40:50 -0400 |
parents | 3964de9961ec |
children | 0a514e303a06 |
rev | line source |
---|---|
408 | 1 # overlay classes for repositories |
2 # unifies access to unimported git objects and committed hg objects | |
3 # designed to support incoming | |
4 # | |
5 # incomplete, implemented on demand | |
6 | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
7 from mercurial import ancestor |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
8 from mercurial import manifest |
408 | 9 from mercurial import context |
10 from mercurial.node import bin, hex, nullid | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
11 from mercurial import localrepo |
408 | 12 |
13 class overlaymanifest(object): | |
14 def __init__(self, repo, sha): | |
15 self.repo = repo | |
16 self.tree = repo.handler.git.get_object(sha) | |
17 self._map = None | |
18 self._flagmap = None | |
19 | |
466
ac16efd25cc4
overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents:
423
diff
changeset
|
20 def withflags(self): |
ac16efd25cc4
overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents:
423
diff
changeset
|
21 self.load() |
ac16efd25cc4
overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents:
423
diff
changeset
|
22 return set([path for path, flag in self._flagmap.iteritems() |
ac16efd25cc4
overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents:
423
diff
changeset
|
23 if flag & 020100]) |
ac16efd25cc4
overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents:
423
diff
changeset
|
24 |
408 | 25 def copy(self): |
26 return overlaymanifest(self.repo, self.tree.id) | |
27 | |
28 def keys(self): | |
29 self.load() | |
30 return self._map.keys() | |
31 | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
32 def iterkeys(self): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
33 return iter(self.keys()) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
34 |
408 | 35 def flags(self, path): |
36 self.load() | |
37 | |
38 def hgflag(gitflag): | |
39 if gitflag & 0100: | |
40 return 'x' | |
41 elif gitflag & 020000: | |
42 return 'l' | |
43 else: | |
44 return '' | |
45 | |
46 return hgflag(self._flagmap[path]) | |
47 | |
48 def load(self): | |
49 if self._map is not None: | |
50 return | |
51 | |
52 self._map = {} | |
53 self._flagmap = {} | |
54 | |
55 def addtree(tree, dirname): | |
423
f29401590803
overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents:
408
diff
changeset
|
56 for entry in tree.iteritems(): |
f29401590803
overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents:
408
diff
changeset
|
57 if entry.mode & 040000: |
408 | 58 # expand directory |
423
f29401590803
overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents:
408
diff
changeset
|
59 subtree = self.repo.handler.git.get_object(entry.sha) |
f29401590803
overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents:
408
diff
changeset
|
60 addtree(subtree, dirname + entry.path + '/') |
408 | 61 else: |
423
f29401590803
overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents:
408
diff
changeset
|
62 path = dirname + entry.path |
f29401590803
overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents:
408
diff
changeset
|
63 self._map[path] = bin(entry.sha) |
f29401590803
overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents:
408
diff
changeset
|
64 self._flagmap[path] = entry.mode |
408 | 65 |
66 addtree(self.tree, '') | |
67 | |
597
3964de9961ec
overlaymanifest: add iteritems(), used by recent hg versions
Augie Fackler <raf@durin42.com>
parents:
570
diff
changeset
|
68 def iteritems(self): |
3964de9961ec
overlaymanifest: add iteritems(), used by recent hg versions
Augie Fackler <raf@durin42.com>
parents:
570
diff
changeset
|
69 self.load() |
3964de9961ec
overlaymanifest: add iteritems(), used by recent hg versions
Augie Fackler <raf@durin42.com>
parents:
570
diff
changeset
|
70 return self._map.iteritems() |
3964de9961ec
overlaymanifest: add iteritems(), used by recent hg versions
Augie Fackler <raf@durin42.com>
parents:
570
diff
changeset
|
71 |
408 | 72 def __iter__(self): |
73 self.load() | |
74 return self._map.__iter__() | |
75 | |
76 def __getitem__(self, path): | |
77 self.load() | |
78 return self._map[path] | |
79 | |
80 def __delitem__(self, path): | |
81 del self._map[path] | |
82 | |
83 class overlayfilectx(object): | |
84 def __init__(self, repo, path, fileid=None): | |
85 self.repo = repo | |
86 self._path = path | |
87 self.fileid = fileid | |
88 | |
89 # this is a hack to skip copy detection | |
90 def ancestors(self): | |
91 return [self, self] | |
92 | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
93 def filenode(self): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
94 return nullid |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
95 |
408 | 96 def rev(self): |
97 return -1 | |
98 | |
99 def path(self): | |
100 return self._path | |
101 | |
102 def filelog(self): | |
103 return self.fileid | |
104 | |
105 def data(self): | |
106 blob = self.repo.handler.git.get_object(self.fileid) | |
107 return blob.data | |
108 | |
109 class overlaychangectx(context.changectx): | |
110 def __init__(self, repo, sha): | |
111 self.repo = repo | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
112 if not isinstance(sha, basestring): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
113 sha = sha.hex() |
408 | 114 self.commit = repo.handler.git.get_object(sha) |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
115 self._overlay = getattr(repo, 'gitoverlay', repo) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
116 self._rev = self._overlay.rev(bin(self.commit.id)) |
408 | 117 |
118 def node(self): | |
119 return bin(self.commit.id) | |
120 | |
121 def rev(self): | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
122 return self._rev |
408 | 123 |
124 def date(self): | |
125 return self.commit.author_time, self.commit.author_timezone | |
126 | |
127 def branch(self): | |
128 return 'default' | |
129 | |
130 def user(self): | |
131 return self.commit.author | |
132 | |
133 def files(self): | |
134 return [] | |
135 | |
136 def extra(self): | |
137 return {} | |
138 | |
139 def description(self): | |
140 return self.commit.message | |
141 | |
142 def parents(self): | |
143 return [overlaychangectx(self.repo, sha) for sha in self.commit.parents] | |
144 | |
145 def manifestnode(self): | |
146 return bin(self.commit.tree) | |
147 | |
148 def hex(self): | |
149 return self.commit.id | |
150 | |
151 def tags(self): | |
152 return [] | |
153 | |
154 def bookmarks(self): | |
155 return [] | |
156 | |
157 def manifest(self): | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
158 return overlaymanifest(self._overlay, self.commit.tree) |
408 | 159 |
160 def filectx(self, path, filelog=None): | |
161 mf = self.manifest() | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
162 return overlayfilectx(self._overlay, path, mf[path]) |
408 | 163 |
164 def flags(self, path): | |
165 mf = self.manifest() | |
166 return mf.flags(path) | |
167 | |
168 def __nonzero__(self): | |
169 return True | |
170 | |
568
41f6e3df67b1
overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
171 def phase(self): |
41f6e3df67b1
overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
172 try: |
41f6e3df67b1
overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
173 from mercurial import phases |
41f6e3df67b1
overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
174 return phases.draft |
41f6e3df67b1
overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
175 except ImportError: |
41f6e3df67b1
overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
176 return 1 |
41f6e3df67b1
overlaychangectx: fix compatibility with mercurial 2.4-rc (no attribute _repo)
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
177 |
408 | 178 class overlayrevlog(object): |
179 def __init__(self, repo, base): | |
180 self.repo = repo | |
181 self.base = base | |
182 | |
183 def parents(self, n): | |
184 gitrev = self.repo.revmap.get(n) | |
185 if not gitrev: | |
186 # we've reached a revision we have | |
187 return self.base.parents(n) | |
188 commit = self.repo.handler.git.get_object(n) | |
189 | |
190 def gitorhg(n): | |
191 hn = self.repo.handler.map_hg_get(hex(n)) | |
192 if hn is not None: | |
193 return bin(hn) | |
194 return n | |
195 | |
196 # currently ignores the octopus | |
197 p1 = gitorhg(bin(commit.parents[0])) | |
198 if len(commit.parents) > 1: | |
199 p2 = gitorhg(bin(commit.parents[1])) | |
200 else: | |
201 p2 = nullid | |
202 | |
203 return [p1, p2] | |
204 | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
205 def ancestor(self, a, b): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
206 anode = self.repo.nodemap.get(a) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
207 bnode = self.repo.nodemap.get(b) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
208 if anode is None and bnode is None: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
209 return self.base.ancestor(a, b) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
210 ancs = ancestor.ancestors(self.parentrevs, a, b) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
211 if ancs: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
212 return min(map(self.node, ancs)) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
213 return nullid |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
214 |
408 | 215 def parentrevs(self, rev): |
216 return [self.rev(p) for p in self.parents(self.node(rev))] | |
217 | |
218 def node(self, rev): | |
219 gitnode = self.repo.nodemap.get(rev) | |
220 if gitnode is None: | |
221 return self.base.node(rev) | |
222 return gitnode | |
223 | |
224 def rev(self, n): | |
225 gitrev = self.repo.revmap.get(n) | |
226 if gitrev is None: | |
227 return self.base.rev(n) | |
228 return gitrev | |
229 | |
230 def nodesbetween(self, nodelist, revs): | |
231 # this is called by pre-1.9 incoming with the nodelist we returned from | |
232 # getremotechanges. Just return it back. | |
233 return [nodelist] | |
234 | |
235 def __len__(self): | |
236 return len(self.repo.handler.repo) + len(self.repo.revmap) | |
237 | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
238 class overlaymanifestlog(overlayrevlog): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
239 def read(self, sha): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
240 if sha == nullid: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
241 return manifest.manifestdict() |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
242 return overlaymanifest(self.repo, sha) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
243 |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
244 class overlaychangelog(overlayrevlog): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
245 def read(self, sha): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
246 if isinstance(sha, int): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
247 sha = self.node(sha) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
248 if sha == nullid: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
249 return (nullid, "", (0, 0), [], "", {}) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
250 return overlaychangectx(self.repo, sha) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
251 |
408 | 252 |
253 class overlayrepo(object): | |
254 def __init__(self, handler, commits, refs): | |
255 self.handler = handler | |
256 | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
257 self.changelog = overlaychangelog(self, handler.repo.changelog) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
258 self.manifest = overlaymanifestlog(self, handler.repo.manifest) |
408 | 259 |
260 # for incoming -p | |
261 self.root = handler.repo.root | |
262 self.getcwd = handler.repo.getcwd | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
263 # self.status = handler.repo.status |
408 | 264 self.ui = handler.repo.ui |
265 | |
266 self.revmap = None | |
267 self.nodemap = None | |
268 self.refmap = None | |
269 self.tagmap = None | |
270 | |
271 self._makemaps(commits, refs) | |
272 | |
273 def __getitem__(self, n): | |
274 if n not in self.revmap: | |
275 return self.handler.repo[n] | |
276 return overlaychangectx(self, n) | |
277 | |
612
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
278 def _handlerhack(self, method, *args, **kwargs): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
279 nothing = object() |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
280 r = self.handler.repo |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
281 oldhandler = getattr(r, 'handler', nothing) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
282 oldoverlay = getattr(r, 'gitoverlay', nothing) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
283 r.handler = self.handler |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
284 r.gitoverlay = self |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
285 try: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
286 return getattr(r, method)(*args, **kwargs) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
287 finally: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
288 if oldhandler is nothing: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
289 del r.handler |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
290 else: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
291 r.handler = oldhandler |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
292 if oldoverlay is nothing: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
293 del r.gitoverlay |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
294 else: |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
295 r.gitoverlay = oldoverlay |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
296 |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
297 def status(self, *args, **kwargs): |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
298 return self._handlerhack('status', *args, **kwargs) |
bf8518b09d57
overlays: fix incoming support for hg 2.8
Augie Fackler <raf@durin42.com>
parents:
597
diff
changeset
|
299 |
557
4f4ab2d89375
gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
300 def node(self, n): |
4f4ab2d89375
gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
301 """Returns an Hg or Git hash for the specified Git hash""" |
4f4ab2d89375
gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
302 if bin(n) in self.revmap: |
4f4ab2d89375
gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
303 return n |
4f4ab2d89375
gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
304 return self.handler.map_hg_get(n) |
4f4ab2d89375
gitrepo: initial support for listkeys
David M. Carr <david@carrclan.us>
parents:
466
diff
changeset
|
305 |
408 | 306 def nodebookmarks(self, n): |
307 return self.refmap.get(n, []) | |
308 | |
309 def nodetags(self, n): | |
310 return self.tagmap.get(n, []) | |
311 | |
312 def rev(self, n): | |
313 return self.revmap[n] | |
314 | |
315 def filectx(self, path, fileid=None): | |
316 return overlayfilectx(self, path, fileid=fileid) | |
317 | |
318 def _makemaps(self, commits, refs): | |
319 baserev = self.handler.repo['tip'].rev() | |
320 self.revmap = {} | |
321 self.nodemap = {} | |
322 for i, n in enumerate(commits): | |
323 rev = baserev + i + 1 | |
324 self.revmap[n] = rev | |
325 self.nodemap[rev] = n | |
326 | |
327 self.refmap = {} | |
328 self.tagmap = {} | |
329 for ref in refs: | |
330 if ref.startswith('refs/heads/'): | |
331 refname = ref[11:] | |
332 self.refmap.setdefault(bin(refs[ref]), []).append(refname) | |
333 elif ref.startswith('refs/tags/'): | |
334 tagname = ref[10:] | |
335 self.tagmap.setdefault(bin(refs[ref]), []).append(tagname) |