Tweak component version handling

wip/nixpkgs-raku
oxalica 3 years ago
parent 413c33a7a5
commit 4c8d518d39
No known key found for this signature in database
GPG Key ID: CED392DE0C483D00
  1. 23
      fetch.py
  2. 26
      manifest.nix
  3. 10
      rust-overlay.nix

@ -101,11 +101,12 @@ def retry_with(f):
def translate_dump_manifest(manifest: str, f, nightly=False):
manifest = toml.loads(manifest)
date = manifest['date']
version = manifest['pkg']['rustc']['version'].split()[0]
rustc_version = manifest['pkg']['rustc']['version'].split()[0]
renames_idx = compress_renames(manifest['renames'])
strip_tail = '-preview'
f.write('{')
f.write(f'v={escape_nix_string(rustc_version)};')
f.write(f'd={escape_nix_string(date)};')
f.write(f'r={renames_idx};')
for pkg_name in sorted(manifest['pkg'].keys()):
@ -113,7 +114,7 @@ def translate_dump_manifest(manifest: str, f, nightly=False):
pkg_name_stripped = pkg_name[:-len(strip_tail)] if pkg_name.endswith(strip_tail) else pkg_name
pkg_targets = sorted(pkg['target'].keys())
url_version = version
url_version = rustc_version
for target_name in pkg_targets:
target = pkg['target'][target_name]
if not target['available']:
@ -128,23 +129,9 @@ def translate_dump_manifest(manifest: str, f, nightly=False):
assert url.startswith(start) and url.endswith(end), f'Unexpected url: {url}'
url_version = url[len(start):-len(end)]
if url_version == 'nightly':
assert nightly
url_version_kind = 0
elif url_version == pkg['version'].split(' ')[0]:
assert not nightly
url_version_kind = 0
elif url_version == pkg['version']:
url_version_kind = 1
elif url_version == version:
url_version_kind = 2
else:
assert False, f'Unknow url version `{url_version}` for `{pkg_name}`'
f.write(f'{pkg_name}={{')
f.write(f'v={escape_nix_string(pkg["version"])};')
if url_version_kind != 0:
f.write(f'k={url_version_kind};')
if not (url_version == rustc_version or (url_version == 'nightly' and nightly)):
f.write(f'u={escape_nix_string(url_version)};')
for target_name in pkg_targets:
target = pkg['target'][target_name]
if not target['available']:

@ -42,32 +42,36 @@ let
# Uncompress the compressed manifest to the original one
# (not complete but has enough information to make up the toolchain).
uncompressManifest = nightly: version: { d /* date */, r /* rename index */, ... }@manifest: rec {
uncompressManifest = nightly: version: {
v, # rustc version
d, # date
r, # rename index
...
}@manifest: rec {
date = d;
renames = mapAttrs (from: to: { inherit to; }) (elemAt renamesList r);
pkg =
mapAttrs (pkgName: { v /* pkg version */, k ? 0 /* url kind */, ... }@hashes: {
version = v;
mapAttrs (pkgName: { u ? null /* url version */, ... }@hashes: {
# We use rustc version for all components to reduce manifest size.
# This version is just used for component derivation name.
version = "${v} (000000000 ${d})"; # "<version> (<commit-hash> yyyy-mm-dd)"
target =
mapAttrs' (targetIdx: hash: let
target = targets.${targetIdx};
pkgNameStripped = removeSuffix "-preview" pkgName;
targetTail = if targetIdx == "_" then "" else "-" + target;
vHead = head (match "([^ ]*) .*" v);
urlVersion =
if nightly then "nightly" # 'nightly'
else if k == 0 then vHead # '0.44.1 (aaaaaaaaa 2018-01-01)' -> '0.44.1' [package version]
else if k == 1 then v # '0.44.1 (aaaaaaaaa 2018-01-01)' [package version]
else if k == 2 then version # '1.49.0' [stable toolchain version]
else throw "Invalid k";
if u != null then u # Use specified url version if exists.
else if nightly then "nightly" # Otherwise, for nightly channel, default to be "nightly".
else v; # For stable channel, default to be rustc version.
in {
name = target;
value = {
xz_url = "${distRoot}/${date}/${pkgNameStripped}-${urlVersion}${targetTail}.tar.xz";
xz_hash = hash;
} // (if pkgName == "rust" then rustPkgExtra pkg target else {});
}) (removeAttrs hashes ["v" "k"]);
}) (removeAttrs manifest ["d" "r"]);
}) (removeAttrs hashes ["u"]);
}) (removeAttrs manifest ["v" "d" "r"]);
};
uncompressManifestSet = nightly: set: let

@ -262,8 +262,11 @@ let
mkPackage = name: pkg:
makeOverridable ({ extensions, targets, targetExtensions, stdenv, fetchurl, patchelf }:
let
version' = builtins.match "([^ ]*) [(]([^ ]*) ([^ ]*)[)]" pkg.version;
version = if version' == null then pkg.version else "${elemAt version' 0}-${elemAt version' 2}-${elemAt version' 1}";
m = builtins.match "([^ ]*) [(]([^ ]*) ([^ ]*)[)]" pkg.version;
version =
if m == null then pkg.version
else if builtins.match ".*nightly.*" pkg.version != null then "nightly-${elemAt m 2}"
else elemAt m 0;
extensions' = map maybeRename extensions;
targetExtensions' = map maybeRename targetExtensions;
namesAndSrcs = getComponents pkgs.pkg name targets extensions' targetExtensions' stdenv fetchurl;
@ -272,6 +275,9 @@ let
in
super.pkgs.symlinkJoin {
name = name + "-" + version;
pname = name;
inherit version;
paths = components;
postBuild = ''
# If rustc or rustdoc is in the derivation, we need to copy their

Loading…
Cancel
Save