outgoing: add a simple fastpath when there is no common
This further speed up case like `hg bundle --all` for larger repository.
### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog
# benchmark.name = hg.command.bundle
# bin-env-vars.hg.flavor = default
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.revs = all
# benchmark.variants.type = none-streamv2
before: 316.749699
after: 311.165461 (-1.76%, -5.58)
There is further work to be done in this area like not doing any outgoing
computation in the stream case for example. however the recent changes already
gives use a large win for a small amount of local work.
### benchmark.name = hg.command.bundle
# bin-env-vars.hg.flavor = default
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.revs = all
# benchmark.variants.type = none-streamv2
## data-env-vars.name = mercurial-public-2024-03-22-zstd-sparse-revlog
pre-%ln-change: 1.263859
the-%ln-change: 0.700229 (-44.60%, -0.56)
prev-changeset: 0.496050 (-60.75%, -0.77)
this-changeset: 0.495243 (-60.81%, -0.77)
## data-env-vars.name = tryton-public-2024-03-22-zstd-sparse-revlog
pre-%ln-change: 2.975765
the-%ln-change: 1.870798 (-37.13%, -1.10)
prev-changeset: 1.461583 (-50.88%, -1.51)
this-changeset: 1.469185 (-50.63%, -1.51)
## data-env-vars.name = pypy-2024-03-22-zstd-sparse-revlog
pre-%ln-change: 4.540080
the-%ln-change: 3.401700 (-25.07%, -1.14)
prev-changeset: 2.915810 (-35.78%, -1.62)
this-changeset: 2.911643 (-35.87%, -1.63)
## data-env-vars.name = heptapod-public-2024-03-25-zstd-sparse-revlog
pre-%ln-change: 10.138396
the-%ln-change: 7.750458 (-23.55%, -2.39)
prev-changeset: 6.665565 (-34.25%, -3.47)
this-changeset: 6.672078 (-34.19%, -3.47)
## data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog
pre-%ln-change: 399.484481
the-%ln-change: 346.508952 (-13.26%, -52.98)
prev-changeset: 316.749699 (-20.71%, -82.73)
this-changeset: 311.165461 (-22.11%, -88.32)
===================================================================
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