From 040b0ad3ed13cfe1dfec4f05d7e9c92c84dd6928 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Thu, 10 Aug 2023 06:25:29 +0200 Subject: [PATCH 1/2] Revert "lib.types.string: Deprecation error instead of warning" This reverts commit c59c6b1c57da542b6b4af5d2ac27d1b99e7f0c5e. This was a bit too ambitious, because no warnings were previously triggered when `string` was nested e.g. `attrsOf string`, `nullOr string`, etc. Support for nested type deprecation warnings was introduced in 4b54aedee5e05aaf2838f6d951508b83e33d2baa, but had to be reverted in a36e6760e9be0ec260b637a06d751d39e2a78e4e because it caused infinite recursion for some users, and I couldn't remember that it was reverted. --- lib/types.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/types.nix b/lib/types.nix index b602d1d7f781..ddd37f260c9a 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -436,7 +436,10 @@ rec { # Deprecated; should not be used because it quietly concatenates # strings, which is usually not what you want. - string = throw "The type `types.string` is deprecated. See https://github.com/NixOS/nixpkgs/pull/66346 for better alternative types."; + string = separatedString "" // { + name = "string"; + deprecationMessage = "See https://github.com/NixOS/nixpkgs/pull/66346 for better alternative types."; + }; passwdEntry = entryType: addCheck entryType (str: !(hasInfix ":" str || hasInfix "\n" str)) // { name = "passwdEntry ${entryType.name}"; From 5075a514030bd31f030eeac85ff7f0ebfdf1651a Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Thu, 10 Aug 2023 06:31:36 +0200 Subject: [PATCH 2/2] lib.types.string: Use lib.warn instead of deprecationMessage This will cause a poorer error message without option location information, but it will catch all uses of its use. --- lib/types.nix | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/types.nix b/lib/types.nix index ddd37f260c9a..5ffbecda5db3 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -436,10 +436,12 @@ rec { # Deprecated; should not be used because it quietly concatenates # strings, which is usually not what you want. - string = separatedString "" // { - name = "string"; - deprecationMessage = "See https://github.com/NixOS/nixpkgs/pull/66346 for better alternative types."; - }; + # We use a lib.warn because `deprecationMessage` doesn't trigger in nested types such as `attrsOf string` + string = lib.warn + "The type `types.string` is deprecated. See https://github.com/NixOS/nixpkgs/pull/66346 for better alternative types." + (separatedString "" // { + name = "string"; + }); passwdEntry = entryType: addCheck entryType (str: !(hasInfix ":" str || hasInfix "\n" str)) // { name = "passwdEntry ${entryType.name}";