166
class FileChangeCache(object):
167
def __init__(self, history, cache_path):
168
self.history = history
169
self.log = history.log
171
if not os.path.exists(cache_path):
174
self._changes_filename = os.path.join(cache_path, 'filechanges')
176
# use a lockfile since the cache folder could be shared across
177
# different processes.
178
self._lock = LockFile(os.path.join(cache_path, 'filechange-lock'))
184
self.log.debug('Closing cache file.')
196
def get_file_changes(self, entries):
197
cache = shelve.open(self._changes_filename, 'c', protocol=2)
201
missing_entry_indices = []
202
for entry in entries:
203
changes = cache.get(entry.revid)
204
if changes is not None:
207
missing_entries.append(entry)
208
missing_entry_indices.append(len(out))
210
missing_changes = self.history.get_file_changes_uncached(missing_entries)
211
for i, entry, changes in zip(
212
missing_entry_indices, missing_entries, missing_changes):
213
cache[entry.revid] = out[i] = changes