Skip to content

Commit 5119240

Browse files
authored
Merge pull request #24 from ink0rr/dev
rgl v0.10.0
2 parents e551967 + afce7f0 commit 5119240

32 files changed

Lines changed: 675 additions & 757 deletions

Cargo.lock

Lines changed: 122 additions & 250 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
[package]
22
name = "rgl"
3-
version = "0.9.0"
3+
version = "0.10.0"
44
edition = "2021"
55

66
[[bin]]
77
name = "rgl"
88

99
[dependencies]
1010
anyhow = "1.0.86"
11-
clap = { version = "4.5.6", features = ["cargo", "derive"] }
11+
clap = { version = "4.5.8", features = ["cargo", "derive"] }
1212
dialoguer = "0.11.0"
1313
dunce = "1.0.4"
1414
enum_dispatch = "0.3.13"
1515
fslock = "0.2.1"
1616
indexmap = { version = "2.2.6", features = ["serde"] }
17-
md5 = "0.7.0"
1817
notify = "6.1.1"
1918
notify-debouncer-mini = "0.4.1"
19+
once_cell = "1.19.0"
2020
paris = { version = "1.5.15", features = ["macros"] }
2121
rayon = "1.10.0"
2222
semver = "1.0.23"
2323
serde = { version = "1.0.203", features = ["derive"] }
24-
serde_json = "1.0.117"
24+
serde_json = "1.0.120"
2525
tempfile = "3.10.1"
2626
ureq = "2.9.7"
27-
uuid = { version = "1.8.0", features = ["v4"] }
27+
uuid = { version = "1.9.1", features = ["v4"] }
2828
walkdir = "2.5.0"
29-
zip = "2.1.3"
29+
zip = "0.6.6"

src/commands/add.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::Command;
22
use crate::info;
3-
use crate::rgl::{Config, FilterInstaller, FilterType, Session};
3+
use crate::rgl::{Config, RemoteFilter, Session};
44
use anyhow::Result;
55
use clap::Args;
66

