use crate::repository::Repository;
use libanu::pristine::{MutTxnT, TxnT};
use std::path::PathBuf;
#[derive(Clap, Debug)]
pub struct Channel {
#[clap(long = "repository")]
repo_path: Option<PathBuf>,
#[clap(long = "delete")]
delete: Option<String>,
}
impl Channel {
pub fn run(self) -> Result<(), anyhow::Error> {
let repo = Repository::find_root(self.repo_path)?;
let current = if let Some(ref c) = repo.config.current_channel {
Some(c.as_str())
} else {
None
};
if let Some(ref del) = self.delete {
let mut txn = repo.pristine.mut_txn_begin();
txn.drop_channel(del)?;
txn.commit()?;
} else {
let txn = repo.pristine.txn_begin()?;
for channel in txn.iter_channels("") {
let channel = channel.borrow();
let name = channel.name();
if current == Some(name) {
println!("* {}", name);
} else {
println!(" {}", name);
}
}
}
Ok(())
}
}