Mercurial > hg
view tests/test-narrow-merge-outside.t @ 50195:11e6eee4b063
transaction: use the standard transaction mechanism to backup branch
Branch is a bit special :
- It currently does not collaborate with the transaction (or any scoping) for
writing (this is bad)
- It can change without the lock being taken (it is protected by `wlock`)
So we rely on the same mechanism as for the backup of the other dirstate file:
- we only do a backup if we hold the wlock
- we force a backup though the transaction
Since "branch" write does not collaborate with the transaction, we cannot back
it up "at the last minute" as we do for the dirstate. We have to back it up
"upfront". Since we have a backup, the transaction is no longer doing its
"quick_abort" and get noisy. Which is quite annoying. To work around this, and
to avoid jumping in yet-another-rabbit-hole of "getting branch written
properly", I am doing horrible things to the transaction in the meantime.
We should be able to get this code go away during the next cycle.
In the meantime, I prefer to take this small stop so that we stop abusing the
"journal" and "undo" mechanism instead of the proper backup mechanism of the
transaction.
Also note that this change regress the warning message for the legacy fallback
introduced in 2008 when issue902 got fixed in dd5a501cb97f (Mercurial 1.0).
I feel like this is fine as issue 902 remains fixed, and this would only affect
people deploying a mix of 15 year old Mercurial and modern mercurial, and using
branch and rollback extensively.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 23 Feb 2023 15:37:46 +0100 |
parents | 18e69f224e4b |
children |
line wrap: on
line source
=================================================================== Test merge behavior with narrow for item outside of the narrow spec =================================================================== This test currently check for simple "outside of narrow" merge case. I suspect there might be more corner case that need testing, so extending this tests, or replacing it by a more "generative" version, comparing behavior with and without narow. This the feature is currently working with flat manifest only. This is the only case tested. Consider using test-case if tree start supporting this case of merge. Create some initial setup $ . "$TESTDIR/narrow-library.sh" $ hg init server $ echo root > server/root $ mkdir server/inside $ mkdir server/outside $ echo babar > server/inside/inside-change $ echo pom > server/outside/outside-changing $ echo arthur > server/outside/outside-removed $ hg -R server add server/ adding server/inside/inside-change adding server/outside/outside-changing adding server/outside/outside-removed adding server/root $ hg -R server commit -m root $ hg clone ssh://user@dummy/server client --narrow --include inside requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets a0c415d360e5 updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved "trivial" change outside of narrow spec on the server $ echo zephir > server/outside/outside-added $ hg -R server add server/outside/outside-added $ echo flore > server/outside/outside-changing $ hg -R server remove server/outside/outside-removed $ hg -R server commit -m "outside change" Merge them with some unrelated local change $ echo celeste > client/inside/inside-change $ hg -R client commit -m "inside change" $ hg -R client pull pulling from ssh://user@dummy/server searching for changes adding changesets adding manifests adding file changes added 1 changesets with 0 changes to 0 files (+1 heads) new changesets f9ec5453023e (run 'hg heads' to see heads, 'hg merge' to merge) $ hg -R client merge 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg -R client ci -m 'merge changes' $ hg -R client push -r . pushing to ssh://user@dummy/server searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 2 changesets with 1 changes to 1 files Checking result --------------- general sentry of all output $ hg --repository server manifest --debug --rev 0 360afd990eeff79e4a7f9f3ded5ecd7bc2fd3b59 644 inside/inside-change 7db95ce5cd8e734ad12e3f5f37779a08070a1399 644 outside/outside-changing 1591f6db41a30b68bd94ddccf4a4ce4f4fbe2a44 644 outside/outside-removed 50ecbc31c0e82dd60c2747c434d1f11b85c0e178 644 root $ hg --repository server manifest --debug --rev 1 360afd990eeff79e4a7f9f3ded5ecd7bc2fd3b59 644 inside/inside-change 486c008d6dddcaeb5e5f99556a121800cdcfb149 644 outside/outside-added 153d7af5e4f53f44475bc0ff2b806c86f019eda4 644 outside/outside-changing 50ecbc31c0e82dd60c2747c434d1f11b85c0e178 644 root $ hg --repository server manifest --debug --rev 2 1b3ab69c6c847abc8fd25537241fedcd4d188668 644 inside/inside-change 7db95ce5cd8e734ad12e3f5f37779a08070a1399 644 outside/outside-changing 1591f6db41a30b68bd94ddccf4a4ce4f4fbe2a44 644 outside/outside-removed 50ecbc31c0e82dd60c2747c434d1f11b85c0e178 644 root $ hg --repository server manifest --debug --rev 3 1b3ab69c6c847abc8fd25537241fedcd4d188668 644 inside/inside-change 486c008d6dddcaeb5e5f99556a121800cdcfb149 644 outside/outside-added 153d7af5e4f53f44475bc0ff2b806c86f019eda4 644 outside/outside-changing 50ecbc31c0e82dd60c2747c434d1f11b85c0e178 644 root The file changed outside should be changed by the merge $ hg --repository server manifest --debug --rev 'desc("inside change")' | grep outside-changing 7db95ce5cd8e734ad12e3f5f37779a08070a1399 644 outside/outside-changing $ hg --repository server manifest --debug --rev 'desc("outside change")' | grep outside-changing 153d7af5e4f53f44475bc0ff2b806c86f019eda4 644 outside/outside-changing $ hg --repository server manifest --debug --rev 'desc("merge")' | grep outside-changing 153d7af5e4f53f44475bc0ff2b806c86f019eda4 644 outside/outside-changing