New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
filecmp.cmpfiles w/ absolute path names #90670
Comments
It is very easy to use filecmp.cmpfiles incorrectly by passing absolute path names. This is because
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.""" 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) |
https://docs.python.org/3/library/filecmp.html#filecmp.cmpfiles |
Yes, it does. Just append the following to my example code: # actually diff the files - correctly!
files = [f.relative_to(dir_a) for f in dir_a.glob("*")]
(_, different, _) = filecmp.cmpfiles(dir_a, dir_b, files, shallow=False)
print("different:", *different) Output then is equal: C:\Users\bers\AppData\Local\Temp\tmp1p6jh4rg\a\foo.txt |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: