Commit 94d08db4 authored by Chris Lamb's avatar Chris Lamb 👀
Browse files

Fix a gnarly regression when comparing directories against non-directories....

Fix a gnarly regression when comparing directories against non-directories. (Closes: #292)
parent fc46f9f1
Loading
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -82,9 +82,11 @@ def compare_root_paths(path1, path2):
    # DESCRIPTION attributes either, as the specialize() call above may not
    # have returned a specific instance.
    if difference is None and str(type(file1)) != str(type(file2)):
        difference = Difference(file1.name, file2.name)
        difference.add_comment(
            "Types of files differ; human-readable metadata may match literal file contents."
        return Difference.from_text(
            "type: {}".format(file1.file_type),
            "type: {}".format(file2.file_type),
            file1.name,
            file2.name,
        )

    return difference
@@ -136,6 +138,11 @@ def compare_files(file1, file2, source=None, diff_content_only=False):
    ):
        return file1.compare_bytes(file2, source)
    with profile("compare_files (cumulative)", file1):
        if file2.is_directory():
            difference = file2.compare(file1, source)
            if difference is not None:
                difference = difference.get_reverse()
            return difference
        return file1.compare(file2, source)


+6 −5
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import pytest

from diffoscope.comparators.binary import FilesystemFile
from diffoscope.comparators.directory import compare_directories
from diffoscope.comparators.utils.compare import compare_root_paths
from diffoscope.comparators.utils.specialize import specialize

from ..utils.data import data, get_data, assert_diff
@@ -113,14 +114,14 @@ def test_compare_to_dangling_symlink(tmpdir):
    assert_diff(a.compare(b), "test_directory_symlink_diff")


@pytest.mark.xfail(strict=False)
def test_compare_both_ways(tmpdir):
    """
    Comparing a directory with a file shouldn't crash, but nor should as
    comparing a file with a directory either. (Re: #292)
    """

    a = specialize(FilesystemFile(str(tmpdir)))
    b = specialize(FilesystemFile(TEST_FILE1_PATH))
    a.compare(b)
    b.compare(a)
    a = str(tmpdir)
    b = TEST_FILE1_PATH

    assert_diff(compare_root_paths(a, b), "test_directory_a_b_diff")
    assert_diff(compare_root_paths(b, a), "test_directory_b_a_diff")
+3 −0
Original line number Diff line number Diff line
@@ -1 +1 @@
-type: directory
+type: file
+3 −0
Original line number Diff line number Diff line
@@ -1 +1 @@
+type: directory
-type: file