New submission from bers <b...@gmx.net>:

It is very easy to use filecmp.cmpfiles incorrectly by passing absolute path 
names. This is because
1. the documentations does not say that relative path names have to be passed, 
and
2. filecmp.cmpfiles does not issue a warning when absolute path names are 
passed.

Consider this example code, which does look sensible at first glance:

    files = dir_a.glob("*")
    (equal, _, _) = filecmp.cmpfiles(dir_a, dir_b, files, shallow=False)
    print("equal:", *equal)

However, in the full example below, you will see that this code fails to detect 
that two files are actually different.

"""Demo behavior of filecmp.cmpfiles with absolute path names."""
import filecmp
import tempfile
from pathlib import Path

with tempfile.TemporaryDirectory() as tmpdirname:
    # prepare two different files
    tmpdir = Path(tmpdirname)
    dir_a = tmpdir / "a"
    dir_b = tmpdir / "b"
    file_a = dir_a / "foo.txt"
    file_b = dir_b / "foo.txt"

    dir_a.mkdir()
    dir_b.mkdir()
    file_a.write_text("A")
    file_b.write_text("B")

    # actually diff the files
    files = dir_a.glob("*")
    # filecmp should issue a warning here!
    (equal, _, _) = filecmp.cmpfiles(dir_a, dir_b, files, shallow=False)
    # otherwise, this result is easy to misinterpret - files are reported as 
equal
    print("equal:", *equal)

----------
components: Library (Lib)
messages: 411570
nosy: bers
priority: normal
severity: normal
status: open
title: Explicit or correct behavior of filecmp.cmpfiles w/ absolute path names
type: behavior
versions: Python 3.9

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue46512>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to