From fc6d9ab956eba76b52568a9cae1b54f90bf4f1df Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Tue, 8 Nov 2022 11:50:02 +1100 Subject: [PATCH] Refactor: Extract new crate binstalk-manifests (#511) * Refactor: Extract new crate binstalk-manifests * Fix clippy warning in mod `binstall_crates_v1` * Rm unused deps in binstalk * Update release-pr Signed-off-by: Jiahao XU --- .github/workflows/release-pr.yml | 1 + Cargo.lock | 28 +++++++++++++---- Cargo.toml | 1 + crates/binstalk-manifests/Cargo.toml | 30 +++++++++++++++++++ .../src}/binstall_crates_v1.rs | 14 ++++----- .../src}/cargo_crates_v1.rs | 4 +-- .../cargo_crates_v1/crate_version_source.rs | 4 +-- .../src}/cargo_toml_binstall.rs | 0 .../cargo_toml_binstall/package_formats.rs | 0 .../src}/crate_info.rs | 2 +- crates/binstalk-manifests/src/helpers.rs | 25 ++++++++++++++++ .../src/lib.rs} | 2 ++ crates/binstalk/Cargo.toml | 6 +--- crates/binstalk/src/fs.rs | 14 --------- crates/binstalk/src/helpers.rs | 1 - crates/binstalk/src/helpers/statics.rs | 9 ------ crates/binstalk/src/lib.rs | 2 +- 17 files changed, 96 insertions(+), 47 deletions(-) create mode 100644 crates/binstalk-manifests/Cargo.toml rename crates/{binstalk/src/manifests => binstalk-manifests/src}/binstall_crates_v1.rs (94%) rename crates/{binstalk/src/manifests => binstalk-manifests/src}/cargo_crates_v1.rs (98%) rename crates/{binstalk/src/manifests => binstalk-manifests/src}/cargo_crates_v1/crate_version_source.rs (97%) rename crates/{binstalk/src/manifests => binstalk-manifests/src}/cargo_toml_binstall.rs (100%) rename crates/{binstalk/src/manifests => binstalk-manifests/src}/cargo_toml_binstall/package_formats.rs (100%) rename crates/{binstalk/src/manifests => binstalk-manifests/src}/crate_info.rs (97%) create mode 100644 crates/binstalk-manifests/src/helpers.rs rename crates/{binstalk/src/manifests.rs => binstalk-manifests/src/lib.rs} (97%) delete mode 100644 crates/binstalk/src/helpers/statics.rs diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index 82f14b21..c3dca191 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -9,6 +9,7 @@ on: options: - bin - binstalk + - binstalk-manifests - detect-targets - detect-wasi - fs-lock diff --git a/Cargo.lock b/Cargo.lock index 6f957d43..f1798100 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -109,6 +109,7 @@ name = "binstalk" version = "0.4.1" dependencies = [ "async-trait", + "binstalk-manifests", "binstall-tar", "bytes", "bzip2", @@ -119,7 +120,6 @@ dependencies = [ "digest", "env_logger", "flate2", - "fs-lock", "futures-util", "generic-array", "home", @@ -134,15 +134,11 @@ dependencies = [ "scopeguard", "semver", "serde", - "serde-tuple-vec-map", - "serde_json", "strum", - "strum_macros", "tempfile", "thiserror", "tinytemplate", "tokio", - "toml_edit", "tower", "trust-dns-resolver", "url", @@ -151,6 +147,28 @@ dependencies = [ "zstd", ] +[[package]] +name = "binstalk-manifests" +version = "0.1.0" +dependencies = [ + "compact_str", + "detect-targets", + "fs-lock", + "home", + "miette", + "once_cell", + "semver", + "serde", + "serde-tuple-vec-map", + "serde_json", + "strum", + "strum_macros", + "tempfile", + "thiserror", + "toml_edit", + "url", +] + [[package]] name = "binstall-tar" version = "0.4.39" diff --git a/Cargo.toml b/Cargo.toml index 8f00a464..38ccdc7d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ members = [ "crates/bin", "crates/binstalk", + "crates/binstalk-manifests", "crates/detect-wasi", "crates/fs-lock", "crates/normalize-path", diff --git a/crates/binstalk-manifests/Cargo.toml b/crates/binstalk-manifests/Cargo.toml new file mode 100644 index 00000000..fd8f3224 --- /dev/null +++ b/crates/binstalk-manifests/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "binstalk-manifests" +description = "The binstall toolkit for manipulating with manifest" +repository = "https://github.com/cargo-bins/cargo-binstall" +documentation = "https://docs.rs/binstalk-manifests" +version = "0.1.0" +rust-version = "1.61.0" +authors = ["ryan "] +edition = "2021" +license = "GPL-3.0" + +[dependencies] +compact_str = { version = "0.6.0", features = ["serde"] } +fs-lock = { version = "0.1.0", path = "../fs-lock" } +home = "0.5.4" +miette = "5.4.1" +once_cell = "1.16.0" +semver = { version = "1.0.14", features = ["serde"] } +serde = { version = "1.0.147", features = ["derive"] } +serde-tuple-vec-map = "1.0.1" +serde_json = "1.0.87" +strum = "0.24.1" +strum_macros = "0.24.3" +thiserror = "1.0.37" +toml_edit = { version = "0.15.0", features = ["easy"] } +url = { version = "2.3.1", features = ["serde"] } + +[dev-dependencies] +detect-targets = { version = "0.1.2", path = "../detect-targets" } +tempfile = "3.3.0" diff --git a/crates/binstalk/src/manifests/binstall_crates_v1.rs b/crates/binstalk-manifests/src/binstall_crates_v1.rs similarity index 94% rename from crates/binstalk/src/manifests/binstall_crates_v1.rs rename to crates/binstalk-manifests/src/binstall_crates_v1.rs index 69b3df80..1eb4bbdd 100644 --- a/crates/binstalk/src/manifests/binstall_crates_v1.rs +++ b/crates/binstalk-manifests/src/binstall_crates_v1.rs @@ -20,7 +20,7 @@ use miette::Diagnostic; use serde::Serialize; use thiserror::Error; -use crate::fs::create_if_not_exist; +use crate::helpers::create_if_not_exist; use super::crate_info::CrateInfo; @@ -171,7 +171,7 @@ impl<'a> IntoIterator for &'a Records { #[cfg(test)] mod test { use super::*; - use crate::manifests::crate_info::CrateSource; + use crate::crate_info::CrateSource; use compact_str::CompactString; use detect_targets::TARGET; @@ -224,14 +224,14 @@ mod test { }, ]; - append_to_path(&path, metadata_vec.clone()).unwrap(); + append_to_path(path, metadata_vec.clone()).unwrap(); let mut iter = metadata_vec.into_iter(); iter.next().unwrap(); let mut metadata_set: BTreeSet<_> = iter.collect(); - let mut records = Records::load_from_path(&path).unwrap(); + let mut records = Records::load_from_path(path).unwrap(); assert_records_eq!(&records, &metadata_set); records.remove("b"); @@ -239,7 +239,7 @@ mod test { records.overwrite().unwrap(); metadata_set.remove("b"); - let records = Records::load_from_path(&path).unwrap(); + let records = Records::load_from_path(path).unwrap(); assert_records_eq!(&records, &metadata_set); // Drop the exclusive file lock drop(records); @@ -253,10 +253,10 @@ mod test { bins: vec!["1".into(), "2".into()], other: Default::default(), }; - append_to_path(&path, [new_metadata.clone()]).unwrap(); + append_to_path(path, [new_metadata.clone()]).unwrap(); metadata_set.insert(new_metadata); - let records = Records::load_from_path(&path).unwrap(); + let records = Records::load_from_path(path).unwrap(); assert_records_eq!(&records, &metadata_set); } } diff --git a/crates/binstalk/src/manifests/cargo_crates_v1.rs b/crates/binstalk-manifests/src/cargo_crates_v1.rs similarity index 98% rename from crates/binstalk/src/manifests/cargo_crates_v1.rs rename to crates/binstalk-manifests/src/cargo_crates_v1.rs index aa1fa2a5..9d3aad47 100644 --- a/crates/binstalk/src/manifests/cargo_crates_v1.rs +++ b/crates/binstalk-manifests/src/cargo_crates_v1.rs @@ -22,7 +22,7 @@ use miette::Diagnostic; use serde::{Deserialize, Serialize}; use thiserror::Error; -use crate::fs::create_if_not_exist; +use crate::helpers::create_if_not_exist; use super::crate_info::CrateInfo; @@ -131,7 +131,7 @@ pub enum CratesTomlParseError { #[cfg(test)] mod tests { use super::*; - use crate::manifests::crate_info::CrateSource; + use crate::crate_info::CrateSource; use detect_targets::TARGET; use semver::Version; diff --git a/crates/binstalk/src/manifests/cargo_crates_v1/crate_version_source.rs b/crates/binstalk-manifests/src/cargo_crates_v1/crate_version_source.rs similarity index 97% rename from crates/binstalk/src/manifests/cargo_crates_v1/crate_version_source.rs rename to crates/binstalk-manifests/src/cargo_crates_v1/crate_version_source.rs index bf41e808..43c5ef54 100644 --- a/crates/binstalk/src/manifests/cargo_crates_v1/crate_version_source.rs +++ b/crates/binstalk-manifests/src/cargo_crates_v1/crate_version_source.rs @@ -8,8 +8,8 @@ use thiserror::Error; use url::Url; use crate::{ - helpers::statics::cratesio_url, - manifests::crate_info::{CrateInfo, CrateSource, SourceType}, + crate_info::{CrateInfo, CrateSource, SourceType}, + helpers::cratesio_url, }; #[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq)] diff --git a/crates/binstalk/src/manifests/cargo_toml_binstall.rs b/crates/binstalk-manifests/src/cargo_toml_binstall.rs similarity index 100% rename from crates/binstalk/src/manifests/cargo_toml_binstall.rs rename to crates/binstalk-manifests/src/cargo_toml_binstall.rs diff --git a/crates/binstalk/src/manifests/cargo_toml_binstall/package_formats.rs b/crates/binstalk-manifests/src/cargo_toml_binstall/package_formats.rs similarity index 100% rename from crates/binstalk/src/manifests/cargo_toml_binstall/package_formats.rs rename to crates/binstalk-manifests/src/cargo_toml_binstall/package_formats.rs diff --git a/crates/binstalk/src/manifests/crate_info.rs b/crates/binstalk-manifests/src/crate_info.rs similarity index 97% rename from crates/binstalk/src/manifests/crate_info.rs rename to crates/binstalk-manifests/src/crate_info.rs index 221390a6..dd5601ce 100644 --- a/crates/binstalk/src/manifests/crate_info.rs +++ b/crates/binstalk-manifests/src/crate_info.rs @@ -7,7 +7,7 @@ use semver::Version; use serde::{Deserialize, Serialize}; use url::Url; -use crate::helpers::statics::cratesio_url; +use crate::helpers::cratesio_url; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CrateInfo { diff --git a/crates/binstalk-manifests/src/helpers.rs b/crates/binstalk-manifests/src/helpers.rs new file mode 100644 index 00000000..f748d465 --- /dev/null +++ b/crates/binstalk-manifests/src/helpers.rs @@ -0,0 +1,25 @@ +use std::{fs, io, path::Path}; + +use once_cell::sync::Lazy; +use url::Url; + +/// Returned file is readable and writable. +pub(crate) fn create_if_not_exist(path: impl AsRef) -> io::Result { + let path = path.as_ref(); + + let mut options = fs::File::options(); + options.read(true).write(true); + + options + .clone() + .create_new(true) + .open(path) + .or_else(|_| options.open(path)) +} + +pub(crate) fn cratesio_url() -> &'static Url { + static CRATESIO: Lazy Url> = + Lazy::new(|| Url::parse("https://github.com/rust-lang/crates.io-index").unwrap()); + + &CRATESIO +} diff --git a/crates/binstalk/src/manifests.rs b/crates/binstalk-manifests/src/lib.rs similarity index 97% rename from crates/binstalk/src/manifests.rs rename to crates/binstalk-manifests/src/lib.rs index d5dc2542..ed655d1f 100644 --- a/crates/binstalk/src/manifests.rs +++ b/crates/binstalk-manifests/src/lib.rs @@ -8,6 +8,8 @@ //! [Binstall's `.crates-v1.json`][binstall_crates_v1]); //! - manifests that specify which packages _to_ install (currently none). +mod helpers; + pub mod binstall_crates_v1; pub mod cargo_crates_v1; pub mod cargo_toml_binstall; diff --git a/crates/binstalk/Cargo.toml b/crates/binstalk/Cargo.toml index 50bbb1c5..53b6a3d0 100644 --- a/crates/binstalk/Cargo.toml +++ b/crates/binstalk/Cargo.toml @@ -11,6 +11,7 @@ license = "GPL-3.0" [dependencies] async-trait = "0.1.58" +binstalk-manifests = { version = "0.1.0", path = "../binstalk-manifests" } bytes = "1.2.1" bzip2 = "0.4.3" cargo_toml = "0.13.0" @@ -19,7 +20,6 @@ crates_io_api = { version = "0.8.1", default-features = false } detect-targets = { version = "0.1.2", path = "../detect-targets" } digest = "0.10.5" flate2 = { version = "1.0.24", default-features = false } -fs-lock = { version = "0.1.0", path = "../fs-lock" } futures-util = { version = "0.3.25", default-features = false, features = ["std"] } generic-array = "0.14.6" home = "0.5.4" @@ -34,10 +34,7 @@ reqwest = { version = "0.11.12", features = ["stream", "gzip", "brotli", "deflat scopeguard = "1.1.0" semver = { version = "1.0.14", features = ["serde"] } serde = { version = "1.0.147", features = ["derive"] } -serde-tuple-vec-map = "1.0.1" -serde_json = "1.0.87" strum = "0.24.1" -strum_macros = "0.24.3" # Use a fork here since we need PAX support, but the upstream # does not hav the PR merged yet. # @@ -48,7 +45,6 @@ thiserror = "1.0.37" tinytemplate = "1.2.1" # parking_lot - for OnceCell::const_new tokio = { version = "1.21.2", features = ["macros", "rt", "process", "sync", "signal", "time", "parking_lot"], default-features = false } -toml_edit = { version = "0.15.0", features = ["easy"] } tower = { version = "0.4.13", features = ["limit", "util"] } trust-dns-resolver = { version = "0.21.2", optional = true, default-features = false, features = ["dnssec-ring"] } url = { version = "2.3.1", features = ["serde"] } diff --git a/crates/binstalk/src/fs.rs b/crates/binstalk/src/fs.rs index 2e4f09c6..3962b249 100644 --- a/crates/binstalk/src/fs.rs +++ b/crates/binstalk/src/fs.rs @@ -3,20 +3,6 @@ use std::{fs, io, path::Path}; use log::debug; use tempfile::NamedTempFile; -/// Returned file is readable and writable. -pub fn create_if_not_exist(path: impl AsRef) -> io::Result { - let path = path.as_ref(); - - let mut options = fs::File::options(); - options.read(true).write(true); - - options - .clone() - .create_new(true) - .open(path) - .or_else(|_| options.open(path)) -} - /// Atomically install a file. /// /// This is a blocking function, must be called in `block_in_place` mode. diff --git a/crates/binstalk/src/helpers.rs b/crates/binstalk/src/helpers.rs index ddae0132..b0b8c703 100644 --- a/crates/binstalk/src/helpers.rs +++ b/crates/binstalk/src/helpers.rs @@ -2,5 +2,4 @@ pub mod download; pub mod jobserver_client; pub mod remote; pub mod signal; -pub mod statics; pub mod tasks; diff --git a/crates/binstalk/src/helpers/statics.rs b/crates/binstalk/src/helpers/statics.rs deleted file mode 100644 index 7d48aca1..00000000 --- a/crates/binstalk/src/helpers/statics.rs +++ /dev/null @@ -1,9 +0,0 @@ -use once_cell::sync::Lazy; -use url::Url; - -pub fn cratesio_url() -> &'static Url { - static CRATESIO: Lazy Url> = - Lazy::new(|| Url::parse("https://github.com/rust-lang/crates.io-index").unwrap()); - - &CRATESIO -} diff --git a/crates/binstalk/src/lib.rs b/crates/binstalk/src/lib.rs index a4b00d85..7f00da4b 100644 --- a/crates/binstalk/src/lib.rs +++ b/crates/binstalk/src/lib.rs @@ -4,8 +4,8 @@ pub mod errors; pub mod fetchers; pub mod fs; pub mod helpers; -pub mod manifests; pub mod ops; +pub use binstalk_manifests as manifests; pub use detect_targets::{get_desired_targets, DesiredTargets}; pub use home;