HUGE `mlc info` speedup when pulling through ssh

main
Michal 2 years ago
parent a6821723b1
commit c2428be80c
No known key found for this signature in database
GPG Key ID: A6A1A4DCB22279B9

@ -1,6 +1,7 @@
use colored::Colorize;
use spinoff::{Color, Spinner, Spinners};
use std::env;
use std::fmt::Write;
use std::process::Command;
use tabled::Tabled;
@ -46,11 +47,6 @@ pub fn git_status(verbose: bool, repo: &str, colorblind: bool) -> String {
});
log!(verbose, "Current directory: {}", repo);
Command::new("git")
.args(&["remote", "update"])
.output()
.unwrap();
let output = Command::new("git").arg("status").output().unwrap();
let output = String::from_utf8(output.stdout).unwrap();
log!(verbose, "Git status: {}", output);
@ -126,6 +122,26 @@ pub fn info(verbose: bool) {
Color::Green,
);
// 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 took my `mlc info` time down from 17s to 8s (i have the above described setup)
let mut bash_script = String::new();
bash_script.push_str("\n\
#!/usr/bin/env bash\n\
\n\
# This script will run `git remote update` in all repositories\n\
pull() { cd $1; git remote update; cd -; }\n\
\n");
for repo in &repos_unparsed {
writeln!(bash_script, "pull {} &", repo.name).unwrap();
}
bash_script.push_str("wait\n");
log!(verbose, "Bash script: {}", bash_script);
// Run the bash script
Command::new("bash").arg("-c").arg(bash_script).output().unwrap();
// Iterate over all repositories
for repo in repos_unparsed {
// Get name with branch, '/' serving as the delimiter

Loading…
Cancel
Save