~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/hashcache.py

Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.

Show diffs side-by-side

added added

removed removed

Lines of Context:
94
94
    """
95
95
    needs_write = False
96
96
 
97
 
    def __init__(self, basedir):
 
97
    def __init__(self, basedir, mode=None):
 
98
        """Create a hash cache in base dir, and set the file mode to mode."""
98
99
        self.basedir = basedir
99
100
        self.hit_count = 0
100
101
        self.miss_count = 0
103
104
        self.removed_count = 0
104
105
        self.update_count = 0
105
106
        self._cache = {}
 
107
        self._mode = mode
106
108
 
107
109
    def cache_file_name(self):
108
110
        # FIXME: duplicate path logic here, this should be 
124
126
        Obsolete entries are those where the file has been modified or deleted
125
127
        since the entry was inserted.        
126
128
        """
 
129
        # FIXME optimisation opportunity, on linux [and check other oses]:
 
130
        # rather than iteritems order, stat in inode order.
127
131
        prep = [(ce[1][3], path, ce) for (path, ce) in self._cache.iteritems()]
128
132
        prep.sort()
129
133
        
202
206
        
203
207
    def write(self):
204
208
        """Write contents of cache to file."""
205
 
        outf = AtomicFile(self.cache_file_name(), 'wb')
 
209
        outf = AtomicFile(self.cache_file_name(), 'wb', new_mode=self._mode)
206
210
        try:
207
211
            print >>outf, CACHE_HEADER,
208
212