// debug.rs // // Copyright 2024 Mercurial developers // // This software may be used and distributed according to the terms of the // GNU General Public License version 2 or any later version. //! Module for updating a repository. use cpython::{PyDict, PyModule, PyObject, PyResult, Python}; use hg::{ progress::{HgProgressBar, Progress}, update::update_from_null, BaseRevision, }; use crate::{ exceptions::FallbackError, utils::{hgerror_to_pyerr, repo_from_path, with_sigint_wrapper}, }; pub fn update_from_null_fast_path( py: Python, repo_path: PyObject, to: BaseRevision, num_cpus: Option, ) -> PyResult { log::trace!("Using update from null fastpath"); let repo = repo_from_path(py, repo_path)?; let progress: &dyn Progress = &HgProgressBar::new("updating"); let res = with_sigint_wrapper(py, || { update_from_null(&repo, to.into(), progress, num_cpus) })?; hgerror_to_pyerr(py, res) } pub fn init_module(py: Python, package: &str) -> PyResult { let dotted_name = &format!("{}.update", package); let m = PyModule::new(py, dotted_name)?; m.add(py, "__package__", package)?; m.add(py, "__doc__", "Rust module for updating a repository")?; m.add(py, "FallbackError", py.get_type::())?; m.add( py, "update_from_null", py_fn!( py, update_from_null_fast_path( repo_path: PyObject, to: BaseRevision, num_cpus: Option ) ), )?; let sys = PyModule::import(py, "sys")?; let sys_modules: PyDict = sys.get(py, "modules")?.extract(py)?; sys_modules.set_item(py, dotted_name, &m)?; Ok(m) }