1use rskit_errors::AppResult;
4
5use crate::options::{
6 CheckoutOptions, CherryPickOptions, CommitOptions, MergeOptions, RebaseOptions,
7};
8use crate::types::{MergeResult, Oid, RebaseResult, ResetMode, StashEntry, StatusEntry};
9
10pub trait IndexManager {
12 fn stage(&self, paths: &[&str]) -> AppResult<()>;
14
15 fn unstage(&self, paths: &[&str]) -> AppResult<()>;
17
18 fn staged_entries(&self) -> AppResult<Vec<StatusEntry>>;
20}
21
22pub trait Committer {
24 fn commit(&self, message: &str, opts: Option<&CommitOptions>) -> AppResult<Oid>;
26}
27
28pub trait Merger {
30 fn merge(&self, branch: &str, opts: Option<&MergeOptions>) -> AppResult<MergeResult>;
32
33 fn abort_merge(&self) -> AppResult<()>;
35
36 fn merge_abort(&self) -> AppResult<()> {
38 self.abort_merge()
39 }
40}
41
42pub trait Rebaser {
44 fn rebase(&self, onto: &str, opts: Option<&RebaseOptions>) -> AppResult<RebaseResult>;
46
47 fn abort_rebase(&self) -> AppResult<()>;
49
50 fn continue_rebase(&self) -> AppResult<RebaseResult>;
52
53 fn rebase_abort(&self) -> AppResult<()> {
55 self.abort_rebase()
56 }
57
58 fn rebase_continue(&self) -> AppResult<RebaseResult> {
60 self.continue_rebase()
61 }
62}
63
64pub trait CherryPicker {
66 fn cherry_pick(&self, commit: &str, opts: Option<&CherryPickOptions>) -> AppResult<Oid>;
68
69 fn cherry_pick_continue(&self) -> AppResult<Oid>;
71
72 fn cherry_pick_abort(&self) -> AppResult<()>;
74}
75
76pub trait Resetter {
78 fn reset(&self, target: &str, mode: ResetMode) -> AppResult<()>;
80}
81
82pub trait CheckoutManager {
84 fn checkout(&self, ref_name: &str, opts: Option<&CheckoutOptions>) -> AppResult<()>;
86
87 fn checkout_files(&self, paths: &[&str]) -> AppResult<()>;
89}
90
91pub trait Stasher {
93 fn stash(&self, message: &str) -> AppResult<Oid>;
95
96 fn stash_push(&self, message: &str) -> AppResult<Oid> {
98 self.stash(message)
99 }
100
101 fn stash_pop(&self) -> AppResult<()>;
103
104 fn stash_pop_index(&self, index: usize) -> AppResult<()>;
106
107 fn stash_list(&self) -> AppResult<Vec<StashEntry>>;
109}