gitbox 2.1.3

Git toolbox to simplify adoption of conventional commits and semantic version, among other things.
Documentation
use clap::Args;

use crate::{
    application::{
        controller::{exit_code::ControllerExitCode, refresh::RefreshController},
        manager::{
            gitinfo_ingress_manager::GitInfoIngressManager,
            message_egress_manager::MessageEgressManager,
        },
    },
    infrastructure::{
        interface::{
            git_cli::GitCli, gitextra_manager_impl::GitExtraManagerImpl,
            message_egress_manager_impl::MessageEgressManagerImpl,
        },
        subcommand::Subcommand,
    },
};

#[derive(Args, Clone, Debug)]
#[command(about = "Refresh the content of the git extra folder")]
pub struct RefreshExtraSubcommand {}

impl Subcommand for RefreshExtraSubcommand {
    fn execute(&self) -> i32 {
        let git_cli = GitCli::new();
        let output_manager = MessageEgressManagerImpl::new();
        if let Err(e) = git_cli.git_dir() {
            output_manager.error(&format!("Failed to retrieve git dir: {}", e));
            output_manager.error("refresh-extra subcommand can only be run inside a git project");
            return 1;
        }
        let gitextra_manager = GitExtraManagerImpl::new(&git_cli);
        let controller = RefreshController::new(&git_cli, &gitextra_manager, &output_manager);
        match controller.refresh() {
            ControllerExitCode::Ok => 0,
            ControllerExitCode::Error(i) => i,
        }
    }
}