BUG: AmlIgnore file should not lose its last linebreak (#903)

Fixes #899
This commit is contained in:
Anton Schwaighofer 2023-07-19 10:24:34 +01:00 коммит произвёл GitHub
Родитель a297512e77
Коммит 85754780a7
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 38 добавлений и 11 удалений

Просмотреть файл

@ -1196,13 +1196,14 @@ def append_to_amlignore(lines_to_append: List[str], amlignore: Optional[Path] =
amlignore_exists_already = amlignore.exists()
old_contents = amlignore.read_text() if amlignore_exists_already else ""
new_lines = old_contents.splitlines() + lines_to_append
new_text = "\n".join(new_lines)
if new_text:
amlignore.write_text(new_text)
linefeed = "\n"
new_text = linefeed.join(new_lines)
if new_lines:
amlignore.write_text(new_text + linefeed)
yield
if amlignore_exists_already:
amlignore.write_text(old_contents)
elif new_text:
elif new_lines:
amlignore.unlink()

Просмотреть файл

@ -614,7 +614,7 @@ def test_append_to_amlignore(tmp_path: Path) -> None:
amlignore_path = tmp_path / Path(uuid4().hex)
with himl.append_to_amlignore(amlignore=amlignore_path, lines_to_append=["1st line", "2nd line"]):
amlignore_text = amlignore_path.read_text()
assert "1st line\n2nd line" == amlignore_text
assert "1st line\n2nd line\n" == amlignore_text
assert not amlignore_path.exists()
# If there is no .amlignore file before the test, and there are no lines to append, then there should be no
@ -625,23 +625,49 @@ def test_append_to_amlignore(tmp_path: Path) -> None:
assert not amlignore_exists_during_test
assert not amlignore_path.exists()
# If there is an empty .amlignore file before the test, it should be there afterwards
@pytest.mark.fast
def test_append_to_amlignore_empty(tmp_path: Path) -> None:
"""If there is an empty .amlignore file before the test, it should be there afterwards"""
amlignore_path = tmp_path / Path(uuid4().hex)
amlignore_path.touch()
with himl.append_to_amlignore(amlignore=amlignore_path, lines_to_append=["1st line", "2nd line"]):
amlignore_text = amlignore_path.read_text()
assert "1st line\n2nd line" == amlignore_text
assert "1st line\n2nd line\n" == amlignore_text
assert amlignore_path.exists()
assert amlignore_path.read_text() == ""
# If there is a .amlignore file before the test, it should be identical afterwards
@pytest.mark.fast
@pytest.mark.parametrize("aml_ignore_contents", ["0th line", "0th line\n"])
def test_append_to_amlignore_exists1(tmp_path: Path, aml_ignore_contents: str) -> None:
"""
If there is a .amlignore file before the test, it should be identical afterwards.
In particular, this should be the case even if there's a linebreak at the end or not
"""
amlignore_path = tmp_path / Path(uuid4().hex)
amlignore_path.write_text("0th line")
amlignore_path.write_text(aml_ignore_contents)
with himl.append_to_amlignore(amlignore=amlignore_path, lines_to_append=["1st line", "2nd line"]):
amlignore_text = amlignore_path.read_text()
assert "0th line\n1st line\n2nd line" == amlignore_text
assert "0th line\n1st line\n2nd line\n" == amlignore_text
amlignore_text = amlignore_path.read_text()
assert "0th line" == amlignore_text
assert amlignore_text == aml_ignore_contents
@pytest.mark.fast
@pytest.mark.parametrize("aml_ignore_contents", ["0th line", "0th line\n"])
def test_append_to_amlignore_exists2(tmp_path: Path, aml_ignore_contents: str) -> None:
"""
If there is a .amlignore file before the test, it should be identical afterwards.
In particular, this should be the case even if there's a linebreak at the end or not, and if nothing is added
to the file.
"""
amlignore_path = tmp_path / Path(uuid4().hex)
amlignore_path.write_text(aml_ignore_contents)
with himl.append_to_amlignore(amlignore=amlignore_path, lines_to_append=[]):
amlignore_text = amlignore_path.read_text()
amlignore_text = amlignore_path.read_text()
assert amlignore_text == aml_ignore_contents
class TestTagOption(Enum):