From 782cfe94b09914fbd2f62a26f19db3ebdc6701ca Mon Sep 17 00:00:00 2001 From: Russell O'Connor Date: Sun, 15 Nov 2015 19:52:30 -0500 Subject: [PATCH 1/4] replace-dependency.nix: new feature When replace-dependency is given a drv that doesn't actually depend on oldDependency, then just return back the original drv but also issue a warning. --- pkgs/build-support/replace-dependency.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/build-support/replace-dependency.nix b/pkgs/build-support/replace-dependency.nix index ed65b9dad1db..4138397f795f 100644 --- a/pkgs/build-support/replace-dependency.nix +++ b/pkgs/build-support/replace-dependency.nix @@ -17,11 +17,12 @@ # }; # This will rebuild glibc with your security patch, then copy over firefox # (and all of its dependencies) without rebuilding further. -{ drv, oldDependency, newDependency }: +{ drv, oldDependency, newDependency, verbose ? true }: with lib; let + warn = if verbose then builtins.trace else (x:y:y); references = import (runCommand "references.nix" { exportReferencesGraph = [ "graph" drv ]; } '' (echo { while read path @@ -78,4 +79,6 @@ let (filter dependsOnOld (builtins.attrNames references))) // rewrittenDeps; in assert (stringLength (drvName (toString oldDependency)) == stringLength (drvName (toString newDependency))); -getAttr (discard (toString drv)) rewriteMemo +if hasAttr (discard (toString drv)) rewriteMemo +then getAttr (discard (toString drv)) rewriteMemo +else warn "replace-dependency.nix: derivation ${discard (toString drv)} does not depend on ${discard (toString oldDependency)}\n" drv From afaf712ee7a61150934978085208b9803a36f5d9 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Mon, 16 Nov 2015 05:42:27 -0500 Subject: [PATCH 2/4] replace-dependency.nix: Use dynamic attrs now. --- pkgs/build-support/replace-dependency.nix | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pkgs/build-support/replace-dependency.nix b/pkgs/build-support/replace-dependency.nix index 4138397f795f..1a1c1a113ea2 100644 --- a/pkgs/build-support/replace-dependency.nix +++ b/pkgs/build-support/replace-dependency.nix @@ -48,7 +48,7 @@ let oldStorepath = builtins.storePath (discard (toString oldDependency)); - referencesOf = drv: getAttr (discard (toString drv)) references; + referencesOf = drv: references.${discard (toString drv)}; dependsOnOldMemo = listToAttrs (map (drv: { name = discard (toString drv); @@ -56,7 +56,7 @@ let any dependsOnOld (referencesOf drv); }) (builtins.attrNames references)); - dependsOnOld = drv: getAttr (discard (toString drv)) dependsOnOldMemo; + dependsOnOld = drv: dependsOnOldMemo.${discard (toString drv)}; drvName = drv: discard (substring 33 (stringLength (builtins.baseNameOf drv)) (builtins.baseNameOf drv)); @@ -78,7 +78,6 @@ let }) (filter dependsOnOld (builtins.attrNames references))) // rewrittenDeps; + attr = discard (toString drv); in assert (stringLength (drvName (toString oldDependency)) == stringLength (drvName (toString newDependency))); -if hasAttr (discard (toString drv)) rewriteMemo -then getAttr (discard (toString drv)) rewriteMemo -else warn "replace-dependency.nix: derivation ${discard (toString drv)} does not depend on ${discard (toString oldDependency)}\n" drv +rewriteMemo.${attr} or (warn "replace-dependency.nix: Derivation ${attr} does not depend on ${discard (toString oldDependency)}\n" drv) From 94e68bf9ee7335e0e36d993b10fe096ac04de809 Mon Sep 17 00:00:00 2001 From: Russell O'Connor Date: Mon, 16 Nov 2015 17:44:03 -0500 Subject: [PATCH 3/4] replace-dependency.nix: Give attr a slightly more meaningful name of drvHash --- pkgs/build-support/replace-dependency.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/build-support/replace-dependency.nix b/pkgs/build-support/replace-dependency.nix index 1a1c1a113ea2..c8794c6eea1e 100644 --- a/pkgs/build-support/replace-dependency.nix +++ b/pkgs/build-support/replace-dependency.nix @@ -78,6 +78,6 @@ let }) (filter dependsOnOld (builtins.attrNames references))) // rewrittenDeps; - attr = discard (toString drv); + drvHash = discard (toString drv); in assert (stringLength (drvName (toString oldDependency)) == stringLength (drvName (toString newDependency))); -rewriteMemo.${attr} or (warn "replace-dependency.nix: Derivation ${attr} does not depend on ${discard (toString oldDependency)}\n" drv) +rewriteMemo.${drvHash} or (warn "replace-dependency.nix: Derivation ${drvHash} does not depend on ${discard (toString oldDependency)}\n" drv) From fb683211dcbcc4ad81a575ebfb7bf0b382dcdf46 Mon Sep 17 00:00:00 2001 From: Russell O'Connor Date: Mon, 16 Nov 2015 17:52:12 -0500 Subject: [PATCH 4/4] replace-dependency.nix: Remove unnecessary carriage return. --- pkgs/build-support/replace-dependency.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/build-support/replace-dependency.nix b/pkgs/build-support/replace-dependency.nix index c8794c6eea1e..4ac47f9a9f28 100644 --- a/pkgs/build-support/replace-dependency.nix +++ b/pkgs/build-support/replace-dependency.nix @@ -80,4 +80,4 @@ let drvHash = discard (toString drv); in assert (stringLength (drvName (toString oldDependency)) == stringLength (drvName (toString newDependency))); -rewriteMemo.${drvHash} or (warn "replace-dependency.nix: Derivation ${drvHash} does not depend on ${discard (toString oldDependency)}\n" drv) +rewriteMemo.${drvHash} or (warn "replace-dependency.nix: Derivation ${drvHash} does not depend on ${discard (toString oldDependency)}" drv)