Commit a88b90c9 authored by Robert Helgesson's avatar Robert Helgesson Committed by VwCSXg
Browse files

lib.generators.toGitINI: escape string values in configuration

This should handle the special characters that typically occur.
Upstreaming of https://github.com/nix-community/home-manager/commit/642d9ffe24eec1290e94d70e8129ba74922fddf2
parent 9949be2f
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -189,10 +189,10 @@ rec {
   * }
   *
   *> [url "ssh://git@github.com/"]
   *>   insteadOf = https://github.com/
   *>   insteadOf = "https://github.com"
   *>
   *> [user]
   *>   name = edolstra
   *>   name = "edolstra"
   */
  toGitINI = attrs:
    with builtins;
@@ -209,9 +209,17 @@ rec {
        else
          ''${section} "${subsection}"'';

      mkValueString = v:
        let
          escapedV = ''
            "${
              replaceStrings [ "\n" "	" ''"'' "\\" ] [ "\\n" "\\t" ''\"'' "\\\\" ] v
            }"'';
        in mkValueStringDefault { } (if isString v then escapedV else v);

      # generation for multiple ini values
      mkKeyValue = k: v:
        let mkKeyValue = mkKeyValueDefault { } " = " k;
        let mkKeyValue = mkKeyValueDefault { inherit mkValueString; } " = " k;
        in concatStringsSep "\n" (map (kv: "\t" + mkKeyValue kv) (lib.toList v));

      # converts { a.b.c = 5; } to { "a.b".c = 5; } for toINI