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, init::InitController},
        manager::gitinfo_ingress_manager::GitInfoIngressManager,
        manager::message_egress_manager::MessageEgressManager,
        options::init::InitOptions,
    },
    infrastructure::{
        interface::{git_cli::GitCli, message_egress_manager_impl::MessageEgressManagerImpl},
        subcommand::Subcommand,
    },
};

#[derive(Args, Debug)]
#[command(about = "Initialize a git repository")]
pub struct InitSubCommand {
    #[arg(short, long, help = "Do not create the first, empty commit")]
    empty: bool,
}

impl Subcommand for InitSubCommand {
    fn execute(&self) -> i32 {
        let output_manager = MessageEgressManagerImpl::new();
        let git_cli = GitCli::new();
        if git_cli.git_dir().is_ok() {
            output_manager.error("init subcommand cannot be called inside a git dir");
            return 1;
        }
        let options = InitOptions::new(self.empty);
        let controller = InitController::new(options, &git_cli, &git_cli, &output_manager);
        match controller.init() {
            ControllerExitCode::Ok => 0,
            ControllerExitCode::Error(i) => i,
        }
    }
}