use std::time::SystemTime;
use anyhow::Result;
use crate::types::{BranchInfo, CommitId, CommitInfo, DiffSummary, SortOrder, StatusDigest, TagInfo};
pub trait VcsBackend: Send + Sync {
fn status_digest(&self) -> Result<StatusDigest>;
fn local_branches(&self) -> Result<Vec<BranchInfo>>;
fn remote_branches(&self) -> Result<Vec<BranchInfo>>;
fn list_commits(&self) -> Result<Vec<CommitInfo>>;
fn list_commits_sorted(&self, order: SortOrder) -> Result<Vec<CommitInfo>>;
fn log_since(&self, since: SystemTime, until: SystemTime) -> Result<Vec<CommitInfo>>;
fn find_commit(&self, id: &CommitId) -> Result<CommitInfo>;
fn list_tags(&self) -> Result<Vec<TagInfo>>;
fn list_tags_sorted(&self, order: SortOrder) -> Result<Vec<TagInfo>>;
fn create_tag(&self, name: &str) -> Result<()>;
fn create_annotated_tag(&self, name: &str, message: &str) -> Result<()>;
fn delete_tag(&self, name: &str) -> Result<()>;
fn diff(&self, from: &CommitId, to: &CommitId) -> Result<DiffSummary>;
fn remote_url(&self, name: &str) -> Option<String>;
}