~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/hashcache.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-03-06 06:48:25 UTC
  • mfrom: (4070.8.6 debug-config)
  • Revision ID: pqm@pqm.ubuntu.com-20090306064825-kbpwggw21dygeix6
(mbp) debug_flags configuration option

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
# TODO: Up-front, stat all files in order and remove those which are deleted or
18
18
# out-of-date.  Don't actually re-read them until they're needed.  That ought
31
31
 
32
32
import os, stat, time
33
33
 
34
 
from bzrlib.filters import internal_size_sha_file_byname
35
34
from bzrlib.osutils import sha_file, sha_string, pathjoin, safe_unicode
36
35
from bzrlib.trace import mutter, warning
37
36
from bzrlib.atomicfile import AtomicFile
80
79
    """
81
80
    needs_write = False
82
81
 
83
 
    def __init__(self, root, cache_file_name, mode=None,
84
 
            content_filter_stack_provider=None):
85
 
        """Create a hash cache in base dir, and set the file mode to mode.
86
 
 
87
 
        :param content_filter_stack_provider: a function that takes a
88
 
            path (relative to the top of the tree) and a file-id as
89
 
            parameters and returns a stack of ContentFilters.
90
 
            If None, no content filtering is performed.
91
 
        """
 
82
    def __init__(self, root, cache_file_name, mode=None):
 
83
        """Create a hash cache in base dir, and set the file mode to mode."""
92
84
        self.root = safe_unicode(root)
93
85
        self.root_utf8 = self.root.encode('utf8') # where is the filesystem encoding ?
94
86
        self.hit_count = 0
100
92
        self._cache = {}
101
93
        self._mode = mode
102
94
        self._cache_file_name = safe_unicode(cache_file_name)
103
 
        self._filter_provider = content_filter_stack_provider
104
95
 
105
96
    def cache_file_name(self):
106
97
        return self._cache_file_name
170
161
 
171
162
        mode = file_fp[FP_MODE_COLUMN]
172
163
        if stat.S_ISREG(mode):
173
 
            if self._filter_provider is None:
174
 
                filters = []
175
 
            else:
176
 
                filters = self._filter_provider(path=path, file_id=None)
177
 
            digest = self._really_sha1_file(abspath, filters)
 
164
            digest = self._really_sha1_file(abspath)
178
165
        elif stat.S_ISLNK(mode):
179
166
            digest = sha_string(os.readlink(abspath))
180
167
        else:
211
198
            self._cache[path] = (digest, file_fp)
212
199
        return digest
213
200
 
214
 
    def _really_sha1_file(self, abspath, filters):
 
201
    def _really_sha1_file(self, abspath):
215
202
        """Calculate the SHA1 of a file by reading the full text"""
216
 
        return internal_size_sha_file_byname(abspath, filters)[1]
 
203
        return sha_file(file(abspath, 'rb', buffering=65000))
217
204
 
218
205
    def write(self):
219
206
        """Write contents of cache to file."""