view tests/test-censor2.t @ 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 ceeb8fa23cc8
children
line wrap: on
line source

  $ cat >> $HGRCPATH <<EOF
  > [censor]
  > policy=ignore
  > EOF

  $ mkdir r
  $ cd r
  $ hg init
  $ echo secret > target
  $ hg commit -Am "secret"
  adding target
  $ touch bystander
  $ hg commit -Am "innocent"
  adding bystander
  $ echo erased-secret > target
  $ hg commit -m "erased secret"
  $ hg censor target --config extensions.censor= -r ".^^"
  checking for the censored content in 1 heads
  checking for the censored content in the working directory
  censoring 1 file revisions
  $ hg update ".^"
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cat target
  $ hg update tip
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved