--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hg-cpython/src/update.rs Tue Oct 01 13:49:11 2024 +0200
@@ -0,0 +1,53 @@
+// 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},
+};
+
+pub fn update_from_null_fast_path(
+ py: Python,
+ repo_path: PyObject,
+ to: BaseRevision,
+) -> PyResult<usize> {
+ log::trace!("Using update from null fastpath");
+ let repo = repo_from_path(py, repo_path)?;
+ let progress: &dyn Progress = &HgProgressBar::new("updating");
+ hgerror_to_pyerr(py, update_from_null(&repo, to.into(), progress))
+}
+
+pub fn init_module(py: Python, package: &str) -> PyResult<PyModule> {
+ 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::<FallbackError>())?;
+ m.add(
+ py,
+ "update_from_null",
+ py_fn!(
+ py,
+ update_from_null_fast_path(repo_path: PyObject, to: BaseRevision,)
+ ),
+ )?;
+
+ 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)
+}