From 8703e9d89e5966581aea0afc5c82ddc6d16bf0c9 Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Mon, 31 Mar 2025 21:35:15 -0400 Subject: [PATCH 01/12] Improve and fix the error message when a file is not tracked by Git (cherry picked from commit 62e2304891375f642ac7b52358d36455ce99171a) --- src/libfetchers/git.cc | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/libfetchers/git.cc b/src/libfetchers/git.cc index fb91f98a3..e9dc17df3 100644 --- a/src/libfetchers/git.cc +++ b/src/libfetchers/git.cc @@ -534,11 +534,21 @@ struct GitInputScheme : InputScheme static MakeNotAllowedError makeNotAllowedError(std::string url) { - return [url{std::move(url)}](const CanonPath & path) -> RestrictedPathError - { - if (nix::pathExists(path.abs())) - return RestrictedPathError("access to path '%s' is forbidden because it is not under Git control; maybe you should 'git add' it to the repository '%s'?", path, url); - else + return [url{std::move(url)}](const CanonPath & path) -> RestrictedPathError { + if (nix::pathExists(url + "/" + path.abs())) { + auto relativePath = path.rel(); // .makeRelative(CanonPath("/")); + + return RestrictedPathError( + "'%s' is not tracked by Git.\n" + "\n" + "To use '%s', stage it in the Git repository at '%s':\n" + "\n" + "git add %s", + relativePath, + relativePath, + url, + relativePath); + } else return RestrictedPathError("path '%s' does not exist in Git repository '%s'", path, url); }; } From b4813a1b559100cc8af5a40c067d2cc8551ffef5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 1 Apr 2025 15:14:20 +0200 Subject: [PATCH 02/12] Tweak error message (cherry picked from commit 277c29a64b379d66fe17a0c68260481a63fdcdd2) --- src/libfetchers/git.cc | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/libfetchers/git.cc b/src/libfetchers/git.cc index e9dc17df3..849fa7abe 100644 --- a/src/libfetchers/git.cc +++ b/src/libfetchers/git.cc @@ -532,24 +532,20 @@ struct GitInputScheme : InputScheme return *head; } - static MakeNotAllowedError makeNotAllowedError(std::string url) + static MakeNotAllowedError makeNotAllowedError(std::filesystem::path repoPath) { - return [url{std::move(url)}](const CanonPath & path) -> RestrictedPathError { - if (nix::pathExists(url + "/" + path.abs())) { - auto relativePath = path.rel(); // .makeRelative(CanonPath("/")); - + return [repoPath{std::move(repoPath)}](const CanonPath & path) -> RestrictedPathError { + if (nix::pathExists(repoPath / path.rel())) return RestrictedPathError( - "'%s' is not tracked by Git.\n" + "File '%1%' in the repository %2% is not tracked by Git.\n" "\n" - "To use '%s', stage it in the Git repository at '%s':\n" + "To make it visible to Nix, run:\n" "\n" - "git add %s", - relativePath, - relativePath, - url, - relativePath); - } else - return RestrictedPathError("path '%s' does not exist in Git repository '%s'", path, url); + "git -C %2% add \"%1%\"", + path.rel(), + repoPath); + else + return RestrictedPathError("path '%s' does not exist in Git repository %s", path, repoPath); }; } @@ -757,7 +753,7 @@ struct GitInputScheme : InputScheme ref accessor = repo->getAccessor(repoInfo.workdirInfo, exportIgnore, - makeNotAllowedError(repoInfo.locationToArg())); + makeNotAllowedError(repoPath)); /* If the repo has submodules, return a mounted input accessor consisting of the accessor for the top-level repo and the From c45f97b9f44c4207bb7e3d553051cdd573a50965 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 1 Apr 2025 22:56:14 +0200 Subject: [PATCH 03/12] Make Git error messages more consistent (cherry picked from commit f15681df26bbbf246c226530d1ab814a172a7e87) --- src/libfetchers/git.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libfetchers/git.cc b/src/libfetchers/git.cc index 849fa7abe..4cc726076 100644 --- a/src/libfetchers/git.cc +++ b/src/libfetchers/git.cc @@ -537,7 +537,7 @@ struct GitInputScheme : InputScheme return [repoPath{std::move(repoPath)}](const CanonPath & path) -> RestrictedPathError { if (nix::pathExists(repoPath / path.rel())) return RestrictedPathError( - "File '%1%' in the repository %2% is not tracked by Git.\n" + "Path '%1%' in the repository %2% is not tracked by Git.\n" "\n" "To make it visible to Nix, run:\n" "\n" @@ -545,7 +545,7 @@ struct GitInputScheme : InputScheme path.rel(), repoPath); else - return RestrictedPathError("path '%s' does not exist in Git repository %s", path, repoPath); + return RestrictedPathError("Path '%s' does not exist in Git repository %s.", path.rel(), repoPath); }; } From 0b66c182213aa2e6fe8b28ae23ad3800989f6719 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 2 Apr 2025 21:39:02 +0200 Subject: [PATCH 04/12] Update meta.maintainers field for nixos-unstable (cherry picked from commit 7eb76186ba79387a5757b2e2e3f1b0d62e218221) --- flake.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.nix b/flake.nix index bfb2c7127..84cbd127f 100644 --- a/flake.nix +++ b/flake.nix @@ -157,9 +157,9 @@ pkgs = final; src = self; maintainers = with lib.maintainers; [ - edolstra - Ericson2314 - Mic92 + eelco + ericson2314 + mic92 roberth tomberek ]; From b3b4fc21dae59d36dcf59c3905f84d2a6bd6f51f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 2 Apr 2025 21:40:03 +0200 Subject: [PATCH 05/12] Remove meta.maintainers Some of the maintainer attribute names got changed in nixos-unstable (e.g. "edolstra" is now "eelco") but we want this flake to work on nixos-24.11. So just get rid of them. (cherry picked from commit 93d8f620575cb6e5d5403b2654af81f31f16b338) --- flake.nix | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/flake.nix b/flake.nix index 84cbd127f..32c9975f1 100644 --- a/flake.nix +++ b/flake.nix @@ -156,13 +156,7 @@ inherit officialRelease; pkgs = final; src = self; - maintainers = with lib.maintainers; [ - eelco - ericson2314 - mic92 - roberth - tomberek - ]; + maintainers = [ ]; }; }; From 9c7f662586c437a361f062d58a9cf99a85b6fd81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 1 Apr 2025 19:04:45 +0200 Subject: [PATCH 06/12] libgit2: use upstream version if possible we don't seem to use libgit2 for fetching via ssh, hence it shouldn't matter if it's using libssh or the ssh binary. (cherry picked from commit 0b61b758fb6c26f0cd3052ccbd442247c0bbb86d) --- packaging/dependencies.nix | 68 ++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/packaging/dependencies.nix b/packaging/dependencies.nix index 535b3ff37..0af670bfb 100644 --- a/packaging/dependencies.nix +++ b/packaging/dependencies.nix @@ -65,39 +65,37 @@ scope: { installPhase = lib.replaceStrings [ "--without-python" ] [ "" ] old.installPhase; }); - libgit2 = pkgs.libgit2.overrideAttrs ( - attrs: - { - cmakeFlags = attrs.cmakeFlags or [ ] ++ [ "-DUSE_SSH=exec" ]; - } - # libgit2: Nixpkgs 24.11 has < 1.9.0, which needs our patches - // lib.optionalAttrs (!lib.versionAtLeast pkgs.libgit2.version "1.9.0") { - nativeBuildInputs = - attrs.nativeBuildInputs or [ ] - # gitMinimal does not build on Windows. See packbuilder patch. - ++ lib.optionals (!stdenv.hostPlatform.isWindows) [ - # Needed for `git apply`; see `prePatch` - pkgs.buildPackages.gitMinimal - ]; - # Only `git apply` can handle git binary patches - prePatch = - attrs.prePatch or "" - + lib.optionalString (!stdenv.hostPlatform.isWindows) '' - patch() { - git apply - } - ''; - patches = - attrs.patches or [ ] - ++ [ - ./patches/libgit2-mempack-thin-packfile.patch - ] - # gitMinimal does not build on Windows, but fortunately this patch only - # impacts interruptibility - ++ lib.optionals (!stdenv.hostPlatform.isWindows) [ - # binary patch; see `prePatch` - ./patches/libgit2-packbuilder-callback-interruptible.patch - ]; - } - ); + libgit2 = + if lib.versionAtLeast pkgs.libgit2.version "1.9.0" then + pkgs.libgit2 + else + pkgs.libgit2.overrideAttrs (attrs: { + # libgit2: Nixpkgs 24.11 has < 1.9.0, which needs our patches + nativeBuildInputs = + attrs.nativeBuildInputs or [ ] + # gitMinimal does not build on Windows. See packbuilder patch. + ++ lib.optionals (!stdenv.hostPlatform.isWindows) [ + # Needed for `git apply`; see `prePatch` + pkgs.buildPackages.gitMinimal + ]; + # Only `git apply` can handle git binary patches + prePatch = + attrs.prePatch or "" + + lib.optionalString (!stdenv.hostPlatform.isWindows) '' + patch() { + git apply + } + ''; + patches = + attrs.patches or [ ] + ++ [ + ./patches/libgit2-mempack-thin-packfile.patch + ] + # gitMinimal does not build on Windows, but fortunately this patch only + # impacts interruptibility + ++ lib.optionals (!stdenv.hostPlatform.isWindows) [ + # binary patch; see `prePatch` + ./patches/libgit2-packbuilder-callback-interruptible.patch + ]; + }); } From 9f488312985f59bfc00e0f5a5697298f6517cdd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 1 Apr 2025 19:17:05 +0200 Subject: [PATCH 07/12] remove obsolete stdenv darwinMinVersion override we are more up-to-date now: nix-repl> stdenv.hostPlatform.darwinMinVersion "11.3" (cherry picked from commit d91310bb32b9efca2f1e1a6a767cbe5b0a7f072c) --- flake.nix | 2 +- packaging/dependencies.nix | 19 ------------------- 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/flake.nix b/flake.nix index bfb2c7127..f956646b7 100644 --- a/flake.nix +++ b/flake.nix @@ -177,7 +177,7 @@ { otherSplices = final.generateSplicesForMkScope "nixDependencies"; f = import ./packaging/dependencies.nix { - inherit inputs stdenv; + inherit stdenv; pkgs = final; }; }; diff --git a/packaging/dependencies.nix b/packaging/dependencies.nix index 0af670bfb..f06b65dee 100644 --- a/packaging/dependencies.nix +++ b/packaging/dependencies.nix @@ -1,33 +1,14 @@ # These overrides are applied to the dependencies of the Nix components. { - # Flake inputs; used for sources - inputs, - # The raw Nixpkgs, not affected by this scope pkgs, stdenv, }: -let - prevStdenv = stdenv; -in - let inherit (pkgs) lib; - - stdenv = if prevStdenv.isDarwin && prevStdenv.isx86_64 then darwinStdenv else prevStdenv; - - # Fix the following error with the default x86_64-darwin SDK: - # - # error: aligned allocation function of type 'void *(std::size_t, std::align_val_t)' is only available on macOS 10.13 or newer - # - # Despite the use of the 10.13 deployment target here, the aligned - # allocation function Clang uses with this setting actually works - # all the way back to 10.6. - darwinStdenv = pkgs.overrideSDK prevStdenv { darwinMinVersion = "10.13"; }; - in scope: { inherit stdenv; From 703f0fbe74bbc54532d19895bb32932b6fd77eb4 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Wed, 2 Apr 2025 15:20:47 -0400 Subject: [PATCH 08/12] release notes: 2.28.0 --- doc/manual/rl-next/c-api-flake-init.md | 20 ----- doc/manual/source/SUMMARY.md.in | 1 + doc/manual/source/release-notes/rl-2.28.md | 91 ++++++++++++++++++++++ 3 files changed, 92 insertions(+), 20 deletions(-) delete mode 100644 doc/manual/rl-next/c-api-flake-init.md create mode 100644 doc/manual/source/release-notes/rl-2.28.md diff --git a/doc/manual/rl-next/c-api-flake-init.md b/doc/manual/rl-next/c-api-flake-init.md deleted file mode 100644 index d6e7c3890..000000000 --- a/doc/manual/rl-next/c-api-flake-init.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -synopsis: C API `nix_flake_init_global` removed -prs: 12759 -issues: 5638 ---- - -In order to improve the modularity of the code base, we are removing a use of global state, and therefore the `nix_flake_init_global` function. - -Instead, use `nix_flake_settings_add_to_eval_state_builder`. For example: - -```diff -- nix_flake_init_global(ctx, settings); -- HANDLE_ERROR(ctx); -- - nix_eval_state_builder * builder = nix_eval_state_builder_new(ctx, store); - HANDLE_ERROR(ctx); - -+ nix_flake_settings_add_to_eval_state_builder(ctx, settings, builder); -+ HANDLE_ERROR(ctx); -``` diff --git a/doc/manual/source/SUMMARY.md.in b/doc/manual/source/SUMMARY.md.in index 3e7e961cb..5932e0999 100644 --- a/doc/manual/source/SUMMARY.md.in +++ b/doc/manual/source/SUMMARY.md.in @@ -135,6 +135,7 @@ - [Contributing](development/contributing.md) - [Releases](release-notes/index.md) {{#include ./SUMMARY-rl-next.md}} + - [Release 2.28 (2025-04-02)](release-notes/rl-2.28.md) - [Release 2.27 (2025-03-03)](release-notes/rl-2.27.md) - [Release 2.26 (2025-01-22)](release-notes/rl-2.26.md) - [Release 2.25 (2024-11-07)](release-notes/rl-2.25.md) diff --git a/doc/manual/source/release-notes/rl-2.28.md b/doc/manual/source/release-notes/rl-2.28.md new file mode 100644 index 000000000..701b40590 --- /dev/null +++ b/doc/manual/source/release-notes/rl-2.28.md @@ -0,0 +1,91 @@ +# Release 2.28.0 (2025-04-02) + +This is an atypical release -- instead of being branched off from `master`, it is branched off from the 2.27.x maintenance branch. +The purpose of this is to satisfy both these goals: + +- Release with number of API-breaking changes that are not suitable to backport to 2.27 + +- Do not Release with arbitrary new commits from master + +The reason for the combinations of these goals is that we would like this version of Nix to the default in Nixpkgs 25.05, yet, we are getting close to the Nixpkgs 25.05 version freeze. +These API changes complete the big infrastructure rework that accompanies the switch to Meson --- we want to batch all these changes together so there is one round of breakage. +But we don't want to to release with arbitrary new changes form master, so close to a major release, before those changes have had time to "incubate". + +## Major changes + +- Unstable C++ API reworked + [#12836](https://github.com/NixOS/nix/pull/12836) + [#12798](https://github.com/NixOS/nix/pull/12798) + [#12773](https://github.com/NixOS/nix/pull/12773) + + Now the C++ interface confirms to common conventions much better than before: + + - All headers are expected to be included with the initial `nix/`, e.g. as `#include "nix/....hh"` (what Nix's headers now do) or `#include ` (what downstream projects may choose to do). + Likewise, the pkg-config files have `-I${includedir}` not `-I${includedir}/nix` or similar. + + Including without the `nix/` like before sometimes worked because of how for `#include` C pre-process checks the directory containing the current file, not just the lookup path, but this was not reliable. + + - All configuration headers are included explicitly by the (regular) headers that need them. + There is no more need to pass `-include` to force additional files to be included. + + - The public, installed configuration headers no longer contain implementation-specific details that are not relevant to the API. + The vast majority of definitions that were previously in there are now moved to new private, non-installed configuration headers. + The renaming definitions now all start with `NIX_`. + + - The name of the Nix component the header comes from + (e.g. `util`, `store`, `expr`, `flake`, etc.) + is now part of the path to the header, coming after `nix` and before the header name + (or rest of the header path, if it is already in a directory). + + Here is a contrived diff showing a few of these changes at once: + + ```diff + @@ @@ + -#include "derived-path.hh" + +#include "nix/store/derived-path.hh" + @@ @@ + +// Would include for the variables used before. But when other headers + +// need these variables. those will include these config themselves. + +#include "nix/store/config.hh" + +#include "nix/expr/config.hh" + @@ @@ + -#include "config.hh" + +// Additionally renamed to distinguish from components' config headers. + +#include "nix/util/configuration.hh" + @@ @@ + -#if HAVE_ACL_SUPPORT + +#if NIX_SUPPORT_ACL + @@ @@ + -#if HAVE_BOEHMGC + +#if NIX_USE_BOEHMGC + @@ @@ + #endif + #endif + @@ @@ + -const char *s = "hi from " SYSTEM; + +const char *s = "hi from " NIX_LOCAL_SYSTEM; + ``` + +- C API `nix_flake_init_global` removed [#5638](https://github.com/NixOS/nix/issues/5638) [#12759](https://github.com/NixOS/nix/pull/12759) + + In order to improve the modularity of the code base, we are removing a use of global state, and therefore the `nix_flake_init_global` function. + + Instead, use `nix_flake_settings_add_to_eval_state_builder`. + For example: + + ```diff + - nix_flake_init_global(ctx, settings); + - HANDLE_ERROR(ctx); + - + nix_eval_state_builder * builder = nix_eval_state_builder_new(ctx, store); + HANDLE_ERROR(ctx); + + + nix_flake_settings_add_to_eval_state_builder(ctx, settings, builder); + + HANDLE_ERROR(ctx); + ``` + + We figured it would be good to do this API change at the same time, also. + +# Contributors + +Querying GitHub API for ce8b1eb2c4735b0bb6e65760c935daf0b8605a8b, to get handle for oldshensheep@gmail.com From 6687ce2a6dcddda457438228ffdc84f300393759 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 2 Apr 2025 22:59:58 +0200 Subject: [PATCH 09/12] chore: Update contributor handle caches --- maintainers/data/release-credits-email-to-handle.json | 9 ++++++++- maintainers/data/release-credits-handle-to-name.json | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/maintainers/data/release-credits-email-to-handle.json b/maintainers/data/release-credits-email-to-handle.json index 8f5031474..977555278 100644 --- a/maintainers/data/release-credits-email-to-handle.json +++ b/maintainers/data/release-credits-email-to-handle.json @@ -145,5 +145,12 @@ "thebenmachine+git@gmail.com": "bmillwood", "leandro@kip93.net": "kip93", "hello@briancamacho.me": "b-camacho", - "bcamacho@anduril.com": "bcamacho2" + "bcamacho@anduril.com": "bcamacho2", + "oldshensheep@gmail.com": "oldshensheep", + "thomasmiedema@gmail.com": "thomie", + "xokdvium@proton.me": "xokdvium", + "kaction@disroot.org": "KAction", + "serenity@kaction.cc": null, + "dev@erik.work": "Kirens", + "felix@alternativebit.fr": "picnoir" } \ No newline at end of file diff --git a/maintainers/data/release-credits-handle-to-name.json b/maintainers/data/release-credits-handle-to-name.json index 7149149c0..a03a811d4 100644 --- a/maintainers/data/release-credits-handle-to-name.json +++ b/maintainers/data/release-credits-handle-to-name.json @@ -129,5 +129,9 @@ "SomeoneSerge": "Someone", "b-camacho": "Brian Camacho", "MaxHearnden": null, - "kip93": "Leandro Emmanuel Reina Kiperman" + "kip93": "Leandro Emmanuel Reina Kiperman", + "oldshensheep": "Ruby Rose", + "KAction": "Dmitry Bogatov", + "thomie": "Thomas Miedema", + "Kirens": "Erik Nygren" } \ No newline at end of file From fea87a94e61e15c8939f912c9ac3647e4947bf64 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 2 Apr 2025 23:02:27 +0200 Subject: [PATCH 10/12] doc/rl-2.28: Add contributors --- doc/manual/source/release-notes/rl-2.28.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/doc/manual/source/release-notes/rl-2.28.md b/doc/manual/source/release-notes/rl-2.28.md index 701b40590..90f4f1d68 100644 --- a/doc/manual/source/release-notes/rl-2.28.md +++ b/doc/manual/source/release-notes/rl-2.28.md @@ -88,4 +88,22 @@ But we don't want to to release with arbitrary new changes form master, so close # Contributors -Querying GitHub API for ce8b1eb2c4735b0bb6e65760c935daf0b8605a8b, to get handle for oldshensheep@gmail.com +This earlier-than-usual release was made possible by the following 16 contributors: + +- Farid Zakaria [**(@fzakaria)**](https://github.com/fzakaria) +- Jörg Thalheim [**(@Mic92)**](https://github.com/Mic92) +- Eelco Dolstra [**(@edolstra)**](https://github.com/edolstra) +- Graham Christensen [**(@grahamc)**](https://github.com/grahamc) +- Thomas Miedema [**(@thomie)**](https://github.com/thomie) +- Brian McKenna [**(@puffnfresh)**](https://github.com/puffnfresh) +- Sergei Trofimovich [**(@trofi)**](https://github.com/trofi) +- Dmitry Bogatov [**(@KAction)**](https://github.com/KAction) +- Erik Nygren [**(@Kirens)**](https://github.com/Kirens) +- John Ericson [**(@Ericson2314)**](https://github.com/Ericson2314) +- Sergei Zimmerman [**(@xokdvium)**](https://github.com/xokdvium) +- Ruby Rose [**(@oldshensheep)**](https://github.com/oldshensheep) +- Robert Hensing [**(@roberth)**](https://github.com/roberth) +- jade [**(@lf-)**](https://github.com/lf-) +- Félix [**(@picnoir)**](https://github.com/picnoir) +- Valentin Gagarin [**(@fricklerhandwerk)**](https://github.com/fricklerhandwerk) +- Dmitry Bogatov From b87b3d79f24581ef11cbdc0f09aab14d1cdd62e7 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 2 Apr 2025 23:05:37 +0200 Subject: [PATCH 11/12] Fix maintainers/release-credits output --- maintainers/release-credits | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/maintainers/release-credits b/maintainers/release-credits index 7a5c87d7d..10ffd48b5 100755 --- a/maintainers/release-credits +++ b/maintainers/release-credits @@ -109,15 +109,15 @@ for sample in samples: s = samples[sample] email = s["email"] if not email in email_to_handle_cache.values: - print(f"Querying GitHub API for {s['hash']}, to get handle for {s['email']}") + print(f"Querying GitHub API for {s['hash']}, to get handle for {s['email']}", file=sys.stderr) ghc = get_github_commit(samples[sample]) gha = ghc["author"] if gha and gha["login"]: handle = gha["login"] - print(f"Handle: {handle}") + print(f"Handle: {handle}", file=sys.stderr) email_to_handle_cache.values[email] = handle else: - print(f"Found no handle for {s['email']}") + print(f"Found no handle for {s['email']}", file=sys.stderr) email_to_handle_cache.values[email] = None handle = email_to_handle_cache.values[email] if handle is not None: From 1ca3ee12873cf19579fbecd264c8bca4fee251df Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 2 Apr 2025 23:44:30 +0200 Subject: [PATCH 12/12] Edit rl-2.28 --- doc/manual/source/release-notes/rl-2.28.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/doc/manual/source/release-notes/rl-2.28.md b/doc/manual/source/release-notes/rl-2.28.md index 90f4f1d68..6da09546e 100644 --- a/doc/manual/source/release-notes/rl-2.28.md +++ b/doc/manual/source/release-notes/rl-2.28.md @@ -1,15 +1,10 @@ # Release 2.28.0 (2025-04-02) -This is an atypical release -- instead of being branched off from `master`, it is branched off from the 2.27.x maintenance branch. -The purpose of this is to satisfy both these goals: +This is an atypical release, and for almost all intents and purposes, it is just a continuation of 2.27; not a feature release. -- Release with number of API-breaking changes that are not suitable to backport to 2.27 +We had originally set the goal of making 2.27 the Nixpkgs default for NixOS 25.05, but dependents that link to Nix need certain _interface breaking_ changes in the C++ headers. This is not something we should do in a patch release, so this is why we branched 2.28 right off 2.27 instead of `master`. -- Do not Release with arbitrary new commits from master - -The reason for the combinations of these goals is that we would like this version of Nix to the default in Nixpkgs 25.05, yet, we are getting close to the Nixpkgs 25.05 version freeze. -These API changes complete the big infrastructure rework that accompanies the switch to Meson --- we want to batch all these changes together so there is one round of breakage. -But we don't want to to release with arbitrary new changes form master, so close to a major release, before those changes have had time to "incubate". +This completes the infrastructure overhaul for the [RFC 132](https://github.com/NixOS/rfcs/blob/master/rfcs/0132-meson-builds-nix.md) switchover to meson as our build system. ## Major changes @@ -29,8 +24,8 @@ But we don't want to to release with arbitrary new changes form master, so close There is no more need to pass `-include` to force additional files to be included. - The public, installed configuration headers no longer contain implementation-specific details that are not relevant to the API. - The vast majority of definitions that were previously in there are now moved to new private, non-installed configuration headers. - The renaming definitions now all start with `NIX_`. + The vast majority of definitions that were previously in there are now moved to new headers that are not installed, but used during Nix's own compilation only. + The remaining macro definitions are renamed to have `NIX_` as a prefix. - The name of the Nix component the header comes from (e.g. `util`, `store`, `expr`, `flake`, etc.) @@ -84,7 +79,8 @@ But we don't want to to release with arbitrary new changes form master, so close + HANDLE_ERROR(ctx); ``` - We figured it would be good to do this API change at the same time, also. + Although this change is not as critical, we figured it would be good to do this API change at the same time, also. + Also note that we try to keep the C API compatible, but we decided to break this function because it was young and likely not in widespread use yet. This frees up time to make important progress on the rest of the C API. # Contributors