chore: global cleanup

This commit is contained in:
Mikaël Cluseau
2026-05-20 12:23:47 +02:00
parent 35a2609f29
commit d994c99bb0
8 changed files with 94 additions and 89 deletions
+13 -39
View File
@@ -3,12 +3,12 @@ use log::info;
use std::path::Path; use std::path::Path;
use tokio::fs; use tokio::fs;
use crate::{base64_decode, File}; use crate::{File, base64_decode};
pub async fn files(files: &[File], root: &str, dry_run: bool) -> Result<()> { pub async fn files(files: &[File], root: &str, dry_run: bool) -> Result<()> {
for f in files { for f in files {
if let Err(e) = file(f, root, dry_run).await { if let Err(e) = file(f, root, dry_run).await {
return Err(format_err!("{}: {e}", f.path)) return Err(format_err!("{}: {e}", f.path));
} }
} }
Ok(()) Ok(())
@@ -22,51 +22,25 @@ pub async fn file(file: &File, root: &str, dry_run: bool) -> Result<()> {
fs::create_dir_all(parent).await?; fs::create_dir_all(parent).await?;
} }
use crate::{FileKind as K, FilePart as P}; let kind = file.kind();
match file.kind().as_ref() { let content = kind.content()?;
use crate::{FileKind as K};
match kind.as_ref() {
K::Skip => { K::Skip => {
info!("{}: kind is skip", file.path); info!("{}: kind is skip", file.path);
return Ok(()) return Ok(());
}, }
K::Content(content) => { K::Content(_) | K::Content64(_) | K::Parts(_) => {
let content = content.expect("this file kind should have content");
if dry_run { if dry_run {
info!( info!(
"would create {} ({} bytes from content)", "would create {} ({} bytes)",
file.path, file.path,
content.len() content.len()
); );
} else { } else {
fs::write(path, content.as_bytes()).await?; fs::write(path, &content).await?;
}
}
K::Content64(content) => {
let content = base64_decode(content)?;
if dry_run {
info!(
"would create {} ({} bytes from content64)",
file.path,
content.len()
);
} else {
fs::write(path, content).await?
}
}
K::Parts(parts) => {
let mut assembly = Vec::new();
for part in parts {
match part {
P::Content(content) => assembly.extend(content.as_bytes()),
P::Content64(content) => assembly.extend(base64_decode(content)?),
}
}
if dry_run {
info!(
"would create {} ({} bytes from parts)",
file.path,
assembly.len()
);
} else {
fs::write(path, assembly).await?
} }
} }
K::Dir => { K::Dir => {
+1 -1
View File
@@ -1,5 +1,5 @@
use clap::{CommandFactory, Parser, Subcommand}; use clap::{CommandFactory, Parser, Subcommand};
use eyre::{format_err, Result}; use eyre::{Result, format_err};
use human_units::Duration; use human_units::Duration;
use log::{debug, error}; use log::{debug, error};
use std::net::SocketAddr; use std::net::SocketAddr;
+1 -1
View File
@@ -64,8 +64,8 @@ pub async fn ls(
} }
use tabled::settings::{ use tabled::settings::{
object::{Column, Row},
Alignment, Modify, Alignment, Modify,
object::{Column, Row},
}; };
let mut table = table.build(); let mut table = table.build();
table.with(tabled::settings::Style::psql()); table.with(tabled::settings::Style::psql());
+1 -1
View File
@@ -1,4 +1,4 @@
use eyre::{format_err, Result}; use eyre::{Result, format_err};
use log::{debug, error, info, warn}; use log::{debug, error, info, warn};
use std::path::PathBuf; use std::path::PathBuf;
use tokio::{fs, io::AsyncWriteExt, process::Command}; use tokio::{fs, io::AsyncWriteExt, process::Command};
+31
View File
@@ -148,3 +148,34 @@ impl<'t> File {
} }
} }
} }
impl FileKind {
pub fn content<'t>(&'t self) -> Result<Option<Cow<'t, [u8]>>, base64::DecodeError> {
use FileKind::*;
Ok(match self {
Content(content) => Some(Cow::Borrowed(content.as_bytes())),
Content64(content) => {
let content = base64_decode(content)?;
Some(Cow::Owned(content))
}
Parts(parts) => {
let mut assembly = Vec::new();
for part in parts {
assembly.extend(part.content()?.into_iter());
}
Some(Cow::Owned(assembly))
}
_ => None,
})
}
}
impl FilePart {
pub fn content(&self) -> Result<Cow<[u8]>, base64::DecodeError> {
use FilePart::*;
Ok(match self {
Content(content) => Cow::Borrowed(content.as_bytes()),
Content64(content) => Cow::Owned(base64_decode(content)?),
})
}
}
+3 -3
View File
@@ -1,6 +1,6 @@
use async_compression::tokio::write::{ZstdDecoder, ZstdEncoder}; use async_compression::tokio::write::{ZstdDecoder, ZstdEncoder};
use chrono::{DurationRound, TimeDelta, Utc}; use chrono::{DurationRound, TimeDelta, Utc};
use eyre::{format_err, Result}; use eyre::{Result, format_err};
use log::{debug, error, warn}; use log::{debug, error, warn};
use std::ffi::OsStr; use std::ffi::OsStr;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
@@ -10,7 +10,7 @@ use tokio::{
io::{self, AsyncBufReadExt, AsyncRead, AsyncWrite, AsyncWriteExt, BufReader, BufWriter}, io::{self, AsyncBufReadExt, AsyncRead, AsyncWrite, AsyncWriteExt, BufReader, BufWriter},
process::{Child, Command}, process::{Child, Command},
sync::mpsc, sync::mpsc,
time::{sleep, Duration}, time::{Duration, sleep},
}; };
use crate::{cgroup, fs}; use crate::{cgroup, fs};
@@ -220,7 +220,7 @@ impl Logger {
fn forward_signals_to(pid: i32) { fn forward_signals_to(pid: i32) {
use nix::{ use nix::{
sys::signal::{kill, Signal}, sys::signal::{Signal, kill},
unistd::Pid, unistd::Pid,
}; };
use signal_hook::{consts::*, low_level::register}; use signal_hook::{consts::*, low_level::register};
+4 -4
View File
@@ -5,9 +5,9 @@ use std::collections::{BTreeMap as Map, BTreeSet as Set};
use std::path::PathBuf; use std::path::PathBuf;
use std::sync::LazyLock; use std::sync::LazyLock;
use tokio::{ use tokio::{
io::{copy, AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader}, io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader, copy},
net::{UnixListener, UnixStream}, net::{UnixListener, UnixStream},
sync::{mpsc, watch, RwLock}, sync::{RwLock, mpsc, watch},
}; };
use crate::{cgroup, fs}; use crate::{cgroup, fs};
@@ -185,7 +185,7 @@ async fn handle(mut conn: UnixStream) {
} }
async fn wait_terminate() { async fn wait_terminate() {
use tokio::signal::unix::{signal, SignalKind}; use tokio::signal::unix::{SignalKind, signal};
let Ok(mut sig) = signal(SignalKind::terminate()) let Ok(mut sig) = signal(SignalKind::terminate())
.inspect_err(|e| error!("failed to listen to SIGTERM (will be ignored): {e}")) .inspect_err(|e| error!("failed to listen to SIGTERM (will be ignored): {e}"))
else { else {
@@ -203,7 +203,7 @@ async fn wait_terminate() {
} }
async fn wait_reload() { async fn wait_reload() {
use tokio::signal::unix::{signal, SignalKind}; use tokio::signal::unix::{SignalKind, signal};
let Ok(mut sig) = signal(SignalKind::hangup()) let Ok(mut sig) = signal(SignalKind::hangup())
.inspect_err(|e| error!("failed to listen to SIGHUP (will be ignored): {e}")) .inspect_err(|e| error!("failed to listen to SIGHUP (will be ignored): {e}"))
else { else {
+2 -2
View File
@@ -1,13 +1,13 @@
use log::{error, warn}; use log::{error, warn};
use nix::{ use nix::{
sys::signal::{kill, Signal}, sys::signal::{Signal, kill},
unistd::Pid, unistd::Pid,
}; };
use std::num::NonZero; use std::num::NonZero;
use tokio::{ use tokio::{
process, select, process, select,
sync::{mpsc, watch}, sync::{mpsc, watch},
time::{sleep, sleep_until, Duration, Instant}, time::{Duration, Instant, sleep, sleep_until},
}; };
use super::{Error, Result, Service}; use super::{Error, Result, Service};