changeset 4611 | 274c99fc629f |
parent 4610 | b43f17691ae6 |
child 4612 | 86e5500a517e |
4610:b43f17691ae6 | 4611:274c99fc629f |
---|---|
10 from node import * |
10 from node import * |
11 from i18n import _ |
11 from i18n import _ |
12 import struct, os, time, bisect, stat, strutil, util, re, errno, ignore |
12 import struct, os, time, bisect, stat, strutil, util, re, errno, ignore |
13 import cStringIO |
13 import cStringIO |
14 |
14 |
15 _unknown = ('?', 0, 0, 0) |
|
16 _format = ">cllll" |
|
17 |
|
15 class dirstate(object): |
18 class dirstate(object): |
16 format = ">cllll" |
|
17 |
19 |
18 def __init__(self, opener, ui, root): |
20 def __init__(self, opener, ui, root): |
19 self.opener = opener |
21 self.opener = opener |
20 self.root = root |
22 self.root = root |
21 self.dirty = 0 |
23 self.dirty = 0 |
88 self.write() |
90 self.write() |
89 |
91 |
90 def __getitem__(self, key): |
92 def __getitem__(self, key): |
91 return self.map[key] |
93 return self.map[key] |
92 |
94 |
93 _unknown = ('?', 0, 0, 0) |
|
94 |
|
95 def get(self, key): |
|
96 try: |
|
97 return self[key] |
|
98 except KeyError: |
|
99 return self._unknown |
|
100 |
|
101 def __contains__(self, key): |
95 def __contains__(self, key): |
102 return key in self.map |
96 return key in self.map |
103 |
97 |
104 def parents(self): |
98 def parents(self): |
105 return self.pl |
99 return self.pl |
118 def setbranch(self, branch): |
112 def setbranch(self, branch): |
119 self._branch = branch |
113 self._branch = branch |
120 self.opener("branch", "w").write(branch + '\n') |
114 self.opener("branch", "w").write(branch + '\n') |
121 |
115 |
122 def state(self, key): |
116 def state(self, key): |
123 try: |
117 return self.map.get(key, ("?",))[0] |
124 return self[key][0] |
|
125 except KeyError: |
|
126 return "?" |
|
127 |
118 |
128 def read(self): |
119 def read(self): |
129 self.map = {} |
120 self.map = {} |
130 self.copymap = {} |
121 self.copymap = {} |
131 self.pl = [nullid, nullid] |
122 self.pl = [nullid, nullid] |
140 self.pl = [st[:20], st[20: 40]] |
131 self.pl = [st[:20], st[20: 40]] |
141 |
132 |
142 # deref fields so they will be local in loop |
133 # deref fields so they will be local in loop |
143 dmap = self.map |
134 dmap = self.map |
144 copymap = self.copymap |
135 copymap = self.copymap |
145 format = self.format |
|
146 unpack = struct.unpack |
136 unpack = struct.unpack |
147 |
137 |
148 pos = 40 |
138 pos = 40 |
149 e_size = struct.calcsize(format) |
139 e_size = struct.calcsize(_format) |
150 |
140 |
151 while pos < len(st): |
141 while pos < len(st): |
152 newpos = pos + e_size |
142 newpos = pos + e_size |
153 e = unpack(format, st[pos:newpos]) |
143 e = unpack(_format, st[pos:newpos]) |
154 l = e[4] |
144 l = e[4] |
155 pos = newpos |
145 pos = newpos |
156 newpos = pos + l |
146 newpos = pos + l |
157 f = st[pos:newpos] |
147 f = st[pos:newpos] |
158 if '\0' in f: |
148 if '\0' in f: |
256 cs.write("".join(self.pl)) |
246 cs.write("".join(self.pl)) |
257 for f, e in self.map.iteritems(): |
247 for f, e in self.map.iteritems(): |
258 c = self.copied(f) |
248 c = self.copied(f) |
259 if c: |
249 if c: |
260 f = f + "\0" + c |
250 f = f + "\0" + c |
261 e = struct.pack(self.format, e[0], e[1], e[2], e[3], len(f)) |
251 e = struct.pack(_format, e[0], e[1], e[2], e[3], len(f)) |
262 cs.write(e) |
252 cs.write(e) |
263 cs.write(f) |
253 cs.write(f) |
264 st = self.opener("dirstate", "w", atomictemp=True) |
254 st = self.opener("dirstate", "w", atomictemp=True) |
265 st.write(cs.getvalue()) |
255 st.write(cs.getvalue()) |
266 st.rename() |
256 st.rename() |