git-mit-relates-to 3.99.5

Set Relates-to trailer.
use std::{convert::TryFrom, env, time::Duration};

use clap::ArgMatches;

use mit_commit_message_lints::{
    external::Git2,
    relates::{entities::RelateTo, vcs::set_relates_to},
};

use crate::errors::GitRelatesTo;

mod cli;
mod errors;

fn main() -> Result<(), errors::GitRelatesTo> {
    let matches = cli::app().get_matches();

    let relates_to = matches
        .value_of("issue-number")
        .ok_or(GitRelatesTo::NoRelatesToMessageSet)?;

    let current_dir = env::current_dir()?;
    let mut vcs = Git2::try_from(current_dir)?;
    set_relates_to(
        &mut vcs,
        &RelateTo::new(relates_to),
        Duration::from_secs(get_timeout(&matches)? * 60),
    )?;

    Ok(())
}

fn get_timeout(matches: &ArgMatches) -> Result<u64, GitRelatesTo> {
    matches
        .value_of("timeout")
        .ok_or(GitRelatesTo::NoTimeoutSet)
        .and_then(|x| x.parse().map_err(GitRelatesTo::from))
}