Skip to content

Commit 3aed028

Browse files
authored
clean everything up a bit (#27)
1 parent 8ceafa6 commit 3aed028

File tree

6 files changed

+395
-306
lines changed

6 files changed

+395
-306
lines changed

Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "godot-package-manager"
3-
version = "1.2.0"
3+
version = "1.2.1"
44
edition = "2021"
55
authors = ["bendn <bend.n@outlook.com>"]
66
description = "A package manager for godot"
@@ -29,6 +29,8 @@ reqwest = { version = "0.11", features = [] }
2929
tokio = { version = "1", features = ["full"] }
3030
async-recursion = "1.0.2"
3131
futures = "0.3"
32+
semver_rs = { version = "0.2", features = ["serde"] }
33+
async-trait = "0.1.66"
3234

3335
[dev-dependencies]
3436
glob = "0.3.0"

godot.lock

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,14 @@
11
[
2-
{
3-
"name": "@bendn/splitter",
4-
"version": "1.0.6",
5-
"integrity": "sha512-HT7q5qv6OEpX95e5r+kAsasoAvH0Mgf+aT4SdKQ18fyDIn1dW02WqbulF0AMwHufgRZkMf9SnQGiAq79P5ZIKQ=="
6-
},
72
{
83
"name": "@bendn/test",
9-
"version": "2.0.10",
10-
"integrity": "sha512-hyPGxDG8poa2ekmWr1BeTCUa7YaZYfhsN7jcLJ3q2cQVlowcTnzqmz4iV3t21QFyabE5R+rV+y6d5dAItrJeDw=="
4+
"integrity": "sha512-hyPGxDG8poa2ekmWr1BeTCUa7YaZYfhsN7jcLJ3q2cQVlowcTnzqmz4iV3t21QFyabE5R+rV+y6d5dAItrJeDw==",
5+
"tarball": "https://registry.npmjs.org/@bendn/test/-/test-2.0.10.tgz",
6+
"version": "2.0.10"
117
},
128
{
139
"name": "@bendn/gdcli",
14-
"version": "1.2.5",
15-
"integrity": "sha512-/YOAd1+K4JlKvPTmpX8B7VWxGtFrxKq4R0A6u5qOaaVPK6uGsl4dGZaIHpxuqcurEcwPEOabkoShXKZaOXB0lw=="
16-
},
17-
{
18-
"name": "prettier",
19-
"version": "2.8.4",
20-
"integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw=="
21-
},
22-
{
23-
"name": "stockfish",
24-
"version": "15.0.0",
25-
"integrity": "sha512-ze3vTgMrnCmMdtC8qpONBdXkSHWwv4Dx+GFV1V5TIi0qP1HF+Vwa4lArgqvHDooU8Mwfs1cgRzkW3SM8x/7TJg=="
10+
"integrity": "sha512-/YOAd1+K4JlKvPTmpX8B7VWxGtFrxKq4R0A6u5qOaaVPK6uGsl4dGZaIHpxuqcurEcwPEOabkoShXKZaOXB0lw==",
11+
"tarball": "https://registry.npmjs.org/@bendn/gdcli/-/gdcli-1.2.5.tgz",
12+
"version": "1.2.5"
2613
}
2714
]

src/config_file.rs

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
use crate::package::parsing::IntoPackageList;
12
use crate::package::Package;
23
use anyhow::Result;
34
use console::style;
4-
use futures::stream::{self, StreamExt};
5+
use reqwest::Client;
56
use serde::{Deserialize, Serialize};
67
use std::collections::HashMap;
78

@@ -43,7 +44,7 @@ impl From<ConfigFile> for ParsedConfig {
4344
packages: from
4445
.packages
4546
.into_iter()
46-
.map(|p| (p.name, p.version))
47+
.map(|p| (p.name, p.version.to_string()))
4748
.collect(),
4849
}
4950
}
@@ -58,13 +59,12 @@ impl ParsedConfig {
5859
})
5960
}
6061

61-
pub async fn into_configfile(self) -> ConfigFile {
62-
let packages = stream::iter(self.packages.into_iter())
63-
.map(|(name, version)| async { Package::new(name, version).await.unwrap() })
64-
.buffer_unordered(crate::PARALLEL)
65-
.collect::<Vec<Package>>()
66-
.await;
67-
ConfigFile { packages }
62+
pub async fn into_configfile(self, client: Client) -> ConfigFile {
63+
let mut packages = self.packages.into_package_list(client).await.unwrap();
64+
for mut p in &mut packages {
65+
p.indirect = false
66+
}
67+
ConfigFile { packages: packages }
6868
}
6969
}
7070

