Kiln » Dependencies » Dulwich Read More
Clone URL:  
Pushed to one repository · View In Graph Contained in master-1, master-0, and 0.9.4

Fix padding in index.

Changeset ddbc11f34557

Parent bb270f6cff08

by Jelmer Vernooij

Changes to one file · Browse files at ddbc11f34557 Showing diff from parent bb270f6cff08 Diff from another changeset...

Change 1 of 6 Show Entire File dulwich/​index.py Stacked
 
25
26
27
 
 
28
29
30
31
 
 
 
 
 
32
33
34
 
60
61
62
63
64
 
 
65
66
67
 
80
81
82
83
84
 
 
85
86
87
 
110
111
112
113
114
115
 
116
117
118
119
120
121
 
122
123
124
 
126
127
128
129
 
 
130
131
132
133
134
135
136
137
138
139
140
 
141
142
143
 
147
148
149
150
151
152
 
 
153
154
155
156
157
158
 
 
 
 
159
160
161
 
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
67
68
69
 
 
70
71
72
73
74
 
87
88
89
 
 
90
91
92
93
94
 
117
118
119
 
120
 
121
122
123
124
125
126
 
127
128
129
130
 
132
133
134
 
135
136
137
138
139
140
 
 
 
 
 
 
 
141
142
143
144
 
148
149
150
 
151
152
153
154
155
 
 
 
 
 
156
157
158
159
160
161
162
@@ -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():