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, sign: bool) -> 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, sign: bool) -> Result<(), ReleaseError>;
54
55 fn force_push_tag(&self, name: &str) -> Result<(), ReleaseError>;
57
58 fn head_sha(&self) -> Result<String, ReleaseError>;
60
61 fn commits_since_in_path(
63 &self,
64 from: Option<&str>,
65 path: &str,
66 ) -> Result<Vec<Commit>, ReleaseError> {
67 let _ = path;
69 self.commits_since(from)
70 }
71
72 fn commits_between_in_path(
74 &self,
75 from: Option<&str>,
76 to: &str,
77 path: &str,
78 ) -> Result<Vec<Commit>, ReleaseError> {
79 let _ = path;
80 self.commits_between(from, to)
81 }
82}