Intoduce a struct for collecting repositories
This commit is contained in:
24
src/git.rs
24
src/git.rs
@@ -9,6 +9,11 @@ pub struct Git {
|
||||
git: Option<PathBuf>,
|
||||
}
|
||||
|
||||
pub struct Repositories<'a> {
|
||||
git: &'a Git,
|
||||
repositories: HashSet<String>,
|
||||
}
|
||||
|
||||
impl Git {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
@@ -56,10 +61,23 @@ impl Git {
|
||||
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn insert_if_valid<P: AsRef<Path>>(&self, git_repos: &mut HashSet<String>, path: P) {
|
||||
if let Some(repo) = self.get_repo_root(path) {
|
||||
git_repos.insert(repo);
|
||||
impl<'a> Repositories<'a> {
|
||||
pub fn new(git: &'a Git) -> Self {
|
||||
Self {
|
||||
git,
|
||||
repositories: HashSet::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn insert<P: AsRef<Path>>(&mut self, path: P) {
|
||||
if let Some(repo) = self.git.get_repo_root(path) {
|
||||
self.repositories.insert(repo);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn repositories(&self) -> &HashSet<String> {
|
||||
&self.repositories
|
||||
}
|
||||
}
|
||||
|
||||
17
src/main.rs
17
src/main.rs
@@ -20,9 +20,8 @@ mod vim;
|
||||
|
||||
use config::Config;
|
||||
use failure::Error;
|
||||
use git::Git;
|
||||
use git::{Git, Repositories};
|
||||
use report::{Report, Reporter};
|
||||
use std::collections::HashSet;
|
||||
use std::env::home_dir;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::ExitStatus;
|
||||
@@ -80,26 +79,26 @@ fn tpm() -> Option<PathBuf> {
|
||||
|
||||
fn main() -> Result<(), Error> {
|
||||
let git = Git::new();
|
||||
let mut git_repos: HashSet<String> = HashSet::new();
|
||||
let mut git_repos = Repositories::new(&git);
|
||||
let terminal = Terminal::new();
|
||||
let mut reports = Report::new();
|
||||
let config = Config::read()?;
|
||||
|
||||
git.insert_if_valid(&mut git_repos, home_path(".emacs.d"));
|
||||
git_repos.insert(home_path(".emacs.d"));
|
||||
|
||||
if cfg!(unix) {
|
||||
git.insert_if_valid(&mut git_repos, home_path(".zshrc"));
|
||||
git.insert_if_valid(&mut git_repos, home_path(".oh-my-zsh"));
|
||||
git.insert_if_valid(&mut git_repos, home_path(".tmux"));
|
||||
git_repos.insert(home_path(".zshrc"));
|
||||
git_repos.insert(home_path(".oh-my-zsh"));
|
||||
git_repos.insert(home_path(".tmux"));
|
||||
}
|
||||
|
||||
if let Some(custom_git_repos) = config.git_repos() {
|
||||
for git_repo in custom_git_repos {
|
||||
git.insert_if_valid(&mut git_repos, git_repo);
|
||||
git_repos.insert(git_repo);
|
||||
}
|
||||
}
|
||||
|
||||
for repo in git_repos {
|
||||
for repo in git_repos.repositories() {
|
||||
terminal.print_separator(format!("Pulling {}", repo));
|
||||
if let Some(success) = git.pull(&repo).ok().and_then(|i| i) {
|
||||
success.report(format!("git: {}", repo), &mut reports);
|
||||
|
||||
Reference in New Issue
Block a user