Mercurial > hg
view tests/test-hooklib-reject_new_heads.t @ 48454:473af5cbc209
rhg: Add support for `rhg status --copies`
Copy sources are collected during `status()` rather than after the fact like
in Python, because `status()` takes a `&mut` exclusive reference to the dirstate map
(in order to potentially mutate it for directory mtimes) and returns `Cow<'_, HgPath>`
that borrow the dirstate map.
Even though with `Cow` only some shared borrows remain, the still extend the same
lifetime of the initial `&mut` so the dirstate map cannot be borrowed again
to access copy sources after the fact:
https://doc.rust-lang.org/nomicon/lifetime-mismatch.html#limits-of-lifetimes
Additionally, collecting copy sources during the dirstate tree traversal that
`status()` already does avoids the cost of another traversal or other lookups
(though I haven’t benchmarked that cost).
Differential Revision: https://phab.mercurial-scm.org/D11899
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Fri, 10 Dec 2021 16:18:58 +0100 |
parents | 4cabeea6d214 |
children |
line wrap: on
line source
$ cat <<EOF >> $HGRCPATH > [extensions] > hooklib = > > [phases] > publish = False > EOF $ hg init a $ hg --cwd a debugbuilddag '.:parent.*parent' $ hg --cwd a log -G o changeset: 2:fa942426a6fd | tag: tip | parent: 0:1ea73414a91b | user: debugbuilddag | date: Thu Jan 01 00:00:02 1970 +0000 | summary: r2 | | o changeset: 1:66f7d451a68b |/ user: debugbuilddag | date: Thu Jan 01 00:00:01 1970 +0000 | summary: r1 | o changeset: 0:1ea73414a91b tag: parent user: debugbuilddag date: Thu Jan 01 00:00:00 1970 +0000 summary: r0 $ hg init b $ cat <<EOF >> b/.hg/hgrc > [hooks] > pretxnclose.reject_new_heads = \ > python:hgext.hooklib.reject_new_heads.hook > EOF $ hg --cwd b pull ../a pulling from ../a requesting all changes adding changesets adding manifests adding file changes error: pretxnclose.reject_new_heads hook failed: Changes on branch 'default' resulted in multiple heads transaction abort! rollback completed abort: Changes on branch 'default' resulted in multiple heads [255] $ hg --cwd b pull ../a -r 1ea73414a91b pulling from ../a adding changesets adding manifests adding file changes added 1 changesets with 0 changes to 0 files new changesets 1ea73414a91b (1 drafts) (run 'hg update' to get a working copy)