def compare_commented_files(file1, file2, comment=None, source=None): difference = compare_files(file1, file2, source=source) if comment: if difference is None: difference = Difference(None, file1.name, file2.name) difference.add_comment(comment) return difference
def test_size_updates(): d = Difference("0123456789", "path1", "path2") assert_size(d, 20) d.add_details([Difference("0123456789", "path1/a", "path2/a")]) assert_size(d, 44) d.add_comment("lol1") assert_size(d, 48)
def compare_files(file1, file2, source=None, diff_content_only=False): logger.debug( "Comparing %s (%s) and %s (%s)", file1.name, file1.__class__.__name__, file2.name, file2.__class__.__name__, ) if any_excluded(file1.name, file2.name): return None with profile('has_same_content_as', file1): if file1.has_same_content_as(file2): logger.debug( "has_same_content_as returned True; skipping further comparisons" ) return None if diff_content_only: difference = Difference(None, file1.name, file2.name) difference.add_comment("Files differ") return difference specialize(file1) specialize(file2) if isinstance(file1, MissingFile): file1.other_file = file2 elif isinstance(file2, MissingFile): file2.other_file = file1 elif file1.__class__.__name__ != file2.__class__.__name__: return file1.compare_bytes(file2, source) with profile('compare_files (cumulative)', file1): return file1.compare(file2, source)
def compare_pair(file1, file2, comment): difference = compare_files( file1, file2, source=None, diff_content_only=no_recurse ) if comment: if difference is None: difference = Difference(None, file1.name, file2.name) difference.add_comment(comment) return difference
def _compare_using_details(self, other, source): details = [] difference = Difference(None, self.name, other.name, source=source) if hasattr(self, 'compare_details'): details.extend(self.compare_details(other, source)) if self.as_container: if self.as_container.auto_diff_metadata: details.extend([ Difference.from_text( self.magic_file_type, other.magic_file_type, self, other, source='filetype from file(1)', ), Difference.from_text( self.__class__.__name__, other.__class__.__name__, self, other, source='filetype from diffoscope', ), ]) # Don't recurse forever on archive quines, etc. depth = self._as_container.depth no_recurse = depth >= Config().max_container_depth if no_recurse: msg = "Reached max container depth ({})".format(depth) logger.debug(msg) difference.add_comment(msg) details.extend( self.as_container.compare(other.as_container, no_recurse=no_recurse)) details = [x for x in details if x] if not details: return None difference.add_details(details) return difference
def _compare_using_details(self, other, source): details = [] difference = Difference(None, self.name, other.name, source=source) if hasattr(self, 'compare_details'): details.extend(self.compare_details(other, source)) if self.as_container: # Don't recursve forever on archive quines, etc. depth = self._as_container.depth no_recurse = (depth >= Config().max_container_depth) if no_recurse: msg = "Reached max container depth ({})".format(depth) logger.debug(msg) difference.add_comment(msg) details.extend( self.as_container.compare(other.as_container, no_recurse=no_recurse)) details = [x for x in details if x] if not details: return None difference.add_details(details) return difference