Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 30 Aug 2014 12:33:12 +0200] rev 22357
branchmap: pre-filter topological heads before ancestors based filtering
We know that topological heads will not be ancestors of anything, so we filter
them out to potentially reduce the range of the ancestors computation.
On a strongly headed repo this gives humble speedup:
from 0.1984 to 0.1629
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 30 Aug 2014 12:20:50 +0200] rev 22356
branchmap: issue a single call to `ancestors` for all heads
There is no reason to make multiple calls. This provides a massive speedup for
repo with a lot of heads.
On a strongly headed repo this gives humble speedup in simple case:
from 8.1097 to 5.1051
And massive speedup in other case:
from 7.8787 to 0.1984
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 30 Aug 2014 11:39:15 +0200] rev 22355
test-ancestor: add a test for `ancestor` with ancestry within the initset
I was wondering if revisions in the initial set that are still ancestors of other
elements in the initial set were yielded by `changelog.ancestors`. I now have my
answer (they do) and Mercurial has a new test.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 26 Aug 2014 12:47:41 +0200] rev 22354
bundle2: pull obsmarkers relevant to the pulled set through bundle2
We use the new `obsheads` argument to retrieve them in a bundle2 part at the
same time as the changegroup.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 29 Aug 2014 12:36:17 +0200] rev 22353
getbundle: add `obsmarkers` argument to getbundle
This argument triggers the retrieval of all markers relevant to the set of
changesets defined by the nodes in `heads`.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 29 Aug 2014 12:28:58 +0200] rev 22352
pull: use the "cg" argument when pulling a bundle2
We use the `cg` argument to disable the generation of a changegroup part. This
is useful to pull information when changesets are already in sync (phases,
obsmarkers).
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 29 Aug 2014 12:51:00 +0200] rev 22351
wireprotocol: fix 'boolean' handling
The encoding and decoding code were swapped. This is now fixed.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 20 Aug 2014 01:15:09 -0700] rev 22350
push: only push obsmarkers relevant to the "pushed subset"
We should only exchange obsolete markers related to the changesets
that are being exchanged. For example, if `A'` is a successor of `A`,
we do not want to push the marker if we are not exchanging
`A'`. Otherwise `A` would disappear without a successor, leading to confusion
for both users and the evolution mechanism.
Therefore we now exchange only the markers relevant to the subset of nodes
involved in the push (the nodes themselves may be already common but were
selected by --rev (or the lack of --rev)).
Note that all selected markers are still exchanged on each push. We do
not have a discovery protocol for markers in core yet. Such discovery
would save us the exchange of markers known on both side.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 20 Aug 2014 19:47:35 -0700] rev 22349
test-obsolete: sort the output of debugobsolete
The set of relevant markers is currently unordered. Therefore the
markers will be added in arbitrary order. We sort the list of markers
beforehand to ensure stable output for testing.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 20 Aug 2014 19:42:33 -0700] rev 22348
test-obsolete: change a marker so it is relevant to the exchanged set
We are going to only exchange markers relevant to the exchanged
changesets. So we need to change this marker to use a known changeset as
a successor instead of a precursor.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 19:44:27 +0200] rev 22347
push: use bundle2 to push obsmarkers when possible
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 19:32:51 +0200] rev 22346
exchange: add a `buildobsmarkerpart` function
We'll have to build an obsmarker part for both push and pull. So we build a
function to factor out the common part.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 26 Aug 2014 11:36:23 +0200] rev 22345
obsolete: add a `commonversion` function
This function returns the highest common version between the locally known
formats and a list of remotely known formats. This is going to be useful to
know what format should be used for exchange.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 26 Aug 2014 11:48:26 +0200] rev 22344
bundle2: add a `obsmarkersversion` function to extract supported version
Right next to the function that encodes the supported versions in
capabilities we add a function that decodes the versions out of capabilities.
This is going to be useful to know what formats can be used for exchange.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 21 Aug 2014 18:18:38 -0700] rev 22343
bundle2: advertise the obsmarker part in bundle2 capabilities
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 19:21:47 +0200] rev 22342
bundle2: introduce a `getrepocaps` to retrieve the bundle2 caps of a repo
This function lets extensions change the bundle2 capabilities of a repository.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 19:17:06 +0200] rev 22341
obsmarker: move bundle2caps from the localrepo class to the bundle2 module
The localrepo path was quicker, easier, more seductive. We'll soon add a
function in another changeset to alter the capabilities.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 18:35:39 +0200] rev 22340
obsmarker: produce a reply part for markers received through bundle2
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 18:26:56 +0200] rev 22339
obsmarker: record the number of new markers in the transaction
This lets hooks be notified about new markers in the repository.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 18:10:08 +0200] rev 22338
obssmarker: add a bundle2 record with the number of markers added
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 18:09:54 +0200] rev 22337
obsmarker: write a message with the number of markers added through bundle2
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 18:08:22 +0200] rev 22336
bundle2: add an obsmarkers part handler
This part contains a binary stream of obsolescence markers. Received markers are
added to the repository.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:24:40 +0200] rev 22335
obsolete: make encodemarkers a public function
We'll need access to it for bundle2.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:21:33 +0200] rev 22334
obsolete: move _encodemarkers next to _readmarkers
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:18:44 +0200] rev 22333
obsstore: store and preserve ondisk version
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:51:51 +0200] rev 22332
obsolete: have _readmarkers return the format version
readmarkers is not returning the version of the format it read from. This will
let callers know about the format and allow them to preserve it.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:16:01 +0200] rev 22331
obsolete: support for any known obsstore format when reading or writing
We can now read and write any known format. The list of known formats
currently has one element (0). The obsstore itself is not aware of
multiple formats yet and always uses format 0.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:09:18 +0200] rev 22330
obsolete: move _fm0encodeonemarker next to _fm0readmarkers
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 16:43:23 +0200] rev 22329
obsolete: rename _encodeonemarker to _fm0encodeonemarkers
This function encodes markers in version 0 of the format.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 25 Aug 2014 14:58:11 +0200] rev 22328
obsolete: extract the part of _readmarkers specific to format version 0
If we are to introduce new formats we need to be able call different
functions for different formats. Creating a function for format
version 0 is the first step.