mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-06 17:13:24 -05:00
parent
d5c3bd02c9
commit
2c52816160
3 changed files with 41 additions and 5 deletions
|
|
@ -195,6 +195,28 @@
|
|||
|
||||
hash = "sha256-QGObVDd9qVtf/U78+ayP6RHVWsU+HXhg70BFblQ1PZs=";
|
||||
};
|
||||
|
||||
# Test lockfiles with file: dependencies
|
||||
fileDependenciesV1 = makeTest {
|
||||
name = "file-dependencies-lockfile-v1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://raw.githubusercontent.com/elbywan/wretch/970b19e0fcc3dd219b9f3fc247d8f34cc01979c6/package-lock.json";
|
||||
hash = "sha256-3vTMxc9M2TeiclUFYbG5eTzavSAXjAzz6N5v/1VM4Bc=";
|
||||
};
|
||||
|
||||
hash = "sha256-4wTohTVWF49iQvdaUxNhwplfTVb53yFnAaUVA2xIXrc=";
|
||||
};
|
||||
fileDependenciesV3 = makeTest {
|
||||
name = "file-dependencies-lockfile-v3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://raw.githubusercontent.com/alam00000/bentopdf/146e3f07d4111e309d0b29bb949e78e44454be3b/package-lock.json";
|
||||
hash = "sha256-9Ea5ctJYbClxStYNhSfSpsO/P99/4CQK58PLK5e6PoQ=";
|
||||
};
|
||||
|
||||
hash = "sha256-1xWkzAzZXd9f4sY9xFHLfj482ZCs2oKFJ79C+Iy7RFY=";
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
|
|
|||
|
|
@ -238,6 +238,7 @@ fn fixup_lockfile(
|
|||
.values_mut()
|
||||
{
|
||||
if let Some(Value::String(resolved)) = package.get("resolved")
|
||||
&& !resolved.starts_with("file:")
|
||||
&& let Some(Value::String(integrity)) = package.get("integrity")
|
||||
{
|
||||
if resolved.starts_with("git+") {
|
||||
|
|
@ -286,6 +287,7 @@ fn fixup_v1_deps(
|
|||
.as_object()
|
||||
.expect("v1 dep must be object")
|
||||
.get("resolved")
|
||||
&& !resolved.starts_with("file:")
|
||||
&& let Some(Value::String(integrity)) = dep
|
||||
.as_object()
|
||||
.expect("v1 dep must be object")
|
||||
|
|
@ -509,6 +511,10 @@ mod tests {
|
|||
"resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
|
||||
"integrity": "sha512-aaa"
|
||||
},
|
||||
"baz": {
|
||||
"resolved": "file:baz.tar.gz",
|
||||
"integrity": "sha512-bbb"
|
||||
},
|
||||
"foo-bad": {
|
||||
"resolved": "foo",
|
||||
"integrity": "sha1-foo"
|
||||
|
|
@ -534,6 +540,10 @@ mod tests {
|
|||
"bar": {
|
||||
"resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
|
||||
},
|
||||
"baz": {
|
||||
"resolved": "file:baz.tar.gz",
|
||||
"integrity": "sha512-bbb"
|
||||
},
|
||||
"foo-bad": {
|
||||
"resolved": "foo",
|
||||
"integrity": "sha512-foo"
|
||||
|
|
|
|||
|
|
@ -25,10 +25,10 @@ pub fn lockfile(
|
|||
let mut packages = lock::packages(content)
|
||||
.context("failed to extract packages from lockfile")?
|
||||
.into_par_iter()
|
||||
.map(|p| {
|
||||
.filter_map(|p| {
|
||||
let n = p.name.clone().unwrap();
|
||||
|
||||
Package::from_lock(p).with_context(|| format!("failed to parse data for {n}"))
|
||||
Package::from_lock(p).with_context(|| format!("failed to parse data for {n}")).transpose()
|
||||
})
|
||||
.collect::<anyhow::Result<Vec<_>>>()?;
|
||||
|
||||
|
|
@ -124,7 +124,7 @@ enum Specifics {
|
|||
}
|
||||
|
||||
impl Package {
|
||||
fn from_lock(pkg: lock::Package) -> anyhow::Result<Package> {
|
||||
fn from_lock(pkg: lock::Package) -> anyhow::Result<Option<Package>> {
|
||||
let mut resolved = match pkg
|
||||
.resolved
|
||||
.expect("at this point, packages should have URLs")
|
||||
|
|
@ -133,6 +133,10 @@ impl Package {
|
|||
UrlOrString::String(_) => panic!("at this point, all packages should have URLs"),
|
||||
};
|
||||
|
||||
if resolved.scheme() == "file" {
|
||||
return Ok(None);
|
||||
}
|
||||
|
||||
let specifics = match get_hosted_git_url(&resolved)? {
|
||||
Some(hosted) => {
|
||||
let body = util::get_url_body_with_retry(&hosted)?;
|
||||
|
|
@ -174,12 +178,12 @@ impl Package {
|
|||
},
|
||||
};
|
||||
|
||||
Ok(Package {
|
||||
Ok(Some(Package {
|
||||
name: pkg.name.unwrap(),
|
||||
version: pkg.version,
|
||||
url: resolved,
|
||||
specifics,
|
||||
})
|
||||
}))
|
||||
}
|
||||
|
||||
pub fn tarball(&self) -> anyhow::Result<Vec<u8>> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue