Compare commits
6 Commits
v0.0.4
...
7f5c716c7a
Author | SHA1 | Date | |
---|---|---|---|
|
7f5c716c7a | ||
139aa6d75e
|
|||
a71672823c
|
|||
c0bd8c0d36
|
|||
dadec333d4 | |||
18411bc52c
|
14
CHANGELOG.md
14
CHANGELOG.md
@@ -6,6 +6,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.0.6] - 2025-07-26
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- update demo
|
||||||
|
- add help text for preview
|
||||||
|
|
||||||
|
### Other
|
||||||
|
- remove cockroach
|
||||||
|
|
||||||
|
## [0.0.5] - 2025-07-26
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- actually copy files
|
||||||
|
|
||||||
## [0.0.4] - 2025-07-26
|
## [0.0.4] - 2025-07-26
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -389,7 +389,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "noil"
|
name = "noil"
|
||||||
version = "0.0.3"
|
version = "0.0.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term",
|
"ansi_term",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
@@ -3,7 +3,7 @@ members = ["crates/*"]
|
|||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.0.4"
|
version = "0.0.6"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
noil = { path = "crates/noil" }
|
noil = { path = "crates/noil" }
|
||||||
|
BIN
assets/demo.gif
BIN
assets/demo.gif
Binary file not shown.
Before Width: | Height: | Size: 631 KiB After Width: | Height: | Size: 1.4 MiB |
@@ -6,7 +6,10 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
#[derive(clap::Parser)]
|
#[derive(clap::Parser)]
|
||||||
pub struct ApplyCommand {}
|
pub struct ApplyCommand {
|
||||||
|
#[arg(long = "commit")]
|
||||||
|
commit: bool,
|
||||||
|
}
|
||||||
|
|
||||||
impl ApplyCommand {
|
impl ApplyCommand {
|
||||||
pub async fn execute(&self) -> anyhow::Result<()> {
|
pub async fn execute(&self) -> anyhow::Result<()> {
|
||||||
@@ -17,11 +20,19 @@ impl ApplyCommand {
|
|||||||
|
|
||||||
let input = String::from_utf8_lossy(&buffer);
|
let input = String::from_utf8_lossy(&buffer);
|
||||||
|
|
||||||
let action = print_changes(&input).await?;
|
if !self.commit {
|
||||||
match action {
|
let action = print_changes(&input, !self.commit).await?;
|
||||||
Action::Quit => Ok(()),
|
let res = match action {
|
||||||
Action::Apply { original } => apply(&original).await,
|
Action::Quit => Ok(()),
|
||||||
Action::Edit => todo!(),
|
Action::Apply { original } => apply(&original).await,
|
||||||
|
Action::Edit => todo!(),
|
||||||
|
};
|
||||||
|
|
||||||
|
eprintln!("\nin preview mode: add (--commit) to perform actions");
|
||||||
|
|
||||||
|
res
|
||||||
|
} else {
|
||||||
|
apply(&input).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,8 @@ use crate::{
|
|||||||
parse,
|
parse,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const PREVIEW: bool = false;
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
pub struct EditCommand {
|
pub struct EditCommand {
|
||||||
#[arg()]
|
#[arg()]
|
||||||
@@ -68,7 +70,7 @@ impl EditCommand {
|
|||||||
.await
|
.await
|
||||||
.context("read noil file")?;
|
.context("read noil file")?;
|
||||||
|
|
||||||
let res = print_changes(&noil_content).await;
|
let res = print_changes(&noil_content, PREVIEW).await;
|
||||||
|
|
||||||
let action = match res {
|
let action = match res {
|
||||||
Ok(a) => a,
|
Ok(a) => a,
|
||||||
@@ -175,6 +177,7 @@ pub async fn apply(input: &str) -> anyhow::Result<()> {
|
|||||||
if existing.path.is_dir() {
|
if existing.path.is_dir() {
|
||||||
tracing::debug!("copying dir");
|
tracing::debug!("copying dir");
|
||||||
copy(&existing.path, path).await?;
|
copy(&existing.path, path).await?;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
tokio::fs::copy(&existing.path, &path)
|
tokio::fs::copy(&existing.path, &path)
|
||||||
@@ -235,6 +238,9 @@ async fn copy(source: &Path, dest: &Path) -> anyhow::Result<()> {
|
|||||||
|
|
||||||
for entry in walkdir::WalkDir::new(source) {
|
for entry in walkdir::WalkDir::new(source) {
|
||||||
let entry = entry?;
|
let entry = entry?;
|
||||||
|
|
||||||
|
tracing::debug!("copying path: {}", entry.path().display());
|
||||||
|
|
||||||
paths.push(entry.path().strip_prefix(source)?.to_path_buf());
|
paths.push(entry.path().strip_prefix(source)?.to_path_buf());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,10 +266,12 @@ async fn copy_path(src: &Path, dest: &Path) -> anyhow::Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if src.is_dir() {
|
if src.is_dir() {
|
||||||
|
tracing::info!("copying dir: {}", dest.display());
|
||||||
tokio::fs::create_dir_all(&dest).await.context("copy dir")?;
|
tokio::fs::create_dir_all(&dest).await.context("copy dir")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if dest.is_file() {
|
if src.is_file() {
|
||||||
|
tracing::info!("copying file: {}", dest.display());
|
||||||
tokio::fs::copy(&src, &dest).await.context("copy file")?;
|
tokio::fs::copy(&src, &dest).await.context("copy file")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,7 +14,7 @@ pub enum Action {
|
|||||||
Edit,
|
Edit,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn print_changes(input: &str) -> anyhow::Result<Action> {
|
pub async fn print_changes(input: &str, preview: bool) -> anyhow::Result<Action> {
|
||||||
let noil_index = parse_input(input).context("parse input")?;
|
let noil_index = parse_input(input).context("parse input")?;
|
||||||
|
|
||||||
fn print_op(key: &str, index: Option<&str>, path: Option<&Path>) {
|
fn print_op(key: &str, index: Option<&str>, path: Option<&Path>) {
|
||||||
@@ -64,6 +64,11 @@ pub async fn print_changes(input: &str) -> anyhow::Result<Action> {
|
|||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if preview {
|
||||||
|
return Ok(Action::Quit);
|
||||||
|
}
|
||||||
|
|
||||||
eprint!("\nApply changes? (y (yes) / n (abort) / E (edit)): ");
|
eprint!("\nApply changes? (y (yes) / n (abort) / E (edit)): ");
|
||||||
let mut stderr = std::io::stderr();
|
let mut stderr = std::io::stderr();
|
||||||
stderr.flush()?;
|
stderr.flush()?;
|
||||||
|
@@ -1,15 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
services:
|
|
||||||
crdb:
|
|
||||||
restart: 'always'
|
|
||||||
image: 'cockroachdb/cockroach:v23.1.14'
|
|
||||||
command: 'start-single-node --advertise-addr 0.0.0.0 --insecure'
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:8080/health?ready=1"]
|
|
||||||
interval: '10s'
|
|
||||||
timeout: '30s'
|
|
||||||
retries: 5
|
|
||||||
start_period: '20s'
|
|
||||||
ports:
|
|
||||||
- 8080:8080
|
|
||||||
- '26257:26257'
|
|
Reference in New Issue
Block a user