@@ -80,24 +80,24 @@ impl ConfigFile {
8080

8181
/// Creates a new [ConfigFile] from the given text
8282
/// Panics if the file cant be parsed as toml, hjson or yaml.
83-
pub async fn new(contents: &String) -> Self {
83+
pub async fn new(contents: &String, client: Client) -> Self {
8484
if contents.is_empty() {
8585
panic!("Empty CFG");
8686
}
8787

8888
// definetly not going to backfire
8989
let mut cfg = if contents.as_bytes()[0] == b'{' {
9090
// json gets brute forced first so this isnt really needed
91-
Self::parse(contents, ConfigType::JSON)
91+
Self::parse(contents, ConfigType::JSON, client)
9292
.await
9393
.expect("Parsing CFG from JSON should work")
9494
} else if contents.len() > 3 && contents[..3] == *"---" {
95-
Self::parse(contents, ConfigType::YAML)
95+
Self::parse(contents, ConfigType::YAML, client)
9696
.await
9797
.expect("Parsing CFG from YAML should work")
9898
} else {
9999
for i in [ConfigType::JSON, ConfigType::YAML, ConfigType::TOML].into_iter() {
100-
let res = Self::parse(contents, i).await;
100+
let res = Self::parse(contents, i, client.clone()).await;
101101

102102
// im sure theres some kind of idiomatic rust way to do this that i dont know of
103103
if res.is_ok() {
@@ -118,16 +118,16 @@ impl ConfigFile {
118118
cfg
119119
}
120120

121-
pub async fn parse(txt: &str, t: ConfigType) -> Result<Self> {
122-
Ok(ParsedConfig::parse(txt, t)?.into_configfile().await)
121+
pub async fn parse(txt: &str, t: ConfigType, client: Client) -> Result<Self> {
122+
Ok(ParsedConfig::parse(txt, t)?.into_configfile(client).await)
123123
}
124124

125125
/// Creates a lockfile for this config file.
126126
/// note: Lockfiles are currently unused.
127-
pub async fn lock(&mut self) -> String {
127+
pub fn lock(&mut self) -> String {
128128
let mut pkgs = vec![];
129-
for mut p in self.collect() {
130-
if p.is_installed() && p.get_manifest().await.is_ok() {
129+
for p in self.collect() {
130+
if p.is_installed() {
131131
pkgs.push(p)
132132
};
133133
}
@@ -140,7 +140,7 @@ impl ConfigFile {
140140
for p in pkgs {
141141
cb(p);
142142
if p.has_deps() {
143-
inner(&mut p.dependencies, cb);
143+
inner(&mut p.manifest.dependencies, cb);
144144
}
145145
}
146146
}
@@ -168,10 +168,23 @@ mod tests {
168168
#[tokio::test]
169169
async fn parse() {
170170
let _t = crate::test_utils::mktemp();
171+
let c = Client::new();
171172
let cfgs: [&mut ConfigFile; 3] = [
172-
&mut ConfigFile::new(&r#"dependencies: { "@bendn/test": 2.0.10 }"#.into()).await, // quoteless fails as a result of https://github.com/Canop/deser-hjson/issues/9
173-
&mut ConfigFile::new(&"dependencies:\n \"@bendn/test\": 2.0.10".into()).await,
174-
&mut ConfigFile::new(&"[dependencies]\n\"@bendn/test\" = \"2.0.10\"".into()).await,
173+
&mut ConfigFile::new(
174+
&r#"dependencies: { "@bendn/test": 2.0.10 }"#.into(),
175+
c.clone(),
176+
)
177+
.await, // quoteless fails as a result of https://github.com/Canop/deser-hjson/issues/9
178+
&mut ConfigFile::new(
179+
&"dependencies:\n \"@bendn/test\": 2.0.10".into(),
180+
c.clone(),
181+
)
182+
.await,
183+
&mut ConfigFile::new(
184+
&"[dependencies]\n\"@bendn/test\" = \"2.0.10\"".into(),
185+
c.clone(),
186+
)
187+
.await,
175188
];
176189
#[derive(Debug, Deserialize, Clone, Eq, PartialEq)]
177190
struct LockFileEntry {
@@ -185,16 +198,16 @@ mod tests {
185198
for cfg in cfgs {
186199
assert_eq!(cfg.packages.len(), 1);
187200
assert_eq!(cfg.packages[0].to_string(), "@bendn/test@2.0.10");
188-
assert_eq!(cfg.packages[0].dependencies.len(), 1);
201+
assert_eq!(cfg.packages[0].manifest.dependencies.len(), 1);
189202
assert_eq!(
190-
cfg.packages[0].dependencies[0].to_string(),
203+
cfg.packages[0].manifest.dependencies[0].to_string(),
191204
"@bendn/gdcli@1.2.5"
192205
);
193206
for mut p in cfg.collect() {
194-
p.download().await
207+
p.download(c.clone()).await
195208
}
196209
assert_eq!(
197-
serde_json::from_str::<Vec<LockFileEntry>>(cfg.lock().await.as_str()).unwrap(),
210+
serde_json::from_str::<Vec<LockFileEntry>>(cfg.lock().as_str()).unwrap(),
198211
wanted_lockfile
199212
);
200213
}

0 commit comments

Comments
 (0)