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)
Create @ bookmark as main reference
$ hg init repo
$ cd repo
$ echo "[extensions]" >> $HGRCPATH
$ echo "patchbomb=" >> $HGRCPATH
$ hg book @
Create a dummy revision that must never be exported
$ echo no > no
$ hg ci -Amno -d '6 0'
adding no
Create a feature and use -B
$ hg book booktest
$ echo first > a
$ hg ci -Amfirst -d '7 0'
adding a
$ echo second > b
$ hg ci -Amsecond -d '8 0'
adding b
$ hg email --date '1981-1-1 0:1' -n -t foo -s bookmark -B booktest
From [test]: test
this patch series consists of 2 patches.
Write the introductory message for the patch series.
Cc:
displaying [PATCH 0 of 2] bookmark ...
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Subject: [PATCH 0 of 2] bookmark
Message-Id: <patchbomb.347155260@test-hostname>
User-Agent: Mercurial-patchbomb/* (glob)
Date: Thu, 01 Jan 1981 00:01:00 +0000
From: test
To: foo
displaying [PATCH 1 of 2] first ...
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Subject: [PATCH 1 of 2] first
X-Mercurial-Node: accde9b8b6dce861c185d0825c1affc09a79cb26
X-Mercurial-Series-Index: 1
X-Mercurial-Series-Total: 2
Message-Id: <accde9b8b6dce861c185.347155261@test-hostname>
X-Mercurial-Series-Id: <accde9b8b6dce861c185.347155261@test-hostname>
In-Reply-To: <patchbomb.347155260@test-hostname>
References: <patchbomb.347155260@test-hostname>
User-Agent: Mercurial-patchbomb/* (glob)
Date: Thu, 01 Jan 1981 00:01:01 +0000
From: test
To: foo
# HG changeset patch
# User test
# Date 7 0
# Thu Jan 01 00:00:07 1970 +0000
# Node ID accde9b8b6dce861c185d0825c1affc09a79cb26
# Parent 043bd3889e5aaf7d88fe3713cf425f782ad2fb71
first
diff -r 043bd3889e5a -r accde9b8b6dc a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/a Thu Jan 01 00:00:07 1970 +0000
@@ -0,0 +1,1 @@
+first
displaying [PATCH 2 of 2] second ...
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Subject: [PATCH 2 of 2] second
X-Mercurial-Node: 417defd1559c396ba06a44dce8dc1c2d2d653f3f
X-Mercurial-Series-Index: 2
X-Mercurial-Series-Total: 2
Message-Id: <417defd1559c396ba06a.347155262@test-hostname>
X-Mercurial-Series-Id: <accde9b8b6dce861c185.347155261@test-hostname>
In-Reply-To: <patchbomb.347155260@test-hostname>
References: <patchbomb.347155260@test-hostname>
User-Agent: Mercurial-patchbomb/* (glob)
Date: Thu, 01 Jan 1981 00:01:02 +0000
From: test
To: foo
# HG changeset patch
# User test
# Date 8 0
# Thu Jan 01 00:00:08 1970 +0000
# Node ID 417defd1559c396ba06a44dce8dc1c2d2d653f3f
# Parent accde9b8b6dce861c185d0825c1affc09a79cb26
second
diff -r accde9b8b6dc -r 417defd1559c b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/b Thu Jan 01 00:00:08 1970 +0000
@@ -0,0 +1,1 @@
+second
Do the same and combine with -o only one must be exported
$ cd ..
$ hg clone repo repo2
updating to bookmark @
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd repo
$ hg up @
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
(activating bookmark @)
$ hg book outgoing
$ echo 1 > x
$ hg ci -Am1 -d '8 0'
adding x
created new head
$ hg push ../repo2 -B outgoing
pushing to ../repo2
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
exporting bookmark outgoing
$ echo 2 > y
$ hg ci -Am2 -d '9 0'
adding y
$ hg email --date '1982-1-1 0:1' -n -t foo -s bookmark -B outgoing -o ../repo2
comparing with ../repo2
From [test]: test
this patch series consists of 1 patches.
Cc:
displaying [PATCH] bookmark ...
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Subject: [PATCH] bookmark
X-Mercurial-Node: 8dab2639fd35f1e337ad866c372a5c44f1064e3c
X-Mercurial-Series-Index: 1
X-Mercurial-Series-Total: 1
Message-Id: <8dab2639fd35f1e337ad.378691260@test-hostname>
X-Mercurial-Series-Id: <8dab2639fd35f1e337ad.378691260@test-hostname>
User-Agent: Mercurial-patchbomb/* (glob)
Date: Fri, 01 Jan 1982 00:01:00 +0000
From: test
To: foo
# HG changeset patch
# User test
# Date 9 0
# Thu Jan 01 00:00:09 1970 +0000
# Node ID 8dab2639fd35f1e337ad866c372a5c44f1064e3c
# Parent 0b24b8316483bf30bfc3e4d4168e922b169dbe66
2
diff -r 0b24b8316483 -r 8dab2639fd35 y
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/y Thu Jan 01 00:00:09 1970 +0000
@@ -0,0 +1,1 @@
+2