Eric Sumner <ericsumner@fb.com> [Thu, 15 Jan 2015 16:51:13 -0800] rev 23898
repair: add experimental option to write bundle2 files
This adds an experimental option 'strip-bundle2-version' which causes backup
bundles to use bundle2 formatting. Especially for generaldelta repositories,
this should provide significant performance gains for any operation that needs
to write a backup.
Eric Sumner <ericsumner@fb.com> [Thu, 15 Jan 2015 15:55:13 -0800] rev 23897
changegroup.getsubset: support multiple versions
Allow a version parameter to specify which version of the packer should be
used
Eric Sumner <ericsumner@fb.com> [Thu, 15 Jan 2015 15:39:16 -0800] rev 23896
changegroup.writebundle: HG2Y support
This diff adds support to writebundle to generate a bundle2 wrapper; upcoming
diffs will add an option to write a v2 changegroup part instead of v1 in these
bundles.
Eric Sumner <ericsumner@fb.com> [Thu, 15 Jan 2015 14:39:41 -0800] rev 23895
changegroup.writebundle: provide ui
The next diff will add support for writing bundle2 files to writebundle, but
the bundle2 generator wants access to a ui object. This changes the signature
and callsites to pass one in.
Matt Mackall <mpm@selenic.com> [Fri, 16 Jan 2015 16:25:30 -0800] rev 23894
test-module-imports: use test-repo requirement
Mads Kiilerich <madski@unity3d.com> [Fri, 09 Jan 2015 19:10:09 +0100] rev 23893
largefiles: don't rehash largefiles in updatelfiles if standin hash changed
Standins are read before and after an update/merge, and all the standins that
changes are handed to updatelfiles for getting their corresponding largefiles
updated. updatelfiles would then hash the largefile and see if it already
matched the new expected hash. If so, it would skip the update. If different,
the largefile would be updated.
It would happen very rarely that the largefile happened to match the new hash
(and thus not the old one) and the hashing would thus be pointless ... and
hashing is not cheap.
Instead, when it is known that the standin hash changed (from an update), just
update the standin unconditionally. If the largefile was "unsure" before the
update, it was hashed at that point, so we know there is nothing to preserve.
(Also, the hashing in updatelfiles was not used to preserve changes, but only
to be lazy about updating the largefile, so nothing is lost by not doing this
extra hashing.)
There might be rare situations where we now will update largefiles that didn't
have to be updated, but in all relevant cases (?) this will improve
performance.
Updates on a repo with some big largefiles has been seen to go from 9.19 s to
6.8 s - that is 26% less painful.
Mads Kiilerich <madski@unity3d.com> [Fri, 16 Jan 2015 19:51:25 +0100] rev 23892
largefiles: show progress when checking standin hashes in outgoing changesets
This checking can take a huge amount of time and we should give user a hint
that something is going on.
Eric Sumner <ericsumner@fb.com> [Wed, 14 Jan 2015 17:09:55 -0800] rev 23891
unbundle: support bundle2 files
This adds support for bundle2 files to the unbundle command.
Eric Sumner <ericsumner@fb.com> [Fri, 16 Jan 2015 12:53:45 -0800] rev 23890
pullbundle2: extract addchangegroup result combining into its own function
This will also be used for 'hg unbundle'
Augie Fackler <raf@durin42.com> [Fri, 16 Jan 2015 15:31:45 -0500] rev 23889
histedit: add a test to show that
issue4251 is fixed (
issue4251)
This will help us not regress this case in the future.
Eric Sumner <ericsumner@fb.com> [Thu, 15 Jan 2015 15:35:26 -0800] rev 23888
commands.debugbundle: bundle2 support
This enables debugbundle to print supporting info for bundle2 files.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 12 Jan 2015 22:30:12 -0500] rev 23887
largefiles: cleanup overrideadd()
This was a remnant of the code prior to overridding cmdutil.add().
Matt Harbison <matt_harbison@yahoo.com> [Mon, 12 Jan 2015 21:44:43 -0500] rev 23886
largefiles: enable subrepo support for add
The --large, --normal and --lfsize args couldn't be passed to a subrepo before,
and files in the subrepos would be added silently (if -v wasn't specified) as
normal files. As an added bonus, 'hg add --dry-run' no longer prints that
largefiles would also be added as normal files as well.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 12 Jan 2015 20:59:17 -0500] rev 23885
add: pass options via keyword args
The largefiles extensions needs to be able to pass --large, --normal and
--lfsize to subrepos via cmdutil.add() and hgsubrepo.add(). Rather than add
additional special purpose arguments, stop extracting the existing args from the
**opts passed to commands.add() and just pass them along.
Matt Harbison <matt_harbison@yahoo.com> [Wed, 31 Dec 2014 18:24:32 -0500] rev 23884
largefiles: don't pop largefile-specific arguments to the add command
The arguments will need to stay present when making add work with subrepos.
Angel Ezquerra <angel.ezquerra@gmail.com> [Sun, 11 Jan 2015 16:20:15 +0100] rev 23883
share: replace the bookmarks.shared file with an entry on a new "shared" file
cd79fb4d75fd introduced a way to share bookmarks. When a repository share that
shares bookmarks was created, a .hg/bookmarks.shared file was created to mark
the repository share as one that shares its bookmarks.
We have plans to introduce other levels of sharing, including a "full share"
mode. Rather than creating a new ".shared" file for each new thing that we may
want to share It seems better to create a single "shared" file that will list
what is shared for a given shared repository. This should make it much easier
to get a list of everything that is shared by a given shared repository.
The shared file contains a list of shared "items" (such as bookmarks). Each
shared "item" is added as a new line in the file. For now the only possible
entry in the file is "bookmarks".
Mads Kiilerich <madski@unity3d.com> [Sun, 02 Nov 2014 02:36:47 +0100] rev 23882
docker: support Fedora 21
Mads Kiilerich <madski@unity3d.com> [Fri, 16 Jan 2015 04:26:40 +0100] rev 23881
rpm: make Python 2.7.9 the default Python to include in rpms for EL 5
Use the new and more TLS support in Python 2.7.9.
Mads Kiilerich <madski@unity3d.com> [Fri, 16 Jan 2015 04:26:25 +0100] rev 23880
contrib: make Python 2.7.9 the default in Makefile.python
We should utilize (and test) the big API changes and new TLS functionality in
Python 2.7.9 whenever possible.
Angel Ezquerra <angel.ezquerra@gmail.com> [Sun, 11 Jan 2015 01:51:52 +0100] rev 23879
localrepo: remove all external users of localrepo.wopener
This change touches every module in which repository.wopener was being used, and
changes it for the equivalent repository.wvfs.
It should now be possible to remove localrepo.wopener.
Angel Ezquerra <angel.ezquerra@gmail.com> [Sun, 11 Jan 2015 00:25:54 +0100] rev 23878
localrepo: remove all external users of localrepo.sopener
This change touches every module in which repository.sopener was being used, and
changes it for the equivalent repository.svfs.
It should now be possible to remove localrepo.sopener.
Angel Ezquerra <angel.ezquerra@gmail.com> [Thu, 15 Jan 2015 23:17:12 +0100] rev 23877
localrepo: remove all external users of localrepo.opener
This change touches every module in which repository.opener was being used, and
changes it for the equivalent repository.vfs. This is meant to make it easier
to split the repository.vfs into several separate vfs.
It should now be possible to remove localrepo.opener.
Sean Farley <sean.michael.farley@gmail.com> [Wed, 14 Jan 2015 20:29:47 -0800] rev 23876
log: use namespace logname and colorname
Now that we have the machinary to change the log name and the color label used,
let's use that. Tests have been updated accordingly.
Sean Farley <sean.michael.farley@gmail.com> [Wed, 14 Jan 2015 20:11:02 -0800] rev 23875
namespaces: add colorname member to namespace object
Previously, there was no way to change the color label used for 'hg log'
output. This patch just adds the member to the object, a future patch will
change 'hg log' to use this.
Sean Farley <sean.michael.farley@gmail.com> [Wed, 14 Jan 2015 20:06:44 -0800] rev 23874
namespaces: add logname member to namespace object
Previously, there was no way to change the name used for 'hg log' output. This
was inconvenient for extensions that want a template name longer than 12
characters (e.g. remotebookmarks) but a different name for 'hg log'.
This patch only adds the member to the object, a future patch will update the
'hg log' code.
Sean Farley <sean.michael.farley@gmail.com> [Wed, 14 Jan 2015 19:55:20 -0800] rev 23873
namespaces: use named args for namespace api
This is just a style change but makes adding new arguments more robust for
callers.
Sean Farley <sean.michael.farley@gmail.com> [Wed, 14 Jan 2015 19:39:13 -0800] rev 23872
namespaces: make the constructor into named args
None of the arguments are truly optional but this makes adding future arguments
more robust and perhaps optional.
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 15 Jan 2015 20:36:03 -0800] rev 23871
dispatch: only check compatibility against major and minor versions (BC)
Extensions can declare compatibility with Mercurial versions. If an
error occurs, Mercurial will attempt to pin blame on an extension that
isn't marked as compatible.
While all bets are off when it comes to the internal API, my experience
has shown that a monthly/patch release of Mercurial has never broken any
of the extensions I've written. I think that expecting extensions to
declare compatibility with every patch release of Mercurial is asking a
bit much and adds little to no value.
This patch changes the blame logic from exact version matching to only
match on the major and minor Mercurial versions. This means that
extensions only need to mark themselves as compatible with the major,
quarterly releases and not the monthly ones in order to stay current and
avoid what is almost certainly unfair blame. This will mean less work
for extension authors and almost certainly fewer false positives in the
blame attribution.
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 15 Jan 2015 20:03:48 -0800] rev 23870
test-extension: use a realistic Mercurial version
Mercurial doesn't define the 3rd "patch" version field for major
releases. Don't use it in tests.
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 15 Jan 2015 19:47:06 -0800] rev 23869
test-extension: improve test readability
There was a mountain of text in this file that made reading the tests
difficult. Inserting some line breaks greatly improves the situation.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 18 Dec 2014 19:14:01 -0800] rev 23868
bundle2: enforce parttype as alphanumerical
The binary format description has always stated that the parttype should be simple,
but it was never really enforced. Recent discussions have convinced me we want to
keep the part type simple and easy to debug. There is enough extensibility in
the rest of the format.
Matt Harbison <matt_harbison@yahoo.com> [Wed, 14 Jan 2015 22:40:39 -0500] rev 23867
tests: conditionalize test-tools.t for Windows support
I still get the following diff on Windows 7 with NTFS. I'm not sure if it is
expected and we should wildcard the link count, or if something needs to be
fixed.
@@ -58,7 +58,7 @@
$ ln bar baz
$ f bar -n baz -l --hexdump -t --sha1 --lines=9 -B 20
- bar: file, links=2, newer than baz, sha1=
612ca68d0305c821750a
+ bar: file, links=0, newer than baz, sha1=
612ca68d0305c821750a\r (esc)
0000: 31 0a 32 0a 33 0a 34 0a 35 0a 36 0a 37 0a 38 0a |1.2.3.4.5.6.7.8.|
0010: 39 0a |9.|
Mads Kiilerich <madski@unity3d.com> [Wed, 14 Jan 2015 01:15:26 +0100] rev 23866
dirstate: ignore negative debug.dirstate.delaywrite values - they crashed it
Sleep can only travel forward in time, not back.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 14 Jan 2015 17:21:09 -0800] rev 23865
linkrev: use the right manifest content when adjusting linrev (
issue4499)
When the manifest revision is stored as a delta against a non-parent revision,
'_adjustlinkrev' could miss some file update because it was using the delta
only. We now use the 'fastread' method that uses the delta only when it makes
sense.
A test showcasing on the of possible issue have been added.
Matt Mackall <mpm@selenic.com> [Wed, 14 Jan 2015 16:57:00 -0800] rev 23864
unpacker: fix missing arg for py2.4
Mads Kiilerich <madski@unity3d.com> [Wed, 14 Jan 2015 01:15:26 +0100] rev 23863
branchcache: make _rbcrevslen handling more safe
self._rbcrevslen is used to keep track of the number of good records on disk.
It should thus not be updated before the records actually have been written to
disk.
Mads Kiilerich <madski@unity3d.com> [Wed, 14 Jan 2015 01:15:26 +0100] rev 23862
branchcache: add debug output whenever cache files use truncate
The cache files are usually append only but will automatically be truncated and
recover in exceptional situations. Add a debug notice when such exceptional
situations are encountered.
Mads Kiilerich <madski@unity3d.com> [Wed, 14 Jan 2015 01:15:26 +0100] rev 23861
tests: rework revision branch cache tests
The tests that were added with the revision branch cache in
678f53865c68 had
suffered from bit rot in the development iterations. They were no longer that
"good".
Now, the tests are rewritten and reworked to be more readable and maintainable
and relevant for the actual implementation.
This also utilizes the new 'f' helper tool for keeping an eye the cache files.
Mads Kiilerich <madski@unity3d.com> [Wed, 14 Jan 2015 01:15:26 +0100] rev 23860
tests: add 'f' tool for cross platform file operations in the tests
This tool is like the collection of tools found in a unix environment but are
cross platform and stable and suitable for our needs in the test suite.
The main reason it is "needed" now is for hexdump of revision branch cache to
keep an eye on how it changes and make sure the format is stable.
It is a very generic tool that can end up being used a lot in tests, so I gave
it very generic name.
Mads Kiilerich <madski@unity3d.com> [Wed, 14 Jan 2015 01:15:26 +0100] rev 23859
run-tests: include testdir in $PATH so tests easily can use helper tools
The testdir is already added to $PYTHONPATH - I think it makes sense and is
convenient to add it to $PATH too.
The following binaries are invoked from tests using full path with $TESTDIR/ -
they can now be used without specifying path:
dumbhttp.py
dummyssh
filterpyflakes.py
generate-working-copy-states.py
get-with-headers.py
hghave
histedit-helpers.sh
killdaemons.py
md5sum.py
notcapable
printenv.py
readlink.py
revlog-formatv0.py
run-tests.py
svn-safe-append.py
svnxml.py
tinyproxy.py
Mike Edgar <adgar@google.com> [Mon, 12 Jan 2015 15:29:36 -0500] rev 23858
filelog: use censored revlog flag bit to quickly check if a node is censored
Mike Edgar <adgar@google.com> [Mon, 12 Jan 2015 14:41:25 -0500] rev 23857
revlog: verify censored flag when hashing added revision fulltext
When receiving a delta via exchange, three possible storage outcomes emerge:
1. The delta is added directly to the revlog. ("fast-path")
2. A freshly-computed delta with a different base is stored.
3. The new revision's fulltext is computed and stored outright.
Both (2) and (3) require materializing the full text of the new revision by
applying the delta to its base. This is typically followed by a hash check.
The new flags argument allows callers to _addrevision to signal that they
expect that hash check to fail. We can use this opportunity to verify that
expectation. If the hash fails, require the flag be set; if the hash passes,
require the flag be unset.
Rather than simply eliding the hash check, this approach provides some
assurance that the censored flag is not applied to valid revisions.
Read more at: http://mercurial.selenic.com/wiki/CensorPlan
Mike Edgar <adgar@google.com> [Mon, 12 Jan 2015 14:30:24 -0500] rev 23856
revlog: add flags argument to _addrevision, update callers use default flags
For revlog index flags to be useful to other parts of Mercurial, they need to
be settable when writing revisions. The current use case for revlog index
flags is the censorship feature: http://mercurial.selenic.com/wiki/CensorPlan
While the censor flag could be inferred in _addrevision by interrogating the
text/delta being added, that would bury the censorship logic and
inappropriately couple it to all revision creation.
Mike Edgar <adgar@google.com> [Mon, 12 Jan 2015 14:01:52 -0500] rev 23855
revlog: define censored flag for revlogng index
This flag bit will be used to cheaply signal censorship presence to upper
layers (exchange, verify). It indicates that censorship metadata is present
but does not attest to the verifiability of that metadata.
For the censorship design, see: http://mercurial.selenic.com/wiki/CensorPlan
Angel Ezquerra <angel.ezquerra@gmail.com> [Sun, 11 Jan 2015 01:32:36 +0100] rev 23854
localrepo: remove all internal uses of localrepo.wopener
It has been replaced with localrepo.wvfs.
Angel Ezquerra <angel.ezquerra@gmail.com> [Sun, 11 Jan 2015 00:21:58 +0100] rev 23853
localrepo: remove all internal uses of localrepo.sopener
It has been replaced with localrepo.svfs.
Angel Ezquerra <angel.ezquerra@gmail.com> [Sat, 10 Jan 2015 23:02:52 +0100] rev 23852
localrepo: remove all internal uses of localrepo.opener
It has been replaced with localrepo.vfs. In the future we may split the vfs into
different vfs objects to access different elements of the repository.
Augie Fackler <augie@google.com> [Wed, 14 Jan 2015 15:46:21 -0500] rev 23851
sslutil: drop defunct ssl version constants
Nobody outside sslutil should be using these constants anyway.
Augie Fackler <augie@google.com> [Wed, 14 Jan 2015 15:46:00 -0500] rev 23850
sslutil: use saner TLS settings on Python 2.7.9
Asking for TLSv1 locks us out of TLSv1_2 etc. This is at least less
bad. Ideally we'd use ssl.create_default_context(), but that causes
more mayhem in the testsuite than I really want to deal with right
now.
Augie Fackler <augie@google.com> [Wed, 14 Jan 2015 15:31:16 -0500] rev 23849
sslutil: drop support for clients of sslutil specifying a TLS version
We really just want to support the newest thing possible, so we may as
well consolidate that knowledge into this module. Right now this
doesn't change any behavior, but a future change will fix the defaults
for Python 2.7.9 so we can use slightly better defaults there (which
is the only place it's possible at the moment.)
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 Jan 2015 00:07:29 -0800] rev 23848
discovery: run discovery on filtered repository
We have been running discovery on unfiltered repository for quite some time.
This was aimed at two things:
- save some bandwith by prevent the repushing of common but hidden changesets
- allow phases changes on secret/hidden changeset on bare push.
The cost of this unfiltered discovery combined with evolution is actually really
high. Evolution likely create thousand of hidden heads, and the discovery is
going to try to discovery if each of them are common or not. For example,
pushing from my development mercurial repository implies 17 discovery
round-trip.
The benefit are rare corner cases while the drawback are massive. So we run the
discovery on a filtered repository again.
We add some hack to detect remote heads that are known locally and adds them to
the common set anyway, so the good behavior of most of the corner case should
remains. But this will not work in all cases.
This bring my discovery phase back from 17 round-trips to 1 or 2.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 10 Jan 2015 23:18:11 +0900] rev 23847
revset: check for collisions between alias argument names in the declaration
Before this patch, collisions between alias argument names in the
declaration are ignored, and this silently causes unexpected alias
evaluation.
This patch checks for such collisions, and aborts (or shows a warning) when
collisions are detected.
This patch doesn't add a test to "test-revset.t", because a doctest is
enough to test the collisions detection itself.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 10 Jan 2015 23:18:11 +0900] rev 23846
revset: parse alias declaration strictly by _parsealiasdecl
Before this patch, alias declaration is parsed by string base
operations: matching against "^([^(]+)\(([^)]+)\)$" and splitting by
",".
This overlooks many syntax errors like below (see the previous patch
introducing "_parsealiasdecl" for detail):
- un-closed parenthesis causes being treated as "alias symbol"
- symbol/function name aren't examined whether they are valid or not
- invalid argument list causes unexpected argument names
To parse alias declaration strictly, this patch replaces parsing
implementation by "_parsealiasdecl".
This patch tests only one typical declaration error case, because
error detection itself is already tested in the doctest of
"_parsealiasdecl".
This also removes class property "args" and "error", because these are
certainly initialized in "revsetalias.__init__".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 10 Jan 2015 23:18:11 +0900] rev 23845
revset: introduce "_parsealiasdecl" to parse alias declarations strictly
This patch introduces "_parsealiasdecl" to parse alias declarations
strictly. For example, "_parsealiasdecl" can detect problems below,
which current implementation can't.
- un-closed parenthesis causes being treated as "alias symbol"
because all of declarations not in "func(....)" style are
recognized as "alias symbol".
for example, "foo($1, $2" is treated as the alias symbol.
- alias symbol/function names aren't examined whether they are valid
as symbol or not
for example, "foo bar" can be treated as the alias symbol, but of
course such invalid symbol can't be referred in revset.
- just splitting argument list by "," causes overlooking syntax
problems in the declaration
for example, all of invalid declarations below are overlooked:
- foo("bar") => taking one argument named as '"bar"'
- foo("unclosed) => taking one argument named as '"unclosed'
- foo(bar::baz) => taking one argument named as 'bar::baz'
- foo(bar($1)) => taking one argument named as 'bar($1)'
To decrease complication of patch, current implementation for alias
declarations is replaced by "_parsealiasdecl" in the subsequent
patch. This patch just introduces it.
This patch defines "_parsealiasdecl" not as a method of "revsetalias"
class but as a one of "revset" module, because of ease of testing by
doctest.
This patch factors some helper functions for "tree" out, because:
- direct accessing like "if tree[0] == 'func' and len(tree) > 1"
decreases readability
- subsequent patch (and also existing code paths, in the future) can
use them for readability
This patch also factors "_tokenizealias" out, because it can be used
also for parsing alias definitions strictly.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 10 Jan 2015 23:18:11 +0900] rev 23844
revset: store full detail into revsetalias.error for error source distinction
Before this patch, any errors in the declaration of revset alias
aren't detected at all, and there is no information about error source
in the error message.
As a part of preparation for parsing alias declarations and
definitions more strictly, this patch stores full detail into
"revsetalias.error" for error source distinction.
This makes raising "Abort" and warning potential errors just use
"revsetalias.error" without any message composing.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 10 Jan 2015 23:18:11 +0900] rev 23843
revset: factor out composing error message for ParseError to reuse
This patch defines the composing function not in "ParseError" class but
in "revset" module, because:
- "_()" shouldn't be used in "ParseError", to avoid adding "from
i18n import _" i18n" to "error" module
- generalizing message composition of"ParseError" for all code paths
other than revset isn't the purpose of this patch
we should also take care of showing "unexpected leading
whitespace" for some code paths, to generalize widely.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 10 Jan 2015 23:18:11 +0900] rev 23842
revset: make tokenize extensible to parse alias declarations and definitions
Before this patch, "tokenize" doesn't recognize the symbol starting
with "$" as a valid one.
This prevents revset alias declarations and definitions from being
parsed with "tokenize", because "$" may be used as the initial letter
of alias arguments.
BTW, the alias argument name doesn't require leading "$" itself, in
fact. But we have to assume that users may use "$" as the initial
letter of argument names in their aliases, because examples in "hg
help revsets" uses such names for a long time.
To make "tokenize" extensible to parse alias declarations and
definitions, this patch introduces optional arguments "syminitletters"
and "symletters". Giving these sets can change the policy of "valid
symbol" in tokenization easily.
This patch keeps original examination of letter validity for
reviewability, even though there is redundant interchanging between
"chr"/"ord" at initialization of "_syminitletters" and "_symletters".
At most 256 times examination (per initialization) is cheaper enough
than revset evaluation itself.
This patch is a part of preparation for parsing alias declarations and
definitions more strictly.
Mads Kiilerich <madski@unity3d.com> [Fri, 09 Jan 2015 18:38:02 +0100] rev 23841
largefiles: make linear update set unsure largefiles normal if unchanged
'hg update' would hash all 'unsure' largefiles before performing the merge. It
would update the standins but not detect the very common case where the
largefile never had been changed by the user but just had been marked with an
invalid dirstate mtime to make sure any changes done by the user in the same
second would be detected. The largefile would remain in that state and would
have to be hashed again next time even though it still not had been changed.
Sad trombone.
Instead, for largefiles listed as 'unsure' or 'modified', after updating the
standin with the actual hash, mark the largefile as normal if it turns out to
not be modified relative to the revision in the parent revision. That will
prevent it from being hashed again next time.
Mads Kiilerich <madski@unity3d.com> [Fri, 09 Jan 2015 18:38:02 +0100] rev 23840
debugdirstate: don't hide date field with --nodate, just show 'set'/'unset'
The value of the dirstate date field cannot be used in tests and we thus have
to use debugdirstate with --nodate. It is however still very helpful to be able
to see whether the date field has been set or still is unset. The absence of
that information made it hard to debug some largefile dirstate issues.
This change _could_ make the test suite more unstable ... but that would be
places where the test suite or the code should be made more stable. (Note:
'unset' with the magic negative sizes is reliable. 'unset' for normal sizes
would probably not be reliable, but there is no such occurrences in the test
suite and it should thus be reliable.)
This output wastes more horizontal space in the --nodate output, but it also
makes things simpler that the output format always is the same. It is just a
debug command so let's keep it simple.
Mads Kiilerich <madski@unity3d.com> [Fri, 09 Jan 2015 18:38:02 +0100] rev 23839
debugdirstate: simplify date handling after
e7ed5d07cc4c used fixed format
Matt Harbison <matt_harbison@yahoo.com> [Sun, 11 Jan 2015 23:25:23 -0500] rev 23838
forget: don't report rejected files as forgotten as well
It seems like a mistake to report a file as forgotten and rejected. The
forgotten list doesn't seem to be used by anything in core, so no test changes.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 11 Jan 2015 23:20:51 -0500] rev 23837
largefiles: enable subrepo support for forget
Sean Farley <sean.michael.farley@gmail.com> [Tue, 13 Jan 2015 15:07:08 -0800] rev 23836
namespaces: add revset for 'named(namespace)'
This patch adds functionality for listing all changesets in a given namespace
via the revset language.
Durham Goode <durham@fb.com> [Fri, 09 Jan 2015 10:52:14 -0800] rev 23835
bundles: do not overwrite existing backup bundles (BC)
Previously, a backup bundle could overwrite an existing bundle and cause user
data loss. For instance, if you have A<-B<-C and strip B, it produces backup
bundle B-backup.hg. If you then hg pull -r B B-backup.hg and strip it again, it
overwrites the existing B-backup.hg and C is lost.
The fix is to add a hash of all the nodes inside that bundle to the filename.
Fixed up existing tests and added a new test in test-strip.t
Alex Orange <crazycasta@gmail.com> [Mon, 12 Jan 2015 18:01:20 -0700] rev 23834
https: support tls sni (server name indication) for https urls (
issue3090)
SNI is a common way of sharing servers across multiple domains using separate
SSL certificates. As of Python 2.7.9 SSLContext has been backported from
Python 3. This patch changes sslutil's ssl_wrap_socket to use SSLContext and
take a server hostname as and argument. It also changes the url module to make
use of this argument.
The new code for 2.7.9 achieves it's task by attempting to get the SSLContext
object from the ssl module. If this fails the try/except goes back to what was
there before with the exception that the ssl_wrap_socket functions take a
server_hostname argument that doesn't get used. Assuming the SSLContext
exists, the arguments to wrap_socket at the module level are emulated on the
SSLContext. The SSLContext is initialized with the specified ssl_version. If
certfile is not None load_cert_chain is called with certfile and keyfile.
keyfile being None is not a problem, load_cert_chain will simply expect the
private key to be in the certificate file. verify_mode is set to cert_reqs. If
ca_certs is not None load_verify_locations is called with ca_certs as the
cafile. Finally the wrap_socket method of the SSLContext is called with the
socket and server hostname.
Finally, this fails test-check-commit-hg.t because the "new" function
ssl_wrap_socket has underscores in its names and underscores in its arguments.
All the underscore identifiers are taken from the other functions and as such
can't be changed to match naming conventions.
Matt Mackall <mpm@selenic.com> [Wed, 14 Jan 2015 12:50:46 -0800] rev 23833
merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 13 Jan 2015 16:15:02 -0800] rev 23832
unpacker: check the right exception type for 2.4
Anton Shestakov <engored@ya.ru> [Sat, 10 Jan 2015 18:00:57 +0800] rev 23831
hgweb: fix diffstat links in paper/changeset.tmpl
'<a .../>foo</a>' syntax is incorrect, since the first tag just "tries" to
close itself and then the actual content follows. It doesn't work, either
because web browsers know better than this or because there should be a
whitespace before /: '<a />'. So for the hgweb users the links looked
normal anyway, but now they are correct in code as well.
Anton Shestakov <engored@ya.ru> [Sat, 10 Jan 2015 17:54:24 +0800] rev 23830
hgweb: close <img> elements
Templates declare xhtml doctype, which means, in particular, that the document
must also be valid xml. So <img> elements must be closed.
Anton Shestakov <engored@ya.ru> [Sat, 10 Jan 2015 17:52:02 +0800] rev 23829
hgweb: close <p> elements
<p> elements can only contain inline elements, so as soon as browser encounters
a block element (e.g. block <div>) "inside" a <p>, it puts an implicit </p>.
It's better to do this explicitly.
Anton Shestakov <engored@ya.ru> [Sat, 10 Jan 2015 17:44:54 +0800] rev 23828
hgweb: close <th> properly in spartan/filelogentry.tmpl
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jan 2015 21:36:42 +0900] rev 23827
revset: simplify fullreposet.__and__ to call sort() with boolean flag
Note that sort() takes a boolean flag, so other.sort(reverse) was wrong.
It just worked fine because there is a top-level function, reverse().
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jan 2015 21:31:59 +0900] rev 23826
revset: fix spanset.isascending() to honor sort() or reverse() request
Because spanset.isascending() ignored the ascending flag, the result of
"fullreposet() & x" was always sorted in ascending order.
The test case is carefully chosen to call fullreposet.__and__.
Augie Fackler <augie@google.com> [Tue, 13 Jan 2015 15:08:55 -0500] rev 23825
hghave: we now support Python 2.7.9's ssl for https
Augie Fackler <augie@google.com> [Tue, 13 Jan 2015 14:15:08 -0500] rev 23824
Makefile.python: try curl if wget fails
Macs ship with curl and not wget, so this is a nice little tweak for
folks testing on OS X.
Augie Fackler <augie@google.com> [Tue, 13 Jan 2015 15:15:37 -0500] rev 23823
test-https: glob error messages more so we pass on Python 2.7.9
Python 2.7.9 cleans up how it stringifies SSL errors, so we have to look only
for the important bit (certificate verify failed) rather than looking for
specific ssl module goop (which is now unstable).
Martin von Zweigbergk <martinvonz@google.com> [Mon, 12 Jan 2015 09:46:56 -0800] rev 23822
filelog: fix backwards comment for 'backrevref'
Martin von Zweigbergk <martinvonz@google.com> [Mon, 12 Jan 2015 09:49:25 -0800] rev 23821
filelog: remove trailing "form feed" character
Martin von Zweigbergk <martinvonz@google.com> [Mon, 12 Jan 2015 09:48:05 -0800] rev 23820
filelog: remove unused variable 'lkr'
It's used further down, but it's overwritten before, so it's
technically a dead assignment, but unnecessary nevertheless.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 10 Jan 2015 12:00:03 -0500] rev 23819
branchmap: add seek() to end of file before calling tell() on append open()
This is similar to
48c232873a54, which was subsequently modified in
19f5dec2d61f
for 2.4. Unexpected test changes on Windows occurred without this.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 09 Jan 2015 22:14:01 -0500] rev 23818
tests: fix test-casefolding.t output for branchcache
This belongs with
7d63398fbfd1. I assume that the failure to read is OK,
because there is similar output in test-convert-svn-encoding.t.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 06 Jan 2015 17:19:21 -0800] rev 23817
setdiscovery: remove '_setupsample' function
It is now unused.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 Jan 2015 20:44:20 -0800] rev 23816
setdiscovery: document '_takequicksample'
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 06 Jan 2015 17:07:44 -0800] rev 23815
setdiscovery: drop '_setupsample' usage in '_takequicksample'
For '_takefullsample' we can just retrieve the list of head directly and
ignore the rest of the complex return values. This was the last call to the
infamous '_updatesample' function.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 Jan 2015 10:32:17 -0800] rev 23814
setdiscovery: drop the 'always' argument to '_updatesample'
This argument exists because of the complex code flow in '_takequicksample'. It
first gets the list of heads and then calls '_updatesample' on an empty initial
sample and a size limit matching the differences between the number of heads and
the target sample size. Finally the heads and the sample from '_updatesample'
were added. To ensure this addition result had the exact target length, the code
had to ensure no elements from the heads were added to the '_updatesample'
content and therefore was passing this "always included set of heads".
Instead we can just update the initial heads sample directly and use the final
target size as target size for the update.
This removes the need for this 'always' parameter to the '_updatesample' function
The test are affected because different set building order results in different
random sampling.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 Jan 2015 17:28:51 -0800] rev 23813
setdiscovery: always add exponential sample to the heads
As explained in a previous changeset, prioritizing heads too much behaves
pathologically when there are more heads than the sample size. To counter this,
we always inject exponential samples before reducing to the sample size limit.
This already show some benefit in the test themselves, but on a real-world example
this moves my discovery for push to pathologically headed repo from 45 rounds to
17 of them.
We should maybe ensure that at least 25% of the result sample is heads, but I
think the random sampling will be fine in practice.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 Jan 2015 17:23:21 -0800] rev 23812
setdiscovery: directly run '_updatesample'
The heads and exponential sample are going to end up in the same set
before any extra processing happens. We simplify the code by directly
updating a set with heads.
Changes in the order the set is built lead to small changes in the random
sampling output. But after double checking, I can confirm the input data to
the random sampling is consistent.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 Jan 2015 17:17:56 -0800] rev 23811
setdiscovery: stop using '_setupsample' in '_takefullsample'
Very few of the return values of '_setupsample' remain in use, so we
directly retrieve the value we care about and drop the '_setupsample'
call.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 Jan 2015 12:09:51 -0800] rev 23810
setdiscovery: randomly pick between heads and sample when taking full sample
Before this changeset, the discovery protocol was too heads-centric. Heads of the
undiscovered set were always sent for discovery and any room remaining in the
sample were filled with exponential samples (and random ones if any room
remained).
This behaved extremely poorly when the number of heads exceeded the sample size,
because we keep just asking about the existence of heads, then their direct parent
and so on. As a result, the 'O(log(len(repo)))' discovery turns into a
'O(len(repo))' one. As a solution we take a random sample of the heads plus
exponential samples. This way we ensure some exponential sampling is achieved,
bringing back some logarithmic convergence of the discovery again.
This patch only applies this principle in one place. More places will be updated
in future patches.
One test is impacted because the random sample happen to be different. By
chance, it helps a bit in this case.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 06 Jan 2015 17:02:32 -0800] rev 23809
setdiscovery: document the '_updatesample' function
This function is central in the sample building process, having it documented
help code readability a lot.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 06 Jan 2015 16:40:33 -0800] rev 23808
setdiscovery: avoid calling any sample building if the undecided set is small
If the length of undecided is smaller than the sample size, we can just request
information for all of them.
This conditional was previously handled by '_setupsample'. But '_setupsample' is
in my opinion a problematic function with blurry semantics. Having this
conditional explicitly earlier makes the code more explicit and moves us closer
to removing this '_setupsample' function.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 Jan 2015 09:30:06 -0800] rev 23807
setdiscovery: delay sample building calls to gather them in a single place
Some of the logic around sample building is duplicated in the sample builders,
it would clean up thing to extract it in the top function, but this requires
all codes to be in the same place.
This changeset mostly exists to make the next one more clear.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 06 Jan 2015 16:32:23 -0800] rev 23806
setdiscovery: drop unused 'initial' argument for '_takequicksample'
There is a single call site, and it is always using 'initial=True'. So we just drop
the argument and the associated condition.
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 16:46:13 -0600] rev 23805
readmarkers: add a SHA256 fixme note
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 16:37:57 -0600] rev 23804
readmarkers: fast-path single successors and parents
This gives about a 5% performance bump.
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 15:35:09 -0600] rev 23803
readmarkers: promote global constants to locals for performance
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 14:52:57 -0600] rev 23802
readmarkers: drop a temporary
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 14:51:49 -0600] rev 23801
readmarkers: read node reading into node length conditional
This removes some conditional assignments
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 14:46:55 -0600] rev 23800
readmarkers: drop a temporary
Two other temporaries are renamed to fit line-length.
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 14:44:57 -0600] rev 23799
readmarkers: hoist subtraction out of loop comparison
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 14:43:31 -0600] rev 23798
readmarkers: streamline offset tracking
This minimizes the number of assignments and operations needed to use offsets.
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 14:37:50 -0600] rev 23797
readmarkers: use unpacker for fixed header
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 14:35:03 -0600] rev 23796
readmarkers: drop metadata temporary
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 14:33:49 -0600] rev 23795
readmarkers: drop date temporary
Matt Mackall <mpm@selenic.com> [Sun, 11 Jan 2015 14:32:56 -0600] rev 23794
readmarkers: drop another conditional
Matt Mackall <mpm@selenic.com> [Sat, 10 Jan 2015 21:28:15 -0600] rev 23793
readmarkers: drop a conditional
Matt Mackall <mpm@selenic.com> [Sat, 10 Jan 2015 21:27:29 -0600] rev 23792
readmarkers: add some whitespace
Matt Mackall <mpm@selenic.com> [Sat, 10 Jan 2015 21:25:07 -0600] rev 23791
readmarkers: combine parent conditionals
Matt Mackall <mpm@selenic.com> [Sat, 10 Jan 2015 21:24:45 -0600] rev 23790
readmarkers: drop temporary substring assignments
Assignments are expensive in inner loops
Matt Mackall <mpm@selenic.com> [Sat, 10 Jan 2015 21:18:31 -0600] rev 23789
util: introduce unpacker
This allows taking advantage of Python 2.5+'s struct.Struct, which
provides a slightly faster unpack due to reusing formats. Sadly,
.unpack_from is significantly slower.
Matt Mackall <mpm@selenic.com> [Sat, 10 Jan 2015 21:13:10 -0600] rev 23788
perf: add a configurable sleep on startup
This is intended to counteract power management by giving a consistent
idle period before test runs.
Mads Kiilerich <madski@unity3d.com> [Thu, 08 Jan 2015 00:01:03 +0100] rev 23787
revset: use localrepo revbranchcache for branch name filtering
Branch name filtering in revsets was expensive. For every rev it created a
changectx and called .branch() which retrieved the branch name from the
changelog.
Instead, use the revbranchcache.
The revbranchcache is used read-only. The revset implementation with generators
and callbacks makes it hard to figure out when we are done using/updating the
cache and could write it back. It would also be 'tricky' to lock the repo for
writing from within a revset execution. Finally, the branchmap update will
usually make sure that the cache is updated before any revset can be run.
The revbranchcache is used without any locking but is short-lived and used in a
tight loop where we can assume that the changelog doesn't change ... or where
it not is relevant to us if it does.
perfrevset 'branch(mobile)' on mozilla-central.
Before:
! wall 10.989637 comb 10.970000 user 10.940000 sys 0.030000 (best of 3)
After, no cache:
! wall 7.368656 comb 7.370000 user 7.360000 sys 0.010000 (best of 3)
After, with cache:
! wall 0.528098 comb 0.530000 user 0.530000 sys 0.000000 (best of 18)
The performance improvement even without cache come from being based on
branchinfo on the changelog instead of using ctx.branch().
Some tests are added to verify that the revbranchcache works and keep an eye on
when the cache files actually are updated.
Mads Kiilerich <madski@unity3d.com> [Thu, 08 Jan 2015 00:01:03 +0100] rev 23786
branchmap: use revbranchcache when updating branch map
The revbranchcache is read on demand before it will be used for updating the
branch map. It is written back when the branchmap is written and it will thus
use the same locking as branchmap. The revbranchcache instance is short-lived;
it is only stored in the branchmap from .update() is invoked and until .write()
is invoked. Branchmap already assume that the repo is locked in that case.
The use of revbranchcache for branch map updates will make sure that the
revbranchcache "always" is kept up-to-date.
The perfbranchmap benchmark is somewhat bogus, especially when we can see that
the caching makes a significant difference between the realistic case of a
first run and the rare case of rerunning it with a full cache. Here are some
'base' numbers on mozilla-central:
Before:
! wall 6.912745 comb 6.910000 user 6.840000 sys 0.070000 (best of 3)
After - initial, cache is empty:
! wall 7.792569 comb 7.790000 user 7.720000 sys 0.070000 (best of 3)
After - cache is full:
! wall 0.879688 comb 0.880000 user 0.870000 sys 0.010000 (best of 4)
The overhead when running with empty cache comes from checking, missing and
updating it every time.
Most of the performance improvement comes from not having to extract the branch
info from the changelog. The last doubling of performance comes from no longer
having to convert all branch names to local encoding but reuse the few already
converted branch names.
On the hg repo:
Before:
! wall 0.715703 comb 0.710000 user 0.710000 sys 0.000000 (best of 14)
After:
! wall 0.105489 comb 0.110000 user 0.110000 sys 0.000000 (best of 87)
Mads Kiilerich <madski@unity3d.com> [Thu, 08 Jan 2015 00:01:03 +0100] rev 23785
branchcache: introduce revbranchcache for caching of revision branch names
It is expensive to retrieve the branch name of a revision. Very expensive when
creating a changectx and calling .branch() every time - slightly less when
using changelog.branchinfo().
Now, to speed things up, provide a way to cache the results on disk in an
efficient format. Each branchname is assigned a number, and for each revision
we store the number of the corresponding branch name. The branch names are
stored in a dedicated file which is strictly append only.
Branch names are usually reused across several revisions, and the total list of
branch names will thus be so small that it is feasible to read the whole set of
names before using the cache. It will however do that it might be more
efficient to use the changelog for retrieving the branch info for a single
revision.
The revision entries are stored in another file. This file is usually append
only, but if the repository has been modified, the file will be truncated and
the relevant parts rewritten on demand.
The entries for each revision are 8 bytes each, and the whole revision file
will thus be 1/8 of 00changelog.i.
Each revision entry contains the first 4 bytes of the corresponding node hash.
This is used as a check sum that always is verified before the entry is used.
That check is relatively expensive but it makes sure history modification is
detected and handled correctly. It will also detect and handle most revision
file corruptions.
This is just a cache. A new format can always be introduced if other
requirements or ideas make that seem like a good idea. Rebuilding the cache is
not really more expensive than it was to run for example 'hg log -b branchname'
before this cache was introduced.
This new method is still unused but promise to make some operations several
times faster once it actually is used.
Abandoning Python 2.4 would make it possible to implement this more efficiently
by using struct classes and pack_into. The Python code could probably also be
micro optimized or it could be implemented very efficiently in C where it would
be easy to control the data access.
Anton Shestakov <engored@ya.ru> [Fri, 09 Jan 2015 22:53:38 +0800] rev 23784
hgweb: move archive entries outside of <li> in monoblue style
archiveentry already includes surrounding <li></li>, so putting archive entries
inside <li> element produced incorrect markup.
Anton Shestakov <engored@ya.ru> [Fri, 09 Jan 2015 15:24:55 +0800] rev 23783
hgweb: add searchhint to templates/coal/map
coal style uses every template (except header.tmpl) directly from paper style,
but doesn't use paper/map file. Elements defined in such map files are used in
templates as you would expect. For example, paper/search.tmpl contains
'{searchhint}' and template engine replaces that with the actual hint. But when
coal style reuses paper/search.tmpl, it needs to define searchhint in its map
file as well, or template engine will not find it. So let's copy it from
paper/map to coal/map.
Before this change, if the coal style was selected, the hint for the search
field in page header was present, but it was completely empty. Although the
absence of searchhint in coal/map produced no error.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 30 Dec 2014 21:12:52 -0500] rev 23782
largefiles: enable subrepo support for remove
Previously, remove failed when operating on a largefile in a subrepo, stating
that the file is untracked.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 08 Jan 2015 21:36:12 -0800] rev 23781
transplant: properly skip empty changeset (
issue4423)
If resolving a merge conflict result in an empty changesets, we now properly
skip the changeset instead of crashing.
Original patch from Robert Collins <robertc@robertcollins.net>.
Mathias De Maré <mathias.demare@gmail.com> [Thu, 08 Jan 2015 21:30:22 +0100] rev 23780
color: add support for colorizing git subrepo diffs
Matt Harbison <matt_harbison@yahoo.com> [Thu, 08 Jan 2015 23:33:56 -0500] rev 23779
tests: fix test-casefolding.t output
This change started with
a387b0390082.