Changeset ddbc11f34557…
Parent bb270f6cff08…
by
Changes to one file · Browse files at ddbc11f34557 Showing diff from parent bb270f6cff08 Diff from another changeset...
@@ -25,10 +25,17 @@
def write_cache_time(f, t):
+ if isinstance(t, int):
+ t = (t, 0)
f.write(struct.pack(">LL", *t))
def read_cache_entry(f):
+ """Read an entry from a cache file.
+
+ :param f: File-like object to read from
+ :return: tuple with: inode, device, mode, uid, gid, size, sha, flags
+ """
beginoffset = f.tell()
ctime = read_cache_time(f)
mtime = read_cache_time(f)
@@ -60,8 +67,8 @@ f.write(name)
f.write(chr(0))
real_size = ((f.tell() - beginoffset + 7) & ~7)
- f.write(chr(0) * (f.tell() - (beginoffset + real_size)))
- return
+ f.write("\0" * ((beginoffset + real_size) - f.tell()))
+
def read_index(f):
"""Read an index file, yielding the individual entries."""
@@ -80,8 +87,8 @@ :param f: File object to read from
"""
ret = {}
- for (name, ctime, mtime, ino, dev, mode, uid, gid, size, sha, flags) in read_index(f):
- ret[name] = (ctime, mtime, ino, dev, mode, uid, gid, size, sha, flags)
+ for x in read_index(f):
+ ret[x[0]] = tuple(x[1:])
return ret
@@ -110,15 +117,14 @@class Index(object):
def __init__(self, filename):
- self._entries = []
self._filename = filename
- self._byname = {}
+ self.clear()
self.read()
def write(self):
f = open(self._filename, 'w')
try:
- write_index(f, self._entries)
+ write_index_dict(f, self._byname)
finally:
f.close()
@@ -126,18 +132,13 @@ f = open(self._filename, 'r')
try:
for x in read_index(f):
- self[x[0]] = x
+
+ self[x[0]] = tuple(x[1:])
finally:
f.close()
def __len__(self):
- return len(self._entries)
-
- def items(self):
- return list(self._entries)
-
- def __iter__(self):
- return iter(self._entries)
+ return len(self._byname)
def __getitem__(self, name):
return self._byname[name]
@@ -147,15 +148,15 @@
def clear(self):
self._byname = {}
- self._entries = []
def __setitem__(self, name, x):
+ assert isinstance(name, str)
+ assert len(x) == 10
# Remove the old entry if any
- old_entry = self._byname.get(x[0])
- if old_entry is not None:
- self._entries.remove(old_entry)
- self._entries.append(x)
- self._byname[x[0]] = x
+ self._byname[name] = x
+
+ def iteritems(self):
+ return self._byname.iteritems()
def update(self, entries):
for name, value in entries.iteritems():
|
Loading...