1 use crate::commands::Command; |
1 use crate::commands::Command; |
2 use crate::error::{CommandError, CommandErrorKind}; |
2 use crate::error::CommandError; |
3 use crate::ui::utf8_to_local; |
3 use crate::ui::utf8_to_local; |
4 use crate::ui::Ui; |
4 use crate::ui::Ui; |
5 use hg::operations::{ |
5 use hg::operations::{list_rev_tracked_files, ListRevTrackedFilesError}; |
6 list_rev_tracked_files, ListRevTrackedFilesError, |
6 use hg::operations::{Dirstate, ListDirstateTrackedFilesError}; |
7 ListRevTrackedFilesErrorKind, |
|
8 }; |
|
9 use hg::operations::{ |
|
10 Dirstate, ListDirstateTrackedFilesError, ListDirstateTrackedFilesErrorKind, |
|
11 }; |
|
12 use hg::repo::Repo; |
7 use hg::repo::Repo; |
13 use hg::utils::files::{get_bytes_from_path, relativize_path}; |
8 use hg::utils::files::{get_bytes_from_path, relativize_path}; |
14 use hg::utils::hg_path::{HgPath, HgPathBuf}; |
9 use hg::utils::hg_path::{HgPath, HgPathBuf}; |
15 |
10 |
16 pub const HELP_TEXT: &str = " |
11 pub const HELP_TEXT: &str = " |
33 ui: &Ui, |
28 ui: &Ui, |
34 repo: &Repo, |
29 repo: &Repo, |
35 files: impl IntoIterator<Item = &'a HgPath>, |
30 files: impl IntoIterator<Item = &'a HgPath>, |
36 ) -> Result<(), CommandError> { |
31 ) -> Result<(), CommandError> { |
37 let cwd = std::env::current_dir() |
32 let cwd = std::env::current_dir() |
38 .or_else(|e| Err(CommandErrorKind::CurrentDirNotFound(e)))?; |
33 .or_else(|e| Err(CommandError::CurrentDirNotFound(e)))?; |
39 let rooted_cwd = cwd |
34 let rooted_cwd = cwd |
40 .strip_prefix(repo.working_directory_path()) |
35 .strip_prefix(repo.working_directory_path()) |
41 .expect("cwd was already checked within the repository"); |
36 .expect("cwd was already checked within the repository"); |
42 let rooted_cwd = HgPathBuf::from(get_bytes_from_path(rooted_cwd)); |
37 let rooted_cwd = HgPathBuf::from(get_bytes_from_path(rooted_cwd)); |
43 |
38 |
66 self.display_files(ui, &repo, files) |
61 self.display_files(ui, &repo, files) |
67 } |
62 } |
68 } |
63 } |
69 } |
64 } |
70 |
65 |
71 /// Convert `ListRevTrackedFilesErrorKind` to `CommandError` |
66 /// Convert `ListRevTrackedFilesError` to `CommandError` |
72 fn map_rev_error(rev: &str, err: ListRevTrackedFilesError) -> CommandError { |
67 fn map_rev_error(rev: &str, err: ListRevTrackedFilesError) -> CommandError { |
73 CommandError { |
68 match err { |
74 kind: match err.kind { |
69 ListRevTrackedFilesError::IoError(err) => CommandError::Abort(Some( |
75 ListRevTrackedFilesErrorKind::IoError(err) => { |
70 utf8_to_local(&format!("abort: {}\n", err)).into(), |
76 CommandErrorKind::Abort(Some( |
71 )), |
77 utf8_to_local(&format!("abort: {}\n", err)).into(), |
72 ListRevTrackedFilesError::InvalidRevision => { |
|
73 CommandError::Abort(Some( |
|
74 utf8_to_local(&format!( |
|
75 "abort: invalid revision identifier {}\n", |
|
76 rev |
78 )) |
77 )) |
79 } |
78 .into(), |
80 ListRevTrackedFilesErrorKind::InvalidRevision => { |
79 )) |
81 CommandErrorKind::Abort(Some( |
80 } |
82 utf8_to_local(&format!( |
81 ListRevTrackedFilesError::AmbiguousPrefix => { |
83 "abort: invalid revision identifier {}\n", |
82 CommandError::Abort(Some( |
84 rev |
83 utf8_to_local(&format!( |
85 )) |
84 "abort: ambiguous revision identifier {}\n", |
86 .into(), |
85 rev |
87 )) |
86 )) |
88 } |
87 .into(), |
89 ListRevTrackedFilesErrorKind::AmbiguousPrefix => { |
88 )) |
90 CommandErrorKind::Abort(Some( |
89 } |
91 utf8_to_local(&format!( |
90 ListRevTrackedFilesError::UnsuportedRevlogVersion(version) => { |
92 "abort: ambiguous revision identifier {}\n", |
91 CommandError::Abort(Some( |
93 rev |
92 utf8_to_local(&format!( |
94 )) |
93 "abort: unsupported revlog version {}\n", |
95 .into(), |
94 version |
96 )) |
95 )) |
97 } |
96 .into(), |
98 ListRevTrackedFilesErrorKind::UnsuportedRevlogVersion(version) => { |
97 )) |
99 CommandErrorKind::Abort(Some( |
98 } |
100 utf8_to_local(&format!( |
99 ListRevTrackedFilesError::CorruptedRevlog => { |
101 "abort: unsupported revlog version {}\n", |
100 CommandError::Abort(Some("abort: corrupted revlog\n".into())) |
102 version |
101 } |
103 )) |
102 ListRevTrackedFilesError::UnknowRevlogDataFormat(format) => { |
104 .into(), |
103 CommandError::Abort(Some( |
|
104 utf8_to_local(&format!( |
|
105 "abort: unknow revlog dataformat {:?}\n", |
|
106 format |
105 )) |
107 )) |
106 } |
108 .into(), |
107 ListRevTrackedFilesErrorKind::CorruptedRevlog => { |
109 )) |
108 CommandErrorKind::Abort(Some( |
110 } |
109 "abort: corrupted revlog\n".into(), |
|
110 )) |
|
111 } |
|
112 ListRevTrackedFilesErrorKind::UnknowRevlogDataFormat(format) => { |
|
113 CommandErrorKind::Abort(Some( |
|
114 utf8_to_local(&format!( |
|
115 "abort: unknow revlog dataformat {:?}\n", |
|
116 format |
|
117 )) |
|
118 .into(), |
|
119 )) |
|
120 } |
|
121 }, |
|
122 } |
111 } |
123 } |
112 } |
124 |
113 |
125 /// Convert `ListDirstateTrackedFilesError` to `CommandError` |
114 /// Convert `ListDirstateTrackedFilesError` to `CommandError` |
126 fn map_dirstate_error(err: ListDirstateTrackedFilesError) -> CommandError { |
115 fn map_dirstate_error(err: ListDirstateTrackedFilesError) -> CommandError { |
127 CommandError { |
116 match err { |
128 kind: match err.kind { |
117 ListDirstateTrackedFilesError::IoError(err) => CommandError::Abort( |
129 ListDirstateTrackedFilesErrorKind::IoError(err) => { |
118 Some(utf8_to_local(&format!("abort: {}\n", err)).into()), |
130 CommandErrorKind::Abort(Some( |
119 ), |
131 utf8_to_local(&format!("abort: {}\n", err)).into(), |
120 ListDirstateTrackedFilesError::ParseError(_) => { |
132 )) |
121 CommandError::Abort(Some( |
133 } |
122 // TODO find a better error message |
134 ListDirstateTrackedFilesErrorKind::ParseError(_) => { |
123 b"abort: parse error\n".to_vec(), |
135 CommandErrorKind::Abort(Some( |
124 )) |
136 // TODO find a better error message |
125 } |
137 b"abort: parse error\n".to_vec(), |
|
138 )) |
|
139 } |
|
140 }, |
|
141 } |
126 } |
142 } |
127 } |