@@ -20,11 +20,11 @@ impl Command for Add {
2020
let data_path = config.get_data_path();
2121
for arg in &self.filters {
2222
info!("Adding filter <b>{}</>...", arg);
23-
let filter = FilterInstaller::from_arg(arg)?;
24-
if filter.install(FilterType::Remote, Some(&data_path), self.force)? {
25-
info!("Filter <b>{}</> successfully added", filter.name);
26-
config.add_filter(filter)?;
27-
}
23+
let (name, remote) = RemoteFilter::parse(arg)?;
24+
remote.install(&name, Some(&data_path), self.force)?;
25+
26+
info!("Filter <b>{name}</> successfully added");
27+
config.add_filter(&name, &remote.into())?;
2828
}
2929
config.save()?;
3030
session.unlock()

src/commands/exec.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use super::Command;
2-
use crate::fs::{copy_dir, empty_dir, read_json, sync_dir, try_symlink};
2+
use crate::fs::{copy_dir, empty_dir, sync_dir, try_symlink};
33
use crate::info;
4-
use crate::rgl::{Config, Filter, FilterContext, FilterType, RemoteFilterConfig, Session};
5-
use anyhow::{Context, Result};
4+
use crate::rgl::{Config, Filter, FilterContext, GlobalFilters, Session};
5+
use anyhow::Result;
66
use clap::Args;
77
use std::path::Path;
88

@@ -32,20 +32,15 @@ impl Command for Exec {
3232
try_symlink(config.get_data_path(), temp.join("data"))?;
3333

3434
if let Ok(filter) = config.get_filter(&self.filter) {
35-
info!("Running local filter <b>{}</>", self.filter);
36-
let context = FilterContext::new(filter.get_type(), &self.filter)?;
35+
info!("Running filter <b>{}</>", self.filter);
36+
let context = FilterContext::new(&self.filter, &filter)?;
3737
filter.run(&context, &temp, &self.run_args)?;
3838
} else {
39+
let global_filters = GlobalFilters::load()?;
40+
let filter = global_filters.get(&self.filter)?.into();
3941
info!("Running global filter <b>{}</>", self.filter);
40-
let context = FilterContext::new(FilterType::Global, &self.filter)?;
41-
let config_path = context.filter_dir.join("filter.json");
42-
let config = read_json::<RemoteFilterConfig>(config_path).context(format!(
43-
"Failed to load config for filter <b>{}</>",
44-
self.filter
45-
))?;
46-
for filter in config.filters {
47-
filter.run(&context, &temp, &self.run_args)?;
48-
}
42+
let context = FilterContext::new(&self.filter, &filter)?;
43+
filter.run(&context, &temp, &self.run_args)?;
4944
}
5045

5146
info!(

src/commands/get.rs

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
use super::Command;
22
use crate::info;
3-
use crate::rgl::{
4-
Config, Filter, FilterContext, FilterDefinition, FilterInstaller, FilterType, Session,
5-
};
3+
use crate::rgl::{Config, Filter, FilterContext, FilterDefinition, Session};
64
use anyhow::Result;
75
use clap::Args;
8-
use semver::Version;
96

107
/// Fetch filters defined in the `config.json` file
118
#[derive(Args)]
@@ -21,19 +18,15 @@ impl Command for Get {
2118
let data_path = config.get_data_path();
2219
for (name, value) in config.get_filters() {
2320
match FilterDefinition::from_value(value)? {
24-
FilterDefinition::Local(filter) => {
21+
FilterDefinition::Remote(remote) => {
22+
info!("Downloading filter <b>{name}</>...");
23+
remote.install(&name, Some(&data_path), false)?;
24+
}
25+
filter => {
2526
info!("Installing dependencies for <b>{name}</>...");
26-
let context = FilterContext::new(FilterType::Local, &name)?;
27+
let context = FilterContext::new(&name, &filter)?;
2728
filter.install_dependencies(&context)?;
2829
}
29-
FilterDefinition::Remote(filter) => {
30-
info!("Getting filter <b>{name}</>...");
31-
let git_ref = Version::parse(&filter.version)
32-
.map(|version| format!("{name}-{version}"))
33-
.unwrap_or(filter.version);
34-
let filter = FilterInstaller::new(&name, filter.url, git_ref);
35-
filter.install(FilterType::Remote, Some(&data_path), self.force)?;
36-
}
3730
};
3831
}
3932
info!("Success getting filters!");

src/commands/info.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use crate::rgl::{get_cache_dir, get_global_filters_path, get_user_config_path};
2+
use crate::Command;
3+
use anyhow::Result;
4+
use clap::{crate_version, Args};
5+
6+
#[derive(Args)]
7+
pub struct Info {}
8+
impl Command for Info {
9+
fn dispatch(&self) -> Result<()> {
10+
println!("rgl version: {}", crate_version!());
11+
println!("RGL_DIR location: {}", get_cache_dir()?.display());
12+
println!(
13+
"User config location: {}",
14+
get_user_config_path()?.display()
15+
);
16+
println!(
17+
"Global filters location: {}",
18+
get_global_filters_path()?.display()
19+
);
20+
Ok(())
21+
}
22+
fn error_context(&self) -> String {
23+
"Error getting rgl info".to_owned()
24+
}
25+
}

src/commands/install.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::Command;
22
use crate::info;
3-
use crate::rgl::{FilterInstaller, FilterType};
3+
use crate::rgl::{GlobalFilters, RemoteFilter};
44
use anyhow::Result;
55
use clap::Args;
66

@@ -16,14 +16,16 @@ pub struct Install {
1616

1717
impl Command for Install {
1818
fn dispatch(&self) -> Result<()> {
19+
let mut global_filters = GlobalFilters::load()?;
1920
for arg in &self.filters {
2021
info!("Installing filter <b>{}</>...", arg);
21-
let filter = FilterInstaller::from_arg(arg)?;
22-
if filter.install(FilterType::Global, None, self.force)? {
23-
info!("Filter <b>{}</> successfully installed", filter.name);
24-
}
22+
let (name, remote) = RemoteFilter::parse(arg)?;
23+
remote.install(&name, None, self.force)?;
24+
25+
info!("Filter <b>{name}</> successfully installed");
26+
global_filters.add(&name, remote);
2527
}
26-
Ok(())
28+
global_filters.save()
2729
}
2830
fn error_context(&self) -> String {
2931
"Error installing filter".to_owned()

src/commands/list.rs

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,65 @@
11
use super::Command;
22
use crate::log;
3-
use crate::rgl::{Config, FilterDefinition};
3+
use crate::rgl::{Config, FilterDefinition, GlobalFilters};
44
use anyhow::{Context, Result};
55
use clap::Args;
66

77
/// List filters defined in the `config.json` file
88
#[derive(Args)]
99
#[clap(alias = "ls")]
10-
pub struct List;
10+
pub struct List {
11+
#[arg(short, long)]
12+
global: bool,
13+
}
1114

1215
impl Command for List {
1316
fn dispatch(&self) -> Result<()> {
14-
let config = Config::load()?;
15-
16-
let mut local_filters = vec![];
17-
let mut remote_filters = vec![];
18-
for (name, value) in config.get_filters() {
19-
let filter = FilterDefinition::from_value(value.to_owned())?;
20-
match filter {
21-
FilterDefinition::Local(_) => {
22-
let run_with = value["runWith"]
23-
.as_str()
24-
.context("Invalid filter definition")?
25-
.to_owned();
26-
local_filters.push((name, run_with));
27-
}
28-
FilterDefinition::Remote(filter) => {
29-
remote_filters.push((name, filter.version));
30-
}
31-
}
17+
match self.global {
18+
false => list_project(),
19+
true => list_global(),
3220
}
33-
print("Local filters:", &local_filters);
34-
print("Remote filters:", &remote_filters);
35-
Ok(())
3621
}
3722
fn error_context(&self) -> String {
3823
"Error listing installed filters".to_owned()
3924
}
4025
}
4126

27+
fn list_project() -> Result<()> {
28+
let config = Config::load()?;
29+
30+
let mut local_filters = vec![];
31+
let mut remote_filters = vec![];
32+
for (name, value) in config.get_filters() {
33+
let filter = FilterDefinition::from_value(value.to_owned())?;
34+
match filter {
35+
FilterDefinition::Local(_) => {
36+
let run_with = value["runWith"]
37+
.as_str()
38+
.context("Invalid filter definition")?
39+
.to_owned();
40+
local_filters.push((name, run_with));
41+
}
42+
FilterDefinition::Remote(filter) => {
43+
remote_filters.push((name, filter.version));
44+
}
45+
}
46+
}
47+
print("Local filters:", &local_filters);
48+
print("Remote filters:", &remote_filters);
49+
Ok(())
50+
}
51+
52+
fn list_global() -> Result<()> {
53+
let global_filters = GlobalFilters::load()?;
54+
55+
let mut filters = vec![];
56+
for (name, filter) in global_filters.iter() {
57+
filters.push((name.to_owned(), filter.version.to_owned()));
58+
}
59+
print("Global filters:", &filters);
60+
Ok(())
61+
}
62+
4263
fn print(label: &str, filters: &Vec<(String, String)>) {
4364
if filters.is_empty() {
4465
return;

src/commands/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ mod apply;
33
mod clean;
44
mod exec;
55
mod get;
6+
mod info;
67
mod init;
78
mod install;
89
mod list;
@@ -17,6 +18,7 @@ pub use self::apply::*;
1718
pub use self::clean::*;
1819
pub use self::exec::*;
1920
pub use self::get::*;
21+
pub use self::info::*;
2022
pub use self::init::*;
2123
pub use self::install::*;
2224
pub use self::list::*;

src/commands/remove.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use super::Command;
2-
use crate::fs::rimraf;
3-
use crate::rgl::{Config, FilterType, Session};
2+
use crate::rgl::{Config, Session};
43
use crate::{info, warn};
54
use anyhow::Result;
65
use clap::Args;
@@ -19,8 +18,6 @@ impl Command for Remove {
1918
let mut session = Session::lock()?;
2019
for name in &self.filters {
2120
if config.remove_filter(name).is_some() {
22-
let filter_dir = FilterType::Remote.cache_dir(name)?;
23-
rimraf(filter_dir)?;
2421
info!("Removed filter <b>{name}</>");
2522
} else {
2623
warn!("Filter <b>{name}</> not found");

0 commit comments

Comments
 (0)