Skip to content

Commit

Permalink
Memoize buildRustCrate (see #42)
Browse files Browse the repository at this point in the history
  • Loading branch information
kolloch committed Nov 27, 2019
1 parent d88f1d6 commit 8717c5d
Show file tree
Hide file tree
Showing 11 changed files with 76 additions and 62 deletions.
13 changes: 7 additions & 6 deletions crate2nix/Cargo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3077,13 +3077,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -3093,14 +3095,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down
13 changes: 7 additions & 6 deletions crate2nix/templates/nix/crate2nix/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -97,14 +99,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
{lib, crate2nix}:

let buildRustCrateFake = lib.id;
let fakeCrates = {
"pkg_id1" = "pkg_id1";
"pkg_id2" = "pkg_id2";
"pkg_id3" = "pkg_id3";
};
fakeDependencies = [
{
name = "id1";
Expand All @@ -18,7 +22,7 @@ let buildRustCrateFake = lib.id;
}
];
dependencyDerivations = features: dependencies:
crate2nix.dependencyDerivations buildRustCrateFake features dependencies;
crate2nix.dependencyDerivations fakeCrates features dependencies;
in lib.runTests {

testForDefaultAndIgnored = {
Expand Down
13 changes: 7 additions & 6 deletions sample_projects/bin_with_git_branch_dep/Cargo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3073,13 +3073,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -3089,14 +3091,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down
13 changes: 7 additions & 6 deletions sample_projects/bin_with_git_submodule_dep/Cargo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -1418,13 +1418,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -1434,14 +1436,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down
13 changes: 7 additions & 6 deletions sample_projects/bin_with_lib_git_dep/Cargo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3073,13 +3073,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -3089,14 +3091,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down
13 changes: 7 additions & 6 deletions sample_projects/bin_with_rerenamed_lib_dep/Cargo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -179,13 +179,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -195,14 +197,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down
13 changes: 7 additions & 6 deletions sample_projects/cfg-test/Cargo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -420,13 +420,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -436,14 +438,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down
13 changes: 7 additions & 6 deletions sample_projects/numtest/Cargo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -410,13 +410,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -426,14 +428,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down
13 changes: 7 additions & 6 deletions sample_projects/with_problematic_crates/Cargo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6942,13 +6942,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -6958,14 +6960,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down
13 changes: 7 additions & 6 deletions sample_workspace/Cargo.nix
Original file line number Diff line number Diff line change
Expand Up @@ -1806,13 +1806,15 @@ rec {
assert (builtins.isList features);

let mergedFeatures = mergePackageFeatures args;
builtByPackageId =
lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;
buildByPackageId = packageId:
let features = mergedFeatures."${packageId}" or [];
crateConfig = lib.filterAttrs (n: v: n != "resolvedDefaultFeatures") crateConfigs."${packageId}";
dependencies =
dependencyDerivations buildByPackageId features (crateConfig.dependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.dependencies or []);
buildDependencies =
dependencyDerivations buildByPackageId features (crateConfig.buildDependencies or []);
dependencyDerivations builtByPackageId features (crateConfig.buildDependencies or []);
dependenciesWithRenames =
lib.filter (d: d ? "rename")
(crateConfig.buildDependencies or [] ++ crateConfig.dependencies or []);
Expand All @@ -1822,14 +1824,13 @@ rec {
in buildByPackageId packageId;

/* Returns the actual derivations for the given dependencies. */
dependencyDerivations = buildByPackageId: features: dependencies:
assert (builtins.isFunction buildByPackageId);
dependencyDerivations = builtByPackageId: features: dependencies:
assert (builtins.isAttrs builtByPackageId);
assert (builtins.isList features);
assert (builtins.isList dependencies);

let enabledDependencies = filterEnabledDependencies dependencies features;
depDerivation = dependency:
buildByPackageId dependency.packageId;
depDerivation = dependency: builtByPackageId.${dependency.packageId};
in map depDerivation enabledDependencies;

/* Returns differences between cargo default features and crate2nix default features.
Expand Down

0 comments on commit 8717c5d

Please sign in to comment.