1use gix::clone;
2use thiserror::Error as ThisError;
3
4#[derive(Debug, ThisError)]
5#[error(transparent)]
6pub struct GitError(#[from] GitErrorInner);
7
8#[derive(Debug, ThisError)]
9pub(super) enum GitErrorInner {
10 #[error("Failed to prepare for fetch: {0}")]
11 PrepareFetchError(#[source] Box<clone::Error>),
12
13 #[error("Failed to fetch: {0}")]
14 FetchError(#[source] Box<clone::fetch::Error>),
15
16 #[error("Failed to checkout: {0}")]
17 CheckOutError(#[source] Box<clone::checkout::main_worktree::Error>),
18
19 #[error("HEAD ref was corrupt in crates-io index repository clone: {0}")]
20 HeadCommit(#[source] Box<gix::reference::head_commit::Error>),
21
22 #[error("tree of head commit wasn't present in crates-io index repository clone: {0}")]
23 GetTreeOfCommit(#[source] Box<gix::object::commit::Error>),
24
25 #[error("An object was missing in the crates-io index repository clone: {0}")]
26 ObjectLookup(#[source] Box<gix::object::find::existing::Error>),
27}
28
29impl From<clone::Error> for GitErrorInner {
30 fn from(e: clone::Error) -> Self {
31 Self::PrepareFetchError(Box::new(e))
32 }
33}
34
35impl From<clone::fetch::Error> for GitErrorInner {
36 fn from(e: clone::fetch::Error) -> Self {
37 Self::FetchError(Box::new(e))
38 }
39}
40
41impl From<clone::checkout::main_worktree::Error> for GitErrorInner {
42 fn from(e: clone::checkout::main_worktree::Error) -> Self {
43 Self::CheckOutError(Box::new(e))
44 }
45}
46
47impl From<gix::reference::head_commit::Error> for GitErrorInner {
48 fn from(e: gix::reference::head_commit::Error) -> Self {
49 Self::HeadCommit(Box::new(e))
50 }
51}
52
53impl From<gix::object::commit::Error> for GitErrorInner {
54 fn from(e: gix::object::commit::Error) -> Self {
55 Self::GetTreeOfCommit(Box::new(e))
56 }
57}
58
59impl From<gix::object::find::existing::Error> for GitErrorInner {
60 fn from(e: gix::object::find::existing::Error) -> Self {
61 Self::ObjectLookup(Box::new(e))
62 }
63}
64
65#[derive(Debug, ThisError)]
66#[error(transparent)]
67pub struct GitUrlParseError(pub(super) gix::url::parse::Error);