pijul 1.0.0-alpha

The sound distributed version control system.
use crate::repository::Repository;
use libpijul::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(())
    }
}