gnostr_asyncgit/sync/
state.rs

1use git2::RepositoryState;
2use scopetime::scope_time;
3
4use super::RepoPath;
5use crate::{error::Result, sync::repository::repo};
6
7///
8#[derive(Debug, PartialEq, Eq)]
9pub enum RepoState {
10    ///
11    Clean,
12    ///
13    Merge,
14    ///
15    Rebase,
16    ///
17    Revert,
18    ///
19    Other,
20}
21
22impl From<RepositoryState> for RepoState {
23    fn from(state: RepositoryState) -> Self {
24        match state {
25            RepositoryState::Clean => Self::Clean,
26            RepositoryState::Merge => Self::Merge,
27            RepositoryState::Revert => Self::Revert,
28            RepositoryState::RebaseMerge => Self::Rebase,
29            _ => {
30                log::warn!("state not supported yet: {:?}", state);
31                Self::Other
32            }
33        }
34    }
35}
36
37///
38pub fn repo_state(repo_path: &RepoPath) -> Result<RepoState> {
39    scope_time!("repo_state");
40
41    let repo = repo(repo_path)?;
42
43    let state = repo.state();
44
45    Ok(state.into())
46}