rust/hg-cpython/src/dirstate/dirstate_map.rs
changeset 47521 abed645b8e96
parent 47518 f6f25ab6bfc8
child 47524 69a463a4f193
equal deleted inserted replaced
47520:5decb7a49bb6 47521:abed645b8e96
    26     dirstate::owning::OwningDirstateMap,
    26     dirstate::owning::OwningDirstateMap,
    27     parsers::dirstate_parents_to_pytuple,
    27     parsers::dirstate_parents_to_pytuple,
    28 };
    28 };
    29 use hg::{
    29 use hg::{
    30     dirstate::parsers::Timestamp,
    30     dirstate::parsers::Timestamp,
       
    31     dirstate::MTIME_UNSET,
       
    32     dirstate::SIZE_NON_NORMAL,
    31     dirstate_tree::dispatch::DirstateMapMethods,
    33     dirstate_tree::dispatch::DirstateMapMethods,
    32     dirstate_tree::on_disk::DirstateV2ParseError,
    34     dirstate_tree::on_disk::DirstateV2ParseError,
    33     errors::HgError,
    35     errors::HgError,
    34     revlog::Node,
    36     revlog::Node,
    35     utils::files::normalize_case,
    37     utils::files::normalize_case,
   108         f: PyObject,
   110         f: PyObject,
   109         oldstate: PyObject,
   111         oldstate: PyObject,
   110         state: PyObject,
   112         state: PyObject,
   111         mode: PyObject,
   113         mode: PyObject,
   112         size: PyObject,
   114         size: PyObject,
   113         mtime: PyObject
   115         mtime: PyObject,
       
   116         from_p2: PyObject,
       
   117         possibly_dirty: PyObject,
   114     ) -> PyResult<PyObject> {
   118     ) -> PyResult<PyObject> {
   115         let f = f.extract::<PyBytes>(py)?;
   119         let f = f.extract::<PyBytes>(py)?;
   116         let filename = HgPath::new(f.data(py));
   120         let filename = HgPath::new(f.data(py));
   117         let oldstate = oldstate.extract::<PyBytes>(py)?.data(py)[0]
   121         let oldstate = oldstate.extract::<PyBytes>(py)?.data(py)[0]
   118             .try_into()
   122             .try_into()
   123             .try_into()
   127             .try_into()
   124             .map_err(|e: HgError| {
   128             .map_err(|e: HgError| {
   125                 PyErr::new::<exc::ValueError, _>(py, e.to_string())
   129                 PyErr::new::<exc::ValueError, _>(py, e.to_string())
   126             })?;
   130             })?;
   127         let mode = mode.extract(py)?;
   131         let mode = mode.extract(py)?;
   128         let size = size.extract(py)?;
   132         let size = if size.is_none(py) {
   129         let mtime = mtime.extract(py)?;
   133             // fallback default value
       
   134             SIZE_NON_NORMAL
       
   135         } else {
       
   136             size.extract(py)?
       
   137         };
       
   138         let mtime = if mtime.is_none(py) {
       
   139             // fallback default value
       
   140             MTIME_UNSET
       
   141         } else {
       
   142             mtime.extract(py)?
       
   143         };
   130         let entry = DirstateEntry {
   144         let entry = DirstateEntry {
   131             state: state,
   145             state: state,
   132             mode: mode,
   146             mode: mode,
   133             size: size,
   147             size: size,
   134             mtime: mtime,
   148             mtime: mtime,
   135         };
   149         };
       
   150         let from_p2 = from_p2.extract::<PyBool>(py)?.is_true();
       
   151         let possibly_dirty = possibly_dirty.extract::<PyBool>(py)?.is_true();
   136         self.inner(py).borrow_mut().add_file(
   152         self.inner(py).borrow_mut().add_file(
   137             filename,
   153             filename,
   138             oldstate,
   154             oldstate,
   139             entry,
   155             entry,
       
   156             from_p2,
       
   157             possibly_dirty
   140         ).and(Ok(py.None())).or_else(|e: DirstateError| {
   158         ).and(Ok(py.None())).or_else(|e: DirstateError| {
   141             Err(PyErr::new::<exc::ValueError, _>(py, e.to_string()))
   159             Err(PyErr::new::<exc::ValueError, _>(py, e.to_string()))
   142         })
   160         })
   143     }
   161     }
   144 
   162