@ -115,38 +115,50 @@ pub fn info(verbose: bool) {
let mut repos = vec! [ ] ;
let mut repos = vec! [ ] ;
let mut repos_git = vec! [ ] ;
let mut repos_git = vec! [ ] ;
// Start the spinner
if git_info {
let sp = Spinner ::new (
// Start the spinner
Spinners ::Line ,
let sp = Spinner ::new (
format! ( "{}" , "Parsing Git Info..." . bold ( ) ) ,
Spinners ::Line ,
Color ::Green ,
format! ( "{}" , "Parsing Git Info..." . bold ( ) ) ,
) ;
Color ::Green ,
) ;
// Construct bash script to run git remote upgrade on all repos asynchronously
// Construct bash script to run git remote upgrade on all repos asynchronously
// This helps speed up the operation when, for example, you have a lot of repositories and you store your SSH key as a subkey of your GPG key on a yubikey
// This helps speed up the operation when, for example, you have a lot of repositories and you store your SSH key as a subkey of your GPG key on a yubikey
// This took my `mlc info` time down from 17s to 8s (i have the above described setup)
// This took my `mlc info` time down from 17s to 8s (i have the above described setup)
let mut bash_script = String ::new ( ) ;
let mut bash_script = String ::new ( ) ;
bash_script . push_str (
bash_script . push_str (
" \ n \
" \ n \
#! / usr / bin / env bash \ n \
#! / usr / bin / env bash \ n \
\ n \
\ n \
# This script will run ` git remote update ` in all repositories \ n \
# This script will run ` git remote update ` in all repositories \ n \
pull ( ) { cd $ 1 ; git remote update ; cd - ; } \ n \
pull ( ) { cd $ 1 ; git remote update ; cd - ; } \ n \
\ n " ,
\ n "
) ;
) ;
for repo in & repos_unparsed {
for repo in & repos_unparsed {
writeln! ( bash_script , "pull {} &" , repo . name ) . unwrap ( ) ;
writeln! ( bash_script , "pull {} &" , repo . name ) . unwrap ( ) ;
}
}
bash_script . push_str ( "wait\n" ) ;
bash_script . push_str ( "wait\n" ) ;
log ! ( verbose , "Bash script: {}" , bash_script ) ;
log ! ( verbose , "Bash script: {}" , bash_script ) ;
// Run the bash script
// Run the bash script
Command ::new ( "bash" )
Command ::new ( "bash" )
. arg ( "-c" )
. arg ( "-c" )
. arg ( bash_script )
. arg ( bash_script )
. output ( )
. output ( )
. unwrap ( ) ;
. unwrap ( ) ;
// Because spinoff requires &'static str, we need to Box these in the heap and then leak them to be able to format the spinner
let symbol = Box ::new ( format! ( "{}" , "✔" . bold ( ) . green ( ) ) ) ;
let done = Box ::new ( format! ( "{}" , "Done!" . bold ( ) ) ) ;
let symbol : & ' static str = Box ::leak ( symbol ) ;
let done : & ' static str = Box ::leak ( done ) ;
sp . stop_and_persist ( symbol , done ) ;
log ! ( verbose , "Repos: {:?}" , repos ) ;
}
// Iterate over all repositories
// Iterate over all repositories
for repo in repos_unparsed {
for repo in repos_unparsed {
@ -187,16 +199,6 @@ pub fn info(verbose: bool) {
}
}
}
}
// Because spinoff requires &'static str, we need to Box these in the heap and then leak them to be able to format the spinner
let symbol = Box ::new ( format! ( "{}" , "✔" . bold ( ) . green ( ) ) ) ;
let done = Box ::new ( format! ( "{}" , "Done!" . bold ( ) ) ) ;
let symbol : & ' static str = Box ::leak ( symbol ) ;
let done : & ' static str = Box ::leak ( done ) ;
sp . stop_and_persist ( symbol , done ) ;
log ! ( verbose , "Repos: {:?}" , repos ) ;
// Sort by priority
// Sort by priority
repos . sort_by ( | a , b | b . priority . cmp ( & a . priority ) ) ;
repos . sort_by ( | a , b | b . priority . cmp ( & a . priority ) ) ;
repos_git . sort_by ( | a , b | b . priority . cmp ( & a . priority ) ) ;
repos_git . sort_by ( | a , b | b . priority . cmp ( & a . priority ) ) ;