Mercurial > hg
view pyproject.toml @ 52217:96b113d22b34 stable
rust-update: handle SIGINT from long-running update threads
The current code does not respond to ^C until after the Rust bit is finished
doing its work. This is expected, since Rust holds the GIL for the duration
of the call and does not call `PyErr_CheckSignals`. Freeing the GIL to do our
work does not really improve anything since the Rust threads are still going,
and the only way of cancelling a thread is by making it cooperate.
So we do the following:
- remember the SIGINT handler in hg-cpython and reset it after the call
into core (see inline comment in `update.rs` about this)
- make all update threads watch for a global `AtomicBool` being `true`,
and if so stop their work
- reset the global bool and exit early (i.e. before writing the dirstate)
- raise SIGINT from `hg-cpython` if update returns `InterruptReceived`
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Tue, 12 Nov 2024 12:52:13 +0100 |
parents | d4b275587847 |
children |
line wrap: on
line source
[build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" [project] name = "mercurial" authors = [ {name = "Olivia Mackall and many others", email = "mercurial@mercurial-scm.org"}, ] description="Fast scalable distributed SCM (revision control, version control) system" readme = "README.rst" requires-python = ">=3.8" license={text = "GNU GPLv2 or any later version"} classifiers=[ "Development Status :: 6 - Mature", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU General Public License (GPL)", "Natural Language :: Danish", "Natural Language :: English", "Natural Language :: German", "Natural Language :: Italian", "Natural Language :: Japanese", "Natural Language :: Portuguese (Brazilian)", "Operating System :: Microsoft :: Windows", "Operating System :: OS Independent", "Operating System :: POSIX", "Programming Language :: C", "Programming Language :: Python", "Topic :: Software Development :: Version Control", ] dynamic = ["version"] [project.urls] home = "https://mercurial-scm.org/" download_url = "https://mercurial-scm.org/release/" [tool.black] line-length = 80 exclude = ''' build/ | wheelhouse/ | dist/ | packages/ | \.hg/ | \.mypy_cache/ | \.venv/ | mercurial/thirdparty/ ''' skip-string-normalization = true quiet = true