annotate hggit/overlay.py @ 466:ac16efd25cc4

overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
author Augie Fackler <raf@durin42.com>
date Thu, 26 Jul 2012 18:59:19 -0500
parents f29401590803
children 4f4ab2d89375 41f6e3df67b1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
1 # overlay classes for repositories
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
2 # unifies access to unimported git objects and committed hg objects
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
3 # designed to support incoming
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
4 #
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
5 # incomplete, implemented on demand
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
6
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
7 from mercurial import context
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
8 from mercurial.node import bin, hex, nullid
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
9
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
10 class overlaymanifest(object):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
11 def __init__(self, repo, sha):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
12 self.repo = repo
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
13 self.tree = repo.handler.git.get_object(sha)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
14 self._map = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
15 self._flagmap = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
16
466
ac16efd25cc4 overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents: 423
diff changeset
17 def withflags(self):
ac16efd25cc4 overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents: 423
diff changeset
18 self.load()
ac16efd25cc4 overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents: 423
diff changeset
19 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
20 if flag & 020100])
ac16efd25cc4 overlaymanifest: add the withflags method introduced in hg change a1dcd842ce17
Augie Fackler <raf@durin42.com>
parents: 423
diff changeset
21
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
22 def copy(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
23 return overlaymanifest(self.repo, self.tree.id)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
24
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
25 def keys(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
26 self.load()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
27 return self._map.keys()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
28
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
29 def flags(self, path):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
30 self.load()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
31
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
32 def hgflag(gitflag):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
33 if gitflag & 0100:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
34 return 'x'
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
35 elif gitflag & 020000:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
36 return 'l'
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
37 else:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
38 return ''
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
39
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
40 return hgflag(self._flagmap[path])
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
41
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
42 def load(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
43 if self._map is not None:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
44 return
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
45
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
46 self._map = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
47 self._flagmap = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
48
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
49 def addtree(tree, dirname):
423
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
50 for entry in tree.iteritems():
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
51 if entry.mode & 040000:
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
52 # expand directory
423
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
53 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
54 addtree(subtree, dirname + entry.path + '/')
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
55 else:
423
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
56 path = dirname + entry.path
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
57 self._map[path] = bin(entry.sha)
f29401590803 overlay: stop using deprecated tree.entries() method
Augie Fackler <durin42@gmail.com>
parents: 408
diff changeset
58 self._flagmap[path] = entry.mode
408
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
59
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
60 addtree(self.tree, '')
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
61
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
62 def __iter__(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
63 self.load()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
64 return self._map.__iter__()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
65
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
66 def __getitem__(self, path):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
67 self.load()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
68 return self._map[path]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
69
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
70 def __delitem__(self, path):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
71 del self._map[path]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
72
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
73 class overlayfilectx(object):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
74 def __init__(self, repo, path, fileid=None):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
75 self.repo = repo
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
76 self._path = path
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
77 self.fileid = fileid
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
78
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
79 # this is a hack to skip copy detection
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
80 def ancestors(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
81 return [self, self]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
82
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
83 def rev(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
84 return -1
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
85
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
86 def path(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
87 return self._path
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
88
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
89 def filelog(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
90 return self.fileid
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
91
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
92 def data(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
93 blob = self.repo.handler.git.get_object(self.fileid)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
94 return blob.data
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
95
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
96 class overlaychangectx(context.changectx):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
97 def __init__(self, repo, sha):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
98 self.repo = repo
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
99 self.commit = repo.handler.git.get_object(sha)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
100
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
101 def node(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
102 return bin(self.commit.id)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
103
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
104 def rev(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
105 return self.repo.rev(bin(self.commit.id))
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
106
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
107 def date(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
108 return self.commit.author_time, self.commit.author_timezone
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
109
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
110 def branch(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
111 return 'default'
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
112
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
113 def user(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
114 return self.commit.author
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
115
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
116 def files(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
117 return []
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
118
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
119 def extra(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
120 return {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
121
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
122 def description(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
123 return self.commit.message
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
124
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
125 def parents(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
126 return [overlaychangectx(self.repo, sha) for sha in self.commit.parents]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
127
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
128 def manifestnode(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
129 return bin(self.commit.tree)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
130
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
131 def hex(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
132 return self.commit.id
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
133
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
134 def tags(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
135 return []
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
136
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
137 def bookmarks(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
138 return []
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
139
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
140 def manifest(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
141 return overlaymanifest(self.repo, self.commit.tree)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
142
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
143 def filectx(self, path, filelog=None):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
144 mf = self.manifest()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
145 return overlayfilectx(self.repo, path, mf[path])
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
146
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
147 def flags(self, path):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
148 mf = self.manifest()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
149 return mf.flags(path)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
150
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
151 def __nonzero__(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
152 return True
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
153
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
154 class overlayrevlog(object):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
155 def __init__(self, repo, base):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
156 self.repo = repo
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
157 self.base = base
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
158
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
159 def parents(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
160 gitrev = self.repo.revmap.get(n)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
161 if not gitrev:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
162 # we've reached a revision we have
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
163 return self.base.parents(n)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
164 commit = self.repo.handler.git.get_object(n)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
165
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
166 def gitorhg(n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
167 hn = self.repo.handler.map_hg_get(hex(n))
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
168 if hn is not None:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
169 return bin(hn)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
170 return n
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
171
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
172 # currently ignores the octopus
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
173 p1 = gitorhg(bin(commit.parents[0]))
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
174 if len(commit.parents) > 1:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
175 p2 = gitorhg(bin(commit.parents[1]))
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
176 else:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
177 p2 = nullid
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
178
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
179 return [p1, p2]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
180
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
181 def parentrevs(self, rev):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
182 return [self.rev(p) for p in self.parents(self.node(rev))]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
183
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
184 def node(self, rev):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
185 gitnode = self.repo.nodemap.get(rev)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
186 if gitnode is None:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
187 return self.base.node(rev)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
188 return gitnode
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
189
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
190 def rev(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
191 gitrev = self.repo.revmap.get(n)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
192 if gitrev is None:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
193 return self.base.rev(n)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
194 return gitrev
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
195
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
196 def nodesbetween(self, nodelist, revs):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
197 # this is called by pre-1.9 incoming with the nodelist we returned from
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
198 # getremotechanges. Just return it back.
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
199 return [nodelist]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
200
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
201 def __len__(self):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
202 return len(self.repo.handler.repo) + len(self.repo.revmap)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
203
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
204
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
205 class overlayrepo(object):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
206 def __init__(self, handler, commits, refs):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
207 self.handler = handler
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
208
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
209 self.changelog = overlayrevlog(self, handler.repo.changelog)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
210 self.manifest = overlayrevlog(self, handler.repo.manifest)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
211
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
212 # for incoming -p
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
213 self.root = handler.repo.root
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
214 self.getcwd = handler.repo.getcwd
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
215 self.status = handler.repo.status
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
216 self.ui = handler.repo.ui
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
217
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
218 self.revmap = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
219 self.nodemap = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
220 self.refmap = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
221 self.tagmap = None
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
222
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
223 self._makemaps(commits, refs)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
224
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
225 def __getitem__(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
226 if n not in self.revmap:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
227 return self.handler.repo[n]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
228 return overlaychangectx(self, n)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
229
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
230 def nodebookmarks(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
231 return self.refmap.get(n, [])
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
232
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
233 def nodetags(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
234 return self.tagmap.get(n, [])
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
235
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
236 def rev(self, n):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
237 return self.revmap[n]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
238
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
239 def filectx(self, path, fileid=None):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
240 return overlayfilectx(self, path, fileid=fileid)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
241
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
242 def _makemaps(self, commits, refs):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
243 baserev = self.handler.repo['tip'].rev()
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
244 self.revmap = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
245 self.nodemap = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
246 for i, n in enumerate(commits):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
247 rev = baserev + i + 1
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
248 self.revmap[n] = rev
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
249 self.nodemap[rev] = n
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
250
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
251 self.refmap = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
252 self.tagmap = {}
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
253 for ref in refs:
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
254 if ref.startswith('refs/heads/'):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
255 refname = ref[11:]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
256 self.refmap.setdefault(bin(refs[ref]), []).append(refname)
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
257 elif ref.startswith('refs/tags/'):
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
258 tagname = ref[10:]
2dcfd4bbfc1a Support for hg incoming
Brendan Cully <brendan@kublai.com>
parents:
diff changeset
259 self.tagmap.setdefault(bin(refs[ref]), []).append(tagname)