1use semver::Version;
2
3use crate::commit::Commit;
4use crate::error::ReleaseError;
5
6#[derive(Debug, Clone)]
8pub struct TagInfo {
9 pub name: String,
10 pub version: Version,
11 pub sha: String,
12}
13
14pub trait GitRepository: Send + Sync {
16 fn latest_tag(&self, prefix: &str) -> Result<Option<TagInfo>, ReleaseError>;
18
19 fn commits_since(&self, from: Option<&str>) -> Result<Vec<Commit>, ReleaseError>;
22
23 fn create_tag(&self, name: &str, message: &str) -> Result<(), ReleaseError>;
25
26 fn push_tag(&self, name: &str) -> Result<(), ReleaseError>;
28
29 fn stage_and_commit(&self, paths: &[&str], message: &str) -> Result<bool, ReleaseError>;
31
32 fn push(&self) -> Result<(), ReleaseError>;
34
35 fn tag_exists(&self, name: &str) -> Result<bool, ReleaseError>;
37
38 fn remote_tag_exists(&self, name: &str) -> Result<bool, ReleaseError>;
40
41 fn all_tags(&self, prefix: &str) -> Result<Vec<TagInfo>, ReleaseError>;
43
44 fn commits_between(&self, from: Option<&str>, to: &str) -> Result<Vec<Commit>, ReleaseError>;
47
48 fn tag_date(&self, tag_name: &str) -> Result<String, ReleaseError>;
50
51 fn force_create_tag(&self, name: &str, message: &str) -> Result<(), ReleaseError>;
53
54 fn force_push_tag(&self, name: &str) -> Result<(), ReleaseError>;
56
57 fn head_sha(&self) -> Result<String, ReleaseError>;
59}