Mercurial > hg
comparison rust/rhg/src/commands/cat.rs @ 46436:252d1bdba33d
rhg: replace `map_*_error` functions with `From` impls
Differential Revision: https://phab.mercurial-scm.org/D9876
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Tue, 26 Jan 2021 20:31:26 +0100 |
parents | 3e2d539d0d1a |
children | ca3f73cc3cf4 |
comparison
equal
deleted
inserted
replaced
46435:2e2033081274 | 46436:252d1bdba33d |
---|---|
1 use crate::commands::Command; | 1 use crate::commands::Command; |
2 use crate::error::CommandError; | 2 use crate::error::CommandError; |
3 use crate::ui::utf8_to_local; | |
4 use crate::ui::Ui; | 3 use crate::ui::Ui; |
5 use hg::operations::{cat, CatRevError}; | 4 use hg::operations::cat; |
6 use hg::repo::Repo; | 5 use hg::repo::Repo; |
7 use hg::utils::hg_path::HgPathBuf; | 6 use hg::utils::hg_path::HgPathBuf; |
8 use micro_timer::timed; | 7 use micro_timer::timed; |
9 use std::convert::TryFrom; | 8 use std::convert::TryFrom; |
10 | 9 |
47 files.push(hg_file); | 46 files.push(hg_file); |
48 } | 47 } |
49 | 48 |
50 match self.rev { | 49 match self.rev { |
51 Some(rev) => { | 50 Some(rev) => { |
52 let data = cat(&repo, rev, &files) | 51 let data = cat(&repo, rev, &files).map_err(|e| (e, rev))?; |
53 .map_err(|e| map_rev_error(rev, e))?; | |
54 self.display(ui, &data) | 52 self.display(ui, &data) |
55 } | 53 } |
56 None => Err(CommandError::Unimplemented.into()), | 54 None => Err(CommandError::Unimplemented.into()), |
57 } | 55 } |
58 } | 56 } |
59 } | 57 } |
60 | |
61 /// Convert `CatRevError` to `CommandError` | |
62 fn map_rev_error(rev: &str, err: CatRevError) -> CommandError { | |
63 match err { | |
64 CatRevError::IoError(err) => CommandError::Abort(Some( | |
65 utf8_to_local(&format!("abort: {}\n", err)).into(), | |
66 )), | |
67 CatRevError::InvalidRevision => CommandError::Abort(Some( | |
68 utf8_to_local(&format!( | |
69 "abort: invalid revision identifier {}\n", | |
70 rev | |
71 )) | |
72 .into(), | |
73 )), | |
74 CatRevError::AmbiguousPrefix => CommandError::Abort(Some( | |
75 utf8_to_local(&format!( | |
76 "abort: ambiguous revision identifier {}\n", | |
77 rev | |
78 )) | |
79 .into(), | |
80 )), | |
81 CatRevError::UnsuportedRevlogVersion(version) => { | |
82 CommandError::Abort(Some( | |
83 utf8_to_local(&format!( | |
84 "abort: unsupported revlog version {}\n", | |
85 version | |
86 )) | |
87 .into(), | |
88 )) | |
89 } | |
90 CatRevError::CorruptedRevlog => { | |
91 CommandError::Abort(Some("abort: corrupted revlog\n".into())) | |
92 } | |
93 CatRevError::UnknowRevlogDataFormat(format) => { | |
94 CommandError::Abort(Some( | |
95 utf8_to_local(&format!( | |
96 "abort: unknow revlog dataformat {:?}\n", | |
97 format | |
98 )) | |
99 .into(), | |
100 )) | |
101 } | |
102 } | |
103 } |