feat: v0.2.4, list supports file-meta.json

This commit is contained in:
2024-08-18 11:31:54 +08:00
parent b75e350db1
commit affcb233bd
4 changed files with 66 additions and 31 deletions

29
Cargo.lock generated
View File

@@ -634,18 +634,18 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
name = "proc-macro2"
version = "1.0.69"
version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.33"
version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [
"proc-macro2",
]
@@ -710,10 +710,12 @@ dependencies = [
[[package]]
name = "runrs"
version = "0.2.3"
version = "0.2.4"
dependencies = [
"reqwest",
"rust_util",
"serde",
"serde_json",
"sha256",
]
@@ -794,18 +796,18 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.193"
version = "1.0.208"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.193"
version = "1.0.208"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf"
dependencies = [
"proc-macro2",
"quote",
@@ -814,11 +816,12 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.108"
version = "1.0.125"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed"
dependencies = [
"itoa",
"memchr",
"ryu",
"serde",
]
@@ -890,9 +893,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.39"
version = "2.0.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9"
dependencies = [
"proc-macro2",
"quote",

View File

@@ -1,6 +1,6 @@
[package]
name = "runrs"
version = "0.2.3"
version = "0.2.4"
edition = "2018"
license = "MIT/Apache-2.0"
description = "A Tool for Run Rust Scripts"
@@ -12,3 +12,5 @@ readme = "README.md"
reqwest = { version = "0.11.14", features = ["blocking"] }
rust_util = "0.6.41"
sha256 = "1.0.3"
serde = { version = "1.0.193", features = ["derive"] }
serde_json = "1.0.125"

View File

@@ -1,4 +1,17 @@
const FILE_META: &'static str = "https://git.hatter.ink/rust-scripts/scriptbase/raw/branch/main/file-meta.txt";
use rust_util::util_os::get_user_home;
use serde::Deserialize;
use std::collections::BTreeMap;
use std::fs;
use std::path::PathBuf;
const FILE_META: &'static str = "https://git.hatter.ink/rust-scripts/scriptbase/raw/branch/main/script-meta.json";
#[derive(Deserialize)]
struct ScriptMeta {
script_name: String,
script_length: u64,
script_sha256: String,
}
pub fn list_scripts() {
debugging!("Loading URL: {}", FILE_META);
@@ -14,18 +27,35 @@ pub fn list_scripts() {
});
debugging!("Response text: {}", &text);
let mut scripts: Vec<&str> = text.trim().split("\n").collect();
scripts.sort();
let script_meta_map: BTreeMap<String, ScriptMeta> = serde_json::from_str(&text).expect("Parse script-meta.json failed.");
success!("Found {} script(s):\n{}",
scripts.len(),
scripts.iter().map(|script| {
let script = if script.ends_with("-rs") {
script.chars().take(script.len() - 3).collect::<String>() + ".rs"
} else {
script.to_string()
};
format!("- {}", script)
}).collect::<Vec<_>>().join("\n")
);
let mut messages = vec![];
messages.push(format!("Found {} script(s):", script_meta_map.len()));
for (_, script_meta) in &script_meta_map {
let script_name = &script_meta.script_name;
let real_script_name = if script_name.ends_with("-rs") {
script_name.chars().take(script_name.len() - 3).collect::<String>() + ".rs"
} else {
script_name.to_string()
};
let user_home = get_user_home().expect("Get user home failed!");
let full_script_path = PathBuf::from(&user_home).join("bin").join(&real_script_name);
let is_script_exists = full_script_path.is_file();
let script_sha256 = if is_script_exists {
let script_content = fs::read(&full_script_path).unwrap_or(vec![]);
sha256::digest(&script_content)
} else {
"".to_string()
};
let is_script_matches = script_sha256 == script_meta.script_sha256;
let script_size = rust_util::util_size::get_display_size(script_meta.script_length as i64);
let padding_length = 40 - real_script_name.len();
messages.push(format!("- {} {} {} {}",
iff!(is_script_exists, iff!(is_script_matches, "", "✔️ "), ""),
real_script_name,
".".repeat(iff!(padding_length < 1, 1, padding_length)),
script_size,
));
}
success!("{}", messages.join("\n"));
}

View File

@@ -1,9 +1,9 @@
use std::{env, fs, process};
use rust_util::util_cmd;
use rust_util::util_env::is_env_on;
use std::path::PathBuf;
use std::process::Command;
use std::time::SystemTime;
use rust_util::util_cmd;
use rust_util::util_env::is_env_on;
use std::{env, fs, process};
pub fn build_script_command(rust_script: PathBuf, script_file: &str, script_sha256: &str, cache_script_bin_name: &str) -> Command {