1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use anyhow::Result;
use glob::glob;
use indicatif::ProgressBar;

use crate::lib::to_string;

pub fn find_projects(root_folder: &str) -> Result<Vec<String>> {
    let spinner = ProgressBar::new_spinner();
    spinner.set_message(format!(
        "Searching for git project with base folder {}",
        root_folder
    ));

    let mut projects: Vec<String> = vec![];
    for mut path in glob(&format!("{}/**/.git", root_folder))
        ?
        .filter_map(Result::ok)
        .filter(|p| p.is_dir())
    {
        spinner.tick();
        path.pop();
        projects.push(to_string(path)?);
    }
    spinner.finish_with_message("done.");
    Ok(projects)
}
#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn test_find_projects() -> Result<()> {
        let projects = find_projects(".")?;
        assert_eq!(projects.len() >= 1, true);
        Ok(())
    }
}