comparison rust/hg-cpython/src/revlog.rs @ 52178:bd8081e9fd62

rust: don't star export from the `revlog` module This made a lot of the imports confusing because they didn't make sense at the top level (so, outside of `revlog`), and they hide the more common types when autocompleting.
author Rapha?l Gom?s <rgomes@octobus.net>
date Thu, 26 Sep 2024 14:26:24 +0200
parents 1032bb0ef365
children c2480ac4c5e2
comparison
equal deleted inserted replaced
52177:3d797007905d 52178:bd8081e9fd62
20 PythonObject, ToPyObject, UnsafePyLeaked, 20 PythonObject, ToPyObject, UnsafePyLeaked,
21 }; 21 };
22 use hg::{ 22 use hg::{
23 errors::HgError, 23 errors::HgError,
24 fncache::FnCache, 24 fncache::FnCache,
25 index::{Phase, RevisionDataParams, SnapshotsCache, INDEX_ENTRY_SIZE},
26 nodemap::{Block, NodeMapError, NodeTree as CoreNodeTree},
27 revlog::{ 25 revlog::{
28 compression::CompressionConfig, 26 compression::CompressionConfig,
27 index::{
28 Index, IndexHeader, Phase, RevisionDataParams, SnapshotsCache,
29 INDEX_ENTRY_SIZE,
30 },
29 inner_revlog::{InnerRevlog as CoreInnerRevlog, RevisionBuffer}, 31 inner_revlog::{InnerRevlog as CoreInnerRevlog, RevisionBuffer},
30 nodemap::NodeMap, 32 nodemap::{Block, NodeMap, NodeMapError, NodeTree as CoreNodeTree},
31 options::{ 33 options::{
32 RevlogDataConfig, RevlogDeltaConfig, RevlogFeatureConfig, 34 RevlogDataConfig, RevlogDeltaConfig, RevlogFeatureConfig,
33 RevlogOpenOptions, 35 RevlogOpenOptions,
34 }, 36 },
35 Graph, NodePrefix, RevlogError, RevlogIndex, 37 Graph, NodePrefix, RevlogError, RevlogIndex, RevlogType,
36 }, 38 },
37 transaction::Transaction, 39 transaction::Transaction,
38 utils::files::{get_bytes_from_path, get_path_from_bytes}, 40 utils::files::{get_bytes_from_path, get_path_from_bytes},
39 vfs::FnCacheVfs, 41 vfs::FnCacheVfs,
40 BaseRevision, Node, Revision, RevlogType, UncheckedRevision, 42 BaseRevision, Node, Revision, UncheckedRevision, NULL_REVISION,
41 NULL_REVISION,
42 }; 43 };
43 use std::{ 44 use std::{
44 cell::{Cell, RefCell}, 45 cell::{Cell, RefCell},
45 collections::{HashMap, HashSet}, 46 collections::{HashMap, HashSet},
46 sync::atomic::{AtomicBool, AtomicUsize, Ordering}, 47 sync::atomic::{AtomicBool, AtomicUsize, Ordering},
48 }; 49 };
49 use vcsgraph::graph::Graph as VCSGraph; 50 use vcsgraph::graph::Graph as VCSGraph;
50 51
51 pub struct PySharedIndex { 52 pub struct PySharedIndex {
52 /// The underlying hg-core index 53 /// The underlying hg-core index
53 pub(crate) inner: &'static hg::index::Index, 54 pub(crate) inner: &'static Index,
54 } 55 }
55 56
56 /// Return a Struct implementing the Graph trait 57 /// Return a Struct implementing the Graph trait
57 pub(crate) fn py_rust_index_to_graph( 58 pub(crate) fn py_rust_index_to_graph(
58 py: Python, 59 py: Python,
987 let path = path.extract::<PyBytes>(py)?; 988 let path = path.extract::<PyBytes>(py)?;
988 Some(get_path_from_bytes(path.data(py)).to_owned()) 989 Some(get_path_from_bytes(path.data(py)).to_owned())
989 }, 990 },
990 None => None, 991 None => None,
991 }; 992 };
992 let header = hg::index::IndexHeader::parse(&header.to_be_bytes()); 993 let header = IndexHeader::parse(&header.to_be_bytes());
993 let header = header.expect("invalid header bytes"); 994 let header = header.expect("invalid header bytes");
994 let path = inner 995 let path = inner
995 .split_inline(header, new_index_file_path) 996 .split_inline(header, new_index_file_path)
996 .map_err(|e| revlog_error_from_msg(py, e))?; 997 .map_err(|e| revlog_error_from_msg(py, e))?;
997 Ok(PyBytes::new(py, &get_bytes_from_path(path))) 998 Ok(PyBytes::new(py, &get_bytes_from_path(path)))
1730 .into_object()) 1731 .into_object())
1731 } 1732 }
1732 } 1733 }
1733 1734
1734 fn check_revision( 1735 fn check_revision(
1735 index: &hg::index::Index, 1736 index: &Index,
1736 rev: UncheckedRevision, 1737 rev: UncheckedRevision,
1737 py: Python, 1738 py: Python,
1738 ) -> PyResult<Revision> { 1739 ) -> PyResult<Revision> {
1739 index 1740 index
1740 .check_revision(rev) 1741 .check_revision(rev)
1997 feature_config, 1998 feature_config,
1998 ); 1999 );
1999 2000
2000 // Safety: we keep the buffer around inside the class as `index_mmap` 2001 // Safety: we keep the buffer around inside the class as `index_mmap`
2001 let (buf, bytes) = unsafe { mmap_keeparound(py, index_data)? }; 2002 let (buf, bytes) = unsafe { mmap_keeparound(py, index_data)? };
2002 let index = hg::index::Index::new(bytes, options.index_header()) 2003 let index = Index::new(bytes, options.index_header())
2003 .map_err(|e| revlog_error_from_msg(py, e))?; 2004 .map_err(|e| revlog_error_from_msg(py, e))?;
2004 2005
2005 let base = &vfs_base.extract::<PyBytes>(py)?; 2006 let base = &vfs_base.extract::<PyBytes>(py)?;
2006 let base = get_path_from_bytes(base.data(py)).to_owned(); 2007 let base = get_path_from_bytes(base.data(py)).to_owned();
2007 let core = CoreInnerRevlog::new( 2008 let core = CoreInnerRevlog::new(