Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/dirstate.py @ 4611:274c99fc629f
dirstate: simplify state()
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 18 Jun 2007 13:24:34 -0500 |
parents | b43f17691ae6 |
children | 86e5500a517e |
comparison
equal
deleted
inserted
replaced
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() |