diff options
author | roconnor <roconnor@theorem.ca> | 2014-09-28 21:19:55 -0400 |
---|---|---|
committer | roconnor <roconnor@theorem.ca> | 2014-09-28 21:19:55 -0400 |
commit | 6b2ecc5b39dbb0cb1f047418e706ccdad08ae49b (patch) | |
tree | abd0fb3c8301c04a5ef212445e9b5b127ce39c37 /pkgs | |
parent | ee58e828556752d2bf4628ee9b47936d530d1d2a (diff) | |
parent | 94c6af494a8c7d7a8a6f516312e4f848c1a62ed4 (diff) | |
download | nixlib-6b2ecc5b39dbb0cb1f047418e706ccdad08ae49b.tar nixlib-6b2ecc5b39dbb0cb1f047418e706ccdad08ae49b.tar.gz nixlib-6b2ecc5b39dbb0cb1f047418e706ccdad08ae49b.tar.bz2 nixlib-6b2ecc5b39dbb0cb1f047418e706ccdad08ae49b.tar.lz nixlib-6b2ecc5b39dbb0cb1f047418e706ccdad08ae49b.tar.xz nixlib-6b2ecc5b39dbb0cb1f047418e706ccdad08ae49b.tar.zst nixlib-6b2ecc5b39dbb0cb1f047418e706ccdad08ae49b.zip |
Merge pull request #4313 from NixOS/fastReplaceDeps
Exponentially reduce computation time needed for replace-dependency by u...
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/build-support/replace-dependency.nix | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/pkgs/build-support/replace-dependency.nix b/pkgs/build-support/replace-dependency.nix index 098637b4f9b9..ed65b9dad1db 100644 --- a/pkgs/build-support/replace-dependency.nix +++ b/pkgs/build-support/replace-dependency.nix @@ -49,8 +49,13 @@ let referencesOf = drv: getAttr (discard (toString drv)) references; - dependsOnOld = drv: elem oldStorepath (referencesOf drv) || - any dependsOnOld (referencesOf drv); + dependsOnOldMemo = listToAttrs (map + (drv: { name = discard (toString drv); + value = elem oldStorepath (referencesOf drv) || + any dependsOnOld (referencesOf drv); + }) (builtins.attrNames references)); + + dependsOnOld = drv: getAttr (discard (toString drv)) dependsOnOldMemo; drvName = drv: discard (substring 33 (stringLength (builtins.baseNameOf drv)) (builtins.baseNameOf drv)); @@ -65,15 +70,12 @@ let rewrittenDeps = listToAttrs [ {name = discard (toString oldDependency); value = newDependency;} ]; - rewrittenDerivations = drv: - if dependsOnOld drv - then listToAttrs [ { - name = discard (toString drv); + rewriteMemo = listToAttrs (map + (drv: { name = discard (toString drv); + value = rewriteHashes (builtins.storePath drv) + (filterAttrs (n: v: builtins.elem (builtins.storePath (discard (toString n))) (referencesOf drv)) rewriteMemo); + }) + (filter dependsOnOld (builtins.attrNames references))) // rewrittenDeps; - value = rewriteHashes drv (rewrittenDeps // (fold (drv: acc: - (rewrittenDerivations drv) // acc - ) {} (referencesOf drv))); - } ] - else {}; in assert (stringLength (drvName (toString oldDependency)) == stringLength (drvName (toString newDependency))); -getAttr (discard (toString drv)) (rewrittenDerivations drv) +getAttr (discard (toString drv)) rewriteMemo |