comparison rust/hg-cpython/src/dirstate/dirstate_map.rs @ 47332:4ee9f419c52e

rust: Return owned instead of borrowed DirstateEntry in DirstateMap APIs This will enable the tree-based DirstateMap to not always have an actual DirstateEntry in memory for all nodes, but construct it on demand. Differential Revision: https://phab.mercurial-scm.org/D10746
author Simon Sapin <simon.sapin@octobus.net>
date Wed, 19 May 2021 13:15:00 +0200
parents 1766130fe9ba
children ed1583a845d2
comparison
equal deleted inserted replaced
47331:0252600fd1cf 47332:4ee9f419c52e
90 default: Option<PyObject> = None 90 default: Option<PyObject> = None
91 ) -> PyResult<Option<PyObject>> { 91 ) -> PyResult<Option<PyObject>> {
92 let key = key.extract::<PyBytes>(py)?; 92 let key = key.extract::<PyBytes>(py)?;
93 match self.inner(py).borrow().get(HgPath::new(key.data(py))) { 93 match self.inner(py).borrow().get(HgPath::new(key.data(py))) {
94 Some(entry) => { 94 Some(entry) => {
95 Ok(Some(make_dirstate_tuple(py, entry)?)) 95 Ok(Some(make_dirstate_tuple(py, &entry)?))
96 }, 96 },
97 None => Ok(default) 97 None => Ok(default)
98 } 98 }
99 } 99 }
100 100
346 def __getitem__(&self, key: PyObject) -> PyResult<PyObject> { 346 def __getitem__(&self, key: PyObject) -> PyResult<PyObject> {
347 let key = key.extract::<PyBytes>(py)?; 347 let key = key.extract::<PyBytes>(py)?;
348 let key = HgPath::new(key.data(py)); 348 let key = HgPath::new(key.data(py));
349 match self.inner(py).borrow().get(key) { 349 match self.inner(py).borrow().get(key) {
350 Some(entry) => { 350 Some(entry) => {
351 Ok(make_dirstate_tuple(py, entry)?) 351 Ok(make_dirstate_tuple(py, &entry)?)
352 }, 352 },
353 None => Err(PyErr::new::<exc::KeyError, _>( 353 None => Err(PyErr::new::<exc::KeyError, _>(
354 py, 354 py,
355 String::from_utf8_lossy(key.as_bytes()), 355 String::from_utf8_lossy(key.as_bytes()),
356 )), 356 )),
523 ) -> RefMut<'a, Box<dyn DirstateMapMethods + Send>> { 523 ) -> RefMut<'a, Box<dyn DirstateMapMethods + Send>> {
524 self.inner(py).borrow_mut() 524 self.inner(py).borrow_mut()
525 } 525 }
526 fn translate_key( 526 fn translate_key(
527 py: Python, 527 py: Python,
528 res: (&HgPath, &DirstateEntry), 528 res: (&HgPath, DirstateEntry),
529 ) -> PyResult<Option<PyBytes>> { 529 ) -> PyResult<Option<PyBytes>> {
530 Ok(Some(PyBytes::new(py, res.0.as_bytes()))) 530 Ok(Some(PyBytes::new(py, res.0.as_bytes())))
531 } 531 }
532 fn translate_key_value( 532 fn translate_key_value(
533 py: Python, 533 py: Python,
534 res: (&HgPath, &DirstateEntry), 534 res: (&HgPath, DirstateEntry),
535 ) -> PyResult<Option<(PyBytes, PyObject)>> { 535 ) -> PyResult<Option<(PyBytes, PyObject)>> {
536 let (f, entry) = res; 536 let (f, entry) = res;
537 Ok(Some(( 537 Ok(Some((
538 PyBytes::new(py, f.as_bytes()), 538 PyBytes::new(py, f.as_bytes()),
539 make_dirstate_tuple(py, &entry)?, 539 make_dirstate_tuple(py, &entry)?,