commit: 3b975f9b28d1aa6e40c93431086669ad23f6f460 Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Mon Sep 4 15:37:24 2023 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Sun Dec 10 22:01:48 2023 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=3b975f9b
ebuild: refactor flushing vdb keys Refactor how we flush these VDB keys in build-info/ to make it easier to implement bug #913628: it was a pain with the forced-append of a newline even if we might tamper with the contents later on, so just postpone flushing to disk until the end. It saves some repetition too, so double win. Bug: https://bugs.gentoo.org/913628 Signed-off-by: Sam James <sam <AT> gentoo.org> lib/portage/package/ebuild/doebuild.py | 42 ++++++++++++++-------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/lib/portage/package/ebuild/doebuild.py b/lib/portage/package/ebuild/doebuild.py index 8c7a06b3e2..346c989acc 100644 --- a/lib/portage/package/ebuild/doebuild.py +++ b/lib/portage/package/ebuild/doebuild.py @@ -2487,8 +2487,8 @@ def _post_src_install_write_metadata(settings): """ eapi_attrs = _get_eapi_attrs(settings.configdict["pkg"]["EAPI"]) - build_info_dir = os.path.join(settings["PORTAGE_BUILDDIR"], "build-info") + metadata_buffer = {} metadata_keys = ["IUSE"] if eapi_attrs.iuse_effective: @@ -2497,12 +2497,12 @@ def _post_src_install_write_metadata(settings): for k in metadata_keys: v = settings.configdict["pkg"].get(k) if v is not None: - write_atomic(os.path.join(build_info_dir, k), v + "\n") + metadata_buffer[k] = v for k in ("CHOST",): v = settings.get(k) if v is not None: - write_atomic(os.path.join(build_info_dir, k), v + "\n") + metadata_buffer[k] = v with open( _unicode_encode( @@ -2542,17 +2542,7 @@ def _post_src_install_write_metadata(settings): except OSError: pass continue - with open( - _unicode_encode( - os.path.join(build_info_dir, k), - encoding=_encodings["fs"], - errors="strict", - ), - mode="w", - encoding=_encodings["repo.content"], - errors="strict", - ) as f: - f.write(f"{v}\n") + metadata_buffer[k] = v if eapi_attrs.slot_operator: deps = evaluate_slot_operator_equal_deps(settings, use, QueryCommand.get_db()) @@ -2564,18 +2554,20 @@ def _post_src_install_write_metadata(settings): except OSError: pass continue - with open( - _unicode_encode( - os.path.join(build_info_dir, k), - encoding=_encodings["fs"], - errors="strict", - ), - mode="w", - encoding=_encodings["repo.content"], - errors="strict", - ) as f: - f.write(f"{v}\n") + metadata_buffer[k] = v + + for k, v in metadata_buffer.items(): + with open( + _unicode_encode( + os.path.join(build_info_dir, k), + encoding=_encodings["fs"], + errors="strict", + ), + mode="w", + encoding=_encodings["repo.content"], + ) as f: + f.write(f"{v}\n") def _preinst_bsdflags(mysettings): if bsd_chflags: