gnostr_asyncgit/sync/
state.rs1use git2::RepositoryState;
2use scopetime::scope_time;
3
4use super::RepoPath;
5use crate::{error::Result, sync::repository::repo};
6
7#[derive(Debug, PartialEq, Eq)]
9pub enum RepoState {
10 Clean,
12 Merge,
14 Rebase,
16 Revert,
18 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
37pub 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}