Show More
@@ -30,6 +30,10 b' impl DirstateParents {' | |||
|
30 | 30 | p1: NULL_NODE, |
|
31 | 31 | p2: NULL_NODE, |
|
32 | 32 | }; |
|
33 | ||
|
34 | pub fn is_merge(&self) -> bool { | |
|
35 | return !(self.p2 == NULL_NODE); | |
|
36 | } | |
|
33 | 37 | } |
|
34 | 38 | |
|
35 | 39 | pub type StateMapIter<'a> = Box< |
@@ -104,6 +104,12 b" pub fn args() -> clap::App<'static, 'sta" | |||
|
104 | 104 | .short("-n") |
|
105 | 105 | .long("--no-status"), |
|
106 | 106 | ) |
|
107 | .arg( | |
|
108 | Arg::with_name("verbose") | |
|
109 | .help("enable additional output") | |
|
110 | .short("-v") | |
|
111 | .long("--verbose"), | |
|
112 | ) | |
|
107 | 113 | } |
|
108 | 114 | |
|
109 | 115 | /// Pure data type allowing the caller to specify file states to display |
@@ -150,6 +156,33 b' impl DisplayStates {' | |||
|
150 | 156 | } |
|
151 | 157 | } |
|
152 | 158 | |
|
159 | fn has_unfinished_merge(repo: &Repo) -> Result<bool, CommandError> { | |
|
160 | return Ok(repo.dirstate_parents()?.is_merge()); | |
|
161 | } | |
|
162 | ||
|
163 | fn has_unfinished_state(repo: &Repo) -> Result<bool, CommandError> { | |
|
164 | // These are all the known values for the [fname] argument of | |
|
165 | // [addunfinished] function in [state.py] | |
|
166 | let known_state_files: &[&str] = &[ | |
|
167 | "bisect.state", | |
|
168 | "graftstate", | |
|
169 | "histedit-state", | |
|
170 | "rebasestate", | |
|
171 | "shelvedstate", | |
|
172 | "transplant/journal", | |
|
173 | "updatestate", | |
|
174 | ]; | |
|
175 | if has_unfinished_merge(repo)? { | |
|
176 | return Ok(true); | |
|
177 | }; | |
|
178 | for f in known_state_files { | |
|
179 | if repo.hg_vfs().join(f).exists() { | |
|
180 | return Ok(true); | |
|
181 | } | |
|
182 | } | |
|
183 | return Ok(false); | |
|
184 | } | |
|
185 | ||
|
153 | 186 | pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> { |
|
154 | 187 | // TODO: lift these limitations |
|
155 | 188 | if invocation.config.get_bool(b"ui", b"tweakdefaults")? { |
@@ -178,13 +211,9 b' pub fn run(invocation: &crate::CliInvoca' | |||
|
178 | 211 | |
|
179 | 212 | let verbose = !ui.plain(None) |
|
180 | 213 | && !args.is_present("print0") |
|
181 | && (config.get_bool(b"ui", b"verbose")? | |
|
214 | && (args.is_present("verbose") | |
|
215 | || config.get_bool(b"ui", b"verbose")? | |
|
182 | 216 | || config.get_bool(b"commands", b"status.verbose")?); |
|
183 | if verbose { | |
|
184 | return Err(CommandError::unsupported( | |
|
185 | "verbose status is not supported yet", | |
|
186 | )); | |
|
187 | } | |
|
188 | 217 | |
|
189 | 218 | let all = args.is_present("all"); |
|
190 | 219 | let display_states = if all { |
@@ -214,6 +243,14 b' pub fn run(invocation: &crate::CliInvoca' | |||
|
214 | 243 | |
|
215 | 244 | let repo = invocation.repo?; |
|
216 | 245 | |
|
246 | if verbose { | |
|
247 | if has_unfinished_state(repo)? { | |
|
248 | return Err(CommandError::unsupported( | |
|
249 | "verbose status output is not supported by rhg (and is needed because we're in an unfinished operation)", | |
|
250 | )); | |
|
251 | }; | |
|
252 | } | |
|
253 | ||
|
217 | 254 | if repo.has_sparse() || repo.has_narrow() { |
|
218 | 255 | return Err(CommandError::unsupported( |
|
219 | 256 | "rhg status is not supported for sparse checkouts or narrow clones yet" |
General Comments 0
You need to be logged in to leave comments.
Login now