From 039013dd30f1d8a995927750c535c84dd0fefa08 Mon Sep 17 00:00:00 2001 From: Charlie Hanley Date: Mon, 27 Sep 2021 22:08:44 -0400 Subject: [PATCH] implement packageOverrides argument --- default.nix | 4 ++-- php-packages.nix | 4 ++-- .../Expressions/CompositionExpression.php | 5 ++++- src/Composer2Nix/Expressions/PackagesExpression.php | 3 ++- src/Composer2Nix/Package.php | 1 + src/Composer2Nix/composer-env.nix | 12 +++++++++--- tests/dependencies/default.nix | 4 ++-- tests/dependencies/php-packages.nix | 4 ++-- tests/enduser/default.nix | 4 ++-- tests/enduser/php-packages.nix | 4 ++-- 10 files changed, 28 insertions(+), 17 deletions(-) diff --git a/default.nix b/default.nix index fb67844..86800da 100644 --- a/default.nix +++ b/default.nix @@ -1,6 +1,6 @@ {pkgs ? import { inherit system; - }, system ? builtins.currentSystem, noDev ? false}: + }, system ? builtins.currentSystem, noDev ? false, packageOverrides ? {}}: let composerEnv = import ./src/Composer2Nix/composer-env.nix { @@ -8,6 +8,6 @@ let }; in import ./php-packages.nix { - inherit composerEnv noDev; + inherit composerEnv noDev packageOverrides; inherit (pkgs) fetchurl fetchgit fetchhg fetchsvn; } diff --git a/php-packages.nix b/php-packages.nix index 81788f5..637b681 100644 --- a/php-packages.nix +++ b/php-packages.nix @@ -1,4 +1,4 @@ -{composerEnv, fetchurl, fetchgit ? null, fetchhg ? null, fetchsvn ? null, noDev ? false}: +{composerEnv, fetchurl, fetchgit ? null, fetchhg ? null, fetchsvn ? null, noDev ? false, packageOverrides}: let packages = { @@ -547,7 +547,7 @@ let }; in composerEnv.buildPackage { - inherit packages devPackages noDev; + inherit packages devPackages packageOverrides noDev; name = "svanderburg-composer2nix"; src = ./.; executable = true; diff --git a/src/Composer2Nix/Expressions/CompositionExpression.php b/src/Composer2Nix/Expressions/CompositionExpression.php index 31e54a4..cc4caf6 100644 --- a/src/Composer2Nix/Expressions/CompositionExpression.php +++ b/src/Composer2Nix/Expressions/CompositionExpression.php @@ -3,6 +3,7 @@ use PNDP\NixGenerator; use PNDP\AST\NixAttrReference; use PNDP\AST\NixASTNode; +use PNDP\AST\NixAttrSet; use PNDP\AST\NixExpression; use PNDP\AST\NixFunction; use PNDP\AST\NixFunInvocation; @@ -74,7 +75,8 @@ public function toNixAST() "system" => new NixInherit() )), "system" => new NixAttrReference(new NixExpression("builtins"), new NixExpression("currentSystem")), - "noDev" => false + "noDev" => false, + "packageOverrides" => new NixAttrSet(array()) ), new NixLet(array( "composerEnv" => new NixFunInvocation(new NixImport(new NixFile($this->prefixRelativePath($this->composerEnvFile))), array( "stdenv" => new NixInherit("pkgs"), @@ -88,6 +90,7 @@ public function toNixAST() ), new NixFunInvocation(new NixImport(new NixFile($this->prefixRelativePath($this->outputFile))), array( "composerEnv" => new NixInherit(), "noDev" => new NixInherit(), + "packageOverrides" => new NixInherit(), "fetchurl" => new NixInherit("pkgs"), "fetchgit" => new NixInherit("pkgs"), "fetchhg" => new NixInherit("pkgs"), diff --git a/src/Composer2Nix/Expressions/PackagesExpression.php b/src/Composer2Nix/Expressions/PackagesExpression.php index bfcb1c9..8ce92a5 100644 --- a/src/Composer2Nix/Expressions/PackagesExpression.php +++ b/src/Composer2Nix/Expressions/PackagesExpression.php @@ -56,7 +56,8 @@ public function toNixAST() "fetchgit" => null, "fetchhg" => null, "fetchsvn" => null, - "noDev" => false + "noDev" => false, + "packageOverrides" => new NixNoDefault() ), new NixLet($this->sourcesCache->toNixAST(), $this->package)); } } diff --git a/src/Composer2Nix/Package.php b/src/Composer2Nix/Package.php index 1ffb345..bff4d8f 100644 --- a/src/Composer2Nix/Package.php +++ b/src/Composer2Nix/Package.php @@ -71,6 +71,7 @@ public function toNixAST() "executable" => $this->executable, "packages" => new NixInherit(), "devPackages" => new NixInherit(), + "packageOverrides" => new NixInherit(), "noDev" => new NixInherit(), "symlinkDependencies" => $this->symlinkDependencies, "meta" => $this->generatePackageMetaDataAST() diff --git a/src/Composer2Nix/composer-env.nix b/src/Composer2Nix/composer-env.nix index 6c89bc8..0b22395 100644 --- a/src/Composer2Nix/composer-env.nix +++ b/src/Composer2Nix/composer-env.nix @@ -22,6 +22,7 @@ let , src , packages ? {} , devPackages ? {} + , packageOverrides , buildInputs ? [] , symlinkDependencies ? false , executable ? false @@ -133,7 +134,12 @@ let ''} '') (builtins.attrNames dependencies); - extraArgs = removeAttrs args [ "name" "packages" "devPackages" "buildInputs" ]; + extraArgs = removeAttrs args [ "name" "packages" "devPackages" "packageOverrides" "buildInputs" ]; + + overridePackages = ps: + let applicableOverrides = builtins.intersectAttrs ps packageOverrides; + applyOverride = name: f: ps.${name} // { src = f ps.${name}.src; }; + in ps // builtins.mapAttrs applyOverride applicableOverrides; in stdenv.mkDerivation ({ name = "composer-${name}"; @@ -179,8 +185,8 @@ let # Copy or symlink the provided dependencies cd vendor - ${bundleDependencies packages} - ${lib.optionalString (!noDev) (bundleDependencies devPackages)} + ${bundleDependencies (overridePackages packages)} + ${lib.optionalString (!noDev) (bundleDependencies (overridePackages devPackages))} cd .. # Reconstruct autoload scripts diff --git a/tests/dependencies/default.nix b/tests/dependencies/default.nix index 7484183..97e737d 100644 --- a/tests/dependencies/default.nix +++ b/tests/dependencies/default.nix @@ -1,6 +1,6 @@ {pkgs ? import { inherit system; - }, system ? builtins.currentSystem, noDev ? false}: + }, system ? builtins.currentSystem, noDev ? false, packageOverrides ? {}}: let composerEnv = import ../../src/Composer2Nix/composer-env.nix { @@ -8,6 +8,6 @@ let }; in import ./php-packages.nix { - inherit composerEnv noDev; + inherit composerEnv noDev packageOverrides; inherit (pkgs) fetchurl fetchgit fetchhg fetchsvn; } diff --git a/tests/dependencies/php-packages.nix b/tests/dependencies/php-packages.nix index ddee13d..946eb9c 100644 --- a/tests/dependencies/php-packages.nix +++ b/tests/dependencies/php-packages.nix @@ -1,4 +1,4 @@ -{composerEnv, fetchurl, fetchgit ? null, fetchhg ? null, fetchsvn ? null, noDev ? false}: +{composerEnv, fetchurl, fetchgit ? null, fetchhg ? null, fetchsvn ? null, noDev ? false, packageOverrides}: let packages = { @@ -795,7 +795,7 @@ let devPackages = {}; in composerEnv.buildPackage { - inherit packages devPackages noDev; + inherit packages devPackages packageOverrides noDev; name = "dependencies"; src = ./.; executable = false; diff --git a/tests/enduser/default.nix b/tests/enduser/default.nix index 7484183..97e737d 100644 --- a/tests/enduser/default.nix +++ b/tests/enduser/default.nix @@ -1,6 +1,6 @@ {pkgs ? import { inherit system; - }, system ? builtins.currentSystem, noDev ? false}: + }, system ? builtins.currentSystem, noDev ? false, packageOverrides ? {}}: let composerEnv = import ../../src/Composer2Nix/composer-env.nix { @@ -8,6 +8,6 @@ let }; in import ./php-packages.nix { - inherit composerEnv noDev; + inherit composerEnv noDev packageOverrides; inherit (pkgs) fetchurl fetchgit fetchhg fetchsvn; } diff --git a/tests/enduser/php-packages.nix b/tests/enduser/php-packages.nix index fa15ec6..fa9f8f5 100644 --- a/tests/enduser/php-packages.nix +++ b/tests/enduser/php-packages.nix @@ -1,4 +1,4 @@ -{composerEnv, fetchurl, fetchgit ? null, fetchhg ? null, fetchsvn ? null, noDev ? false}: +{composerEnv, fetchurl, fetchgit ? null, fetchhg ? null, fetchsvn ? null, noDev ? false, packageOverrides}: let packages = { @@ -306,7 +306,7 @@ let devPackages = {}; in composerEnv.buildPackage { - inherit packages devPackages noDev; + inherit packages devPackages packageOverrides noDev; name = "phpunit-phpunit"; src = ./.; executable = true;