Support copying files to a directory

Since commit dbe0b1125f the `copy()` function no longer supports copying
files to a directory. The change in behaviour has lead to at least one
regression[1]. This restore the previous behaviour.

[1] https://github.com/getpelican/pelican/issues/3442
This commit is contained in:
John Kristensen 2026-06-06 13:59:01 +10:00
commit 6d0a7c8e70
2 changed files with 15 additions and 0 deletions

View file

@ -868,6 +868,18 @@ class TestCopy(unittest.TestCase):
self._exist_dir("b0", "b1", "b2", "b3", "b")
self._exist_file("b0", "b1", "b2", "b3", "b", "a.txt")
def test_copy_file_to_existing_dir(self):
self._create_dir("a")
self._create_file("a", "a.txt")
self._create_dir("b0", "b1")
utils.copy(
os.path.join(self.root_dir, "a", "a.txt"),
os.path.join(self.root_dir, "b0", "b1"),
)
self._exist_dir("b0")
self._exist_dir("b0", "b1")
self._exist_file("b0", "b1", "a.txt")
class TestDateFormatter(unittest.TestCase):
"""Tests that the output of DateFormatter jinja filter is same as

View file

@ -366,6 +366,9 @@ def copy(source: str, destination: str, ignores: Iterable[str] | None = None) ->
def copy_file(source: str, destination: str) -> None:
"""Copy a file"""
if os.path.isdir(destination):
destination = os.path.join(destination, os.path.basename(source))
try:
shutil.copyfile(source, destination)
except OSError as e: