rust/rhg/src/commands/files.rs
changeset 46434 3e2d539d0d1a
parent 46167 8a4914397d02
child 46436 252d1bdba33d
equal deleted inserted replaced
46433:4b381dbbf8b7 46434:3e2d539d0d1a
     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 }