use crate::{AppendAsLine, PatternWriter};
use clap::{Parser, Subcommand};
use std::{io::BufRead, path::PathBuf};
use sysexits::Result;
#[derive(Subcommand)]
pub enum Action {
#[cfg(feature = "cff-create")]
CffCreate(crate::CffCreate),
Cffreference(crate::Cffreference),
#[command(aliases = ["cffrel", "cff-rel", "cffreleasetoday"])]
#[deprecated(since = "3.6.2", note = "use `IncrementVersion` instead")]
CffReleaseToday {
file_to_edit: PathBuf,
},
CommentChanges(crate::CommentChanges),
Complain(crate::Complain),
IncrementVersion(crate::IncrementVersion),
#[cfg(feature = "mkcws")]
Mkcws(crate::Mkcws),
Ronlog(crate::Ronlog),
#[cfg(feature = "rs2md")]
Rs2md(crate::Rs2md),
#[cfg(feature = "uncrlf")]
Uncrlf(crate::Uncrlf),
}
impl Action {
pub fn run(&self) -> Result<()> {
match self {
#[cfg(feature = "cff-create")]
Self::CffCreate(c) => c.main(),
Self::Cffreference(c) => c.main(),
#[allow(deprecated)]
Self::CffReleaseToday { file_to_edit } => {
crate::ceprintlns!(
"DEPRECATED"!Red,
"Please use `increment-version` instead."
);
let mut buffer = String::new();
for line in
std::io::BufReader::new(std::fs::File::open(file_to_edit)?)
.lines()
{
let line = line?;
if line.starts_with("date-released:") {
buffer.append_as_line(format!(
"date-released: {}",
chrono::Local::now().format("%Y-%m-%d")
));
} else {
buffer.append_as_line(line);
}
}
file_to_edit.truncate(Box::new(buffer))
}
Self::CommentChanges(c) => c.main(),
Self::Complain(c) => c.main(),
Self::IncrementVersion(i) => i.main(),
#[cfg(feature = "mkcws")]
Self::Mkcws(m) => m.main(),
Self::Ronlog(r) => r.main(),
#[cfg(feature = "rs2md")]
Self::Rs2md(r) => r.main(),
#[cfg(feature = "uncrlf")]
Self::Uncrlf(u) => u.main(),
}
}
}
#[derive(Parser)]
#[clap(about, version)]
pub struct Clap {
#[clap(subcommand)]
action: Action,
}
crate::getters!(@ref Clap { action: Action });