Add support for passing structured data to builders
Previously, all derivation attributes had to be coerced into strings
so that they could be passed via the environment. This is lossy
(e.g. lists get flattened, necessitating configureFlags
vs. configureFlagsArray, of which the latter cannot be specified as an
attribute), doesn't support attribute sets at all, and has size
limitations (necessitating hacks like passAsFile).
This patch adds a new mode for passing attributes to builders, namely
encoded as a JSON file ".attrs.json" in the current directory of the
builder. This mode is activated via the special attribute
  __structuredAttrs = true;
(The idea is that one day we can set this in stdenv.mkDerivation.)
For example,
  stdenv.mkDerivation {
    __structuredAttrs = true;
    name = "foo";
    buildInputs = [ pkgs.hello pkgs.cowsay ];
    doCheck = true;
    hardening.format = false;
  }
results in a ".attrs.json" file containing (sans the indentation):
  {
    "buildInputs": [],
    "builder": "/nix/store/ygl61ycpr2vjqrx775l1r2mw1g2rb754-bash-4.3-p48/bin/bash",
    "configureFlags": [
      "--with-foo",
      "--with-bar=1 2"
    ],
    "doCheck": true,
    "hardening": {
      "format": false
    },
    "name": "foo",
    "nativeBuildInputs": [
      "/nix/store/10h6li26i7g6z3mdpvra09yyf10mmzdr-hello-2.10",
      "/nix/store/4jnvjin0r6wp6cv1hdm5jbkx3vinlcvk-cowsay-3.03"
    ],
    "propagatedBuildInputs": [],
    "propagatedNativeBuildInputs": [],
    "stdenv": "/nix/store/f3hw3p8armnzy6xhd4h8s7anfjrs15n2-stdenv",
    "system": "x86_64-linux"
  }
"passAsFile" is ignored in this mode because it's not needed - large
strings are included directly in the JSON representation.
It is up to the builder to do something with the JSON
representation. For example, in bash-based builders, lists/attrsets of
string values could be mapped to bash (associative) arrays.
			
			
This commit is contained in:
		
							parent
							
								
									54801ed6ad
								
							
						
					
					
						commit
						6de33a9c67
					
				
					 4 changed files with 130 additions and 58 deletions
				
			
		|  | @ -68,7 +68,7 @@ public: | |||
|     const Symbol sWith, sOutPath, sDrvPath, sType, sMeta, sName, sValue, | ||||
|         sSystem, sOverrides, sOutputs, sOutputName, sIgnoreNulls, | ||||
|         sFile, sLine, sColumn, sFunctor, sToString, | ||||
|         sRight, sWrong; | ||||
|         sRight, sWrong, sStructuredAttrs, sBuilder; | ||||
|     Symbol sDerivationNix; | ||||
| 
 | ||||
|     /* If set, force copying files to the Nix store even if they
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue