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}