Show More
@@ -225,23 +225,13 b' impl Revlog {' | |||||
225 | &self, |
|
225 | &self, | |
226 | node: NodePrefix, |
|
226 | node: NodePrefix, | |
227 | ) -> Result<Revision, RevlogError> { |
|
227 | ) -> Result<Revision, RevlogError> { | |
228 |
|
|
228 | if let Some(nodemap) = &self.nodemap { | |
229 | nodemap |
|
229 | nodemap | |
230 | .find_bin(&self.index, node)? |
|
230 | .find_bin(&self.index, node)? | |
231 | .ok_or(RevlogError::InvalidRevision) |
|
231 | .ok_or(RevlogError::InvalidRevision) | |
232 | } else { |
|
232 | } else { | |
233 | self.rev_from_node_no_persistent_nodemap(node) |
|
233 | self.rev_from_node_no_persistent_nodemap(node) | |
234 |
} |
|
234 | } | |
235 |
|
||||
236 | if node.is_prefix_of(&NULL_NODE) { |
|
|||
237 | return match looked_up { |
|
|||
238 | Ok(_) => Err(RevlogError::AmbiguousPrefix), |
|
|||
239 | Err(RevlogError::InvalidRevision) => Ok(NULL_REVISION), |
|
|||
240 | res => res, |
|
|||
241 | }; |
|
|||
242 | }; |
|
|||
243 |
|
||||
244 | looked_up |
|
|||
245 | } |
|
235 | } | |
246 |
|
236 | |||
247 | /// Same as `rev_from_node`, without using a persistent nodemap |
|
237 | /// Same as `rev_from_node`, without using a persistent nodemap | |
@@ -257,16 +247,22 b' impl Revlog {' | |||||
257 | // TODO: consider building a non-persistent nodemap in memory to |
|
247 | // TODO: consider building a non-persistent nodemap in memory to | |
258 | // optimize these cases. |
|
248 | // optimize these cases. | |
259 | let mut found_by_prefix = None; |
|
249 | let mut found_by_prefix = None; | |
260 |
for rev in ( |
|
250 | for rev in (-1..self.len() as Revision).rev() { | |
261 | let index_entry = self.index.get_entry(rev).ok_or_else(|| { |
|
251 | let candidate_node = if rev == -1 { | |
262 | HgError::corrupted( |
|
252 | NULL_NODE | |
263 | "revlog references a revision not in the index", |
|
253 | } else { | |
264 |
|
|
254 | let index_entry = | |
265 | })?; |
|
255 | self.index.get_entry(rev).ok_or_else(|| { | |
266 | if node == *index_entry.hash() { |
|
256 | HgError::corrupted( | |
|
257 | "revlog references a revision not in the index", | |||
|
258 | ) | |||
|
259 | })?; | |||
|
260 | *index_entry.hash() | |||
|
261 | }; | |||
|
262 | if node == candidate_node { | |||
267 | return Ok(rev); |
|
263 | return Ok(rev); | |
268 | } |
|
264 | } | |
269 |
if node.is_prefix_of( |
|
265 | if node.is_prefix_of(&candidate_node) { | |
270 | if found_by_prefix.is_some() { |
|
266 | if found_by_prefix.is_some() { | |
271 | return Err(RevlogError::AmbiguousPrefix); |
|
267 | return Err(RevlogError::AmbiguousPrefix); | |
272 | } |
|
268 | } |
@@ -315,8 +315,6 b' Rhg status on a sparse repo with nodemap' | |||||
315 |
|
315 | |||
316 | $ hg debugsparse -X excluded-dir |
|
316 | $ hg debugsparse -X excluded-dir | |
317 | $ $NO_FALLBACK rhg status |
|
317 | $ $NO_FALLBACK rhg status | |
318 | abort: dirstate points to non-existent parent node |
|
|||
319 | [255] |
|
|||
320 |
|
318 | |||
321 | Specifying revisions by changeset ID |
|
319 | Specifying revisions by changeset ID | |
322 | $ $NO_FALLBACK rhg files -r c3ae8dec9fad |
|
320 | $ $NO_FALLBACK rhg files -r c3ae8dec9fad |
General Comments 0
You need to be logged in to leave comments.
Login now