def do_diff(file_id, old_path, new_path, action, force_binary): def tree_lines(tree, require_text=False): if tree.has_id(file_id): tree_file = tree.get_file(file_id) if require_text is True: tree_file = text_file(tree_file) return tree_file.readlines() else: return [] try: if force_binary: raise errors.BinaryFile() old_lines = tree_lines(old_tree, require_text=True) new_lines = tree_lines(new_tree, require_text=True) action.write(self.to_file) internal_diff(old_path, old_lines, new_path, new_lines, self.to_file) except errors.BinaryFile: old_lines = tree_lines(old_tree, require_text=False) new_lines = tree_lines(new_tree, require_text=False) action.add_property('encoding', 'base64') action.write(self.to_file) binary_diff(old_path, old_lines, new_path, new_lines, self.to_file)
def do_diff(file_id, old_path, new_path, action, force_binary): def tree_lines(tree, require_text=False): if file_id in tree: tree_file = tree.get_file(file_id) if require_text is True: tree_file = text_file(tree_file) return tree_file.readlines() else: return [] try: if force_binary: raise errors.BinaryFile() old_lines = tree_lines(old_tree, require_text=True) new_lines = tree_lines(new_tree, require_text=True) action.write(self.to_file) internal_diff(old_path, old_lines, new_path, new_lines, self.to_file) except errors.BinaryFile: old_lines = tree_lines(old_tree, require_text=False) new_lines = tree_lines(new_tree, require_text=False) action.add_property('encoding', 'base64') action.write(self.to_file) binary_diff(old_path, old_lines, new_path, new_lines, self.to_file)
def binary_diff(old_filename, old_lines, new_filename, new_lines, to_file): temp = StringIO() internal_diff(old_filename, old_lines, new_filename, new_lines, temp, allow_binary=True) temp.seek(0) base64.encode(temp, to_file) to_file.write('\n')