Mercurial > hg
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)?, |