~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tree.py

  • Committer: Vincent Ladeuil
  • Date: 2011-08-12 09:49:24 UTC
  • mfrom: (6015.9.10 2.4)
  • mto: This revision was merged to the branch mainline in revision 6066.
  • Revision ID: v.ladeuil+lp@free.fr-20110812094924-knc5s0g7vs31a2f1
Merge 2.4 into trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
277
277
 
278
278
        :param file_id: The file_id of the file.
279
279
        :param path: The path of the file.
 
280
 
280
281
        If both file_id and path are supplied, an implementation may use
281
282
        either one.
 
283
 
 
284
        :returns: A single byte string for the whole file.
282
285
        """
283
286
        my_file = self.get_file(file_id, path)
284
287
        try:
297
300
        """
298
301
        return osutils.split_lines(self.get_file_text(file_id, path))
299
302
 
 
303
    def get_file_verifier(self, file_id, path=None, stat_value=None):
 
304
        """Return a verifier for a file.
 
305
 
 
306
        The default implementation returns a sha1.
 
307
 
 
308
        :param file_id: The handle for this file.
 
309
        :param path: The path that this file can be found at.
 
310
            These must point to the same object.
 
311
        :param stat_value: Optional stat value for the object
 
312
        :return: Tuple with verifier name and verifier data
 
313
        """
 
314
        return ("SHA1", self.get_file_sha1(file_id, path=path,
 
315
            stat_value=stat_value))
 
316
 
300
317
    def get_file_sha1(self, file_id, path=None, stat_value=None):
301
318
        """Return the SHA1 file for a file.
302
319
 
 
320
        :note: callers should use get_file_verifier instead
 
321
            where possible, as the underlying repository implementation may
 
322
            have quicker access to a non-sha1 verifier.
 
323
 
303
324
        :param file_id: The handle for this file.
304
325
        :param path: The path that this file can be found at.
305
326
            These must point to the same object.
952
973
        if source_kind != target_kind:
953
974
            changed_content = True
954
975
        elif source_kind == 'file':
955
 
            if (self.source.get_file_sha1(file_id, source_path, source_stat) !=
956
 
                self.target.get_file_sha1(file_id, target_path, target_stat)):
 
976
            if not self.file_content_matches(file_id, file_id, source_path,
 
977
                    target_path, source_stat, target_stat):
957
978
                changed_content = True
958
979
        elif source_kind == 'symlink':
959
980
            if (self.source.get_symlink_target(file_id) !=
1272
1293
                    changed_file_ids.add(result[0])
1273
1294
                    yield result
1274
1295
 
 
1296
    @needs_read_lock
 
1297
    def file_content_matches(self, source_file_id, target_file_id,
 
1298
            source_path=None, target_path=None, source_stat=None, target_stat=None):
 
1299
        """Check if two files are the same in the source and target trees.
 
1300
 
 
1301
        This only checks that the contents of the files are the same,
 
1302
        it does not touch anything else.
 
1303
 
 
1304
        :param source_file_id: File id of the file in the source tree
 
1305
        :param target_file_id: File id of the file in the target tree
 
1306
        :param source_path: Path of the file in the source tree
 
1307
        :param target_path: Path of the file in the target tree
 
1308
        :param source_stat: Optional stat value of the file in the source tree
 
1309
        :param target_stat: Optional stat value of the file in the target tree
 
1310
        :return: Boolean indicating whether the files have the same contents
 
1311
        """
 
1312
        source_verifier_kind, source_verifier_data = self.source.get_file_verifier(
 
1313
            source_file_id, source_path, source_stat)
 
1314
        target_verifier_kind, target_verifier_data = self.target.get_file_verifier(
 
1315
            target_file_id, target_path, target_stat)
 
1316
        if source_verifier_kind == target_verifier_kind:
 
1317
            return (source_verifier_data == target_verifier_data)
 
1318
        # Fall back to SHA1 for now
 
1319
        if source_verifier_kind != "SHA1":
 
1320
            source_sha1 = self.source.get_file_sha1(source_file_id,
 
1321
                    source_path, source_stat)
 
1322
        else:
 
1323
            source_sha1 = source_verifier_data
 
1324
        if target_verifier_kind != "SHA1":
 
1325
            target_sha1 = self.target.get_file_sha1(target_file_id,
 
1326
                    target_path, target_stat)
 
1327
        else:
 
1328
            target_sha1 = target_verifier_data
 
1329
        return (source_sha1 == target_sha1)
1275
1330
 
1276
1331
InterTree.register_optimiser(InterTree)
1277
1332