Mercurial > hg
view tests/test-absorb-unfinished.t @ 46089:8ff2d8359d0f
persistent-nodemap: properly ignore non-existent `.nd` data file
This code was meant to handle the case of a nodemap docket file
pointing to a nodemap data file that doesn’t exist (anymore),
but most likely caused an `UnboundLocalError` exception instead
when `data` was used on the next line without being defined.
This case is theoretically possible with a race condition
between two hg processes, but is hard to reproduce or test:
* Process A reads a docket file and finds a UID in it
that points to a given data file name.
* Process B decides that this same data file needs compacting.
It writes a new one with a different UID,
overwrites the docket file,
then removes the old data file.
* Only then process A tries to a open a file that doesn’t exist anymore.
Differential Revision: https://phab.mercurial-scm.org/D9533
author | Simon Sapin <simon-commits@exyr.org> |
---|---|
date | Mon, 07 Dec 2020 18:06:53 +0100 |
parents | 527ce85c2e60 |
children |
line wrap: on
line source
$ cat >> $HGRCPATH << EOF > [extensions] > absorb= > EOF Abort absorb if there is an unfinished operation. $ hg init abortunresolved $ cd abortunresolved $ echo "foo1" > foo.whole $ hg commit -Aqm "foo 1" $ hg update null 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo "foo2" > foo.whole $ hg commit -Aqm "foo 2" $ hg --config extensions.rebase= rebase -r 1 -d 0 rebasing 1:c3b6dc0e177a tip "foo 2" merging foo.whole warning: conflicts while merging foo.whole! (edit, then use 'hg resolve --mark') unresolved conflicts (see 'hg resolve', then 'hg rebase --continue') [240] $ hg --config extensions.rebase= absorb abort: rebase in progress (use 'hg rebase --continue', 'hg rebase --abort', or 'hg rebase --stop') [20]