diff options
author | Dennis Gosnell <cdep.illabout@gmail.com> | 2023-03-27 08:42:30 +0900 |
---|---|---|
committer | Dennis Gosnell <cdep.illabout@gmail.com> | 2023-03-27 08:42:30 +0900 |
commit | c00dc0cf7d278a5974dda104027dc989d01c414d (patch) | |
tree | f4ee8316c460004788ae995dccb07914391d3a0f /maintainers | |
parent | 88e877fe1c764a55db4cc361fefc5d950c601807 (diff) | |
parent | 0dc13f46fa554db7b4168c33022fe69629e65349 (diff) |
Merge remote-tracking branch 'origin/master' into haskell-updates
Diffstat (limited to 'maintainers')
9 files changed, 418 insertions, 17 deletions
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 03a68e5af690c..4eefe3bea0f5b 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -1835,6 +1835,12 @@ fingerprint = "E9A3 7864 2165 28CE 507C CA82 72EA BF75 C331 CD25"; }]; }; + benkuhn = { + email = "ben@ben-kuhn.com"; + github = "ben-kuhn"; + githubId = 16821405; + name = "Ben Kuhn"; + }; benley = { email = "benley@gmail.com"; github = "benley"; @@ -2094,15 +2100,6 @@ githubId = 68566724; name = "bootstrap-prime"; }; - boppyt = { - email = "boppy@nwcpz.com"; - github = "boppyt"; - githubId = 71049646; - name = "Zack A"; - keys = [{ - fingerprint = "E8D7 5C19 9F65 269B 439D F77B 6310 C97D E31D 1545"; - }]; - }; borisbabic = { email = "boris.ivan.babic@gmail.com"; github = "borisbabic"; @@ -9361,6 +9358,12 @@ githubId = 458783; name = "Martin Gammelsæter"; }; + martinramm = { + email = "martin-ramm@gmx.de"; + github = "MartinRamm"; + githubId = 31626748; + name = "Martin Ramm"; + }; marzipankaiser = { email = "nixos@gaisseml.de"; github = "marzipankaiser"; @@ -10327,6 +10330,12 @@ githubId = 3073833; name = "Massimo Redaelli"; }; + mrene = { + email = "mathieu.rene@gmail.com"; + github = "mrene"; + githubId = 254443; + name = "Mathieu Rene"; + }; mrfreezeex = { email = "arthur@cri.epita.fr"; github = "MrFreezeex"; @@ -13611,6 +13620,16 @@ githubId = 17243347; name = "Sebastian Sellmeier"; }; + sefidel = { + name = "sefidel"; + email = "contact@sefidel.net"; + matrix = "@sef:exotic.sh"; + github = "sefidel"; + githubId = 71049646; + keys = [{ + fingerprint = "8BDF DFB5 6842 2393 82A0 441B 9238 BC70 9E05 516A"; + }]; + }; sei40kr = { name = "Seong Yong-ju"; email = "sei40kr@gmail.com"; @@ -16176,12 +16195,6 @@ github = "wegank"; githubId = 9713184; }; - weihua = { - email = "luwh364@gmail.com"; - github = "weihua-lu"; - githubId = 9002575; - name = "Weihua Lu"; - }; welteki = { email = "welteki@pm.me"; github = "welteki"; diff --git a/maintainers/scripts/convert-to-import-cargo-lock.sh b/maintainers/scripts/convert-to-import-cargo-lock.sh new file mode 100755 index 0000000000000..b38825d4d3e0c --- /dev/null +++ b/maintainers/scripts/convert-to-import-cargo-lock.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env nix-shell +#!nix-shell -I nixpkgs=. -i bash -p "import ./maintainers/scripts/convert-to-import-cargo-lock" nix-prefetch-git + +convert-to-import-cargo-lock "$@" diff --git a/maintainers/scripts/convert-to-import-cargo-lock/.gitignore b/maintainers/scripts/convert-to-import-cargo-lock/.gitignore new file mode 100644 index 0000000000000..ea8c4bf7f35f6 --- /dev/null +++ b/maintainers/scripts/convert-to-import-cargo-lock/.gitignore @@ -0,0 +1 @@ +/target diff --git a/maintainers/scripts/convert-to-import-cargo-lock/Cargo.lock b/maintainers/scripts/convert-to-import-cargo-lock/Cargo.lock new file mode 100644 index 0000000000000..b69fbc59ae846 --- /dev/null +++ b/maintainers/scripts/convert-to-import-cargo-lock/Cargo.lock @@ -0,0 +1,106 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "basic-toml" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" +dependencies = [ + "serde", +] + +[[package]] +name = "convert-to-import-cargo-lock" +version = "0.1.0" +dependencies = [ + "anyhow", + "basic-toml", + "serde", + "serde_json", +] + +[[package]] +name = "itoa" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" + +[[package]] +name = "proc-macro2" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" + +[[package]] +name = "serde" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" diff --git a/maintainers/scripts/convert-to-import-cargo-lock/Cargo.toml b/maintainers/scripts/convert-to-import-cargo-lock/Cargo.toml new file mode 100644 index 0000000000000..41f5729f01a2c --- /dev/null +++ b/maintainers/scripts/convert-to-import-cargo-lock/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "convert-to-import-cargo-lock" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = { version = "1.0.69" } +basic-toml = "0.1.1" +serde = { version = "1.0.152", features = ["derive"] } +serde_json = "1.0.93" diff --git a/maintainers/scripts/convert-to-import-cargo-lock/default.nix b/maintainers/scripts/convert-to-import-cargo-lock/default.nix new file mode 100644 index 0000000000000..f4c1f553d64f9 --- /dev/null +++ b/maintainers/scripts/convert-to-import-cargo-lock/default.nix @@ -0,0 +1,16 @@ +with import ../../../. { }; + +rustPlatform.buildRustPackage { + name = "convert-to-import-cargo-lock"; + + src = lib.cleanSourceWith { + src = ./.; + filter = name: type: + let + name' = builtins.baseNameOf name; + in + name' != "default.nix" && name' != "target"; + }; + + cargoLock.lockFile = ./Cargo.lock; +} diff --git a/maintainers/scripts/convert-to-import-cargo-lock/shell.nix b/maintainers/scripts/convert-to-import-cargo-lock/shell.nix new file mode 100644 index 0000000000000..8e913fdcd8be5 --- /dev/null +++ b/maintainers/scripts/convert-to-import-cargo-lock/shell.nix @@ -0,0 +1,5 @@ +with import ../../../. { }; + +mkShell { + packages = [ rustc cargo clippy rustfmt ] ++ lib.optional stdenv.isDarwin libiconv; +} diff --git a/maintainers/scripts/convert-to-import-cargo-lock/src/main.rs b/maintainers/scripts/convert-to-import-cargo-lock/src/main.rs new file mode 100644 index 0000000000000..6eb6768d14e96 --- /dev/null +++ b/maintainers/scripts/convert-to-import-cargo-lock/src/main.rs @@ -0,0 +1,241 @@ +#![warn(clippy::pedantic)] +#![allow(clippy::too_many_lines)] + +use anyhow::anyhow; +use serde::Deserialize; +use std::{collections::HashMap, env, fs, path::PathBuf, process::Command}; + +#[derive(Deserialize)] +struct CargoLock<'a> { + #[serde(rename = "package", borrow)] + packages: Vec<Package<'a>>, + metadata: Option<HashMap<&'a str, &'a str>>, +} + +#[derive(Deserialize)] +struct Package<'a> { + name: &'a str, + version: &'a str, + source: Option<&'a str>, + checksum: Option<&'a str>, +} + +#[derive(Deserialize)] +struct PrefetchOutput { + sha256: String, +} + +fn main() -> anyhow::Result<()> { + let mut hashes = HashMap::new(); + + let attr_count = env::args().len() - 1; + + for (i, attr) in env::args().skip(1).enumerate() { + println!("converting {attr} ({}/{attr_count})", i + 1); + + convert(&attr, &mut hashes)?; + } + + Ok(()) +} + +fn convert(attr: &str, hashes: &mut HashMap<String, String>) -> anyhow::Result<()> { + let package_path = nix_eval(format!("{attr}.meta.position"))? + .and_then(|p| p.split_once(':').map(|(f, _)| PathBuf::from(f))); + + if package_path.is_none() { + eprintln!("can't automatically convert {attr}: doesn't exist"); + return Ok(()); + } + + let package_path = package_path.unwrap(); + + if package_path.with_file_name("Cargo.lock").exists() { + eprintln!("skipping {attr}: already has a vendored Cargo.lock"); + return Ok(()); + } + + let mut src = PathBuf::from( + String::from_utf8( + Command::new("nix-build") + .arg("-A") + .arg(format!("{attr}.src")) + .output()? + .stdout, + )? + .trim(), + ); + + if !src.exists() { + eprintln!("can't automatically convert {attr}: src doesn't exist (bad attr?)"); + return Ok(()); + } else if !src.metadata()?.is_dir() { + eprintln!("can't automatically convert {attr}: src isn't a directory"); + return Ok(()); + } + + if let Some(mut source_root) = nix_eval(format!("{attr}.sourceRoot"))?.map(PathBuf::from) { + source_root = source_root.components().skip(1).collect(); + src.push(source_root); + } + + let cargo_lock_path = src.join("Cargo.lock"); + + if !cargo_lock_path.exists() { + eprintln!("can't automatically convert {attr}: src doesn't contain Cargo.lock"); + return Ok(()); + } + + let cargo_lock_content = fs::read_to_string(cargo_lock_path)?; + + let cargo_lock: CargoLock = basic_toml::from_str(&cargo_lock_content)?; + + let mut git_dependencies = Vec::new(); + + for package in cargo_lock.packages.iter().filter(|p| { + p.source.is_some() + && p.checksum + .or_else(|| { + cargo_lock + .metadata + .as_ref()? + .get( + format!("checksum {} {} ({})", p.name, p.version, p.source.unwrap()) + .as_str(), + ) + .copied() + }) + .is_none() + }) { + let (typ, original_url) = package + .source + .unwrap() + .split_once('+') + .expect("dependency should have well-formed source url"); + + if let Some(hash) = hashes.get(original_url) { + continue; + } + + assert_eq!( + typ, "git", + "packages without checksums should be git dependencies" + ); + + let (mut url, rev) = original_url + .split_once('#') + .expect("git dependency should have commit"); + + // TODO: improve + if let Some((u, _)) = url.split_once('?') { + url = u; + } + + let prefetch_output: PrefetchOutput = serde_json::from_slice( + &Command::new("nix-prefetch-git") + .args(["--url", url, "--rev", rev, "--quiet", "--fetch-submodules"]) + .output()? + .stdout, + )?; + + let output_hash = String::from_utf8( + Command::new("nix") + .args([ + "--extra-experimental-features", + "nix-command", + "hash", + "to-sri", + "--type", + "sha256", + &prefetch_output.sha256, + ]) + .output()? + .stdout, + )?; + + let hash = output_hash.trim().to_string(); + + git_dependencies.push(( + format!("{}-{}", package.name, package.version), + output_hash.trim().to_string().clone(), + )); + + hashes.insert(original_url.to_string(), hash); + } + + fs::write( + package_path.with_file_name("Cargo.lock"), + cargo_lock_content, + )?; + + let mut package_lines: Vec<_> = fs::read_to_string(&package_path)? + .lines() + .map(String::from) + .collect(); + + let (cargo_deps_line_index, cargo_deps_line) = package_lines + .iter_mut() + .enumerate() + .find(|(_, l)| { + l.trim_start().starts_with("cargoHash") || l.trim_start().starts_with("cargoSha256") + }) + .expect("package should contain cargoHash/cargoSha256"); + + let spaces = " ".repeat(cargo_deps_line.len() - cargo_deps_line.trim_start().len()); + + if git_dependencies.is_empty() { + *cargo_deps_line = format!("{spaces}cargoLock.lockFile = ./Cargo.lock;"); + } else { + *cargo_deps_line = format!("{spaces}cargoLock = {{"); + + let mut index_iter = cargo_deps_line_index + 1..; + + package_lines.insert( + index_iter.next().unwrap(), + format!("{spaces} lockFile = ./Cargo.lock;"), + ); + + package_lines.insert( + index_iter.next().unwrap(), + format!("{spaces} outputHashes = {{"), + ); + + for ((dep, hash), index) in git_dependencies.drain(..).zip(&mut index_iter) { + package_lines.insert(index, format!("{spaces} {dep:?} = {hash:?};")); + } + + package_lines.insert(index_iter.next().unwrap(), format!("{spaces} }};")); + package_lines.insert(index_iter.next().unwrap(), format!("{spaces}}};")); + } + + if package_lines.last().map(String::as_str) != Some("") { + package_lines.push(String::new()); + } + + fs::write(package_path, package_lines.join("\n"))?; + + Ok(()) +} + +fn nix_eval(attr: impl AsRef<str>) -> anyhow::Result<Option<String>> { + let output = String::from_utf8( + Command::new("nix-instantiate") + .args(["--eval", "-A", attr.as_ref()]) + .output()? + .stdout, + )?; + + let trimmed = output.trim(); + + if trimmed.is_empty() || trimmed == "null" { + Ok(None) + } else { + Ok(Some( + trimmed + .strip_prefix('"') + .and_then(|p| p.strip_suffix('"')) + .ok_or_else(|| anyhow!("couldn't parse nix-instantiate output: {output:?}"))? + .to_string(), + )) + } +} diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index 2201fc7f76bc3..173ad98263f9e 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -424,11 +424,14 @@ with lib.maintainers; { llvm = { members = [ + dtzWill ericson2314 - sternenseemann lovek323 - dtzWill primeos + qyliss + raitobezarius + rrbutani + sternenseemann ]; scope = "Maintain LLVM package sets and related packages"; shortName = "LLVM"; |