fix: cost the device prefix exactly rather than approximately
Build and publish container / build (pull_request) Successful in 3m54s
Build and publish container / build (pull_request) Successful in 3m54s
The budget subtracted the prefix length plus two, on the assumption of a leading and a trailing slash. That is right for /Music and wrong for an empty prefix, where there is only one slash -- losing a character at the card root, which is exactly where the longest paths sit. Computed from the prefix as it will actually appear instead: /Music/ costs seven characters and gives a mirror-relative budget of 253, the root costs one and gives 259. Worth being exact about because the reverse error is worse. A checker comparing mirror-relative paths against the flat 260 passes everything between 253 and 260, and those are precisely the paths closest to the edge.
This commit is contained in:
@@ -764,3 +764,25 @@ def test_a_long_title_keeps_both_ends():
|
||||
assert len(str(fitted)) <= 253
|
||||
assert fitted.name.startswith("The Beatles - Abbey Road - 09 - The Long One")
|
||||
assert fitted.name.endswith("The End.mp3")
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("prefix", "expected"),
|
||||
[("/Music", 253), ("Music", 253), ("/Music/", 253), ("", 259), ("/", 259)],
|
||||
)
|
||||
def test_the_device_prefix_is_costed_exactly(prefix, expected):
|
||||
"""A mirror-relative path of 253 characters becomes 260 on the device once
|
||||
/Music/ is in front of it, which is the whole of the limit. Approximating
|
||||
the prefix loses a character at the root, where the longest paths are."""
|
||||
assert 260 - len(music_mirror.device_prefix_length(prefix)) == expected
|
||||
|
||||
|
||||
def test_the_budget_is_reported_so_it_can_be_checked(tmp_path, make_flac, caplog):
|
||||
source = tmp_path / "src"
|
||||
mirror = tmp_path / "dst"
|
||||
make_flac(source / "a.flac")
|
||||
|
||||
with caplog.at_level("INFO"):
|
||||
run(source, mirror, "--fat32-safe")
|
||||
|
||||
assert "limited to 253 characters" in caplog.text
|
||||
|
||||
Reference in New Issue
Block a user