Mercurial > public > mercurial-scm > hg
comparison rust/hg-core/src/repo.rs @ 46505:a25033eb43b5
rhg: add limited support for the `config` sub-command
Only with one argument and no flag. This is mostly for testing.
Differential Revision: https://phab.mercurial-scm.org/D9972
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Mon, 08 Feb 2021 23:41:58 +0100 |
parents | d8730ff51d5a |
children | 5ce2aa7c2ad5 |
comparison
equal
deleted
inserted
replaced
46504:2e5dd18d6dc3 | 46505:a25033eb43b5 |
---|---|
41 pub(crate) struct Vfs<'a> { | 41 pub(crate) struct Vfs<'a> { |
42 base: &'a Path, | 42 base: &'a Path, |
43 } | 43 } |
44 | 44 |
45 impl Repo { | 45 impl Repo { |
46 /// Search the current directory and its ancestores for a repository: | 46 /// Find a repository, either at the given path (which must contain a `.hg` |
47 /// a working directory that contains a `.hg` sub-directory. | 47 /// sub-directory) or by searching the current directory and its |
48 /// ancestors. | |
48 /// | 49 /// |
49 /// `explicit_path` is for `--repository` command-line arguments. | 50 /// A method with two very different "modes" like this usually a code smell |
51 /// to make two methods instead, but in this case an `Option` is what rhg | |
52 /// sub-commands get from Clap for the `-R` / `--repository` CLI argument. | |
53 /// Having two methods would just move that `if` to almost all callers. | |
50 pub fn find( | 54 pub fn find( |
51 config: &Config, | 55 config: &Config, |
52 explicit_path: Option<&Path>, | 56 explicit_path: Option<&Path>, |
53 ) -> Result<Self, RepoError> { | 57 ) -> Result<Self, RepoError> { |
54 if let Some(root) = explicit_path { | 58 if let Some(root) = explicit_path { |
72 } | 76 } |
73 } | 77 } |
74 Err(RepoError::NotFound { | 78 Err(RepoError::NotFound { |
75 at: current_directory, | 79 at: current_directory, |
76 }) | 80 }) |
81 } | |
82 } | |
83 | |
84 /// Like `Repo::find`, but not finding a repository is not an error if no | |
85 /// explicit path is given. `Ok(None)` is returned in that case. | |
86 /// | |
87 /// If an explicit path *is* given, not finding a repository there is still | |
88 /// an error. | |
89 /// | |
90 /// For sub-commands that don’t need a repository, configuration should | |
91 /// still be affected by a repository’s `.hg/hgrc` file. This is the | |
92 /// constructor to use. | |
93 pub fn find_optional( | |
94 config: &Config, | |
95 explicit_path: Option<&Path>, | |
96 ) -> Result<Option<Self>, RepoError> { | |
97 match Self::find(config, explicit_path) { | |
98 Ok(repo) => Ok(Some(repo)), | |
99 Err(RepoError::NotFound { .. }) if explicit_path.is_none() => { | |
100 Ok(None) | |
101 } | |
102 Err(error) => Err(error), | |
77 } | 103 } |
78 } | 104 } |
79 | 105 |
80 /// To be called after checking that `.hg` is a sub-directory | 106 /// To be called after checking that `.hg` is a sub-directory |
81 fn new_at_path( | 107 fn new_at_path( |