##// END OF EJS Templates
revlog: make `clearcaches()` signature consistent with ManifestRevlog...
revlog: make `clearcaches()` signature consistent with ManifestRevlog I'm not sure if this a newly added bug, because of using a different version of pytype, or if the recent work around avoiding the zope interface types in the type checking phase (see 5eb98ea78fd7 and friends)... but pytype 2023.11.21 started flagging this series since it was last pushed ~6 weeks ago: File "/mnt/c/Users/Matt/hg/mercurial/bundlerepo.py", line 204, in <module>: Overriding method signature mismatch [signature-mismatch] Base signature: 'def mercurial.manifest.ManifestRevlog.clearcaches(self, clear_persisted_data: Any = ...) -> None'. Subclass signature: 'def mercurial.revlog.revlog.clearcaches(self) -> None'. Not enough positional parameters in overriding method. Maybe the multiple inheritance in `bundlerepo.bundlemanifest` is bad, but it seems like a `ManifestRevlog` is-a `revlog`, even though the class hierarchy isn't coded that way. Additionally, it looks like `revlog.clearcaches()` is dealing with some persistent data, so maybe this is useful to have there anyway. Also sprinkle some trivial type hints on the method, because there are other `clearcaches()` definitions in the codebase with these hints, and I don't feel like waiting for another pytype run to see if it cares that specifically about the signature matching.

File last commit:

r51872:4c5f6e95 default
r52765:5e79783d default
Show More
revset.rs
71 lines | 2.2 KiB | application/rls-services+xml | RustLexer
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162 //! The revset query language
//!
//! <https://www.mercurial-scm.org/repo/hg/help/revsets>
Simon Sapin
rhg: Fall back to Python for unsupported revset syntax...
r47459 use crate::errors::HgError;
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162 use crate::repo::Repo;
use crate::revlog::NodePrefix;
Pulkit Goyal
rhg: raise wdir specific error for `hg debugdata`...
r47577 use crate::revlog::{Revision, NULL_REVISION, WORKING_DIRECTORY_HEX};
Raphaël Gomès
rust-clippy: merge "revlog" module definition and struct implementation...
r50832 use crate::revlog::{Revlog, RevlogError};
Pulkit Goyal
rhg: raise wdir specific error for `hg debugdata`...
r47577 use crate::Node;
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162
/// Resolve a query string into a single revision.
///
/// Only some of the revset language is implemented yet.
pub fn resolve_single(
input: &str,
repo: &Repo,
) -> Result<Revision, RevlogError> {
Simon Sapin
rust: Keep lazily-initialized Changelog and Manifest log on the Repo object...
r48773 let changelog = repo.changelog()?;
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162
Raphaël Gomès
rust-revset: add separate match logic for shortcuts...
r48892 match input {
Raphaël Gomès
rust-revset: support explicit `.` revision...
r48893 "." => {
let p1 = repo.dirstate_parents()?.p1;
Raphaël Gomès
rust-clippy: fix most warnings in `hg-core`...
r50825 return changelog.revlog.rev_from_node(p1.into());
Raphaël Gomès
rust-revset: support explicit `.` revision...
r48893 }
Raphaël Gomès
rust-revset: add separate match logic for shortcuts...
r48892 "null" => return Ok(NULL_REVISION),
_ => {}
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162 }
Raphaël Gomès
rust-revset: add separate match logic for shortcuts...
r48892 match resolve_rev_number_or_hex_prefix(input, &changelog.revlog) {
Err(RevlogError::InvalidRevision) => {
// TODO: support for the rest of the language here.
let msg = format!("cannot parse revset '{}'", input);
Err(HgError::unsupported(msg).into())
}
Raphaël Gomès
rust-clippy: fix most warnings in `hg-core`...
r50825 result => result,
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162 }
}
/// Resolve the small subset of the language suitable for revlogs other than
/// the changelog, such as in `hg debugdata --manifest` CLI argument.
///
/// * A non-negative decimal integer for a revision number, or
/// * An hexadecimal string, for the unique node ID that starts with this
/// prefix
pub fn resolve_rev_number_or_hex_prefix(
input: &str,
revlog: &Revlog,
) -> Result<Revision, RevlogError> {
Simon Sapin
rhg: Align with Python on some revset parsing corner cases...
r48776 // The Python equivalent of this is part of `revsymbol` in
// `mercurial/scmutil.py`
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162 if let Ok(integer) = input.parse::<i32>() {
Simon Sapin
rhg: Align with Python on some revset parsing corner cases...
r48776 if integer.to_string() == input
&& integer >= 0
Raphaël Gomès
rust: use the new `UncheckedRevision` everywhere applicable...
r51870 && revlog.has_rev(integer.into())
Simon Sapin
rhg: Align with Python on some revset parsing corner cases...
r48776 {
Raphaël Gomès
rust: make `Revision` a newtype...
r51872 // This is fine because we've just checked that the revision is
// valid for the given revlog.
return Ok(Revision(integer));
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162 }
}
if let Ok(prefix) = NodePrefix::from_hex(input) {
Pulkit Goyal
rhg: raise wdir specific error for `hg debugdata`...
r47577 if prefix.is_prefix_of(&Node::from_hex(WORKING_DIRECTORY_HEX).unwrap())
{
return Err(RevlogError::WDirUnsupported);
}
Simon Sapin
rust: Rename the `Revlog::get_node_rev` method to `rev_from_node`...
r48782 return revlog.rev_from_node(prefix);
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162 }
Err(RevlogError::InvalidRevision)
}