From 4114c20faa7864c17fa7226227b2b5069a62729e Mon Sep 17 00:00:00 2001
From: Ryan Gonzalez <ryan.gonzalez@collabora.com>
Date: Fri, 26 Aug 2022 09:24:39 -0500
Subject: [PATCH] Preserve trailing newlines during rebase

Bash likes to remove these, which meant the metadata that went inside
the new commit didn't actually match the file it was read from.

https://gitlab.apertis.org/infrastructure/apertis-issues/-/issues/170

Signed-off-by: Ryan Gonzalez <ryan.gonzalez@collabora.com>
---
 generate_pipeline.py          | 4 +++-
 tests/test_build_pipelines.py | 4 ++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/generate_pipeline.py b/generate_pipeline.py
index 7a092d5..b5934d0 100755
--- a/generate_pipeline.py
+++ b/generate_pipeline.py
@@ -79,7 +79,9 @@ for ref in $refs; do
             message=$(ostree show "$prev" \\
                         | grep '^ ' \\
                         | sed 's/^ *//g')
-            metadata=$(ostree cat "$prev" metadata)
+            # Trick to preserve any trailing newlines:
+            # https://unix.stackexchange.com/a/383411/117660
+            IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
             echo 'Applying new changes on top of remote...'
             ostree commit -b "$ref" -m "$message" \\
diff --git a/tests/test_build_pipelines.py b/tests/test_build_pipelines.py
index 85ba50c..a53ed97 100644
--- a/tests/test_build_pipelines.py
+++ b/tests/test_build_pipelines.py
@@ -497,6 +497,10 @@ def test_subsummaries_flatpak_metadata(subsummaries):
 
         for ref, (_commit_size, _commit_checksum, ref_metadata) in refs:
             flatpak_metadata = ref_metadata['xa.data'][2]
+            # The metadata file should have a single trailing newline.
+            assert flatpak_metadata.endswith('\n')
+            assert not flatpak_metadata.endswith('\n\n')
+
             keyfile = GLib.KeyFile.new()
             keyfile.load_from_bytes(GLib.Bytes.new(flatpak_metadata.encode('ascii')), 0)
 
-- 
GitLab