From 28f640c47e7d49f30772a5247cdb0f59e3ca2cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jelmer=20Vernoo=C4=B3?= <jelmer@jelmer.uk> Date: Mon, 4 Jul 2022 10:54:43 +0100 Subject: [PATCH] RTS parser: don't add trailing whitespace when setting field values that start with a newline. Closes: #1013485 --- debian/changelog | 2 ++ lib/debian/_deb822_repro/parsing.py | 5 ++++- lib/debian/tests/test_repro_deb822.py | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 924450d3..469aae09 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,8 @@ python-debian (0.1.45) UNRELEASED; urgency=medium * Add Deb822FileElement.remove method. + * RTS parser: don't add trailing whitespace when setting field values + that start with a newline. Closes: #1013485 -- Jelmer Vernooij <jelmer@debian.org> Sun, 05 Jun 2022 15:39:21 +0100 diff --git a/lib/debian/_deb822_repro/parsing.py b/lib/debian/_deb822_repro/parsing.py index c880245f..6468a6f0 100644 --- a/lib/debian/_deb822_repro/parsing.py +++ b/lib/debian/_deb822_repro/parsing.py @@ -1450,7 +1450,10 @@ class Deb822ParagraphToStrWrapperMixin(AutoResolvingMixin[str], return # Regenerate the first line with normalized whitespace first_line, rest = value.split("\n", 1) - value = "".join((" ", first_line.strip(), "\n", rest)) + if first_line: + value = "".join((" ", first_line.strip(), "\n", rest)) + else: + value = "".join(("\n", rest)) if not value.endswith("\n"): if not self._auto_map_final_newline_in_multiline_values: raise ValueError("Values must end with a newline (or be single line" diff --git a/lib/debian/tests/test_repro_deb822.py b/lib/debian/tests/test_repro_deb822.py index 46df2eaa..5721d1f6 100644 --- a/lib/debian/tests/test_repro_deb822.py +++ b/lib/debian/tests/test_repro_deb822.py @@ -1761,3 +1761,17 @@ class FormatPreservingDeb822ParserTests(TestCase): expected_result) as bd_list: bd_list.append_newline() bd_list.append('bar (>= 1.0~)') + + def test_mutate_field_preserves_whitespace(self): + # type: () -> None + + original = textwrap.dedent('''\ + Package: foo + Build-Depends: + debhelper-compat (= 11), + uuid-dev + ''') + deb822_file = parse_deb822_file(original.splitlines(keepends=True)) + source_paragraph = next(iter(deb822_file)) + source_paragraph['Build-Depends'] = '\n debhelper-compat (= 11),\n uuid-dev' + self.assertEqual(original, deb822_file.convert_to_text()) -- GitLab