Mercurial > public > mercurial-scm > hg
annotate rust/hg-cpython/src/update.rs @ 52696:10e7adbffa8c
streamclone: unbyteify string args to builtin Error classes
This avoids printing the error with a `b''` prefix in the case of `ValueError`.
The custom `ProgrammingError` class is special in that it won't do that, and can
take either bytes or str. But there's no point in passing bytes when it is just
going to decode to str at runtime anyway.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 13 Jan 2025 00:40:48 -0500 |
parents | 96b113d22b34 |
children |
rev | line source |
---|---|
52056
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
1 // debug.rs |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
2 // |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
3 // Copyright 2024 Mercurial developers |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
4 // |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
5 // This software may be used and distributed according to the terms of the |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
6 // GNU General Public License version 2 or any later version. |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
7 |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
8 //! Module for updating a repository. |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
9 use cpython::{PyDict, PyModule, PyObject, PyResult, Python}; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
10 use hg::{ |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
11 progress::{HgProgressBar, Progress}, |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
12 update::update_from_null, |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
13 BaseRevision, |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
14 }; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
15 |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
16 use crate::{ |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
17 exceptions::FallbackError, |
52213
96b113d22b34
rust-update: handle SIGINT from long-running update threads
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52186
diff
changeset
|
18 utils::{hgerror_to_pyerr, repo_from_path, with_sigint_wrapper}, |
52056
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
19 }; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
20 |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
21 pub fn update_from_null_fast_path( |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
22 py: Python, |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
23 repo_path: PyObject, |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
24 to: BaseRevision, |
52186
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52056
diff
changeset
|
25 num_cpus: Option<usize>, |
52056
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
26 ) -> PyResult<usize> { |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
27 log::trace!("Using update from null fastpath"); |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
28 let repo = repo_from_path(py, repo_path)?; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
29 let progress: &dyn Progress = &HgProgressBar::new("updating"); |
52213
96b113d22b34
rust-update: handle SIGINT from long-running update threads
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52186
diff
changeset
|
30 |
96b113d22b34
rust-update: handle SIGINT from long-running update threads
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52186
diff
changeset
|
31 let res = with_sigint_wrapper(py, || { |
96b113d22b34
rust-update: handle SIGINT from long-running update threads
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52186
diff
changeset
|
32 update_from_null(&repo, to.into(), progress, num_cpus) |
96b113d22b34
rust-update: handle SIGINT from long-running update threads
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52186
diff
changeset
|
33 })?; |
96b113d22b34
rust-update: handle SIGINT from long-running update threads
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52186
diff
changeset
|
34 |
96b113d22b34
rust-update: handle SIGINT from long-running update threads
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52186
diff
changeset
|
35 hgerror_to_pyerr(py, res) |
52056
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
36 } |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
37 |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
38 pub fn init_module(py: Python, package: &str) -> PyResult<PyModule> { |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
39 let dotted_name = &format!("{}.update", package); |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
40 let m = PyModule::new(py, dotted_name)?; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
41 |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
42 m.add(py, "__package__", package)?; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
43 m.add(py, "__doc__", "Rust module for updating a repository")?; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
44 m.add(py, "FallbackError", py.get_type::<FallbackError>())?; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
45 m.add( |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
46 py, |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
47 "update_from_null", |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
48 py_fn!( |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
49 py, |
52186
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52056
diff
changeset
|
50 update_from_null_fast_path( |
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52056
diff
changeset
|
51 repo_path: PyObject, |
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52056
diff
changeset
|
52 to: BaseRevision, |
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52056
diff
changeset
|
53 num_cpus: Option<usize> |
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52056
diff
changeset
|
54 ) |
52056
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
55 ), |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
56 )?; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
57 |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
58 let sys = PyModule::import(py, "sys")?; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
59 let sys_modules: PyDict = sys.get(py, "modules")?.extract(py)?; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
60 sys_modules.set_item(py, dotted_name, &m)?; |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
61 |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
62 Ok(m) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
63 } |