rust-lib: only export very common types to the top of the crate
This was done very early in the Rust project's lifecycle and I had very little
Rust experience. Let's keep the `DirstateParents` since they'll pop up in
all higher-level code and make the rest more explicit imports to make the
imports less confusing and the lib less cluttered.
--- a/rust/hg-core/src/dirstate/dirstate_map.rs Mon Nov 04 11:07:05 2024 +0100
+++ b/rust/hg-core/src/dirstate/dirstate_map.rs Mon Nov 04 11:13:05 2024 +0100
@@ -8,6 +8,7 @@
use super::on_disk::DirstateV2ParseError;
use super::owning::OwningDirstateMap;
use super::path_with_basename::WithBasename;
+use super::status::{DirstateStatus, StatusError, StatusOptions};
use crate::dirstate::entry::{
DirstateEntry, DirstateV2Data, ParentFileData, TruncatedTimestamp,
};
@@ -22,11 +23,8 @@
use crate::DirstateError;
use crate::DirstateMapError;
use crate::DirstateParents;
-use crate::DirstateStatus;
use crate::FastHashbrownMap as FastHashMap;
use crate::PatternFileWarning;
-use crate::StatusError;
-use crate::StatusOptions;
/// Append to an existing data file if the amount of unreachable data (not used
/// anymore) is less than this fraction of the total amount of existing data.
--- a/rust/hg-core/src/lib.rs Mon Nov 04 11:07:05 2024 +0100
+++ b/rust/hg-core/src/lib.rs Mon Nov 04 11:13:05 2024 +0100
@@ -16,14 +16,9 @@
pub mod fncache;
pub mod requirements;
pub mod testing; // unconditionally built, for use from integration tests
-pub use dirstate::{
- dirs_multiset::{DirsMultiset, DirsMultisetIter},
- status::{
- BadMatch, BadType, DirstateStatus, HgPathCow, StatusError,
- StatusOptions,
- },
- DirstateParents,
-};
+
+// Export very common type to make discovery easier
+pub use dirstate::DirstateParents;
pub mod copy_tracing;
pub mod filepatterns;
pub mod matchers;
--- a/rust/hg-core/src/matchers.rs Mon Nov 04 11:07:05 2024 +0100
+++ b/rust/hg-core/src/matchers.rs Mon Nov 04 11:13:05 2024 +0100
@@ -11,7 +11,7 @@
use once_cell::sync::OnceCell;
use crate::{
- dirstate::dirs_multiset::DirsChildrenMultiset,
+ dirstate::dirs_multiset::{DirsChildrenMultiset, DirsMultiset},
filepatterns::{
build_single_regex, filter_subincludes, get_patterns_from_file,
PatternFileWarning, PatternResult,
@@ -21,7 +21,7 @@
hg_path::{HgPath, HgPathBuf, HgPathError},
Escaped,
},
- DirsMultiset, FastHashMap, IgnorePattern, PatternError, PatternSyntax,
+ FastHashMap, IgnorePattern, PatternError, PatternSyntax,
};
use crate::dirstate::status::IgnoreFnType;
--- a/rust/hg-cpython/src/dirstate/dirs_multiset.rs Mon Nov 04 11:07:05 2024 +0100
+++ b/rust/hg-cpython/src/dirstate/dirs_multiset.rs Mon Nov 04 11:13:05 2024 +0100
@@ -16,8 +16,8 @@
};
use hg::{
+ dirstate::dirs_multiset::{DirsMultiset, DirsMultisetIter},
utils::hg_path::{HgPath, HgPathBuf},
- DirsMultiset, DirsMultisetIter,
};
py_class!(pub class Dirs |py| {
--- a/rust/hg-cpython/src/dirstate/status.rs Mon Nov 04 11:07:05 2024 +0100
+++ b/rust/hg-cpython/src/dirstate/status.rs Mon Nov 04 11:13:05 2024 +0100
@@ -14,7 +14,9 @@
exc::ValueError, ObjectProtocol, PyBool, PyBytes, PyErr, PyList, PyObject,
PyResult, PyTuple, Python, PythonObject, ToPyObject,
};
-use hg::dirstate::status::StatusPath;
+use hg::dirstate::status::{
+ BadMatch, DirstateStatus, StatusError, StatusOptions, StatusPath,
+};
use hg::matchers::{
DifferenceMatcher, IntersectionMatcher, Matcher, NeverMatcher,
PatternMatcher, UnionMatcher,
@@ -26,8 +28,7 @@
files::{get_bytes_from_path, get_path_from_bytes},
hg_path::{HgPath, HgPathBuf},
},
- BadMatch, DirstateStatus, IgnorePattern, PatternError, PatternFileWarning,
- StatusError, StatusOptions,
+ IgnorePattern, PatternError, PatternFileWarning,
};
use std::borrow::Borrow;
--- a/rust/rhg/src/commands/debugignorerhg.rs Mon Nov 04 11:07:05 2024 +0100
+++ b/rust/rhg/src/commands/debugignorerhg.rs Mon Nov 04 11:13:05 2024 +0100
@@ -1,7 +1,6 @@
use crate::error::CommandError;
-use hg;
+use hg::dirstate::status::StatusError;
use hg::matchers::get_ignore_matcher;
-use hg::StatusError;
use log::warn;
pub const HELP_TEXT: &str = "
--- a/rust/rhg/src/commands/status.rs Mon Nov 04 11:07:05 2024 +0100
+++ b/rust/rhg/src/commands/status.rs Mon Nov 04 11:13:05 2024 +0100
@@ -15,7 +15,9 @@
use format_bytes::format_bytes;
use hg::config::Config;
use hg::dirstate::entry::{has_exec_bit, TruncatedTimestamp};
-use hg::dirstate::status::StatusPath;
+use hg::dirstate::status::{
+ BadMatch, DirstateStatus, StatusError, StatusOptions, StatusPath
+};
use hg::errors::{HgError, IoResultExt};
use hg::filepatterns::parse_pattern_args;
use hg::lock::LockError;
@@ -29,11 +31,8 @@
get_bytes_from_os_str, get_bytes_from_os_string, get_path_from_bytes,
};
use hg::utils::hg_path::{hg_path_to_path_buf, HgPath};
-use hg::DirstateStatus;
use hg::PatternFileWarning;
use hg::Revision;
-use hg::StatusError;
-use hg::StatusOptions;
use hg::{self, narrow, sparse};
use log::info;
use rayon::prelude::*;
@@ -355,10 +354,10 @@
for (path, error) in take(&mut ds_status.bad) {
let error = match error {
- hg::BadMatch::OsError(code) => {
+ BadMatch::OsError(code) => {
std::io::Error::from_raw_os_error(code).to_string()
}
- hg::BadMatch::BadType(ty) => {
+ BadMatch::BadType(ty) => {
format!("unsupported file type (type is {})", ty)
}
};
--- a/rust/rhg/src/error.rs Mon Nov 04 11:07:05 2024 +0100
+++ b/rust/rhg/src/error.rs Mon Nov 04 11:13:05 2024 +0100
@@ -4,6 +4,7 @@
use format_bytes::format_bytes;
use hg::config::{ConfigError, ConfigParseError, ConfigValueParseError};
use hg::dirstate::on_disk::DirstateV2ParseError;
+use hg::dirstate::status::StatusError;
use hg::errors::HgError;
use hg::exit_codes;
use hg::repo::RepoError;
@@ -11,7 +12,7 @@
use hg::sparse::SparseConfigError;
use hg::utils::files::get_bytes_from_path;
use hg::utils::hg_path::HgPathError;
-use hg::{DirstateError, DirstateMapError, PatternError, StatusError};
+use hg::{DirstateError, DirstateMapError, PatternError};
use std::convert::From;
/// The kind of command error