87d5e6fc1a
Before this change, a Dhall package like the Prelude would be encoded as a record with one field per supported version. Then downstream packages would specify which package to override by selecting a different record field. The problem with that approach is that it did not provide an easy way to override a package to a version other than the default ones supplied by Nixpkgs. Normally you would use the `.override` method for this purpose, but the `override` method added by `buildDhall{Directory,GitHub}Package` is clobbered by the `override` method added by `callPackage` in `./pkgs/top-level/dhall-packages.nix`. The solution is to add a separate `.overridePackage` method which is essentially the exact same as `.override`, except that it is no longer clobbered by `callPackage`. This `.overridePackage` method allows one to override the arguments supplied to `buildDhall{Directory,GitHub}Package`, making it easier to specify package versions outside of the ones supported by Nixpkgs.. This also includes a change to only build one (preferred) version of each package (instead of multiple supported versions per package), in order to minimize the maintenance burden for the Dhall package set.
50 lines
1.2 KiB
Nix
50 lines
1.2 KiB
Nix
{ buildDhallPackage, fetchFromGitHub, lib }:
|
|
|
|
# This function is used by `dhall-to-nixpkgs` when given a GitHub repository
|
|
lib.makePackageOverridable
|
|
( { # Arguments passed through to `buildDhallPackage`
|
|
name
|
|
, dependencies ? []
|
|
, source ? false
|
|
|
|
, # The directory containing the Dhall files, if other than the root of the
|
|
# repository
|
|
directory ? ""
|
|
, # The file to import, relative to the above directory
|
|
file ? "package.dhall"
|
|
|
|
# Arguments passed through to `fetchFromGitHub`
|
|
, owner
|
|
, repo
|
|
, rev
|
|
# Extra arguments passed through to `fetchFromGitHub`, such as the hash
|
|
# or `fetchSubmodules`
|
|
, ...
|
|
}@args:
|
|
|
|
buildDhallPackage {
|
|
inherit name dependencies source;
|
|
|
|
code =
|
|
let
|
|
src = fetchFromGitHub ({
|
|
name = "${name}-source";
|
|
|
|
inherit owner repo rev;
|
|
} // removeAttrs args [
|
|
"name"
|
|
"dependencies"
|
|
"source"
|
|
"directory"
|
|
"file"
|
|
"owner"
|
|
"repo"
|
|
"rev"
|
|
]);
|
|
|
|
prefix = lib.optionalString (directory != "") "${directory}/";
|
|
|
|
in
|
|
"${src}/${prefix}${file}";
|
|
}
|
|
)
|