git-global 0.7.0

Keep track of all the git repositories on your machine.
Documentation
//! The `status` subcommand: shows `git status -s` for all known repos with any
//! changes to the index or working directory.

use crate::config::Config;
use crate::errors::Result;
use crate::parallel::{default_parallelism, run_parallel};
use crate::repo::Repo;
use crate::report::Report;

/// Runs the `status` subcommand.
pub fn execute(mut config: Config) -> Result<Report> {
    let include_untracked = config.show_untracked;
    let repos = config.get_repos();
    let mut report = Report::new(&repos);
    report.pad_repo_output();

    let results = run_parallel(repos, default_parallelism(), move |repo| {
        let mut status_opts = git2::StatusOptions::new();
        status_opts
            .show(git2::StatusShow::IndexAndWorkdir)
            .include_untracked(include_untracked)
            .include_ignored(false);
        repo.get_status_lines(status_opts)
    });

    for (path, lines) in results {
        let repo = Repo::new(path);
        for line in lines {
            report.add_repo_message(&repo, line);
        }
    }

    Ok(report)
}