pub trait Repo {
fn is_dirty(&self) -> bool;
fn merge_base(&self, one: Oid, two: Oid) -> Option<Oid>;
fn find_commit(&self, id: Oid) -> Option<Rc<Commit>>;
fn head_commit(&self) -> Rc<Commit>;
fn resolve(&self, revspec: &str) -> Option<Rc<Commit>>;
fn commits_from(&self, head_id: Oid) -> Box<dyn Iterator<Item = Rc<Commit>>>;
fn cherry_pick(
&mut self,
head_id: Oid,
cherry_id: Oid
) -> Result<Oid, Error>;
fn branch(&mut self, name: &str, id: Oid) -> Result<(), Error>;
fn find_local_branch(&self, name: &str) -> Option<Branch>;
fn local_branches(&self) -> Box<dyn Iterator<Item = Branch>>;
fn detach(&mut self) -> Result<(), Error>;
fn switch(&mut self, name: &str) -> Result<(), Error>;
}