229
229
outf.write(CACHE_HEADER)
231
231
for path, c in viewitems(self._cache):
232
line_info = [path.encode('utf-8'), '// ', c[0], ' ']
233
line_info.append(' '.join([str(fld) for fld in c[1]]))
234
line_info.append('\n')
235
outf.write(''.join(line_info))
232
line_info = [path.encode('utf-8'), b'// ', c[0], b' ']
233
line_info.append(b'%d %d %d %d %d %d' % c[1])
234
line_info.append(b'\n')
235
outf.write(b''.join(line_info))
237
237
self.needs_write = False
238
238
## mutter("write hash cache: %s hits=%d misses=%d stat=%d recent=%d updates=%d",
254
254
fn = self.cache_file_name()
256
inf = file(fn, 'rb', buffering=65000)
256
inf = open(fn, 'rb', buffering=65000)
257
257
except IOError as e:
258
258
trace.mutter("failed to open %s: %s", fn, e)
259
259
# better write it now so it is valid
260
260
self.needs_write = True
264
if hdr != CACHE_HEADER:
265
trace.mutter('cache header marker not found at top of %s;'
266
' discarding cache', fn)
267
self.needs_write = True
272
path = l[:pos].decode('utf-8')
273
if path in self._cache:
274
trace.warning('duplicated path %r in cache' % path)
278
fields = l[pos:].split(' ')
280
trace.warning("bad line in hashcache: %r" % l)
285
trace.warning("bad sha1 in hashcache: %r" % sha1)
288
fp = tuple(map(int, fields[1:]))
290
self._cache[path] = (sha1, fp)
292
# GZ 2009-09-20: Should really use a try/finally block to ensure close
265
if hdr != CACHE_HEADER:
266
trace.mutter('cache header marker not found at top of %s;'
267
' discarding cache', fn)
268
self.needs_write = True
272
pos = l.index(b'// ')
273
path = l[:pos].decode('utf-8')
274
if path in self._cache:
275
trace.warning('duplicated path %r in cache' % path)
279
fields = l[pos:].split(b' ')
281
trace.warning("bad line in hashcache: %r" % l)
286
trace.warning("bad sha1 in hashcache: %r" % sha1)
289
fp = tuple(map(int, fields[1:]))
291
self._cache[path] = (sha1, fp)
295
293
self.needs_write = False