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 }