#[ allow( clippy ::std_instead_of_alloc, clippy ::std_instead_of_core ) ]
mod private
{
#[ allow( unused_imports, clippy ::wildcard_imports ) ]
use crate ::tool :: *;
use std ::ffi ::OsString;
use std ::path ::Path;
use process_tools ::process :: *;
#[ cfg_attr
(
feature = "tracing",
tracing ::instrument( skip( path, objects ), fields( path = %path.as_ref().display() ) )
)]
pub fn add< P, Os, O >( path: P, objects: Os, dry: bool )
-> error ::untyped ::Result< Report >
where
P: AsRef< Path >,
Os: AsRef< [ O ] >,
O: AsRef< str >,
{
let objects = objects.as_ref().iter().map( std ::convert ::AsRef ::as_ref );
let ( program, args ) : ( _, Vec< _ > ) = ( "git", Some( "add" ).into_iter().chain( objects ).collect() );
if dry
{
Ok
(
Report
{
command: format!( "{program} {}", args.join( " " ) ),
out: String ::new(),
err: String ::new(),
current_path: path.as_ref().to_path_buf(),
error: Ok( () ),
}
)
}
else
{
Run ::former()
.bin_path( program )
.args( args.into_iter().map( OsString ::from ).collect :: < Vec< _ > >() )
.current_path( path.as_ref().to_path_buf() )
.run().map_err( | report | error ::untyped ::format_err!( report.to_string() ) )
}
}
#[ cfg_attr
(
feature = "tracing",
tracing ::instrument
(
skip( path, message ),
fields( path = %path.as_ref().display(), message = %message.as_ref() )
)
)]
pub fn commit< P, M >( path: P, message: M, dry: bool ) -> error ::untyped ::Result< Report >
where
P: AsRef< Path >,
M: AsRef< str >,
{
let ( program, args ) = ( "git", [ "commit", "-m", message.as_ref() ] );
if dry
{
Ok
(
Report
{
command: format!( "{program} {}", args.join( " " ) ),
out: String ::new(),
err: String ::new(),
current_path: path.as_ref().to_path_buf(),
error: Ok( () ),
}
)
}
else
{
Run ::former()
.bin_path( program )
.args( args.into_iter().map( OsString ::from ).collect :: < Vec< _ > >() )
.current_path( path.as_ref().to_path_buf() )
.run().map_err( | report | error ::untyped ::format_err!( report.to_string() ) )
}
}
#[ cfg_attr( feature = "tracing", tracing ::instrument( skip( path ), fields( path = %path.as_ref().display() ) ) ) ]
pub fn push< P >( path: P, dry: bool ) -> error ::untyped ::Result< Report >
where
P: AsRef< Path >,
{
let ( program, args ) = ( "git", [ "push" ] );
if dry
{
Ok
(
Report
{
command: format!( "{program} {}", args.join( " " ) ),
out: String ::new(),
err: String ::new(),
current_path: path.as_ref().to_path_buf(),
error: Ok( () ),
}
)
}
else
{
Run ::former()
.bin_path( program )
.args( args.into_iter().map( OsString ::from ).collect :: < Vec< _ > >() )
.current_path( path.as_ref().to_path_buf() )
.run().map_err( | report | error ::untyped ::format_err!( report.to_string() ) )
}
}
pub fn reset< P >( path: P, hard: bool, commits_count: usize, dry: bool )
-> error ::untyped ::Result< Report >
where
P: AsRef< Path >,
{
if commits_count < 1 { return Err( error ::untyped ::format_err!( "Cannot reset, the count of commits must be greater than 0" ) ) }
let ( program, args ) : ( _, Vec< _ > ) =
(
"git",
Some( "reset" )
.into_iter()
.chain( if hard { Some( "--hard" ) } else { None } )
.map( String ::from )
.chain( Some( format!( "HEAD~{commits_count}" ) ) )
.collect()
);
if dry
{
Ok
(
Report
{
command: format!( "{program} {}", args.join( " " ) ),
out: String ::new(),
err: String ::new(),
current_path: path.as_ref().to_path_buf(),
error: Ok( () ),
}
)
}
else
{
Run ::former()
.bin_path( program )
.args( args.into_iter().map( OsString ::from ).collect :: < Vec< _ > >() )
.current_path( path.as_ref().to_path_buf() )
.run().map_err( | report | error ::untyped ::format_err!( report.to_string() ) )
}
}
pub fn ls_remote_url< P >( path: P ) -> error ::untyped ::Result< Report >
where
P: AsRef< Path >,
{
let ( program, args ) = ( "git", [ "ls-remote", "--get-url" ] );
Run ::former()
.bin_path( program )
.args( args.into_iter().map( OsString ::from ).collect :: < Vec< _ > >() )
.current_path( path.as_ref().to_path_buf() )
.run().map_err( | report | error ::untyped ::format_err!( report.to_string() ) )
}
}
crate ::mod_interface!
{
own use add;
own use commit;
own use push;
own use reset;
own use ls_remote_url;
}