1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
use crate::{
dependency::Requirement,
recipe::Derivation,
store::{object::Blob, package::LocalPackageSource},
};
use relative_path::RelativePathBuf;
use semver::{Version, VersionReq};
use std::{
collections::{BTreeSet, HashSet},
fs::{self, File},
path::Path,
};
#[allow(dead_code)]
pub fn pkg_req_ver_prov<P: AsRef<Path>>(
name: &str,
path: P,
requires: impl IntoIterator<Item = Requirement>,
version: &str,
provides: &str,
) -> LocalPackageSource {
let path = path.as_ref();
let package_lib_path = path.join("lib");
fs::create_dir_all(&package_lib_path).unwrap();
let lib_name = format!("{provides}.so");
let lib_path = package_lib_path.join(&lib_name);
let _lib = File::create(&lib_path).unwrap();
let drv = Derivation::new(
name.to_owned(),
Version::parse(version).unwrap(),
"Some package".to_owned(),
1,
1,
String::new(),
vec!["MIT".to_owned()],
requires.into_iter().collect(),
HashSet::new(),
Vec::new(),
String::new(),
RelativePathBuf::new(),
);
LocalPackageSource::new(drv, path.to_owned())
}
#[allow(dead_code)]
pub fn pkg_prov<P: AsRef<Path>>(name: &str, path: P, provides: &str) -> LocalPackageSource {
pkg_req_ver_prov(name, path, [], "1.0.0", provides)
}
#[allow(dead_code)]
pub fn pkg_req<P: AsRef<Path>>(
name: &str,
path: P,
requires: impl IntoIterator<Item = Requirement>,
) -> LocalPackageSource {
pkg_req_ver_prov(name, path, requires, "1.0.0", name)
}
#[allow(dead_code)]
pub fn pkg<P: AsRef<Path>>(name: &str, path: P) -> LocalPackageSource {
pkg_req(name, path, BTreeSet::new())
}
#[allow(dead_code)]
pub fn pkg_ver<P: AsRef<Path>>(name: &str, path: P, version: &str) -> LocalPackageSource {
pkg_req_ver_prov(name, path, [], version, name)
}
#[allow(dead_code)]
pub fn req(name: &str, version_req: &str) -> Requirement {
req_comp(
name,
version_req,
[Blob {
path: RelativePathBuf::from(&format!("lib/{name}.so")),
}],
)
}
#[allow(dead_code)]
pub fn req_comp(
name: &str,
version_req: &str,
objects: impl IntoIterator<Item = Blob>,
) -> Requirement {
Requirement::new(
name.to_owned(),
VersionReq::parse(version_req).unwrap(),
objects.into_iter().collect(),
)
}