Sean Farley <sean.michael.farley@gmail.com> [Tue, 11 Mar 2014 18:35:39 -0500] rev 21465
localrepo: always set the variable r in status method
This is a small patch to help streamline keeping tracking of the list of files
for status in a variable already called 'r' ('s' is for subrepos in this
method). We now move the setting of it out of an 'if' block so that we can
later refactor more code into the context objects.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 16:44:45 -0700] rev 21464
run-tests: execute tests via unittest
Now that unittest mode is functionally equivalent to the default mode,
we switch the default execution mode to unittest and remove the choice
of different execution modes.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 22 Apr 2014 13:37:27 -0700] rev 21463
run-tests: implement Test.__str__
unittest sometimes does a str(test) and the default implementation
doesn't do the right thing. So we override it.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Apr 2014 12:15:55 -0700] rev 21462
run-tests: make failure reporting in unittest mode equivalent to default
Unlike unittest's defaults, our result formatter does not print stack
traces. Here, we change TestResult.addFailure() to be compatible with
the existing/default execution mode.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 16:54:51 -0700] rev 21461
run-tests: ignore failures from rmtree
rmtree() may fail under certain conditions. We ignore failures at the
individual test level because they can interfere with test execution.
Furthermore, we'll reattempt deletion in the high-level test runner
after all tests have finished.
Note that this patch is not a code refactor like most of the patches
before it. This change logically makes sense given the execution
behavior of the tests.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 16:53:49 -0700] rev 21460
run-tests: abort tests after first failure in unittest mode
There is an execution mode on run-tests.py that stops after the first
failure. unittest mode was previously not obeying this option. This
patch fixes that.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 16:39:05 -0700] rev 21459
run-tests: print compatible output from TextTestRunner
Our unittest TextTestRunner now prints output similar to the output
from the default execution mode - the output people expect from
run-tests.py.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 16:17:18 -0700] rev 21458
run-tests: don't print results in unittest mode
A subsequent patch will have unittest print tests for us. Don't perform
old-style printing when in unittest mode.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 15:53:25 -0700] rev 21457
run-tests: move errpath deletion to setUp()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 15:46:34 -0700] rev 21456
run-tests: kill daemons during tearDown()
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Apr 2014 09:30:11 -0700] rev 21455
run-tests: move err file writing to tearDown()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 15:40:22 -0700] rev 21454
run-tests: refactor testtmp
testtmp is now a member variable of our test class. It's value is
computed during instance creation and the directory is managed via the
lifetime of the test object.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 15:19:21 -0700] rev 21453
run-tests: store skipped state on Test
As code is being moved between functions, we need a member variable to
hold skipped state.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 15:16:29 -0700] rev 21452
run-tests: move some functionality to Test.tearDown()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 15:08:05 -0700] rev 21451
run-tests: store last result in Test._result
Subsequent patches move post-test actions into tearDown(). This requires
tearDown() to have access to the last result.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 15:00:13 -0700] rev 21450
run-tests: report test duration in Test.tearDown()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:58:36 -0700] rev 21449
run-tests: store test return code and output in Test instance
A subsequent patch that will introduce tearDown() requires test
execution state be stored in the instance.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:55:33 -0700] rev 21448
run-tests: keep track of test start and stop in MercurialTest.run()
This brings run() more compatible with unittest.TestCase.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:52:57 -0700] rev 21447
run-tests: keep track of test execution state in Test
This patch starts a mini series of moving functionality into the
newly-established setUp() and tearDown() methods.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:41:11 -0700] rev 21446
run-tests: support setUp() and tearDown() in TestCase wrapper
unittest.TestCase.run() calls setUp() and tearDown() during run(). We
emulate that implementation.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:34:03 -0700] rev 21445
run-tests: fail tests by raising an exception
When in unittest mode, Test.run() will now raise for all non-success
cases. This makes it behave like TestCase.run().
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:32:03 -0700] rev 21444
run-tests: record warnings by raising WarnTest
We continue the conversion of recording test results by raising
exceptions.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:28:29 -0700] rev 21443
run-tests: record ignored tests by raising IgnoreTest
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:23:50 -0700] rev 21442
run-tests: record skips by raising SkipTest
The unittest way of recording a skipped test is to raise an exception
(at least with modern unittest implementation). We change Test to raise
a SkipTest when operating in unittest mode.
This does prevent some "tear down" activities from running in unittest
mode. This will be fixed in subsequent patches. Since unittest mode
is experimental, this should be OK.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:19:59 -0700] rev 21441
run-tests: implement TestCase.run()
Simply wrapping TestCase.run() is not sufficient for robust results
reporting because unittest in Python 2.4 does not know about things
like skipped tests and reports them as success or failures instead of
skips.
We will reimplement TestCase.run() with knowledge and semantics present
in modern Python releases.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 14:04:37 -0700] rev 21440
run-tests: don't print progress from Test when in unittest mode
unittest does its own printing of progress indicators as part of
TestResult. So, there is no need to print them when running in unittest
mode.
This will fix the double output of progress indicators that had been
occurring in unittest mode.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 13:04:19 -0700] rev 21439
run-tests: define a custom TestSuite that uses _executetests()
We now have a custom unittest.TestSuite implementation that uses
_executetests() and thus knows how to execute tests concurrently.
Running tests in --unittest mode will use this TestSuite.
Since the TestSuite handles concurrency, the warnings around --jobs and
--loop have been removed.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 13:00:40 -0700] rev 21438
run-tests: pass an optional TestResult into _executetests()
If the result is passed, we execute tests in the unittest way. A
subsequent patch will actually do this.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 12:49:43 -0700] rev 21437
run-tests: pass Test instances into TestRunner._executetests()
Test instances (not paths) are passed into _executetests(). This means
the logic for instantiating Test instances has been moved outside of
_executetests(). This was done because an upcoming patch will reuse the
logic in _executetests().
As part of this change, test counts are no longer managed by
_executetests().
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 17 May 2014 12:35:44 -0700] rev 21436
run-tests: define cleanup() on unittest class
We need a cleanup() on our unittest TestCase class to conform with the
execution API. This will eventually be replaced by tearDown().
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 12:45:44 -0700] rev 21435
run-tests: rename Test._test to Test.name
A lot of the attributes in Test could probably be renamed. This one is
needed for an upcoming patch.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 12:19:48 -0700] rev 21434
run-tests: teach Test instances whether they are in unittest mode
Tests executing in unittest mode behave a little differently. For
example, they report their results to a TestResult rather than just
printing. This patch paves the way for better integration of Test into
the unittest framework.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 11:55:02 -0700] rev 21433
run-tests: teach unittest about warned results
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 11:52:41 -0700] rev 21432
run-tests: document how success code is handled
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 11:51:11 -0700] rev 21431
run-tests: teach unittest about ignored tests
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 11:48:19 -0700] rev 21430
run-tests: teach unittest about skipped tests
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 11:47:40 -0700] rev 21429
run-tests: define custom result and runner classes for unittest
We need to teach unittest about some custom result types. This will
require some custom classes. This patch creates a skeleton for them.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 11:29:39 -0700] rev 21428
run-tests: start to report test results against TestResult
Previously, our unittest wrapper didn't report results properly. We now
properly report failures.
We had to rename the local variable to prevent "t" from being
overwritten in the local scope.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 11:24:37 -0700] rev 21427
run-tests: give unittest wrapper a short description
This will make the output contain something useful rather than the
default repr() for the class.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 11:22:08 -0700] rev 21426
run-tests: initial support for running tests with unittest
The unittest package in Python's standard library provides an almost
universal mechanism for defining and running tests. This patch starts
the process of making run-tests.py talk to it.
The main benefit of speaking unittest is that this will enable
Mercurial's tests to be more easily consumed by other testing tools,
like nose. This is useful for 3rd party extensions having their own
test infrastructure, for example.
Running tests in unittest mode will not result in completely sane
behavior until the unittest mode is made the default execution mode.
Expect things like double printing of output until support stabilizes.
Sean Farley <sean.michael.farley@gmail.com> [Wed, 16 Apr 2014 16:34:48 -0500] rev 21425
localrepo: reverse contexts in status
This is a slight tweak to how localrepo.status calculates what files have
changed. By forcing a changectx to be first operator and anything not a
changectx to be the second operator, we can later exploit this to allow
refactoring the status operation as a method of a context object.
Furthermore, this change will speed up 'hg diff --reverse' when used with the
working directory because the code will now hit a fast path without needing to
calculate an unneeded second manifest.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 16 May 2014 13:18:57 -0700] rev 21424
test: split test-largefile.t in multiple file
The `test-largefiles.t` unified test is significantly longer (about 30%) than
any other tests in the mercurial test suite. As a result, its is alway the last
test my test runner is waiting for at the end of a run.
In practice, this means that `test-largefile.t` is wasting half a minute of my
life every times I'm running the mercurial test suites. This probably mean more
a few cumulated day by now.
I've finally decided to split it up in multiple smaller tests to bring it back in
reasonable length.
This changeset extracts independent test cases in two files. One dedicated to
wire protocole testing, and another one dedicated to all other tests that could
be independently extracted.
No test case were haltered in the making of this changeset.
Various timing available below. All timing have been done on a with 90 jobs on a
64 cores machine. Similar result are shown on firefly (20 jobs on 12 core).
General timing of the whole run
--------------------------------
We see a 25% real time improvement for no significant cpu time impact.
Before split:
real 2m1.149s
user 58m4.662s
sys 11m28.563s
After split:
real 1m31.977s
user 57m45.993s
sys 11m33.634s
Last test to finish (using run-test.py --time)
----------------------------------------------
test-largefile.t is now finishing at the same time than other slow tests.
Before split:
Time Test
119.280 test-largefiles.t
93.995 test-mq.t
89.897 test-subrepo.t
86.920 test-glog.t
85.508 test-rename-merge2.t
83.594 test-revset.t
79.824 test-keyword.t
78.077 test-mq-header-date.t
After split:
Time Test
90.414 test-mq.t
88.594 test-largefiles.t
85.363 test-subrepo.t
81.059 test-glog.t
78.927 test-rename-merge2.t
78.021 test-revset.t
77.777 test-command-template.t
Timing of largefile test themself
-----------------------------------
Running only tests prefixed with "test-largefiles".
No significant change in cumulated time.
Before:
Time Test
58.673 test-largefiles.t
2.931 test-largefiles-cache.t
0.583 test-largefiles-small-disk.t
After:
Time Test
31.754 test-largefiles.t
17.460 test-largefiles-misc.t
8.888 test-largefiles-wireproto.t
2.864 test-largefiles-cache.t
0.580 test-largefiles-small-disk.t
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21423
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qrefresh/qfold)
This patch also replaces "editor = False" by "editor =
cmdutil.getcommiteditor()", because:
- it allows to hook commit message determination easily, even in the
case without "--edit"
- it avoids regression (or additional care) around saving
"last-message.txt", even if MQ's "newcommit()" changes its
implementation logic from "localrepository.commit" to
"localrepository.commitctx" with "memctx" in the future
to save commit message into "last-messge.txt" with "memctx",
"editor" should be valid function.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21422
mq: fold the code paths to invoke editor into specific logic (qrefresh/qfold)
This factoring simplifies the succeeding patch to switch from
"ui.edit()" to "getcommiteditor()" for qrefresh/qfold.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21421
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qnew)
This patch also replaces "editor = False" by "editor =
cmdutil.getcommiteditor()", because:
- the latter allows to hook commit message determination easily,
even in the case without "--edit"
- the latter can avoid regression (or additional care) around saving
"last-message.txt", even if MQ's "newcommit()" changes its
implementation logic from "localrepository.commit" to
"localrepository.commitctx" with "memctx" in the future
to save commit message into "last-messge.txt" with "memctx",
"editor" should be valid function.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21420
mq: fold the code path to invoke editor into specific logic (qnew)
This factoring simplifies the succeeding patch to switch from
"ui.edit()" to "getcommiteditor()" for qnew.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21419
cmdutil: enhance "getcommiteditor()" for specific usages in MQ
This patch introduces "finishdesc" and "extramsg" arguments into
"getcommiteditor()" for specific usages in MQ.
"finishdesc" will be used to treat the commit message as "[mq];
patch-file-name" (default MQ commit message), if it is left as empty,
instead of aborting commit process.
"extramsg" will be used to show the line below:
HG: Leave message empty to use default message
instead of:
HG: Leave message empty to abort commit
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21418
tag: use the editor gotten by "getcommiteditor()" instead of "ui.edit()"
This patch also enhances "test-tag.t", because "hg tag" hasn't been
explicitly tested around editor invocation and "--edit" option.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21417
import: use "getcommiteditor()" instead of explicit editor choice
This patch also enhances "test-import-bypass.t" and "test-import.t",
because "hg import" hasn't been explicitly tested around editor
invocation and "--edit" option.
This patch explicitly tests below:
- with "--bypass" (regardless of "--edit"):
- not invoked, if the patch contains the commit message
- not invoked, if the commit message is explicitly specified
- invoked, otherwise (just adding comment)
- without "--bypass":
- with "--edit":
- not invoked, if "--no-commit" is not specified
- invoked, otherwise
- without "--edit":
- not invoked, if the patch contains the commit message
- not invoked, if "--message" or "--logfile" is specified
(just adding comment)
- invoked, otherwise
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21416
graft: use "getcommiteditor()" instead of explicit editor choice
This patch also enhances "test-graft.t", because "hg graft" hasn't
been explicitly tested around editor invocation and "--edit" option.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21415
amend: use "getcommiteditor()" instead of explicit editor choice
This patch doesn't change any tests like as preceding patches, because
editor invocation is already tested in "test-commit-amend.t".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21414
commit: use "getcommiteditor()" instead of explicit editor choice
This patch also eliminates "forceeditor" no more referred.
This patch doesn't change any tests like as preceding patches, because
editor invocation is already tested well.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:36 +0900] rev 21413
backout: use "getcommiteditor()" instead of explicit editor choice
This patch also enhances "test-backout.t", because "hg backout" hasn't
been explicitly tested around editor invocation and '--edit' option.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:35 +0900] rev 21412
backout: avoid redundant message examination
Before this patch, "hg backout" examines "--message" and "--logfile"
options explicitly.
But this examination is redundant, because "commitfunc()" can receive
the result of same examination by "cmdutil.logmessage()" in
"cmdutil.commit()" through "message" argument.
This patch avoids redundant message examination by "message"
examination in "commitfunc()".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:35 +0900] rev 21411
transplant: use "getcommiteditor()" instead of explicit editor choice
This patch also enhances "test-transplant.t", because "hg transplant"
hasn't been explicitly tested around editor invocation and "--edit"
option.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:35 +0900] rev 21410
rebase: use "getcommiteditor()" instead of explicit editor choice
This patch also enhances "test-rebase-scenario-global.t", because "hg
rebase" hasn't been explicitly tested around editor invocation and
"--edit" option.
In the other hand, this patch doesn't enhance tests in "hg rebase
--collapse" case, because it is already tested in
"test-rebase-collapse.t".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:35 +0900] rev 21409
histedit: use "getcommiteditor()" instead of explicit editor choice for "--continue"
This omits (redundant) adding "\n' to "message", because:
- empty line is inserted by "commitforceeditor", if editor is invoked
- tail white-spaces are stripped at storing into chaneglog, otherwise
This patch also enhances "test-histedit-edit.t", because "hg histedit"
hasn't been explicitly tested around editor invocation and
"--continue" option.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:35 +0900] rev 21408
histedit: use "getcommiteditor()" instead of explicit editor choice for "fold"
This patch doesn't change any tests like as preceding patches, because
editor invocation is already tested in "test-histedit-fold.t".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:35 +0900] rev 21407
histedit: use the editor gotten by "getcommiteditor()" for "message"
Before this patch, "hg histedit" for "message" uses "ui.edit()" for
commit message editing.
It shows original commit message, but not detail about the target
revision: status of each modified/added/removed files, for example.
This patch uses the editor gotten by "getcommiteditor()" instead of
"ui.edit()" for "message"
In "test-histedit-edit.t", this patch omits "fixbundle" invocation,
because it prevents from confirming the "HG: added f" line in commit
message by filtering " added " lines.
Omiting "fixbundle" invocation causes that the exit code of "hg
histedit" appears as one of command line: in this case, "hg histedit"
is aborted by (expected) exception raising.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:35 +0900] rev 21406
fetch: use "getcommiteditor()" instead of explicit editor choice
This patch also enhances "test-fetch.t", because "hg fetch" hasn't
been explicitly tested around editor invocation and '--edit' option.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 11 May 2014 00:49:35 +0900] rev 21405
cmdutil: introduce "getcommiteditor()" to simplify code paths to choose editor
"getcommiteditor()" can simplify code paths to choose commit editor
according to '--edit' option as below:
before:
editor = cmdutil.commiteditor # or editor = None/False
if opts.get('edit'):
editor = cmdutil.commitforceeditor
after:
editor = cmdutil.getcommiteditor(**opts)
"getcommiteditor()" accepts option arguments not in "opts" style but
in "**opts" style, because some code paths want to invoke it with just
explicit "edit=True" argument (building dictionary is redundant).
Siddharth Agarwal <sid0@fb.com> [Wed, 14 May 2014 12:49:55 -0700] rev 21404
update: when deactivating a bookmark, print a message
This helps prevent user confusion when innocent-seeming commands like
'hg update -C .' are run.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 02 Aug 2012 13:51:34 +0200] rev 21403
doc: improves merge-tools example with an overwrite of existing config
We highlight the fact that a user hgrc can overwrite the system wide
preconfiguration. As other benefit we show priority value other than 1 and shows
vimdiff configuration is usually directly available. This is valuable as vimdiff
is (surprisingly) a common request from user.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 12 May 2014 17:40:58 -0700] rev 21402
help: add additional information in the merge-tools section of config help
The merge tool configuration in general has always been a confusing topic for
user. We add mention of:
- possible pre-existing configuration,
- way to look at it,
- the more detailed help topic about how merge-tools configuration works.
This should help users find they way.
Angel Ezquerra <angel.ezquerra@gmail.com> [Wed, 07 May 2014 00:13:22 +0200] rev 21401
subrepo: use subrepo shortid method to generate subrepo diverged promptchoice
We were always using only the first 12 characters of the subrepo revision id
when generating the "subrepo diverged" promptchoice. This is not necessarily
correct for non mercurial subrepos.
Angel Ezquerra <angel.ezquerra@gmail.com> [Wed, 07 May 2014 00:08:20 +0200] rev 21400
subrepo: add shortid() method to subrepo classes
This method takes an "id" (e.g. a revision id) and returns a "short" version
(e.g. a short revision id).
This will be used on the next revision to fix a small bug in the way that the
text on the promptchoice shown when a subrepo diverges is generated.
Sean Farley <sean.michael.farley@gmail.com> [Tue, 11 Mar 2014 18:32:16 -0500] rev 21399
localrepo: call _dirstatestatus instead of duplicating logic
Sean Farley <sean.michael.farley@gmail.com> [Tue, 22 Apr 2014 13:20:30 -0500] rev 21398
workingctx: call _dirstatestatus in status
Rip out the call from workingctx.status to localrepo.status.
Sean Farley <sean.michael.farley@gmail.com> [Tue, 22 Apr 2014 13:14:51 -0500] rev 21397
context: add private _dirstatestatus method
This patch is a step forward in getting rid of needing to check 'parentworking'
throughout the status method. Eventually, we will use the power of inheritance
to do the correct thing when comparing the working directory with its parent.
This method is mostly a copy from localrepo.status. The custom status method of
workingctx will eventually be absorbed by the refactoring of localrepo.status
to context.status but unfortunately we can't do it in one step.
Sean Farley <sean.michael.farley@gmail.com> [Tue, 11 Mar 2014 18:28:09 -0500] rev 21396
committablectx: move status to workingctx
This method was accidentally placed into the committablectx class. It contains
logic for querying the dirstate so we move it to the correct class.
Sean Farley <sean.michael.farley@gmail.com> [Tue, 11 Mar 2014 18:10:00 -0500] rev 21395
localrepo: factor out parentworking logic for comparing files
We will temporarily call a private method of the context class while we are in
the process of removing the need of having localrepo.status.
Sean Farley <sean.michael.farley@gmail.com> [Tue, 11 Mar 2014 17:44:09 -0500] rev 21394
localrepo: improve dirstate.normal lookup by cacheing the function
Sean Farley <sean.michael.farley@gmail.com> [Fri, 07 Mar 2014 13:32:37 -0800] rev 21393
localrepo: move symlink logic to workingctx
Mads Kiilerich <madski@unity3d.com> [Fri, 09 May 2014 12:01:56 +0200] rev 21392
merge: separate worker functions for batch remove and batch get
The old code had one function that could do 2 different things. First,
is was called a bunch of times to do one thing. Next, it was called a
bunch of times to do the other thing. That gave unnecessary complexity
and a dispatch overhead. Having separate functions is "obviously" better
than having a function that can do two things, depending on its parameters.
It also prepares the code for the next refactorings.
Mads Kiilerich <madski@unity3d.com> [Tue, 22 Apr 2014 02:10:25 +0200] rev 21391
merge: change debug logging - test output changes but no real changes
Preparing for action list split-up, making sure the final change don't have any
test changes.
The patch moves debug statements around without really changing anything.
Arguably, it temporarily makes the code worse. The only justification is that
it makes it easier to review the test changes ... and in the end the big change
will not change test output at all.
The changes to test output are due to changes in the ordering of debug output.
That is mainly because we now do the debug logging for files when we actually
process them. Files are also processed in a slightly different but still
correct order. It is now primarily ordered by action type, secondarily by
filename.
The patch introduces some redundancy. Some of it will be removed again, some of
it will in the end help code readability and efficiency. It is possible that we
later on could introduce a "process this action list and do some logging and
progress reporting and apply this function".
The "preserving X for resolve" debug statements will only have single space
indentation. It will no longer have a leading single space indented "f: msg ->
m" message. Having this message double indented would thus no longer make
sense.
The bid actions will temporarily be sorted using a custom sort key that happens
to match the sort order the simplified code will have in the end.
Mads Kiilerich <madski@unity3d.com> [Thu, 15 May 2014 02:14:59 +0200] rev 21390
merge: move constant assignments a bit and use them more
Mads Kiilerich <madski@unity3d.com> [Fri, 02 May 2014 01:09:14 +0200] rev 21389
merge: change priority / ordering of merge actions
The ordering of actions matters. Normal file system semantics is that files
have to be removed before a directory with the same name can be created.
Before the first ordering key was to have 'r' and 'f' actions come first,
secondary key was the filename.
Because of future refactorings we want to consistently have all action types
(with a sensible priority) as separate first keys. Grouped by action type, we
sort by filename.
Not processing in strict filename order could give worse performance,
especially on spinning disks. That is however primarily an issue in the cases
where "all" actions are of the same kind and will be grouped together anyway.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 17 May 2014 00:47:42 -0700] rev 21388
run-tests: fix --interactive option
``TTest._testpath`` never existed. This must be the remain of some contributors
side refactoring.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 17 May 2014 00:38:48 -0700] rev 21387
run-test: fix AttributeError in the --interactive prompt
One must choose between ``"y yes".split()`` and ``('y', 'yes')``. I choose the
later.
The feature still crash when you answer "yes" to use it. But at least, the
prompt itself works.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 17 May 2014 00:37:06 -0700] rev 21386
run-test: restore the -i prompt by write .err before checking if it exists
The `--interactive` flag workis by overwriting the original test file by its
`.err` version. So we need to write it before calling `self.fail`. Otherwise the
`.err` file does not exists and `--interactive` is ignored.
We can move that block code around because it is dedicated to write changed
output and we moves it in the try-except dedicated to handling changed output.
Note that the flog is still badly broken after this change. But at least it crash
instead of being ignored.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 11:04:25 -0700] rev 21385
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:34:52 -0700] rev 21384
run-tests: move string escaping to TTest
With this patch, TTest is almost fully self-contained and extractable.
Only logging functions remain outside of its class.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:28:35 -0700] rev 21383
run-tests: add some docstrings
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:24:00 -0700] rev 21382
run-tests: move createhgrc into Test
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:19:58 -0700] rev 21381
run-tests: move SKIPPED_PREFIX and FAILED_PREFIX into TTest
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:16:36 -0700] rev 21380
run-tests: move SKIPPED_STATUS into Test class
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:14:25 -0700] rev 21379
run-tests: move parsehghaveoutput() into TTest
This patch starts a sequence of patches that will try to isolate
everything related to t tests into the TTest class.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:11:46 -0700] rev 21378
run-tests: make some methods of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:09:23 -0700] rev 21377
run-tests: eliminate main()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:08:33 -0700] rev 21376
run-tests: move option parser logic to TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:06:19 -0700] rev 21375
run-tests: move umask into TestRunner.run()
We now properly restore the umask as well, since run() tries to clean up
after itself.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:05:00 -0700] rev 21374
run-tests: move checktools into TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:04:15 -0700] rev 21373
run-tests: move test discovery into TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:03:08 -0700] rev 21372
run-tests: move test shuffling and sorting into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 10:00:59 -0700] rev 21371
run-tests: assign testdir in TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 09:59:01 -0700] rev 21370
run-tests: move hash seed logic to TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 09:58:26 -0700] rev 21369
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 09:57:02 -0700] rev 21368
run-tests: move more path calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 09:54:28 -0700] rev 21367
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 09:49:33 -0700] rev 21366
run-tests: establish TestRunner.run()
(amended by mpm to remove environ cleanup - unrelated change that
breaks on Solaris)
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 09:44:39 -0700] rev 21365
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 09:40:27 -0700] rev 21364
run-tests: allow TestRunner to be passed into main()
This allows 3rd parties to specify a custom TestRunner. This is useful
for providing your own test discovery mechanism, for example.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 00:23:06 -0700] rev 21363
run-tests: move test discovery logic into a function
The new function is easily monkeypatchable. This facilitates more
advanced test discovery by 3rd parties such as extensions.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 00:12:26 -0700] rev 21362
run-tests: move scheduletests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 00:10:06 -0700] rev 21361
run-tests: move abort global to TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 00:06:30 -0700] rev 21360
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Apr 2014 00:03:32 -0700] rev 21359
run-tests: move results global into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:59:06 -0700] rev 21358
run-tests: move times global into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:53:23 -0700] rev 21357
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:49:23 -0700] rev 21356
run-tests: move outputcoverage() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:47:59 -0700] rev 21355
run-tests: move outputtimes() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:44:56 -0700] rev 21354
run-tests: move checkhglib into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:43:00 -0700] rev 21353
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:39:38 -0700] rev 21352
run-tests: move createdfiles out of a global and into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:38:10 -0700] rev 21351
run-tests: move usecorrectpython() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:35:27 -0700] rev 21350
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:33:44 -0700] rev 21349
run-tests: add options to runner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:28:59 -0700] rev 21348
run-tests: add options to runner
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:27:11 -0700] rev 21347
run-tests: move COVERAGE_FILE out of a global
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:26:15 -0700] rev 21346
run-tests: move PYTHONDIR out of a global
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:24:39 -0700] rev 21345
run-tests: move TMPBINDIR out of a global
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:22:47 -0700] rev 21344
run-tests: move BINDIR out of a global
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:20:42 -0700] rev 21343
run-tests: move INST out of a global
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:19:23 -0700] rev 21342
run-tests: move HGTMP out of a global
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:15:24 -0700] rev 21341
run-tests: move TESTDIR out of a global
This patch starts the process of removing global variables from
run-tests.py. The goal of this is to make it easier to run tests
differently without having to concern yourself with global state.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 23:07:17 -0700] rev 21340
run-tests: establish a class to hold testing state
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 22:02:55 -0700] rev 21339
run-tests: refactor runone() into gettest() and scheduletests()
runone() has been removed. Replacing it are gettest() (which returns a
Test instance) and a small amount of boilerplate in scheduletests().
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:53:15 -0700] rev 21338
run-tests: move computation of test paths into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:50:23 -0700] rev 21337
run-tests: move logging of test start into Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:21:57 -0700] rev 21336
run-tests: remove remaining uses of TestResult
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:17:39 -0700] rev 21335
run-tests: move output writing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:14:31 -0700] rev 21334
run-tests: move err file saving to Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:10:22 -0700] rev 21333
run-tests: emit exception failure result from Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:08:03 -0700] rev 21332
run-tests: move test name filter to Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:05:50 -0700] rev 21331
run-tests: move keyword processing into Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:04:08 -0700] rev 21330
run-tests: move retesting result to Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:02:51 -0700] rev 21329
run-tests: move blacklist skipping to Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 21:00:24 -0700] rev 21328
run-tests: check for test file existence in Test.run()
We delay this a little bit. But it shouldn't really matter when the
check is performed.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:53:45 -0700] rev 21327
run-tests: move remaining result processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:52:58 -0700] rev 21326
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:48:16 -0700] rev 21325
run-tests: generate timeout result in Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:47:14 -0700] rev 21324
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:41:08 -0700] rev 21323
run-tests: move fail() into Test
The code was changed slightly as part of the migration to make use of
appropriate variables and modern Python conventions.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:35:54 -0700] rev 21322
run-tests: move success() into Test
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:32:38 -0700] rev 21321
run-tests: move err path handling to Test
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:27:18 -0700] rev 21320
run-tests: handle interrupted in Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:22:32 -0700] rev 21319
run-tests: kill daemons during Test.cleanup()
As a safety precaution, we kill daemons in Test.cleanup(). This is
necessary for a subsequent patch that will reraise KeyboardInterrupt
before killdaemons() runs as part of run().
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 18:50:40 -0700] rev 21318
run-tests: capture reference output in Test.__init__
Reference output should be constant and doesn't need to be computed at
test execution time. We calculate it earlier.
This patch is the first in a mini series that will change how the
TestResult object works.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 16:14:30 -0700] rev 21317
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 16:13:02 -0700] rev 21316
run-tests: make rematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 16:11:49 -0700] rev 21315
run-tests: make linematch a static method of TTest
linematch only applies to t tests. It makes sense to move everything t
test related to the TTest class.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 15:37:50 -0700] rev 21314
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 15:28:31 -0700] rev 21313
run-tests: move t test execution from tsttest() to TTest.run()
After this patch, tsttest() only contains output/result processing.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 15:19:28 -0700] rev 21312
run-tests: move t test parsing into its own function
Test parsing is somewhat complicated. This patch extracts it into its
own function.
The impetus of this patch is folding tsttest() into the TTest class.
Subsequent patches will continue this work until tsttest() no longer
exists.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 14:54:04 -0700] rev 21311
run-tests: roll pytest() into PythonTest._run()
Python was the old runner function. It no longer needs to exist since
the PythonTest class took its job.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 14:51:43 -0700] rev 21310
run-tests: remove threadtmp in Test.cleanup()
threadtmp is an implementation detail. We move the cleanup of this
directory to Test.cleanup() and make the variable internal. The
cleanup function will eventually disappear into unittest machinery.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 14:47:34 -0700] rev 21309
run-tests: allow Test.run() to run multiple times
Test.run() can now be executed multiple times on the same Test instance.
This feature is currently unused and there are no plans to implement it.
The main reason for this work was to refactor testtmp, replacements, and
env to be run-time specific as opposed to Test instance specific.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 14:09:46 -0700] rev 21308
run-tests: capture reference output in TestResult class
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 14:01:18 -0700] rev 21307
run-tests: give TestResult a skipped attribute
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 18:31:22 -0700] rev 21306
run-tests: pass TestResult into run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 13:50:25 -0700] rev 21305
run-tests: capture execution results in a TestResult class
Some implementation details of test execution still live outside of
Test. These include determining what a result means and cleaning up
after the test.
To move to the world where more of this logic can live inside Test or a
derived object, the logic for test execution needs to be refactored.
Specifically, exception trapping and opportunities for result processing
need to be moved into Test.
This patch starts the process by establishing a TestResult class for
holding the results of a test execution. In order to actually use this
class, exception trapping and execution time recording needed to be
moved into Test.run().
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 13:29:26 -0700] rev 21304
run-tests: clean up temp directory variables
testtmp is an implementation detail. It didn't need to be exposed to the
world.
threadtmp is derived from count. It is now created as part of the
constructor and mostly hidden from the outside world.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 13:26:12 -0700] rev 21303
run-tests: move env into Test
Environment variables are an implementation detail of how tests are
executed. This patch moves environment variable logic into Test and
completely hides it from the outside.
With this patch, a Test can be executed with two lines: init + run().
Tests are still single-use and take a more arguments to the constructor
than likely necessary. These will get addressed in subsequent patches.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 13:22:52 -0700] rev 21302
run-tests: move killdaemons into Test.run()
killdaemons() was the only part of runone() looking at env variables. We
move killdaemons() into Test.run() to enable us to fully move env into
Test.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 13:18:55 -0700] rev 21301
run-tests: move replacements and port management into Test
replacements and ports are really implementation details of a Test. They
have been moved to instance variables.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 13:11:49 -0700] rev 21300
run-tests: move createhgrc() call into Test.run()
createhgrc() is an implementation detail of how tests are run. It makes
sense to move it into Test.run().
Note that this will cause the test execution time to include the
creation of hgrc. The author does not believe this is a significant
change worth worrying about.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 13:07:05 -0700] rev 21299
run-tests: move createenv() into Test
createenv() is consulting lots of test-specific variables. It makes
sense to attach it to the Test class.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 13:03:24 -0700] rev 21298
run-tests: move replacements generation into Test
The API is a bit funky. Things will look better once all state is
captured in Test.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 12:54:09 -0700] rev 21297
run-tests: move testtmp into Test class
This patch starts the process of moving test-specific variables into the
Test class. The ultimate goal is to be able to instantiate a Test with
minimal arguments and to call run() on it without too much thinking.
This will make it much easier to run tests from other contexts. It will
also enable things like running a test multiple times.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 12:26:34 -0700] rev 21296
run-tests: create classes for representing tests
Currently, the state for an individual test is scattered across a number
of functions and variables. This patch begins a process of isolating a
single test's state into instances of a class. It does this by
establishing a new Test base class and child classes for Python tests
and T tests. The class currently has a run() API that proxies into the
existing "runner" functions. Upcoming patches will move the logic for
each test type into the class.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 30 Apr 2014 18:40:20 -0700] rev 21295
revsetbenchmark: add `author(mpm) or author(lmoscovicz)` to the canonical list
This matters as `author(mpm)` have a lot of matches evenly split in the repo,
while `author(lmoscoviz)` have less match (and later). This changes the execution
path of the "or" operator a lot.
Matt Mackall <mpm@selenic.com> [Tue, 13 May 2014 19:29:45 -0500] rev 21294
filterpyflakes: filter WindowsError unconditionally
Matt Mackall <mpm@selenic.com> [Tue, 13 May 2014 19:22:40 -0500] rev 21293
filterpyflakes: make memoryview filtering unconditional
Matt Mackall <mpm@selenic.com> [Tue, 13 May 2014 15:22:36 -0500] rev 21292
py3kcompat: drop unused export
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 10 May 2014 15:22:04 -0700] rev 21291
py3kcompat: don't convert os.environ to bytes
os.environ accepts str not bytes. Assigning bytes will result in a
run-time error.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 10 May 2014 14:57:25 -0700] rev 21290
demandimport: pass proper level to __import__ in Python 3
demandimport was failing in Python 3 with a ValueError because
__import__'s level=-1 has gone away (-1 means to try both relative
and absolute imports and relative imports don't exist in Python 3).
With this patch, demandimport still doesn't work in Python 3 (it
fails when importing a non-package module).
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 19:55:40 -0400] rev 21289
help: suggest keyword search when no topic is found
When `hg help foobar` fails, it now suggests using `hg help --keyword foobar`
instead of printing a full page of basic commands.
This should greatly increases discoverability of the `hg help --keyword`
argument.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 20:01:03 -0400] rev 21288
help: provide a more helpful message when no keyword are matched
Before this changeset, when no topic were matching the provided keyword ( in
command such as `hg help --keyword babar`) the output was empty. This is
confusing and unhelpful for new users seeking assistance in the help.
We now display:
$ hg help --keyword babar
abort: no matches
(try "hg help" for a list of topics)
This send users in a new direction where they may find what they are looking for.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 29 Apr 2014 11:40:42 -0700] rev 21287
revsetbenchmark: use optparse to retrieve argument
We need more flexibility. For example we'll want to run the benchmark on other
repository.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 25 Apr 2014 13:35:31 -0700] rev 21286
revsetbenchmark: add a usage message when no arguments are passed
This increase the odd someone who didn't wrote will it find out how to use this
script.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 29 Apr 2014 19:15:36 -0700] rev 21285
revsetbenchmark: add `::tip and draft()` to the canonical list
The want to test element on different side of the iterators.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 28 Apr 2014 15:14:11 -0700] rev 21284
revset: cosmetic changes in spanset range comparison
We use the python syntax for range comparison: `a < x < c`. This is shorter,
more readable and less error prone. This comparison escaped the cleanup make in
e2031c8ca4f8
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 25 Apr 2014 23:38:24 -0700] rev 21283
revset: drop spanset._contained
All its users inlined it for performance reasons.
(See 1d7a2771aa36 and e2031c8ca4f8)
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 05 May 2014 22:47:14 -0700] rev 21282
patchbomb: includes series information in the header
We includes information about the series being patch bombed in all email. Two
new headers are added:
* X-Mercurial-Series-Index: index of the patches in the series (starts at 1)
* X-Mercurial-Series-Total: The total number of patches in the series
This information is available in the email subject line, but having them
formalized in the header will helps automated tools to process patches send with
modern mercurial.
Matt Mackall <mpm@selenic.com> [Fri, 09 May 2014 13:32:56 -0500] rev 21281
pager: add attend-<command> option
This lets users override attend settings locally on a command
granularity.
Matt Mackall <mpm@selenic.com> [Fri, 09 May 2014 13:10:23 -0500] rev 21280
pager: variable reorder
Matt Mackall <mpm@selenic.com> [Fri, 09 May 2014 13:07:50 -0500] rev 21279
pager: break auto out of command check loop
Matt Mackall <mpm@selenic.com> [Fri, 09 May 2014 13:05:52 -0500] rev 21278
pager: break always out of command check loop
Matt Mackall <mpm@selenic.com> [Fri, 09 May 2014 12:58:53 -0500] rev 21277
pager: break pager invocation out of command check loop
Matt Mackall <mpm@selenic.com> [Thu, 08 May 2014 11:11:27 -0500] rev 21276
tests: fix test failure on vfat
It can't handle filenames with spaces. We don't have a good hghave
test for this, so we wrap it with unix-permissions.
Mads Kiilerich <madski@unity3d.com> [Thu, 08 May 2014 19:45:22 +0200] rev 21275
largefiles: include largefiles when doing log on a directory (issue4241)
The matchers _files had to include both the real root and the standin version
of the root.
Johan Bjork <jbjoerk@gmail.com> [Thu, 08 May 2014 14:58:25 +0000] rev 21274
journal: set Abort hint when failing due to an abandoned transaction
Durham Goode <durham@fb.com> [Thu, 08 May 2014 16:37:33 -0700] rev 21273
merge: define conflict marker labels in filemerge()
Moves the conflict marker definition up to filemerge, so it gets applied to all
merge strategies, and so in a future patch we can manipulate the markers.
Durham Goode <durham@fb.com> [Thu, 08 May 2014 16:33:06 -0700] rev 21272
merge: prevent simplemerge from mutating label list
simplemerge was using list.pop() to remove items from the labels list. This
mutated the list and made it unusable by other calls (for instance, it might be
used in both the premerge and actual merge stages).
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 09 May 2014 08:44:53 +0900] rev 21271
tests: ignore "undefined name 'memoryview'" pyflakes error on earlier Python
Before this patch, "test-check-pyflakes.t" shows unexpected "undefined
name 'memoryview'" error for "mercurial/util.py" on Python 2.6.x or
earlier, because they don't define symbol 'memoryview'.
This patch introduces excluding patterns into "filterpyflakes.py" to
ignore "undefined name 'memoryview'" pyflakes error on Python 2.6.x or
earlier
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 09 May 2014 08:44:53 +0900] rev 21270
mq: eliminate unused variable for test-check-pyflakes.t
"user" in "fold()" has become useless since 49148d7868df.
Mads Kiilerich <madski@unity3d.com> [Tue, 22 Apr 2014 02:09:24 +0200] rev 21269
merge: make debug output slightly more helpful by including message for action
Make recently introduced messages more useful. Instead of:
f1: g
f2: m
say:
f1: remote is newer -> g
f2: versions differ -> m
Mads Kiilerich <mads@kiilerich.com> [Sun, 13 May 2012 17:45:08 +0200] rev 21268
merge: simplify mergestate iter
Matt Mackall <mpm@selenic.com> [Fri, 09 May 2014 14:46:50 -0500] rev 21267
resolve: simplify "finished" message
The recently introduced message was:
no unresolved files; you may continue your unfinished operation
This had three problems:
- looks a bit like an error message because it's not saying "we've
just resolved the last file"
- refers to "unfinished operation", which won't be the case with
"update" or "merge"
- introduces semicolons to error messages, which is stylistically
questionable
I've simplified this to:
no more unresolved files
In the future, if we want to prompt someone to continue a particular operation, we should use
a hint style:
no more unresolved files
(use 'hg graft --continue' to finish grafting)
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 18 Apr 2014 22:19:25 -0700] rev 21266
resolve: print message when no unresolved files remain (issue4214)
When using resolve, users often have to consult with the output of |hg
resolve -l| to see if any unresolved files remain. This step is tedious
and adds overhead to resolving.
This patch will notify a user if there are no unresolved files remaining
after executing |hg resolve|::
no unresolved files; you may continue your unfinished operation
The patch stops short of telling the user exactly what command should be
executed to continue the unfinished operation. That is because this
information is not currently captured anywhere. This would make a
compelling follow-up feature.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 18 Apr 2014 18:56:26 -0700] rev 21265
resolve: print warning when no work performed (issue4208)
Previously, if the paths specified as arguments to |hg resolve| were
invalid, they were silently ignored and a no-op would ensue.
This patch fixes that in some scenarios.
If none of the paths specified to |hg resolve| match a path that is in
mergestate, a warning will be emitted.
Ideally, a warning would be emitted for every path/pattern specified
that doesn't match anything. To achieve this would require significant
refactoring of the matching subsystem. That work is beyond the scope of
this patch series. Something is better than nothing and this patch
gets us something.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 18 Apr 2014 19:08:32 -0700] rev 21264
resolve: abort when not applicable (BC)
The resolve command is only relevant when mergestate is present.
This patch will make resolve abort when no mergestate is present.
This change will let people know when they are using resolve when they
shouldn't be. This change will let people know when their use of resolve
doesn't do anything.
Previously, |hg resolve -m| would allow mergestate to be created. This
patch now forbids that. Strictly speaking, this is backwards
incompatible. The author of this patch believes creating mergestate via
resolve doesn't make much sense and this side-effect was unintended.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 18 Apr 2014 18:26:42 -0700] rev 21263
resolve: split test
Part of test-resolve.t is split into multiple tests to create an
injection point for new tests that will be added in subsequent patches.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 18 Apr 2014 18:19:46 -0700] rev 21262
resolve: use early continue and deindent
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 May 2014 16:48:28 -0700] rev 21261
mergestate: consistently set variables to None
Some code branches and exceptional circumstances such as empty
mergestate files could result in mergestate._local and
mergestate._other not being defined or reset to None. These variables
are now correctly set to None when they should be.
Durham Goode <durham@fb.com> [Wed, 07 May 2014 17:22:34 -0700] rev 21260
changegroup: refactor outgoing logic into a function
Extensions that add to bundle2 will want to know which commits are outgoing so
they can bundle data that is appropriate to those commits. This moves the logic
for figuring that out to a separate function so extensions can do the same
computation.
Durham Goode <durham@fb.com> [Wed, 07 May 2014 17:24:19 -0700] rev 21259
bundle2: fix bundle2 pulling all revs on empty pulls
When bundle2 was enabled, if hg pull had no commits to pull, it would print
'no changes found' and then download the entire repository from the server. This
was caused by heads and common being set to None, which gets treated as
heads=cl.heads() and common=[nullid], which means download the entire repo.
Pulling bundles without a changegroup is a valid use case (like if we're just
updating bookmarks), so this modifes the bundle code to allow not adding
changegroups.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 May 2014 19:26:15 -0700] rev 21258
exchange: fix bad indentation
Those two lines where double indented for no good reasons.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 07 May 2014 19:28:17 -0700] rev 21257
exchange: propagate arguments to the _getbundleextrapart function
The arguments was wrongly propagated (again).
Durham Goode <durham@fb.com> [Wed, 07 May 2014 17:20:38 -0700] rev 21256
bundle2: fix configuration name mismatch
During pulls bundle2 was checking server.bundle2, but during pushes it was
checking experimental.bundle2. This makes them both experimental.bundle2.
Matt Mackall <mpm@selenic.com> [Wed, 07 May 2014 17:58:13 -0500] rev 21255
build: initial support for in-tree autobuilding recipes
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 22:48:07 -0700] rev 21254
tests: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:33:14 -0700] rev 21253
share: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:52:25 -0700] rev 21252
relink: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 22:35:37 -0700] rev 21251
record: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:31:51 -0700] rev 21250
hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:48:10 -0700] rev 21249
color: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:46:49 -0700] rev 21248
children: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:48:41 -0700] rev 21247
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:54:01 -0700] rev 21246
extdiff: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:46:24 -0700] rev 21245
churn: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:17:04 -0700] rev 21244
convert: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:19:31 -0700] rev 21243
debugshell: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:09:06 -0700] rev 21242
largefiles: declare commands using decorator
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 05 May 2014 21:26:40 +0900] rev 21241
cmdutil: omit redundant "savecommitmessage()" in "tryimportone()"
The preceding patch causes that "makememctx()" with "editor" argument
saves (manually edited) commit message into ".hg/last-message.txt":
saving itself is executed indirectly in "memctx.__init__()".
This makes it redundant to invoke "savecommitmessage()" on caller side
of "makememctx()".
This patch omits such redundant "savecommitmessage()" invocation in
"tryimportone()".
"tryimportone()" uses one of "commiteditor" or "commitforceeditor" as
"editor" argument, and this causes saving commit message always.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 05 May 2014 21:26:40 +0900] rev 21240
amend: use "editor" argument for "memctx.__init__" to save commit message
This patch uses "editor" argument of "memctx.__init__" to save commit
message, instead of explicit editor invocation and saving commit
message by "localrepository.savecommitmessage()".
By passing one of "commiteditor" or "commitforceeditor" as "editor",
"memctx.__init__" saves commit message, even when editor invocation is
not needed.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 05 May 2014 21:26:40 +0900] rev 21239
histedit: pass "editor" argument to "memctx.__init__()" for "collapse" command
The preceding patch causes that "memctx.__init__()" with "editor"
argument invokes editor and saves edited commit message into
".hg/last-message.txt".
This patch passes "editor" argument to "memctx.__init__()" instead of
explicit invocations of "commitforceeditor()" and
"savecommitmessage()" for "collapse" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 05 May 2014 21:26:40 +0900] rev 21238
context: move editor invocation from "makememctx()" to "memctx.__init__()"
This patch introduces "editor" argument to "memctx.__init__()", and
moves editor invocation from "makememctx()" to "memctx.__init__()", to
centralize editor invocation into "memctx" object creation.
This relocation is needed, because "makememctx()" requires the "store"
object providing "getfile()" to create "memfilectx" object, and this
prevents some code paths from using "makememctx()" instead of
"memctx.__init__()".
This patch also invokes "localrepository.savecommitmessage()", when
"editor" is specified explicitly, to centralize saving commit message
into "memctx" object creation: passing "cmdutil.commiteditor" as
"editor" can achieve both suppressing editor invocation and saving
into ".hg/last-message.txt" for non empty commit messages.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 05 May 2014 21:26:40 +0900] rev 21237
localrepo: add "editor" argument to "tag()"
Before this patch, "localrepository.tag()" doesn't take "editor"
argument, and this prevents callers from passing "editor" argument to
"localrepository.commit()" invoked internally.
This patch adds "editor" argument to "localrepository.tag()" (and
"_tag()", too), and makes "commands.tag()" invoke it with "editor"
argument.
This patch also omits explicit "localrepository.savecommitmesssage()"
invocation, because "localrepository.commit()" will invoke specified
"editor" and save edited commit message into ".hg/last-message.txt"
automatically.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 05 May 2014 21:26:40 +0900] rev 21236
qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
Before this patch, "hg qrefresh" and "hg qfold" invoke "ui.edit()"
explicitly to get commit message edited manually.
This requires explicit "localrepository.savecommitmessage()"
invocation to save edited commit message into ".hg/last-message.txt",
because unexpected exception raising may abort command execution
before saving it in "localrepository.commit()".
This patch uses "editor" argument of "localrepository.commit()"
instead of explicit "ui.edit()" invocation for "hg qnew" and "hg qfold"
"localrepository.commit()" will invoke "desceditor()" function newly
added by this patch, and save edited commit message into
".hg/last-message.txt" automatically.
This patch passes not "editor" but "desceditor" to "commit()", because
"hg qnew" and "hg qfold" require editor function to return edited
message (and invoke "patchheader.setmessage()" with it) if not empty,
or default message otherwise.
This patch also avoids "not q.applied" check at "hg qrefresh --edit",
because it is also checked in "queue.refresh()", and it is not needed
to get commit message from patch header before "queue.refresh()".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 05 May 2014 21:26:40 +0900] rev 21235
qrefresh: relocate message/patch-header handling to delay message determination
Before this patch, commit message for refreshed MQ changeset is
determined, and written into refreshed patch file before
"localrepository.commit()" invocation.
This makes refactoring to use "editor" argument of "commit()" instead
of explicit "ui.edit()" invocation in succeeding patch difficult.
This patch relocates message/patch-header handling to delay message
determination.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 05 May 2014 21:26:40 +0900] rev 21234
qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
Before this patch, "hg qnew" invokes "ui.edit()" explicitly to get
commit message edited manually.
This requires explicit "localrepository.savecommitmessage()"
invocation to save edited commit message into ".hg/last-message.txt",
because unexpected exception raising may abort command execution
before saving it in "localrepository.commit()".
This patch uses "editor" argument of "localrepository.commit()"
instead of explicit "ui.edit()" invocation for "hg qnew".
"localrepository.commit()" will invoke "desceditor()" function newly
added by this patch, and save edited commit message into
".hg/last-message.txt" automatically.
This patch passes not "editor" but "desceditor" to "commit()", because
"hg qnew" requires editor function to return edited message if not
empty, or default message otherwise.
This patch applies "rstrip()" on "defaultmsg" at comparison between
"nctx.description()" and "defaultmsg", because the former should be
stripped by "changelog.stripdesc()" and the latter may have tail white
spaces inherited from "patchfn".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 05 May 2014 21:26:40 +0900] rev 21233
histedit: use "editor" argument of "commit()" instead of explicit "ui.edit()"
Before this patch, "message" action of "hg histedit" uses "ui.edit()"
explicitly to get commit message edited manually.
This requires explicit "localrepository.savecommitmessage()"
invocation to save edited commit message into ".hg/last-message.txt",
because unexpected exception raising may abort command execution
before saving it in "localrepository.commit()".
This patch uses "editor" argument of "localrepository.commit()"
instead of explicit "ui.edit()" invocation for "message" action of "hg
histedit"
"localrepository.commit()" will invoke "editor()" function newly added
in this patch, and save edited commit message into ".hg/last-message.txt"
automatically.
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 12:54:01 +0900] rev 21232
test-pyflakes: detect undefined name error
It should be able to catch the following mistakes at 2606e7f227f6:
mercurial/exchange.py:590: undefined name 'UnknownPartError'
mercurial/match.py:346: undefined name 'pat'
mercurial/win32.py:365: undefined name '_ERROR_NO_MORE_FILES'
tests/killdaemons.py:46: undefined name 'check'
Yuya Nishihara <yuya@tcha.org> [Fri, 02 May 2014 18:25:23 +0900] rev 21231
run-tests: initialize global variables to suppress pyflakes warning
Matt Mackall <mpm@selenic.com> [Tue, 06 May 2014 12:47:59 -0500] rev 21230
merge with stable
Thomas Arendsen Hein <thomas@intevation.de> [Mon, 05 May 2014 16:54:15 +0200] rev 21229
setup.py, make: avoid problems with outdated, existing hgext/__index__.py*
"make clean" already removed __index__.py[cdo], but not the __index__.py
(automatically generated by "python setup.py build_hgextindex").
"setup.py build_hgextindex" did not generate a new index if file
__index__.py[cdo] already existed, because if __index__.py was removed,
the compiled file containing the old information was imported and used.
Generate an empty file (with a new timestamp to generate a new .py[cdo])
instead and make mercurial.extensions ignore the unset docs attribute.
One of the problems was a failed test-help.t, to reproduce:
$ rm hgext/__index__.py*
$ echo 'docs = {"mq": "dummy"}' > hgext/__index__.py
$ make test-help.t
With this a "make clean" or "python setup.py build_hgextindex" helps.
Yuya Nishihara <yuya@tcha.org> [Fri, 02 May 2014 18:24:10 +0900] rev 21228
factotum: initialize global variables to suppress pyflakes warning
Mads Kiilerich <madski@unity3d.com> [Sat, 03 May 2014 03:29:30 +0200] rev 21227
color: don't fail on error messages when no curses (issue4237)
The error only occured when Python didn't have curses - such as on Windows and
when Python was built without curses support.
No curses can also be emulated by (re)moving .../lib/python2.7/curses/ from the
Python installation.
It is left as an exercise to figure out exactly what changed in Mercurial that
triggered this error.
Steve Borho <steve@borho.org> [Sat, 03 May 2014 10:33:54 +0200] rev 21226
win32: backout 1a9ebc83a74c
This change conflicted with TortoiseHg's use of QFileSystemWatcher. Files which
were being monitored (for file-system events) were unable to be reliably updated
using util.atomictempfile. Often the update would error out in the middle of
the process leaving neither the old or the new file in place.
My guess is that _kernel32.CreateFileA() is triggering an exception that is
not handled correctly within unlink()
Matt Mackall <mpm@selenic.com> [Mon, 05 May 2014 13:42:08 -0500] rev 21225
test-check-code-hg: use locate instead of manifest
Matt Mackall <mpm@selenic.com> [Mon, 05 May 2014 13:41:29 -0500] rev 21224
test-check-code-hg: drop manual check of non-.py scripts
Matt Mackall <mpm@selenic.com> [Mon, 05 May 2014 13:42:58 -0500] rev 21223
test-check-code-hg: use test-repo check
Matt Mackall <mpm@selenic.com> [Mon, 05 May 2014 13:37:59 -0500] rev 21222
check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com> [Fri, 02 May 2014 00:23:58 -0500] rev 21221
tests: use locate to find files for pyflakes check
Based on a suggestion by Yuya Nishihara
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 19:24:03 -0500] rev 21220
merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 17:48:02 -0500] rev 21219
Added signature for changeset 2195ac506c6a
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 17:47:24 -0500] rev 21218
Added tag 3.0 for changeset 2195ac506c6a
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 01 May 2014 14:07:04 -0700] rev 21217
revset: directly use __contains__ instead of a lambda
We get rid of lambda in a bunch of other place. This is equivalent and much
faster. (no new timing as this is the same change as three other changesets)
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 14:33:06 -0500] rev 21216
tests: suppress spurious lchmod error from unzip (issue4088)
Because lchmod doesn't exist on Linux, unzip should be built without lchmod
support. A few distros get this wrong.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 01 May 2014 12:15:28 -0700] rev 21215
orderedlazyset: directly use __contains__ instead of a lambda
We apply the same speedup as in spanset, getting rid of the useless lambda.
(No new timing, as this is the very same change)
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 01 May 2014 12:15:00 -0700] rev 21214
lazyset: directly use __contains__ instead of a lambda
We apply the same speedup as in spanset, getting rid of the useless lambda.
(No new timing, as this is the very same change)
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 13:42:12 -0500] rev 21213
merge with i18n
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 30 Apr 2014 23:20:46 +0900] rev 21212
i18n-ja: synchronized with e9c2f76be74b
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 30 Apr 2014 11:01:50 -0300] rev 21211
i18n-pt_BR: synchronized with e9c2f76be74b
Mads Kiilerich <madski@unity3d.com> [Thu, 01 May 2014 16:47:50 +0200] rev 21210
rebase: empty revset should be a gentle no-op with exit code 1, not an error
Mads Kiilerich <madski@unity3d.com> [Thu, 01 May 2014 15:12:49 +0200] rev 21209
largefiles: better handling of log from other working directory (issue4236)
When invoked from another directory, the matchers m._cwd will be the absolute
path. The code for calculating relative path to .hglf did not consider that and
log would fail with weird errors and paths.
For now, just don't do any largefile magic when invoked from other directories.
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 09:42:23 -0500] rev 21208
tests: add repository check for pyflakes test
If this test was run from a tarball with no Mercurial repository, it
would fail because 'hg manifest' didn't work.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 26 Apr 2014 00:38:02 -0700] rev 21207
spanset: directly use __contains__ instead of a lambda
Spanset are massively used in revset. First because the initial subset itself is
a repo wide spanset. We speed up the __and__ operation by getting rid of a
gratuitous lambda call. A more long terms solution would be to:
1. speed up operation between spansets,
2. have a special smartset for `all` revisions.
In the mean time, this is a very simple fix that buyback some of the performance
regression.
Below is performance benchmark for trival `and` operation between two spansets.
(Run on an unspecified fairly large repository.)
revset tip:0
2.9.2) wall 0.282543 comb 0.280000 user 0.260000 sys 0.020000 (best of 35)
before) wall 0.819181 comb 0.820000 user 0.820000 sys 0.000000 (best of 12)
after) wall 0.645358 comb 0.650000 user 0.650000 sys 0.000000 (best of 16)
Proof of concept implementation of an `all` smartset brings this to 0.10 but it's
too invasive for stable.
Durham Goode <durham@fb.com> [Wed, 30 Apr 2014 15:36:38 -0700] rev 21206
transaction: fix file descriptor leak for journal.backupfiles
The journal.backupfiles descriptor wasn't being closed. This resulted in
hgsubversion test runs having a bagillion descriptors open, which crashed on
platforms with low open file limits (like OSX).
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 25 Apr 2014 18:00:07 -0700] rev 21205
revset: also inline spanset._contained in __len__
For consistency with what happen in `__contains__`, we inline the range test
into `__len__` too.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 28 Apr 2014 15:15:36 -0700] rev 21204
revset: inline spanset containment check (fix perf regression)
Calling a function is super expensive in python. We inline the trivial range
comparison to get back to more sensible performance on common revset operation.
Benchmark result below:
Revision mapping:
0) 3f83fc5cfe71 2.9.2 release
1) bcfd44abad93 current @
2) This revision
revset #0: public()
0) wall 0.010890 comb 0.010000 user 0.010000 sys 0.000000 (best of 201)
1) wall 0.012109 comb 0.010000 user 0.010000 sys 0.000000 (best of 199)
2) wall 0.012211 comb 0.020000 user 0.020000 sys 0.000000 (best of 197)
revset #1: :10000 and public()
0) wall 0.007141 comb 0.010000 user 0.010000 sys 0.000000 (best of 361)
1) wall 0.014139 comb 0.010000 user 0.010000 sys 0.000000 (best of 186)
2) wall 0.008334 comb 0.010000 user 0.010000 sys 0.000000 (best of 308)
revset #2: draft()
0) wall 0.009610 comb 0.010000 user 0.010000 sys 0.000000 (best of 279)
1) wall 0.010942 comb 0.010000 user 0.010000 sys 0.000000 (best of 243)
2) wall 0.011036 comb 0.010000 user 0.010000 sys 0.000000 (best of 239)
revset #3: :10000 and draft()
0) wall 0.006852 comb 0.010000 user 0.010000 sys 0.000000 (best of 383)
1) wall 0.014641 comb 0.010000 user 0.010000 sys 0.000000 (best of 183)
2) wall 0.008314 comb 0.010000 user 0.010000 sys 0.000000 (best of 299)
We can see this changeset gains back the regression for `and` operation on
spanset. We are still a bit slowerfor the `public()` and `draft()`. Predicates
not touched by this changeset.
Matt Mackall <mpm@selenic.com> [Wed, 30 Apr 2014 14:19:01 -0500] rev 21203
ancestor: silence multiple ancestor warning outside of merge (issue4234)
The current situation is a bit of a layering violation as
merge-specific knowledge is pushed down to lower layers and leaks
merge assumptions into other code paths.
Here, we simply silence the warning with a hack. Both the warning and
the hack will probably go away in the near future when bid merge is
made the default.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 25 Apr 2014 13:44:51 -0700] rev 21202
revsetbenchmark: fix error raising
We want to display the commands, not all arguments of the function. (The old
code actually crash, failing to joining a list of lists.)
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 28 Apr 2014 16:28:52 -0700] rev 21201
revset: fix revision filtering in spanset.contains (regression)
The argument is `x` but the variable tested for filtering is `rev`. `rev`
happens to be a revset methods, ... never part of the filtered revs. This
method is now using `rev` for everything.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 28 Apr 2014 17:25:36 -0700] rev 21200
graft: do not use `.remove` on a smart set (regression)
Revset calls use to return a list. Graft use to mutate that list. We cannot do
this anymore leading to a crash when grafting multiple changeset with a revset.
File ".../mercurial/commands.py", line 3117, in graft
revs.remove(rev)
AttributeError: '_addset' object has no attribute 'remove'
We are late in code-freeze so we make the shortest possible fix by turning it
back to a list.
Greg Hurrell <glh@fb.com> [Mon, 28 Apr 2014 15:09:23 -0700] rev 21199
help: clarify distinction among `contains`/`file`/`filelog`
For a Mercurial new-comer, the distinction between `contains(x)`,
`file(x)`, and `filelog(x)` in the "revsets" help page may not be
obvious. This commit tries to make things more obvious (text based on
an explanation from Matt in an FB group thread).
Mads Kiilerich <madski@unity3d.com> [Thu, 24 Apr 2014 16:47:22 +0200] rev 21198
discovery: don't report all "unsynced" remote heads (issue4230)
8a9e0b523d2d made discovery more helpful - too helpful for some extreme use
cases.
Instead, we arbitrarily limit the list it at 4 and add 'or more'.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 23 Apr 2014 13:51:35 +0200] rev 21197
rebase: don't abort if we're asked to rebase an empty revset
The documentation says we exit 1 if we have nothing to do, so avoid
breaking that contract when we're passed an empty revset.
This was changed in http://www.selenic.com/hg/rev/a259f7b488ab to
improve the error message; keep the improved message, just not the
abort.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 25 Apr 2014 22:34:09 -0400] rev 21196
largefiles: remove directories emptied after their files are moved (issue3515)
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Apr 2014 18:13:06 +0900] rev 21195
cmdserver: forcibly use L channel to read password input (issue3161)
Command server is designed to use the channel protocol even if the server
process is accessible to tty, whereas vanilla hg should be able to read
password from tty in that case. So it isn't enough to swap sys.stdin:
# works only if the server process is detached from the console
sys.stdin = self.fin
getpass.getpass('')
sys.stdin = oldin
or test isatty:
# vanilla hg can't talk to tty if stdin is redirected
if self._isatty(self.fin):
return getpass.getpass('')
else:
...
Since ui.nontty flag is undocumented and command-server channels don't provide
isatty(), this change won't affect the other uses of ui._isatty().
issue3161 also suggests to provide some context of messages. I think it can
be implemented by using the generic templating function.
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 12:37:36 +0900] rev 21194
killdaemons: correct typo of _check() function caught by pyflakes
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 12:35:50 +0900] rev 21193
win32: add missing definition of _ERROR_NO_MORE_FILES caught by pyflakes
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 12:35:02 +0900] rev 21192
exchange: fix invalid reference to bundle2.UnknownPartError caught by pyflakes
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 11:02:40 +0900] rev 21191
match: fix NameError 'pat' on overflow of regex pattern length
'pat' was renamed to 'regex' in 9d28fd795215.
Yuya Nishihara <yuya@tcha.org> [Sun, 27 Apr 2014 15:09:48 +0900] rev 21190
color: add missing handling of stderr capture introduced by 350dc24a553d
It wouldn't raise exception without this change, but _bufferstates was wrong
because of missing _bufferstates.pop() in colorui.popbuffer().
Javi Merino <cibervicho@gmail.com> [Wed, 23 Apr 2014 20:23:30 +0100] rev 21189
hgweb: replace excanvas.js with a newer version
The current version of excanvas is unknown. Substitute it with the
latest version from the excanvas website:
http://code.google.com/p/explorercanvas/
Instead of using the "compiled" version, just use the readable one.
Mads Kiilerich <madski@unity3d.com> [Wed, 23 Apr 2014 23:29:55 +0200] rev 21188
httppeer: reintroduce _abort that accidentally was removed in 167047ba3cfa
Including the missing test coverage that would have caught it.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 16:13:15 -0700] rev 21187
bundle2: gracefully handle hook abort
We make sure any exceptions raised during the whole span of handling bundle2
processing are decorated. This let us catch exceptions raised by hooks prior to
transaction commit.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 17:51:58 -0700] rev 21186
bundle2: gracefully handle PushRaced error during unbundle
Same drill again. We catch the PushRaced error, check if it cames from
a bundle2 processing, if so we turn it into a bundle2 with a part
transporting error information to be reraised client side.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 20:04:54 -0700] rev 21185
bundle2: add an error message to push race error
Errors with no explanations makes my uncle Bob sad.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 18:59:09 -0700] rev 21184
bundle2: fix raising errors during heads checking
If the heads on the server differ from the ones reported seen by the client at
bundle time, we raise a PushRaced exception. However, the part raising the
exception was broken.
To fix it, we move the PushRaced class in the error module so it can be
accessible everywhere without an import cycle.
A test is also added to prevent regression.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 16:02:03 -0700] rev 21183
bundle2: gracefully handle UnknownPartError during unbundle
Same as for Abort error, we catch the error, encode it into a bundle2 reply
(expected by the client) and stream this reply. The client processing of the
error will raise the exception again.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 22 Apr 2014 11:41:34 -0700] rev 21182
bundle2: catch UnknownPartError during local push
When doing local push, UnknownPartError from the server will be raised directly
to the client. We need to catch them too.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 19:43:01 -0700] rev 21181
bundle2: catch UnknownPartError during pull
We narrow the exception catching while pulling.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 19:42:51 -0700] rev 21180
bundle2: catch UnknownPartError during push
We narrow the exception catching while unbundling the push reply.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 19:42:40 -0700] rev 21179
bundle2: use a more specific UnknownPartError when no handler is found
KeyError is very generic, we need something more specific for proper error
handling.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 15:59:55 -0700] rev 21178
bundle2: make error testing more modular
We have more than Abort to test.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 15:48:52 -0700] rev 21177
bundle2: gracefully handle abort during unbundle
Clients expect a bundle2 reply to their bundle2 submission. So we
catch the Abort error and turn it into a bundle2 containing a part
transporting the exception data. The unbundling of this reply will
raise the error again.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 22 Apr 2014 11:22:41 -0700] rev 21176
bundle2: decorate exception raised during bundle processing
This is a small hack to help us do some graceful error handling in bundle2
without major refactoring. See embedded comment for details.
Wagner Bruna <wbruna@softwareexpress.com.br> [Tue, 22 Apr 2014 10:14:16 -0300] rev 21175
histedit, i18n: replace '+' with concatenation to make hggettext happy
Wagner Bruna <wbruna@softwareexpress.com.br> [Tue, 22 Apr 2014 10:12:21 -0300] rev 21174
commands: fix typo in --graph description
Wagner Bruna <wbruna@softwareexpress.com.br> [Tue, 22 Apr 2014 10:12:13 -0300] rev 21173
revset, i18n: add translator comment to "only"
Mads Kiilerich <madski@unity3d.com> [Mon, 21 Apr 2014 20:24:54 +0200] rev 21172
merge: improve notes for listing the bids for ambiguous merges
Mads Kiilerich <madski@unity3d.com> [Fri, 18 Apr 2014 13:33:20 +0200] rev 21171
merge: tell the user when we are using bid merge
Bid merge is a new rarely used feature that the user explicitly enabled - we
should tell/warn when the user actually is using it, just like we tell when we
not are using it.
Give a message like
note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
Mads Kiilerich <madski@unity3d.com> [Mon, 21 Apr 2014 20:22:14 +0200] rev 21170
merge: fix stray character in bid merge message
Mads Kiilerich <madski@unity3d.com> [Mon, 21 Apr 2014 20:18:42 +0200] rev 21169
tests: better test coverage for bid merge
Martin Geisler's test case revealed the previous message argument error.
Mads Kiilerich <madski@unity3d.com> [Mon, 21 Apr 2014 19:53:19 +0200] rev 21168
merge: fix wrong number of arguments for bid merge message
Matt Mackall <mpm@selenic.com> [Mon, 21 Apr 2014 15:08:39 -0500] rev 21167
merge: fix test failures with new merge code on OS X
The case collision checker was missing a op entry for 'k'eep.
Martin Geisler <martin@geisler.net> [Sat, 19 Apr 2014 20:12:53 +0200] rev 21166
obsolete: fix one-element tuple in module docstring
Martin Geisler <martin@geisler.net> [Sat, 19 Apr 2014 19:53:46 +0200] rev 21165
obsolete: let N denote number of obsoleted changestes in a marker
The number of obsoleted changesets is referred to as N later in the
docstring.
Martin Geisler <martin@geisler.net> [Sat, 19 Apr 2014 19:52:09 +0200] rev 21164
obsolete: fix language and grammar in module docstring
Isaac Jurado <diptongo@gmail.com> [Sat, 19 Apr 2014 15:11:25 +0200] rev 21163
churn: compute padding with unicode strings
Most UTF-8 aware terminals convert multibyte sequences into a single displayed
characters. Because the first column is padded by counting bytes, the second
column is not perfectly aligned in the presence of non ASCII characters.
Matt Mackall <mpm@selenic.com> [Thu, 17 Apr 2014 19:39:04 -0400] rev 21162
Added signature for changeset 564f55b25122
Matt Mackall <mpm@selenic.com> [Thu, 17 Apr 2014 19:39:00 -0400] rev 21161
Added tag 3.0-rc for changeset 564f55b25122
Matt Mackall <mpm@selenic.com> [Thu, 17 Apr 2014 19:36:17 -0400] rev 21160
merge default into stable for 3.0 code freeze
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 16:56:15 -0400] rev 21159
bundle2: allow extensions to extend the getbundle request
We want extensions to be able to request extra parts.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:32:34 -0400] rev 21158
bundle2: add a way to add parts during a `getbundle` request
We add a hook function to let extensions add parts to the bundle.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:25:50 -0400] rev 21157
getbundle: pass arbitrary arguments all along the call chain
The wireprotocol command accepts arbitrary arguments, we are now passing such
arguments down the call chain.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:59:28 -0400] rev 21156
bundle2: call a hook after the transaction is closed
We call a dedicated hook right after closing the transaction. This will let
people react to the transaction with all the information in hand. This hook is
experimental and will not survive in future versions.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:21:39 -0400] rev 21155
bundle2: call a hook prior to closing the transaction
We call a dedicated hook right before closing the transaction. This will let
people abort unbundling with all the information in hand. This hook is
experimental and will not survive in future versions.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:16:21 -0400] rev 21154
bundle2: inform transaction that we are in a bundle2 unbundle
That way, hooks called during the unbundle process are aware that a bigger picture
is going on.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:46:26 -0400] rev 21153
changegroup: use tr.hookargs when calling changegroup hooks
So that other parties using the transaction can put information in our hook
calls.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:15:02 -0400] rev 21152
changegroup: use tr.hookargs when calling pretxnchangegroup hooks
So that other parties using the transaction can put information in our hook
calls.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:09:20 -0400] rev 21151
addchangegroup: register data in tr.hookargs
We are registering data related to the process into the transaction hook data.
This lets other parties using the same transaction get informed of the
addchangegroup result.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 17:04:59 -0400] rev 21150
transaction: add a notion of hook arguments
It is now possible to register parameters to be used when invoking hooks in this
transaction. This will cope with the fact that bundle2 adds multiple data types
in a single transaction.
Do not expect any wide and consistent usages of this in the next release. This
will be used by bundle2 experiments first. It will be made better for the release
after.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 16:54:15 -0400] rev 21149
bundle2: allow extensions to plug into the push process
Extensions are offered functions to add parts and process their results.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 16:04:58 -0400] rev 21148
bundle2: require both client and server to opt in
Even if the server is bundle2-enabled, the client now has to opt-in in the
config too.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 16:01:58 -0400] rev 21147
bundle2: move bundle2 config option to section "experimental"
We highlight the fact that this is experimental by moving it to an "experimental"
section, and we match the config name with the server capability name
`bundle2-exp`.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 15:45:12 -0400] rev 21146
bundle2: move all parts into a `bx2` namespace
All currently core parts are moved to a `bx2` namespace (for "bundle 2
experimental"). This should avoid conflicts between the final stable
format and the one about to be released.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 15:33:17 -0400] rev 21145
bundle2: rename server capability to bundle2-exp
For the same reason, we advertise this bundle2 implementation and format as
experimental. This will leave room for field testing in 3.0 but won't conflict
with a stable implementation in 3.1.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 15:27:54 -0400] rev 21144
bundle2: use HG2X in the header
The current implementation of bundle2 is still very experimental and the 3.0
freeze is yesterday. The current bundle2 format has never been field-tested, so
we rename the header to HG2X. This leaves the HG20 header available for real
usage as a stable format in Mercurial 3.1.
We won't guarantee that future mercurial versions will keep supporting this
`HG2X` format.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 02:01:38 -0400] rev 21143
bundle2: transmit capabilities to getbundle during pull
Bundle2 capabilities of the client are sent to the server in the bundlecaps
argument of `getbundle`.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 14:37:24 -0400] rev 21142
bundle2: include client capabilities in the pushed bundle
The necessary data is now included in the `replycaps` part.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:49:20 -0400] rev 21141
bundle2: advertise bundle2 caps in server capabilities
We can now retrieve them from the server during push. The capabilities are
encoded the same way as in `replycaps` part (with an extra layer of urlquoting
to escape separators).
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:50:28 -0400] rev 21140
bundle2: add bundle2caps dict on localrepo object
This dictionary will hold bundle2-related capabilities.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:44:53 -0400] rev 21139
bundle2: capabilities encoding
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:09:05 -0400] rev 21138
bundle2: extract capabilities decoding
We'll need to reuse this in more places (at least pull and push).
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:03:33 -0400] rev 21137
bundle2: protect capabilities name and values with url quoting
This lift limitations of the text based encoding.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 11:44:49 -0400] rev 21136
bundle2: support for capabilities with values
The capabilities attributes of `bundle20` is now a dictionary and the reply caps
can encode capabilities with values.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 11:32:30 -0400] rev 21135
bundle2: add capabilities support in `replycaps` part
This part now contains a list of supported capabilities.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 23:55:59 -0400] rev 21134
bundle2: adds a capabilities attribute on bundler20
This attribute conveys the capabilities supported by the destination of the
bundle. It is used to decide which parts to include in the bundle.
This is currently a set but will probably be turned into a dictionary to allow
capabilities with values.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 23:18:27 -0400] rev 21133
bundle2: include stderr when capturing handlers output
We do not discriminate between stdout and stderr yet. But this will do for now.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 23:36:57 -0400] rev 21132
ui: pushbuffer can now also capture stderr
We need an easy way to capture both stderr and stdout during bundle2 processing
of a remote bundle. This changeset adds simple changes to the `ui` class to make
this possible.
I expect the interface to change in future releases as bundle2 will probably want to
distinguish stdout and stderr. The current change will, however, do for now.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 14:22:24 -0400] rev 21131
bundle2: capture remote stdout while unbundling
When a reply is built, the bundle processing will capture the output of each
handler and sends it to the client in a dedicated part.
As a side effect, this add a "remote: " prefix to destination output on local
push. This is considered okay for now as:
1. bundle2 is still experimental,
2. Matt said he could be okay to change output for bundle2,
3. This keeps the implementation simple.
This changeset does it for stdout only. stderr will be done in a future changeset.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 14:09:35 -0400] rev 21130
bundle2: introduce `replycaps` part for on-demand reply
The bundle2 processing does not create a bundle2 reply by default anymore. It
is only done if the client requests it with a `replycaps` part. This part is
called `replycaps` as it will eventually contain data about which bundle2
capabilities are supported by the client.
We have to add a flag to the test command to control whether a reply is
generated or not.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 16 Apr 2014 18:41:48 -0400] rev 21129
bundle2: use an official iterparts method to unbundle parts
Explicit is better than implicit.
Mads Kiilerich <madski@unity3d.com> [Fri, 28 Feb 2014 02:52:32 +0100] rev 21128
merge: with merge.preferancestor=*, run an auction with bids from ancestors
The basic idea is to do the merge planning with all the available ancestors,
consider the resulting actions as "bids", make an "auction" and
automatically pick the most favourable action for each file.
This implements the basic functionality and will only consider "keep" and
"get" actions. The heuristics for picking the best action can be tweaked later
on.
By default it will only pass ctx.ancestor as the single ancestor to
calculateupdates. The code path for merging with a single ancestor is not
changed.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 28 Feb 2014 15:10:56 -0800] rev 21127
log: changed implementation to use graphlog code
Now that revsets work in a lazy way, log code can be changed to parse every
option into a revset and then evaluate it lazily.
Now expressions like
"hg log -b default -b ."
are converted into a revset using the same code as graphlog.
Mads Kiilerich <madski@unity3d.com> [Mon, 24 Feb 2014 22:42:14 +0100] rev 21126
context: introduce merge.preferancestor for controlling which ancestor to pick
Multiple revisions can be specified in merge.preferancestor, separated by
whitespace. First match wins.
This makes it possible to overrule the default of picking the common ancestor
with the lowest hash value among the "best" (introduced in 3605d4e7e618).
This can for instance help with some merges where the 'wrong' ancestor is used.
There will thus be some overlap between this and the problems that can be
solved with a future 'consensus merge'.
Mercurial will show a note like
note: using 40663881a6dd as ancestor of 3b08d01b0ab5 and adfe50279922
alternatively, use --config merge.preferancestor=0f6b37dbe527
when the option is available, listing all the alternative ancestors.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 17:32:04 +0200] rev 21125
context: tell when .ancestor picks one of multiple common ancestors heads
Show a message like
note: using 0f6b37dbe527 as ancestor of adfe50279922 and cf89f02107e5
So far this is just a warning - there is nothing the user can do to select
another ancestor.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:09 +0900] rev 21124
hgweb: align entries in "changelog" and "revisions" pages of "spartan" style
Before this patch, each log entries in "changelog" and "revisions"
pages of "spartan" style are not aligned by column, because:
- each log entries are separated "<table>" entries, and
- there are no fixed "width" information for each "<th>"/"<td>" entries
This patch aligns entries in "changelog" and "revisions" pages of
"spartan" style by:
- adding 'label' class to '<th>' for 'age' information, and
- setting 'width' of '<th class="label">' with fixed size
'class="age"' is not used for this purpose, because it is also used to
set "bold" font-weight
"16em" seems to be wide enough to show date information fully, when
web browser disables (or doesn't support) javascript.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:09 +0900] rev 21123
hgweb: show revisions and hashes gotten from changelog in "comparison" page
Before this patch, revision numbers and hash values in "comparison"
page are gotten from not changelog but filelog.
Such filelog information is useful only for hgweb debugging, and may
confuse users.
This patch shows revision numbers and hash values gotten from
changelog in "comparison" page.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:08 +0900] rev 21122
hgweb: show as same parents as "hg parents -r REV FILE" in pages for file
Before this patch, "parents" in pages for file doesn't show as same
parents as "hg parents -r REV FILE", when the specified file is not
modified in the specified revision.
For example, it is assumed that revision A, B and D change file "f".
changelog (A) ---> (B) ---> (C) ---> (D)
filelog "f" (x) ---> (y) ------------> (z)
"/file/D/f" invokes "webutil.parents()" with filectx(z) gotten from
changectx(D), and it returns changectx(B). This is as same result as
"hg parents -r D f".
In the other hand, "/file/C/f" invokes "webutil.parents()" with
filectx(y') gotten from changectx(C), and it returns changectx(A),
because filectx(y') is linked to changectx(B), and works like
filectx(y) in some cases.
In this case, revision B is hidden from users browsing file "f" in
revision C.
This patch shows as same parents as "hg parents -r REV FILE" in pages
for file, by making "webutil.parents()" return:
- "linkrev()"-ed revision only, if:
- specified context instance is "filectx" (because
"webutil.parents()" is invoked with changectx, too), and
- (1) the revision from which filectx is gotten and (2) the one to
which filectx is linked are different from each other
- revision gotten from "ctx.parents()", otherwise
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:08 +0900] rev 21121
hgweb: make "comparison" get parent from not filelog but changelog
Before this patch, "comparison" shows unexpected result, when the
specified file is not modified in the specified revision, even though
"diff" shows empty result.
When REV doesn't change specified FILE, "diff" shows:
"hg diff -c REV FILE"
but "comparison" shows:
"hg diff -c `hg parents -r REV FILE` FILE"
In other words, the former gets parent from changelog, but the latter
gets one from filelog.
This may confuse users browsing (and switching "diff" and
"comparison" of) files in the specified revision.
This patch makes "comparison" get parent from not filelog but
changelog, to show "hg diff -c REV FILE" in both "diff" and
"comparison" pages.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 17 Apr 2014 09:36:08 +0900] rev 21120
hgweb: fix lack of "bookmarks" link in "/file" page of "paper" style
This patch also fixes same problem of "coal" style, because it re-uses
"filerevision.tmpl" of "paper" style.
"gitweb" and "monoblue" styles don't have such problems.
"spartan" style doesn't have "bookmarks" page definition itself.
Aaron Jensen <ajensen@webmd.net> [Thu, 17 Apr 2014 11:48:22 -0700] rev 21119
hgweb: adding article link to rss feed
Aaron Jensen <ajensen@webmd.net> [Thu, 17 Apr 2014 11:47:49 -0700] rev 21118
hgweb: adding branch names from inbranch template to rss feed
Aaron Jensen <ajensen@webmd.net> [Thu, 17 Apr 2014 11:45:43 -0700] rev 21117
hgweb: adding branch names from inbranch template to atom feed
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21116
dirstate: report bad subdirectories as match.bad, not just a warning (BC)
This seems simpler and more correct.
The only test coverage for this is test-permissions.t when it says:
dir: Permission denied
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21115
dirstate: improve documentation and readability of match and ignore in the walker
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21114
context: remove redundant handling of match.bad return value
The 'bad' function is for reporting - it never returns anything.
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21113
match: remove last traces of unused .missing callback
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 22:00:08 +0200] rev 21112
match: _globre doctests
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21111
match: improve documentation - docstrings and more descriptive variable naming
No real changes.
pattern: 'kind:pat' as specified on the command line
patterns, pats: list of patterns
kind: 'path', 'glob' or 're' or ...
pat: string in the corresponding 'kind' format
kindpats: list of (kind, pat) tuples
Lucas Moscovicz <lmoscovicz@fb.com> [Wed, 05 Mar 2014 15:55:09 -0800] rev 21110
largefiles: changed overridelog to work with graphlog
Log for largefiles was failing for graph log since it was overriding match
instead of matchandpats.
[Mads Kiilerich modified this patch to address his review comments and ended up
rewriting/removing most of it.]
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 06 Mar 2014 14:52:07 -0800] rev 21109
largefiles: added test coverage for graph log
[Mads Kiilerich placed this patch before the patch that makes graphlog actually
work correctly for largefiles. As it is introduced here it just adds test
coverage and the actual bugfix patch will show the actual change.]
Lucas Moscovicz <lmoscovicz@fb.com> [Tue, 25 Feb 2014 10:40:04 -0800] rev 21108
cmdutil: changed _makegraphlogrevset to _makelogrevset
This method will now be used to build both graphlog and log revset after this
series of patches.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 20:01:39 +0200] rev 21107
revlog: backout 514d32de6646 - commonancestors
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 20:01:39 +0200] rev 21106
localrepo: use commonancestorsheads for checking linear heritage in file commit
If two revisions are linearly related, there will only be one ancestor, and
commonancestors and commonancestorsheads would give the same result.
commonancestorsheads is however slightly simpler, faster and more correct.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 20:01:39 +0200] rev 21105
backout: use commonancestorsheads for checking linear heritage
If two revisions are linearly related, there will only be one ancestor, and
commonancestors and commonancestorsheads would give the same result.
commonancestorsheads is however slightly simpler, faster and more correct.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 20:01:35 +0200] rev 21104
revlog: introduce commonancestorsheads method
Very similar to commonancestors but giving all the common ancestors heads.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 19:58:08 +0200] rev 21103
parsers: remove unnecessary gca variable in index_commonancestorsheads
Mads Kiilerich <madski@unity3d.com> [Mon, 24 Feb 2014 22:42:14 +0100] rev 21102
parsers: introduce index_commonancestorsheads
This is an exact copy of index_ancestors but without the final "deepest"
pruning.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 19:49:56 +0200] rev 21101
ancestors: extract candidates function as commonancestorsheads
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 14:54:46 +0200] rev 21100
filemerge: better handling of failing remove of temporary files
We have seen some failures on Windows that could seem like the unlinks of
temporary files were failing. That could perhaps be because the merge tool
somehow still held the files open.
Instead of the bare bone os.unlink, use our util.unlink with special
rename/retry handling on Windows.
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 14:54:46 +0200] rev 21099
contrib: remove mergetools.hgrc premerge=False for Beyond Compare and Araxis
There can be good reasons to disable premerge no matter which merge tool is
used. Most tools will do just fine without premerge and handle the simple
merges more or less automatic and silent. We _could_ thus disable premerge for
most tools. But without premerge, the merge tool will be launched for each file
- that makes it a slow and expensive process to perform big simple merges. It
is thus better to consistently stick to the default premerge=True.
The mergetools.hgrc configuration for most tools implicitly use the default
premerge=True but Araxis and the Linux entry for Beyond Compare had
premerge=False. These lines has been removed.
These settings were introduced by 6b354a763617 without further explanation of
why they should be good.
(We have seen some crashes on Windows with Araxis where a merge failed after a
lot of Araxis flashing. I haven't been able to reproduce it and do not know
exactly what happened. Enabling premerge avoids the problems.)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 03:05:00 +0900] rev 21098
obsolete: add '%' specifier to the format string to avoid TypeError at runtime
Mapping operation on the format string not including any '%'
specifiers causes TypeError at runtime.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 03:05:00 +0900] rev 21097
check-code: detect "% inside _()" when there are leading whitespaces
Before this patch, "contrib/check-code.py" can't detect "% inside _()"
correctly, when there are leading whitespaces before the format
string, like below:
_(
"format string %s" % v)
This patch adds regexp pattern "[ \t\n]*" before the pattern matching
against the format string.
"[\s\n]" can't be used in this purpose, because "\s" is automatically
replaced with "[ \t]" by "_preparepats()" and "\s" in "[]" causes
nested "[]" unexpectedly.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 03:05:00 +0900] rev 21096
i18n: fix "% inside _()" problem
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21095
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Apr 2013 13:18:25 +0200] rev 21094
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21093
largefiles: remove dummy assignments for creating an already existing closure
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21092
largefiles: remove silent handling of incorrect invocation of restorematchfn
It is better to get a crash than to continue without noticing errors.
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21091
largefiles: copy override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21090
largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com> [Sat, 27 Apr 2013 23:19:52 +0200] rev 21089
largefiles: use more reasonable locking for update
Mads Kiilerich <madski@unity3d.com> [Sat, 27 Apr 2013 23:19:52 +0200] rev 21088
largefiles: full debugdirstate functionality for largefiles
- just reusing the original command with a mockup repo.
This makes it possible to see dates in the lfdirstate and gives less code
duplication.
Mads Kiilerich <madski@unity3d.com> [Sat, 27 Apr 2013 23:19:52 +0200] rev 21087
largefiles: make cat on standins do something
cat of a standin would silently fail.
The use of standins is mostly an implementation detail, but it is already a bit
leaking. Being able to see the content of standins might be convenient for
debugging.
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21086
largefiles: remove confusing handling of .bad return value - it is void
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21085
largefiles: fix profile of unused largefilesdirstate._ignore
Mads Kiilerich <madski@unity3d.com> [Tue, 08 Apr 2014 00:48:36 +0200] rev 21084
largefiles: import whole modules instead of importing parts of them
Be more friendly to demandimport.
Mads Kiilerich <madski@unity3d.com> [Thu, 18 Apr 2013 18:56:18 +0200] rev 21083
largefiles: update should only create a .orig backup of a largefile once
A .orig of a standin after the update do that a .orig of the actual largefile
is created. The .orig standin was however never removed again and the largefile
.orig was thus overwritten again and again.
The fix: remove the standin .orig when it is used.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 02:12:28 +0200] rev 21082
merge: let manifestmerge emit 'keep' actions when keeping wd version
Such a 'keep' action will later be the preferred (non)action when there
is multiple ancestors. It is thus very convenient to have it explicitly.
The extra actions will only be emitted in the case where the local file has
changed since the ancestor but the other hasn't. That is the symmetrical
operation to a 'get' action.
This will create more action tuples that not really serve a purpose. The number
of actions will however have the number of changed files as upper bound and it
should thus not increase the memory/cpu use significantly.
Mads Kiilerich <madski@unity3d.com> [Sun, 06 Apr 2014 13:39:51 +0200] rev 21081
merge: pass merge ancestor to calculateupdates as a list
The list will so far always have one element.
Mads Kiilerich <madski@unity3d.com> [Sun, 06 Apr 2014 13:39:51 +0200] rev 21080
merge: move ancestor selection tweaking from manifestmerge to update function
- passing it through calculateupdates.
This will make sure manifestmerge actually use the ancestor it is given.
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21079
match: make it more clear what _roots do and that it ends up in match()._files
Matt Harbison <matt_harbison@yahoo.com> [Tue, 15 Apr 2014 23:29:19 -0400] rev 21078
cat: explicitly document the supported formatter rules
The previous documentation pointed to the export command, but even if the user
recognized that instead of only reading the cat specific list of rules, not all
of the export rules applied anyway (specifically %N, %n and %m). The new items
are a copy/paste from export's list. These rules have existed since at least
version 0.5.
Note that %m gets substituted with 'None' because the commit message isn't
passed to cmdutil.makefilename(). %R and %r are currently effectively the same,
since no revwidth is passed, however they both work.
There aren't any existing tests for these rules, so they are added to prevent
future regression.
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Apr 2014 01:10:08 +0200] rev 21077
convert: backout 81cf597dafa9 and a3545c3104aa -closemap
Closemap solves a very specific use case. It would be better to have a more
generic solution than to have to maintain this forever.
Closemap has not been released yet and removing it now will not break any
backward compatibility contract.
There is no test coverage for closemap but it seems like the same can be
achieved with a simple and much more powerful custom extension:
import hgext.convert.hg
class source(hgext.convert.hg.mercurial_source):
def getcommit(self, rev):
c = super(source, self).getcommit(rev)
if rev in ['''
d643f67092ff123f6a192d52f12e7d123dae229f
9117c6561b0bd7792fa13b50d28239d51b78e51f
f368a1c302d5b87506f7edb13769e591e063d7ea
''']:
c.extra = c.extra.copy()
c.extra['close'] = '1'
return c
hgext.convert.hg.mercurial_source = source
Mads Kiilerich <madski@unity3d.com> [Wed, 16 Apr 2014 01:09:49 +0200] rev 21076
convert: backout b75a04502ced and 9616b03113ce - tagmap
Tagmap solves a very specific use case. It would be better to have a more
generic solution than to have to maintain this forever.
Tagmap has not been released yet and removing it now will not break any
backward compatibility contract.
There is no test coverage for tagmap but it seems like the same can be achieved
with a (relatively) simple and much more powerful custom extension:
import hgext.convert.hg
def f(tag):
return tag.replace('some', 'other')
class source(hgext.convert.hg.mercurial_source):
def gettags(self):
return dict((f(tag), node)
for tag, node in in super(source, self).gettags().items())
def getfile(self, name, rev):
data, flags = super(source, self).getfile(name, rev)
if name == '.hgtags':
data = ''.join(l[:41] + f(l[41:]) + '\n' for l in data.splitlines())
return data, flags
hgext.convert.hg.mercurial_source = source
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 11:53:10 -0400] rev 21075
bundle2: support for push over the wire
We use the new method defined in the past changeset to send a bundle2 stream and
receive one in reply. The http version is missing remote output support. This
will be done later using a bundle part.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 17:53:52 -0400] rev 21074
httppeer: support for _calltwowaystream
This new method is now supported by http too.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 17:18:35 -0400] rev 21073
sshpeer: add implementation of _calltwowaystream
This implements the call needed by bundle2. The error handling is a bit flaky
right now, but bundle2 error handling in general is still flaky anyway. Bundle2
is still disabled by default, I do not expect this to be a problem.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 17:19:46 -0400] rev 21072
wireproto: add a _calltwowaystream method on wirepeer
This method will be used by bundle2 pushes. It calls a command, feeds it with a
stream and receives another stream in reply.
Actual implementation for ssh and http will be done in later changesets.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 16:49:30 -0400] rev 21071
bundle2: return a bundle20 object from exchanges.unbundle
When a bundle2 is pushed we return a bundle instead of an integer. We use to
return a binary stream. We now return a `bundle20` bundler to make the life of
wireprotocol implementation simpler.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 16:42:52 -0400] rev 21070
bundle2: feed a binary stream to `peer.unbundle`
This input will have to travel over the wire anyway, so we feed the peer method
with a simple binary stream and rely on the server side to use `readbundle`
to create the python object.
The test output changes because the bundle is created marginally sooner and the
debug output interleaves in a different way.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 15:20:33 -0400] rev 21069
bundle2: allow bundle2 for pulling over the wire
This changeset makes `wireprotocol` peers advertise bundle2 capability and
comply with bundle2 `getbundle` requests.
Note that advertising bundle2 could make a client try to use it for push. Such
pushes would fail. However, I do not expect any human being to have enabled
bundle2 on their server yet.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 11:27:55 -0400] rev 21068
bundle2: return a stream from exchange.getbundle
For friendliness with the wire protocol implementation, the `exchange.getbundle` now
returns a binary stream when asked for a bundle2. We detect a bundle2 request and
upgrade the binary stream to an unbundler object.
In the future the unbundler may gain feature to look like a binary stream, but
we are not quite there yet.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 13:57:15 -0400] rev 21067
bundle2: let readbundle return unbundle20
The `readbundle` function can now recognize a bundle2 stream and return the
appropriate unbundler. This is required for proper bundle2 support over the
wire.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 13:54:54 -0400] rev 21066
bundle2: make header reading optional
The `readbundle` function will consume the 4 first bytes to dispatch between
various unbundler. We introduce a way to inform `unbundle20` that the header
has been read and it can be trusted.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 15 Apr 2014 13:42:45 -0400] rev 21065
bundle2: prepare readbundle to return more that one type of bundle
We first read 4 bytes to get the `HG10` bytes then we read the compression scheme
if this is `HG10`. This prepares the code for the arrival of `HG20` handling.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 14 Apr 2014 15:45:30 -0400] rev 21064
bundle2: add a ui argument to readbundle
The bundle2 unbundler needs a ui argument. We are now passing this information
to `readbundle`.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 14 Apr 2014 15:33:50 -0400] rev 21063
bundle2: move `readbundle` into the `exchange` module
The `readbundle` function is going to understand the bundle2 header. We move the
function to a more suitable place before making any other changes.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 14 Apr 2014 14:46:32 -0400] rev 21062
bundle2: use headerless HG10UN stream in changegroup
Using `readbundle` in the part handlers creates a circular import hell. We are
now using a simple `HG10UN` stream with no header. Some parameters may
later be introduced on the part to change parameter.
Producers are updated as well.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 10 Apr 2014 10:53:43 -0700] rev 21061
bundle2: allow using bundle2 for push
We now support bundle2 for local push. The unbundle function has to detect
which version of the bundle to use since the return type is different.
Note that push error handling is currently nonexistent. This is one of the
reasons why bundle2 is still disabled by default.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 06:43:01 -0700] rev 21060
bundle2: add a "check:heads" handler
This part is intended to hold the same role as the `heads` argument of the
unbundle function. The client fill it with the known heads at bundle time and
the server will abort if its heads changed.
Pierre-Yves David <pierre-yves.david@fb.com> [Sun, 13 Apr 2014 16:36:51 -0400] rev 21059
repoview: make the conversion from node to rev explicit while computing hidden
You cannot use `repo[...]` lookup here. 1. It is slow 2. It is very likely to
trigger a hidden computation itself, entering an infinite loop.
Pierre-Yves David <pierre-yves.david@fb.com> [Sun, 13 Apr 2014 16:39:31 -0400] rev 21058
repoview: drop duplicated lookup
We are already looking for local tags on the line above. We can safely drop
this extra lookup.
Aaron Jensen <ajensen@webmd.net> [Wed, 16 Apr 2014 09:32:04 -0700] rev 21057
hgweb: adding branch, tags, bookmarks, user, and file list to rss feed entries
Aaron Jensen <ajensen@webmd.net> [Wed, 16 Apr 2014 09:31:37 -0700] rev 21056
hgweb: adding branch, tags, bookmarks, user, and file list to atom feed entries
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:10:20 +0200] rev 21055
patchbomb: warn when emailing a dirty working directory parent
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 00:19:54 +0100] rev 21054
tests: coverage of convert and filemap include and the default of include all
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21053
largefiles: remove no more referred "getoutgoinglfiles()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21052
largefiles: use "outgoinghooks" to avoid redundant outgoing check
Before this patch, "hg outgoing" invokes "findcommonoutgoing()" not
only in "commands.outgoing()" but also in
"overrides.overrideoutgoing()" (via "getoutgoinglfiles()"), when
largefiles is enabled. The latter is redundant.
This patch uses "outgoinghooks" to avoid redundant outgoing check.
Newly introduced function "overrides.outgoinghook()" is registered
into "outgoinghooks" to get the result of outgoing check in
"commands.outgoing()".
It invokes "lfutil.getlfilestoupload()" directly with the result of
outgoing check to avoid redundant outgoing check in
"getoutgoinglfiles()": "sort()" is needed, because
"lfutil.getlfilestoupload()" doesn't sort the result of it.
This patch also omits "if toupload is None" ("No remote repo") case,
because failure of looking remote repository up should raise exception
in "commands.outgoing()" before invocation of "outgoinghooks".
Newly added "hg outgoing --large --graph" tests examine
"outgoinghooks" invocations in "hg outgoing --graph" code path.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21051
outgoing: introduce "outgoinghooks" to avoid redundant outgoing check
This patch introduces "outgoinghooks" to avoid redundant outgoing
check for "hg outgoing" in other than "commands.outgoing" (or utility
functions used by it).
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21050
hg: make "_outgoing()" return peer object for remote repository
This patch makes "_outgoing()" return peer object for remote
repository, to avoid re-execution "expandpath()", "parseurl()", and
"peer()" on caller side for specified URL.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21049
hg: make "_outgoing()" return empty list instead of "None"
This patch makes "_outgoing()" return empty list instead of "None", if
there are no outgoing changesets, because:
- returning "None" requires callers to examine whether returned
value is "None" or not explicitly, if callers want to execute loop
on returned value, but
- there are no explicit needs to return "None"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21048
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
Before this patch, "hg summary --remote --large" invokes
"findcommonoutgoing()" not only in "commands.summary()" but also in
"overrides.overridesummary()" (via "getoutgoinglfiles()"). The latter
is redundant.
This patch uses "summaryremotehooks" to avoid redundant outgoing check.
Newly introduced function "overrides.summaryremotehook()" is
registered into "summaryremotehooks" to get the result of outgoing
check in "commands.summary()".
It invokes "lfutil.getlfilestoupload()" directly with the result of
outgoing check to avoid redundant outgoing check in
"getoutgoinglfiles()".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21047
summary: introduce "summaryremotehooks" to avoid redundant incoming/outgoing check
This patch introduces "summaryremotehooks" to avoid redundant
incoming/outgoing check for "hg summary" in other than
"commands.summary".
Only if "--remote" is not specified for "hg summary", hooks registered
in "summaryremotehooks" are invoked with "None" as "changes" argument
at first, and they should return tuple of two booleans meaning
"whether incomings are needed" and "whether outgoings are needed".
If no hooks return tuple containing "True", "hg summary" does nothing
any more, because incoming/outgoing check is not needed.
Otherwise, hooks are invoked again: at this time, "changes" argument
refers the result of incoming/outgoing check.
This patch also prevents RepoError from being raised if "--remote" is
not specified for "hg summary", because of backward compatibility for
"hg summary --large" without "--remote".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21046
util: enable "hooks" to return list of the values returned from each hooks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21045
summary: separate checking incoming/outgoing and showing remote summary
This patch separates checking incoming/outgoing and showing remote
summary, as a preparation for refactoring in succeeding patches,
because:
- checking incoming/outgoing may be needed, even if "--remote" is
not specified for "hg summary"
- checking incoming/outgoing may not be needed simultaneously
"hg summary --large" without "--remote" is typical case for these.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21044
largefiles: reuse "findcommonoutgoing()" result at "hg push"
Before this patch, "hg push" invokes "findcommonoutgoing()" not only
in "exchange.push()" but also in "lfilesrepo.push()", when largefiles
is enabled. The latter is redundant.
This patch registers own "prepushoutgoinghook" function into
"prepushoutgoinghooks" of "localrepository" to reuse
"findcommonoutgoing()" result.
"prepushoutgoinghook" omits "changelog.nodesbetween()" invocation,
because "findcommonoutgoing()" invocation in "exchange.push()" takes
"onlyheads" argument and it considers "nodesbetween()".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21043
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
This patch introduces "prepushoutgoinghooks" to extend outgoing check
before pushing changesets to remote easily.
This chooses the function returning "util.hooks" instead of the one to
be overridden.
The latter may cause problems silently, if one of overriders forgets
(or fails) to execute a kind of "super(xxx, self).overridden(...)". In
the other hand, the former can ensure that all registered functions
are invoked, unless one of them raises an exception.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 00:37:24 +0900] rev 21042
largefiles: centralize the logic to get outgoing largefiles
Before this patch, "overrides.getoutgoinglfiles()" (called by
"overrideoutgoing()" and "overridesummary()") and "lfilesrepo.push()"
implement similar logic to get outgoing largefiles separately.
This patch centralizes the logic to get outgoing largefiles in
"lfutil.getlfilestoupload()".
"lfutil.getlfilestoupload()" takes "addfunc" argument, because each
callers need different information (and it is useful for enhancement
in the future).
- "overrides.getoutgoinglfiles()" needs only filenames
- "lfilesrepo.push()" needs only hashes of largefiles
Matt Harbison <matt_harbison@yahoo.com> [Fri, 14 Mar 2014 21:32:05 -0400] rev 21041
cat: support cat with explicit paths in subrepos
The cat command with an explicit path into a subrepo is now handled by invoking
cat on the file, from that subrepo. The previous behavior was to complain that
the file didn't exist in the revision (of the top most repo). Now when the file
is actually missing, the revision of the subrepo is named instead (though it is
probably desirable to continue naming the top level repo).
The documented output formatters %d and %p reflect the path from the top level
repo, since the purpose of this is to give the illusion of a unified repository.
Support for the undocumented (for cat) formatters %H, %R, %h, %m and %r was
added long ago (I tested back as far as 0.5), but unfortunately these will
reflect the subrepo node instead of the parent context.
The previous implementation was a bit loose with the return value, i.e. it would
return 0 if _any_ file requested was cat'd successfully. This maintains that
behavior.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 13 Mar 2014 23:45:18 -0400] rev 21040
cat: move most of the implementation into cmdutils.cat()
This will allow access to the reusable parts from subrepos, similar to add(),
forget(), etc.
Kent Frazier <kentfrazier@gmail.com> [Tue, 15 Apr 2014 17:51:27 -0400] rev 21039
tests: mark test in tests/test-help.t as contingent on gettext being available
Kent Frazier <kentfrazier@gmail.com> [Tue, 15 Apr 2014 16:27:12 -0400] rev 21038
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Sean Farley <sean.michael.farley@gmail.com> [Mon, 14 Apr 2014 18:21:26 -0500] rev 21037
color: add effect to the template symbol table
Previously, words like 'red' had to be protected by quotes before passing to
the label template function. Now, we add color effects to the symbol table so
that commands like,
$ hg log -r . -T "{label(red, node|short)}\n"
can work without the need for quoting.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 02:38:11 +0900] rev 21036
amend: invoke editor forcibly when "--edit" option is specified
422981492ace introduces "--edit" option into "hg commit", but it
doesn't work for "hg commit --amend", because 422981492ace prepares
for editor invocation only around "commitfunc()" internal function,
which is used only for temporary amend commit by "cmdutil.amend()".
Actual commit message editing is executed in "cmdutil.amend()".
This patch invokes editor forcibly when "--edit" option is specified
for "hg commit --amend", even if commit message is specified
explicitly by "--message" or "--logfile".
This patch also removes useless handling for commit message and editor
invocation around "commitfunc()" internal function.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 02:04:41 +0900] rev 21035
commit: abolish useless "--force-editor" internal option for "hg commit"
"--force-editor" option for "hg commit" has been useless since
12721a20ed30, which makes "commands.tag()" invoke "cmdutil.commit()"
directly instead of "commands.commit()" with "--force-editor" internal
option.
This patch abolishes useless "--force-editor" internal option for "hg
commit".
Matt Mackall <mpm@selenic.com> [Tue, 15 Apr 2014 14:15:35 -0400] rev 21034
subrepo: return non-zero exit code when a subrepo push doesn't succeed
Matt Mackall <mpm@selenic.com> [Mon, 14 Apr 2014 23:27:31 -0400] rev 21033
debugrevlog: use unfiltered view for changelog
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 00:13:38 +0100] rev 21032
debugrevlog: format columns (more) nicely when dumping index data
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 22 Mar 2014 17:14:37 -0700] rev 21031
branchmap: log events related to branch cache
The blackblox log will now contain log events when the branch caches are
updated and written.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 14 Apr 2014 11:50:05 -0700] rev 21030
tags: log events related to tags cache
We now log when .hg/cache/tags data is built from scratch by reading
manifests and when the file is written.
Matt Mackall <mpm@selenic.com> [Mon, 14 Apr 2014 15:14:02 -0400] rev 21029
merge with stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 15 Apr 2014 03:21:59 +0900] rev 21028
histedit: save manually edited commit message into ".hg/last-message.txt"
Before this patch, manually edited commit message for "message"
command in histedit-ing is not saved into ".hg/last-message.txt" until
it is saved by "localrepository.savecommitmessage()" in
"localrepository.commit()".
This may lose such commit message, if unexpected exception is raised.
This patch saves manually edited commit message for "message" comand
in histedit-ing into ".hg/last-message.txt" just after user editing.
This is the simplest implementation to fix on stable. Editing and
saving commit message should be centralized into the framework of
"localrepository.commit()" with "editor" argument in the future.
This patch uses repository wrapping class for exception raising before
saving commit message in "localrepository.commit()" easily and
certainly, because such exception requires corner case condition.
Mads Kiilerich <madski@unity3d.com> [Tue, 26 Nov 2013 03:18:56 +0100] rev 21027
rebase: tell when reopening a closed branch head
Give same 'reopening closed branch head X' message as commit gives.
Mads Kiilerich <madski@unity3d.com> [Sat, 27 Apr 2013 23:19:52 +0200] rev 21026
dirstate: inline local finish function
Having it as a local function adds no value.
Mads Kiilerich <madski@unity3d.com> [Tue, 08 Apr 2014 01:35:13 +0200] rev 21025
demandimport: make it possible to disable by setting HGDEMANDIMPORT=disable
Convenient for debugging weird problems that are caused by demandimport or
obfuscated by it.
This is an undocumented developer feature.
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 19:01:00 +0200] rev 21024
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 19:01:00 +0200] rev 21023
tests: warn on invalid #if directive
Simon Heimberg <simohe@besonet.ch> [Mon, 25 Nov 2013 22:00:46 +0100] rev 21022
run-tests: test result shows when a failed test could not start a server
Failing to start a server happens regularly, at least on windows buildbot.
Such a failure often has nothing to do with the test, but with the environment.
But half the test output can change because some data is missing. Therefore this
is worth an extended error message.
Detect the server failure in the diff output because it is most reliable
there. Checking the output only does not show if the server failure was
expected.
Old failure message when server start failed:
Failed test-serve.t: output changed
New message:
Failed test-serve.t: serve failed and output changed
"Bradley M. Kuhn" <bkuhn@ebb.org> [Sun, 08 Sep 2013 19:02:08 -0400] rev 21021
commit: --edit/-e to force edit of otherwise-supplied commit message
The --edit/-e option for the 'commit' command forces editor, even when a
commit message has been provided already by other means, such as by the -m or
-l options.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 12 Apr 2014 00:38:15 -0400] rev 21020
bundle2: directly feed part to readbundle
Now that part payload can be read like a stream, we can directly use it to feed
the unbundle10 process.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 16:05:22 -0400] rev 21019
bundle2: lazy unbundle of part payload
The `unbundle` part gains a `read` method to retrieve payload content.
This method behaves as a python file-like read method.
The bundle-processing code is updated to make sure a part is fully consumed before
another one is extracted.
Test output changes because the debug output is even more interleaved now.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 10 Apr 2014 22:10:26 -0700] rev 21018
util: support None size in chunkbuffer.read()
When no size is provided, read the whole buffer. This aligns with the usual
behavior of `read()` in python.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 15:02:26 -0400] rev 21017
bundle2: lazily iterate over bundle parts in the test
We used to create a list to know the number of parts in the bundle. This prevents
any lazy reading as planned for real usage.
The list creation is dropped. Some test output changed as debug output is
now interleaved with command output.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 15:47:38 -0400] rev 21016
bundle2: move unpackheader closure into the class
With the same argument as the other one, we move this closure into the
`unbundlepart` class.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 15:46:09 -0400] rev 21015
bundle2: move the fromheader closure into the class itself
The class is now directly related to this header data. We can sanely move it on
the class.
I do not like closures very much...
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 15:43:16 -0400] rev 21014
bundle2: add an unbundle part responsible from unbundling part
We have a new unbundle class and it is now responsible from extracting its own
data. The top level bundler only extracts the header (to detect an end of stream
marker) then leaves everything else to the `unbundlepart` class. The ultimate
goal is to have `unbundlepart` responsible for lazily extracting its payload.
This is mostly code movement.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 15:19:54 -0400] rev 21013
bundle2: extract stream/unpack logic in an unpackermixin
The coming `unbundlepart` will need the same kind of method than `unbundle20`
for unpacking data from the stream. We extract them into a mixin class before
the creation of `unbundlepart`.
Pierre-Yves David <pierre-yves.david@fb.com> [Sun, 13 Apr 2014 12:21:09 -0400] rev 21012
exchange: restore truncated comment
The old version of this comment appeared to have been trunca
Takumi IINO <trot.thunder@gmail.com> [Mon, 31 Mar 2014 01:00:05 +0900] rev 21011
grep: highlight all matched words
"hg grep" highlights first matched word only.
This behavior is different from GNU grep.
This patch makes highlight all matched words.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 23 Jan 2014 14:09:53 -0800] rev 21010
phase: add a passing test for (issue3575)
Apparently this issue was fixed along the way (If it ever existed at all…)
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Mar 2014 22:12:37 -0700] rev 21009
run-tests: allow test paths in other directories
Previously, test paths were assumed to be in the same directory and
wouldn't have a directory component. If a path with a directory
component was specified, it would be filtered out. This change allow
paths to contain directories. This in turn allows tests from other
directories to be executed.
Executing tests in other directories may break assumptions elsewhere in
the testing code. However, on initial glance, things appear to "just
work." This approach of running tests from other directories is
successfully being used at
https://hg.mozilla.org/hgcustom/version-control-tools/file/7085790ff3af/run-mercurial-tests.py
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Mar 2014 21:52:28 -0700] rev 21008
run-tests: allow option parser to be extended
This patch moves the OptionParser population into its own function so
consumers may modify the OptionParser before arguments are evaluated.
This will allow consumers to add custom options, set different defaults,
etc.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Mar 2014 21:41:56 -0700] rev 21007
run-tests: use return values instead of sys.exit
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Mar 2014 21:37:33 -0700] rev 21006
run-tests: Pass arguments into argument parser
Before, arguments were not passed into the optparse.OptionParser
instance and were coming from sys.argv. This patch enables consumers to
define the list of arguments to parse without having to adjust sys.argv.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 07:36:14 -0700] rev 21005
bundle2: rename part to bundlepart
We are going to introduce an `unbundlepart` dedicated to reading bundle. So we
need to rename the one used to create bundle. Even if dedicated to creation, this
is still used for unbundling until we get the new class.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 16:43:01 -0400] rev 21004
bundle2: comment to clarify why the handler call is where it is
The reason why it is here is not obvious. I'm the one who wrote it there in the
first place and almost moved it 2 weeks later.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 12 Apr 2014 00:53:15 -0400] rev 21003
bundle2: use chunkbuffer for exchange.getbundle
We can use `util.chunkbuffer` instead.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 12 Apr 2014 14:56:55 -0400] rev 21002
bundle2: lazily generate the changegroup part in exchange.getbundle
Now that we have lazy generation of parts, let's use it.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 08:04:16 -0700] rev 21001
bundle2: support chunk iterator as part data
When the `part.data` attribute is an iterator, we assume it is an iterator of
chunks and use it.
We use a chunkbuffer to yield chunks of 4096 bytes.
The tests are updated to use this feature.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 10 Apr 2014 12:33:20 -0700] rev 21000
bundle2: extract a _payloadchunks method for part
We are preparing streaming capability for part. So the generation of payload
chunk will becomes more complex. We extract this part in its own function before
any changes.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 10 Apr 2014 13:19:00 -0700] rev 20999
changegroup: move chunk extraction into a getchunks method of unbundle10
This code used to be in `writebundle` only. We needs to make it more broadly
available for bundle2. The "changegroup" bundle2 part has to retrieve the
binary content of changegroup stream. We moved the chunks retrieving code into
the `unbundle10` object directly and the `writebundle` code is now using that.
This split is useful for bundle2 purpose, we want to be able to easily stream
changegroup content in a part.
To keep thing simples, we kept compression out of the new methods. If it make
more sense in the future, compression may get included in this function too.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 25 Mar 2014 15:05:11 -0700] rev 20998
bundle2: use reply part to return result of addchangegroup
We now have an official way to return the result of addchangegroup. The tests are
updated to check that the return bundle is properly created. It will be used
when push is bundle2 enabled.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 04 Apr 2014 14:24:11 -0700] rev 20997
bundle2: produce a bundle2 reply
We do not know yet what kind of data future features and extensions will need to
exchange. To handle that, bundle2 allows to send arbitrary content to the
server. As a consequence, we need to be able to reply arbitrary content to the
client. And, we can use bundle2 to transmit those arbitrary data.
When a client will push a bundle2 to the server, the server will reply with a
bundle2 itself.
This changeset installs the first stone of this logic and test it.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 08:24:59 -0700] rev 20996
bundle2: add reply awareness to unbundlerecords
We need an efficient way to handle bundle replies. The unbundle records class is
extended to carry such data.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 00:07:17 -0700] rev 20995
bundle2: add an integer id to part
For sending response to a pushed bundle, we need to link reply parts to request
part. We introduce a part id for this purpose. This is a 32 bit unique
integer stored in the header.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:10:20 +0200] rev 20994
largefiles: don't prompt when one side of merge was changed but didn't change
This can happen after backout or grafts or criss cross merges. We already do
the same (but slightly different) thing in manifestmerge and filemerge.
Sean Farley <sean.michael.farley@gmail.com> [Mon, 07 Apr 2014 15:37:27 -0500] rev 20993
color: fallback and test label as an effect
With this changeset, we can now send a color name directly to the label
function, e.g.
$ hg log -r . -T "{label('red', node|short)}\n"
Sean Farley <sean.michael.farley@gmail.com> [Mon, 07 Apr 2014 15:33:46 -0500] rev 20992
color: extract method for determining a valid effect
This patch is just setup work so that we can reduce code duplication and have
one place to define a valid effect.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:17:51 +0200] rev 20991
revlog: use context ancestor instead of changelog ancestor
We want to move in this direction.
Mads Kiilerich <madski@unity3d.com> [Tue, 25 Feb 2014 20:31:53 +0100] rev 20990
copies: guard debug section with ui.debugflag
Mads Kiilerich <madski@unity3d.com> [Tue, 25 Feb 2014 20:31:51 +0100] rev 20989
copies: remove _checkcopies wrapper - it does no good
mergecopies might be doomed but it is not dead yet ...
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:17:51 +0200] rev 20988
transplant: use context ancestor instead of changelog ancestor
We want to move in this direction. ctx.ancestor is in a better position for
handling a situation with multiple ancestors.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:17:51 +0200] rev 20987
commit: use revlog.commonancestors instead of .ancestor
This do probably not make any real difference but is slightly more correct and
we would like to get rid of flog.ancestor.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:17:51 +0200] rev 20986
backout: don't limit heritage check to a single ancestor
This do probably not make any real difference but is slightly more correct and
we would like to get rid of changelog.ancestor.
Mads Kiilerich <madski@unity3d.com> [Thu, 20 Mar 2014 01:35:07 +0100] rev 20985
ancestor: remove unused genericancestor
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:17:48 +0200] rev 20984
context: remove unused filectx.ancestor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 09 Mar 2014 01:03:28 +0900] rev 20983
shelve: add "writebundle()" to invoke "writebundle()" with relative path and vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 09 Mar 2014 01:03:28 +0900] rev 20982
shelve: add "applybundle()" to invoke "readbundle()" with relative path and vfs
"applybundle()" also includes "addchangegroup()" invocation to
encapsulate "vfs.join()" inside it.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 09 Mar 2014 01:03:28 +0900] rev 20981
bundlerepo: treat temporarily extracted bundle file via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 09 Mar 2014 01:03:28 +0900] rev 20980
vfs: add "mkstemp()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 09 Mar 2014 01:03:28 +0900] rev 20979
repair: make "strip()" treat bundle files via vfs
This patch makes "repair.strip()" treat bundle files via vfs.
This patch also avoids applying "vfs.join()" on the value returned by
"changegroup.writebundle()", to get relative path from "_bundle()".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 09 Mar 2014 01:03:28 +0900] rev 20978
changegroup: add "vfs" argument to "readbundle()" to pass relative filename
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 09 Mar 2014 01:03:28 +0900] rev 20977
repair: make paths in "_bundle()" relative to ".hg"
This patch makes paths below in "_bundle()" relative to ".hg":
- backup directory ("strip-backup"), and
- bundle file under backup directory
"vfs" is passed to "changegroup.writebundle()" to use relative path
directly.
This patch applies "vfs.join()" on the value returned by "_bundle()",
because the caller expect it to return absolute path.
This will be changed by succeeding patch changing the caller side.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 09 Mar 2014 01:03:28 +0900] rev 20976
changegroup: add "vfs" argument to "writebundle()" for relative access via vfs
Before this patch, filename specified to "changegroup.writebundle()"
should be absolute one.
In some cases, they should be relative to repository root, store and
so on (backup before strip, for example).
This patch adds "vfs" argument to "writebundle()", and makes
"writebundle()" open (and unlink) "filename" via vfs for relative
access, if both filename and vfs are specified.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 09 Mar 2014 01:03:28 +0900] rev 20975
localrepo: make "undofiles()" return list of tuples "(vfs, relative filename)"
Before this patch, "localrepository.undofiles()" returns list of
absolute filename of undo files.
This patch makes it return list of tuples "(vfs, relative filename)"
to access undo files via vfs.
This patch also changes "repair.strip()", which is the only user of
"localrepository.undofiles()".
Matt Mackall <mpm@selenic.com> [Fri, 11 Apr 2014 17:20:15 -0400] rev 20974
exchange: fix pyflakes import complaint
Wei, Elson <elson.wei@gmail.com> [Thu, 10 Apr 2014 15:12:12 +0800] rev 20973
hgweb: override the charset attribute in the http request
The default http request character set is UTF-8. If the message is not encoded
in UTF-8, such as big5, it cannot be shown correctly. The 'charset' is
overridden by the root document's, such that the user can select the proper
encoding in the browser.
Matt Mackall <mpm@selenic.com> [Fri, 11 Apr 2014 16:38:55 -0400] rev 20972
diff: use second filename for --stat reporting on git patches (issue4221)
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 11 Apr 2014 13:43:41 -0400] rev 20971
exchange: drop useless line break
Matt Mackall <mpm@selenic.com> [Fri, 11 Apr 2014 15:38:18 -0400] rev 20970
subrepo: check return code for git push (issue4223)
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 04 Apr 2014 17:50:44 -0700] rev 20969
localrepo: add unbundle support
Localrepo now supports the unbundle method of pushing changegroups. We
plan to use the unbundle call for bundle2 so it is important that all
peers supports it. The `peer.unbundle` and `peer.addchangegroup` code
path have small difference so cause some test output changes. None of those
changes seems problematic.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 04 Apr 2014 17:28:59 -0700] rev 20968
unbundle: extract the core logic in another function
The `exchange` module now contains an `unbundle` function that holds the core
unbundle logic. The wire protocol keeps its own unbundle function. It enforces
wireprotocol-specific logic and then calls the extracted function.
This aims at implementing unbundle for localrepo.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 04 Apr 2014 17:15:25 -0700] rev 20967
unbundle: extract checkheads in its own function
We are going to refactor the unbundle function to have it working on
a local repository too. Having this function extracted will ease the process.
In the case of non-matching heads, the function now directly raises an
exception. The top level of the function is catching it.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 07 Apr 2014 18:10:50 -0700] rev 20966
phase: apply publishing enforcement for "serve" source
When a changegroup is added by a push on a publishing server, we ensure they
are added as public. This is used to enforce publishing on server when the
client is not aware of phases. It also prevents race conditions where a reader
could see the changesets as draft before they get turned public by the client.
Finally, this save rounds trip as the client does not need additional request to
turn them public.
However, this logic was only enforced when the changegroup was from a "push"
source. And "push" is used for local pushes only. Wireprotocol push uses "serve"
as source since Mercurial 1.9. We now enforce this logic for both "push" and
"serve" sources.
One could note that this logic was mainly useful during wireprotocol exchanges.
So this code is finally put into good use, 9 versions after its introduction.
Matt Mackall <mpm@selenic.com> [Thu, 10 Apr 2014 12:41:39 -0400] rev 20965
merge with stable
Stéphane Klein <contact@stephane-klein.info> [Fri, 20 Dec 2013 14:56:05 +0100] rev 20964
http: reuse authentication info after the first failed request (issue3567)
[This was applied in 181108726ea5 but backed out again in af02783dea65 because
of Python 2.4 issues. This edition and test-http.t works with Python 2.4.]
Context: mercurial access to repository server with http access, and this
server is protected by basic auth.
Before patch:
* mercurial try an anonymous access to server, server return 401 response and
mercurial resend request with login / password information
After patch:
* mercurial try an anonymous access to server, server return
401 response. For all next requests, mercurial keep in memory this
information (this server need basic auth information).
This patch reduce the number of http access against mercurial server.
Example, before patch:
10.10.168.170 - - [25/Oct/2013:15:44:51 +0200] "GET /hg/testagt?cmd=capabilities
HTTP/1.1" 401 260 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:44:52 +0200] "GET /hg/testagt?cmd=capabilities
HTTP/1.1" 200 147 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:00 +0200] "GET /hg/testagt?cmd=capabilities
HTTP/1.1" 401 260 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:01 +0200] "GET /hg/testagt?cmd=capabilities
HTTP/1.1" 200 147 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:03 +0200] "GET /hg/testagt?cmd=batch
HTTP/1.1" 401 260 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:04 +0200] "GET /hg/testagt?cmd=batch
HTTP/1.1" 200 42 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:06 +0200] "GET /hg/testagt?cmd=getbundle
HTTP/1.1" 401 260 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:07 +0200] "GET /hg/testagt?cmd=getbundle
HTTP/1.1" 200 61184 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:09 +0200] "GET /hg/testagt?cmd=listkeys
HTTP/1.1" 401 260 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:10 +0200] "GET /hg/testagt?cmd=listkeys
HTTP/1.1" 200 15 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:12 +0200] "GET /hg/testagt?cmd=listkeys
HTTP/1.1" 401 260 "-" "mercurial/proto-1.0"
10.10.168.170 - - [25/Oct/2013:15:45:12 +0200] "GET /hg/testagt?cmd=listkeys
HTTP/1.1" 200 - "-" "mercurial/proto-1.0"
Example after patch:
10.10.168.170 - - [28/Oct/2013:11:49:14 +0100] "GET /hg/testagt?cmd=capabilities
HTTP/1.1" 401 260 "-" "mercurial/proto-1.0"
10.10.168.170 - - [28/Oct/2013:11:49:15 +0100] "GET /hg/testagt?cmd=capabilities
HTTP/1.1" 200 147 "-" "mercurial/proto-1.0"
10.10.168.170 - - [28/Oct/2013:11:49:17 +0100] "GET /hg/testagt?cmd=batch
HTTP/1.1" 200 42 "-" "mercurial/proto-1.0"
10.10.168.170 - - [28/Oct/2013:11:49:19 +0100] "GET /hg/testagt?cmd=getbundle
HTTP/1.1" 200 61184 "-" "mercurial/proto-1.0"
10.10.168.170 - - [28/Oct/2013:11:49:22 +0100] "GET /hg/testagt?cmd=listkeys
HTTP/1.1" 200 15 "-" "mercurial/proto-1.0"
10.10.168.170 - - [28/Oct/2013:11:49:24 +0100] "GET /hg/testagt?cmd=listkeys
HTTP/1.1" 200 - "-" "mercurial/proto-1.0"
In this last example, you can see only one 401 response.
Durham Goode <durham@fb.com> [Tue, 08 Apr 2014 13:05:29 -0700] rev 20963
bundle2: use discard to remove bundle2 cap
caps.remove('bundle2') was throwing an exception if bundle2 wasn't present in
the capabilities. This was causing test-static-http.t to hang. Let's just use
discard, so we don't get an exception.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 07 Apr 2014 11:45:50 -0700] rev 20962
statichttp: respect localrepo _restrictcapabilities
The static http repository was doing his own filtering of capability ignoring
the filtering done in the local repo main class. This led to static http using
the current draft of bundle2. We now apply both.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:10:20 +0200] rev 20961
tests: make unshelve tests more tricky - don't depend on size change
One reason shelve and largefiles doesn't work could be rapidly changing standin
files. Prove that shelve in general doesn't have problems with that.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:10:20 +0200] rev 20960
shelve: introduce secret option for using fixed date for temporary commit
Using a fixed date makes hashes stable and makes debugging simpler. The date
and hashes of this changeset are normally not exposed.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:10:20 +0200] rev 20959
mq: repo['.'] is not a wctx, repo[None] is
The parameters passed to subrepo.submerge are confusing anyway.
Mads Kiilerich <madski@unity3d.com> [Mon, 07 Apr 2014 23:10:20 +0200] rev 20958
shelve: repo['.'] is not a wctx but a pctx
Don't confuse hackers!
Matt Mackall <mpm@selenic.com> [Mon, 07 Apr 2014 14:18:10 -0500] rev 20957
revlog: deal with chunk ranges over 2G on Windows (issue4215)
Python uses a C long (32 bits on Windows 64) rather than an ssize_t in
read(), and thus has a 2G size limit. Work around this by falling back
to reading one chunk at a time on overflow. This approximately doubles
our headroom until we run back into the size limit on single reads.
Durham Goode <durham@fb.com> [Fri, 04 Apr 2014 16:41:51 -0700] rev 20956
exchange: pass bundlecaps through to changegroup
The bundlecaps passed to exchange.getbundle were being dropped completely. We
should pass them on through to the changegroup.
This affected the remotefilelog extension, since it relies on those bundlecaps.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 23:41:32 -0700] rev 20955
bundle2: allow pulling changegroups using bundle2
This changeset refactors the pull code to use a bundle2 when available. We keep
bundle2 disabled by default. The current code is not ready for prime time.
Ultimately we'll want to unify the API of `bunde10` and `bundle20` to have less
different code. But for now, testing the bundle2 exchange flow is an higher
priority.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 04 Apr 2014 01:51:54 -0700] rev 20954
bundle2: add an exchange.getbundle function
This function can return a `HG10` or `HG20` bundle. It uses the `bundlecaps`
parameters to decides which one to return.
This is a distinct function from `changegroup.getbundle` for two reasons. First
the APIs of `bundle10` and `bundle20` are not compatible yet. The two functions
may be reunited in the future. Second `exchange.getbundle` will grow parameters
for all kinds of data (phases, obsmarkers, ...) so it's better to keep the
changegroup generation in its own function for now.
This function will be used it in the next changesets.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 04 Apr 2014 01:33:20 -0700] rev 20953
localpeer: propagate bundlecaps in getbundle call
Best arguments are the ones in use...
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 02 Apr 2014 23:56:49 -0700] rev 20952
bundle2: make it possible have a global transaction for the unbundling
We use the `gettransaction` method approach already used for pull. We
need this because we do not know beforehand if the bundle needs a
transaction to be created. And (1) we do not want to create a
transaction for nothing. (2) Some bundle2 bundles may be read-only and
do not require any lock or transaction to be held.
Matt Mackall <mpm@selenic.com> [Fri, 04 Apr 2014 17:47:19 -0500] rev 20951
tests: fix test output typo
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 24 Mar 2014 19:37:59 -0700] rev 20950
bundle2: first crude version of bundling changeset with bundle2
The current changegroup format is put in a "changegroup" part and processed by
an appropriate handlers.
This is not production ready code, but let us start smoke testing.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 02 Apr 2014 22:37:50 -0700] rev 20949
bundle2: record processing results in the bundleoperation object
Part handlers can now add records to the `bundleoperation` object. This can be
used to help other parts or to let the caller of the unbundling process react
to the results.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 02 Apr 2014 22:24:44 -0700] rev 20948
bundle2: introduce a bundleoperation object
This object will hold all data and state gathered through the processing of a
bundle. This will allow:
- each handler to be aware of the things unbundled so far
- the caller to retrieve data about the execution
- bear useful object and logic (like repo, transaction)
- bear possible bundle2 reply triggered by the unbundling.
For now the object is very simple but it will grow at the same time as the
bundle2 implementation.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 02 Apr 2014 13:50:57 -0700] rev 20947
bundle2: feed a unbundle20 to the `processbundle` function
The unbundle can comes from multiple sources. (on disk file, peer, etc) and
(ultimately) of multiple type (bundle10, bundle20). The `processbundle` is no
longer in charge of creating the bundle.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 03 Apr 2014 17:25:47 -0700] rev 20946
bundle2: lock the repo during unbundle test
We forgot the lock the repo. It's not too bad during tests, but the lock also
still carry some transaction logic. (yes we need to get rid of this)
Mads Kiilerich <madski@unity3d.com> [Sun, 02 Mar 2014 18:52:16 +0100] rev 20945
merge: keep destination filename as key in filemerge actions
Gives more readable debug output and makes it possible to compare/merge actions
later.
Mads Kiilerich <madski@unity3d.com> [Sun, 02 Mar 2014 18:49:36 +0100] rev 20944
merge: keep destination filename as key in actions for merge with dir rename
Avoids
None: local renamed directory to b/c -> d
updating:None 1/1 files (100.00%)
and makes it possible to compare/merge actions later.
Mads Kiilerich <madski@unity3d.com> [Fri, 28 Feb 2014 02:38:33 +0100] rev 20943
merge: include ancestor node in merge actions
Matt Mackall <mpm@selenic.com> [Fri, 04 Apr 2014 14:01:25 -0500] rev 20942
merge with stable
Sean Farley <sean.michael.farley@gmail.com> [Fri, 28 Mar 2014 12:51:05 -0500] rev 20941
repoview: use _gethiddenblockers in computehidden
No functionality has changed, since we've only extracted the code into its own
function. Now extensions can wrap _gethiddenblockers to provide their own
blocker without polluting bookmarks or local tags.
Sean Farley <sean.michael.farley@gmail.com> [Thu, 03 Apr 2014 20:07:42 -0500] rev 20940
repoview: add _gethiddenblockers method
This is a standalone function that will provide the ability for extensions to
wrap.
Sean Farley <sean.michael.farley@gmail.com> [Thu, 27 Mar 2014 20:14:55 -0500] rev 20939
repoview: improve performance for computehidden (issue4206)
For repos with a large number of heads (including hidden heads), a stale tag
cache would cause computehidden to be drastically slower because of a the call
to repo.tags() (which would build the tag cache).
We actually don't need the tag cache for computehidden because we filter out
global tags. This patch replaces the call to repo.tags with readlocaltags so
as to avoid the tag cache.
Sean Farley <sean.michael.farley@gmail.com> [Thu, 03 Apr 2014 20:35:56 -0500] rev 20938
tests: remove unused variables from test-pathencode.py caught by pyflakes
Sean Farley <sean.michael.farley@gmail.com> [Thu, 03 Apr 2014 20:32:56 -0500] rev 20937
shelve: remove unused variable caught by pyflakes
Sean Farley <sean.michael.farley@gmail.com> [Thu, 03 Apr 2014 20:29:03 -0500] rev 20936
changegroup: remove unused variable caught by pyflakes
Andrew Shadura <andrew@shadura.me> [Sat, 15 Mar 2014 18:27:51 +0100] rev 20935
hgk: use hg export to write commits
Instead of calling internal command, use hg export to produce changeset
diffs compatible with hg import directly.
Andrew Shadura <andrew@shadura.me> [Tue, 25 Mar 2014 22:47:59 +0100] rev 20934
hgk: add .diff extension when exporting commits
Append the .diff extension automatically.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 15:27:53 -0700] rev 20933
localrepo: move the addchangegroup method in changegroup module
This is a gratuitous code move aimed at reducing the localrepo bloatness.
The method had few callers, not enough to be kept in local repo.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 15:21:56 -0700] rev 20932
localrepo: move the addchangegroupfiles method in changegroup module
This is a gratuitous code move aimed at reducing the localrepo bloatness.
The method had a single caller, far too few for being kept in local repo.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 15:08:27 -0700] rev 20931
localrepo: move the changegroup method in changegroup module
This is a gratuitous code move aimed at reducing the localrepo bloatness.
The method had few callers, not enough to be kept in local repo.
The peer API stay unchanged.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 14:40:35 -0700] rev 20930
localrepo: move the getbundle method in changegroup module
This is a gratuitous code move aimed at reducing the localrepo bloatness.
The method had few callers, not enough to be kept in local repo.
The peer API remains unchanged.
Matt Mackall <mpm@selenic.com> [Thu, 03 Apr 2014 12:59:12 -0500] rev 20929
store: drop unused existing list
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 14:33:23 -0700] rev 20928
localrepo: move the getlocalbundle method in changegroup module
This is a gratuitous code move aimed at reducing the localrepo bloatness.
The method had 3 callers total, far too few for being kept in local repo.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 14:25:03 -0700] rev 20927
localrepo: move the changegroupsubset method in changegroup module
This is a gratuitous code move aimed at reducing the localrepo bloatness.
The method had few callers, not enough to be kept in local repo.
The peer API remains unchanged.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 14:13:34 -0700] rev 20926
localrepo: move the changegroupinfo method in changegroup module
This is a gratuitous code move aimed at reducing the localrepo bloatness.
The method had a single caller... already in this changegroup module.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 13:59:55 -0700] rev 20925
localrepo: move the _changegroupsubset method in changegroup module
This is a gratuitous code move aimed at reducing the localrepo bloatness.
The method had 3 callers total, far too few for being kept in local repo.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 13:45:48 -0700] rev 20924
push: pass a `pushoperation` object to localrepo.checkpush
The `pushoperation` object contains strictly more data the arguments currently
passed to `localrepo.checkpush` we pass the new object instead. This function is
used by MQ to abort push that includes MQ changesets.
Note: extension that may use this function will have to align.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:43:30 -0700] rev 20923
wireproto: use decorator for the ubundle command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:43:11 -0700] rev 20922
wireproto: use decorator for the stream command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:42:55 -0700] rev 20921
wireproto: use decorator for the pushkey command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:42:38 -0700] rev 20920
wireproto: use decorator for the lookup command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:42:21 -0700] rev 20919
wireproto: use decorator for the listkeys command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:42:06 -0700] rev 20918
wireproto: use decorator for the known command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:40:44 -0700] rev 20917
wireproto: use decorator for the hello command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:40:31 -0700] rev 20916
wireproto: use decorator for the heads command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:40:07 -0700] rev 20915
wireproto: use decorator for the getbundle command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:39:06 -0700] rev 20914
wireproto: use decorator for the debugwireargs command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:38:40 -0700] rev 20913
wireproto: use decorator for the changegroupsubset command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:38:19 -0700] rev 20912
wireproto: use decorator for the changegroup command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:37:28 -0700] rev 20911
wireproto: use decorator for the capabilities command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:37:02 -0700] rev 20910
wireproto: use decorator for the branches command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:36:41 -0700] rev 20909
wireproto: use decorator for the branchmap command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:36:05 -0700] rev 20908
wireproto: use decorator for the between command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:35:36 -0700] rev 20907
wireproto: use decorator for the batch command
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:30:11 -0700] rev 20906
wireproto: add decorator for wire protocol command
Move move in the same direction we took for command line commands. each wire
protocol function will be decorated with its name and arguments.
Beside beside easier to read, this open the road to easily adding more metadata
(like security level or return type)
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 14:24:13 -0700] rev 20905
wireproto: drop the _decompress method in favor a new call type
We already have multiple call function for multiple return type. The
`_decompress` function is only used for http and seems like a layer violation.
We drop it in favor of a new call type dedicated to "stream that may be useful to
compress".
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 12:29:34 -0700] rev 20904
wireproto: document protocol specific function of wirepeer
Those function are explicitly declared and documented now.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 11:10:33 -0700] rev 20903
wireproto: introduce an abstractserverproto class
sshserver and webproto now inherit from an abstractserverproto class. This class
is introduced for documentation purpose.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 11:37:42 -0700] rev 20902
wireproto: document possible return type
The wireprotocole command use a small set of class as return value. We document
the meaning of each of them.
AS my knowledge of wire protocol is fairly shallow, the documentation can
probably use improvement. But this is a better than nothing.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 18:56:19 -0700] rev 20901
pull: add a set of steps that remain to be done during the pull
With bundle2 we'll slowly move current steps into a single bundle2 building and
call (changegroup, phases, obsmarkers, bookmarks). But we need to keep the
old methods around for servers that do not support bundle2. So we introduce
this set of steps that remains to be done.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 17:35:25 -0700] rev 20900
pull: put discovery step in its own function
The discovery is a full step that will grow to contain more than changesets. We
set it in its own function like all other steps.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 17:28:21 -0700] rev 20899
pull: move the cgresult logic in _pullchangeset
Logical follow up of the previous changeset. The `_pullchangeset` is now
responsible of setting the `pullop.cgresult`.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 17:21:52 -0700] rev 20898
pull: move return code in the pull operation object
With bundle2 we'll have multiple code path susceptible to be responsible for
adding changeset during the pull. We move it to the pull operation to simplify
this the coming logic. The one doing the adding the changegroup will set the
value.
Mads Kiilerich <madski@unity3d.com> [Tue, 25 Feb 2014 20:30:08 +0100] rev 20897
merge: use ancestor filename from planning phase instead of filectx ancestor
test-merge-types.t changes a bit in flag merging. It relied on the
implementation detail that 100% identical revlog entries are reused. The revlog
reuse did that fctx.ancestor() saw an ancestor where there really not was one.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 02 Apr 2014 00:01:21 -0700] rev 20896
tests: prevent test-hup from hanging forever if the transaction does not start
If the transaction fails to start because of some programing errors, the test
would stay stuck in this while loop forever.
We now added a basic safeguard that abort the loop if nothing happen in 10
seconds. 10 seconds sounds enough to let the server catch up and open a
transaction.
Durham Goode <durham@fb.com> [Mon, 31 Mar 2014 16:03:34 -0700] rev 20895
revset: improve roots revset performance
Previously we would iterate over every item in the subset, checking if it was in
the provided args. This often meant iterating over every rev in the repo.
Now we iterate over the args provided, checking if they exist in the subset.
On a large repo this brings setting phase boundaries (which use this revset
roots(X:: - X::Y)) down from 0.8 seconds to 0.4 seconds.
The "roots((tip~100::) - (tip~100::tip))" revset in revsetbenchmarks shows it
going from 0.12s to 0.10s, so we should be able to catch regressions here in the
future.
This actually introduces a regression in 'roots(all())' (0.2s to 0.26s) since
we're now using spansets, which are slightly slower to do containment checks on.
I believe this trade off is worth it, since it makes the revset O(number of
args) instead of O(size of repo).
Durham Goode <durham@fb.com> [Tue, 25 Mar 2014 14:10:01 -0700] rev 20894
revset: improve _descendants performance
Previously revset._descendants would iterate over the entire subset (which is
often the entire repo) and test if each rev was in the descendants list. This is
really slow on large repos (3+ seconds).
Now we iterate over the descendants and test if they're in the subset.
This affects advancing and retracting the phase boundary (3.5 seconds down to
0.8 seconds, which is even faster than it was in 2.9). Also affects commands
that move the phase boundary (commit and rebase, presumably).
The new revsetbenchmark indicates an improvement from 0.2 to 0.12 seconds. So
future revset changes should be able to notice regressions.
I removed a bad test. It was recently added and tested '1:: and reverse(all())',
which has an amibiguous output direction. Previously it printed in reverse order,
because we iterated over the subset (the reverse part). Now it prints in normal
order because we iterate over the 1:: . Since the revset itself doesn't imply an
order, I removed the test.
Durham Goode <durham@fb.com> [Mon, 31 Mar 2014 16:29:39 -0700] rev 20893
revsetbenchmark: remove python 2.7 dependency
revsetbenchmark.py used check_output which only exists in python 2.7. This
fixes it.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 24 Mar 2014 17:20:15 -0700] rev 20892
bundle2: read the whole bundle from stream on abort
When the bundle processing abort on unknown mandatory parts, we now makes sure
all the bundle content is read. This avoid leaving the communication channel in
an unrecoverable state.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 24 Mar 2014 13:02:02 -0700] rev 20891
bundle2: add some distinction between mandatory and advisory part
Mandatory part cannot be ignored when unknown. We raise a simple KeyError
exception when this happen.
This is very early version of this logic, see inline comment for future
improvement lead.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 24 Mar 2014 15:51:00 -0700] rev 20890
bundle2: introduce a `parthandler` decorator
Simple syntax sugar to register an handler for a new part type.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 24 Mar 2014 12:25:33 -0700] rev 20889
bundle2: first version of a bundle processing
We now have a function that interpret part content.
This is a version early version of this function. It'll see major changes in
scope and API in future development. As for previous I'm just focussing on
getting minimal logic setup. Refining will happen with real world usage.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 24 Mar 2014 11:27:00 -0700] rev 20888
bundle2: rename unbundle2 test command to statbundle2
We will introduce object to actually process the bundle, we need to keep the
simplistic unbundle around for the test.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Apr 2014 00:08:15 -0700] rev 20887
bundle2: safely read unpack data from part header
We use the same approach that the other unpack, as function is given the struct
format and his both responsible for reading the right amount of data from the
header and unpack the struct.
This give use flexibility if we decide to change the size of something in the
format before the release.
Matt Mackall <mpm@selenic.com> [Wed, 02 Apr 2014 13:41:23 -0500] rev 20886
transaction: drop extra import caught by pyflakes
Durham Goode <durham@fb.com> [Mon, 24 Mar 2014 15:43:15 -0700] rev 20885
fncache: clean up fncache during strips
Previously the fncache was cleaned up at read time by noticing when it was out
of sync. This caused writes to happen outside the scope of transactions and
could have caused race conditions. With this change, we'll keep the fncache
up-to-date as we go by removing old entries during repair.strip.
Durham Goode <durham@fb.com> [Mon, 24 Mar 2014 15:35:07 -0700] rev 20884
caches: invalidate store caches when lock is taken
The fncache was not being properly invalidated each time the lock was taken, so
in theory it could contain old data from prior to the caller having the lock.
This changes it to be invalidated as soon as the lock is taken (same as all our
other caches).
Durham Goode <durham@fb.com> [Mon, 24 Mar 2014 15:42:13 -0700] rev 20883
fncache: move fncache writing to be in a transaction
Previously the fncache was written at lock.release time. This meant it was not
tracked by a transaction, and if an error occurred during the fncache write it
would fail to update the fncache, but would not rollback the transaction,
resulting in an fncache that was not in sync with the files on disk (which
causes verify to fail, and causes streaming clones to not copy all the revlogs).
This uses the new transaction backup mechanism to make the fncache transacted.
It also moves the fncache from being written at lock.release time, to being
written at transaction.close time.
Durham Goode <durham@fb.com> [Mon, 24 Mar 2014 15:21:51 -0700] rev 20882
transaction: add support for non-append files
This adds support for normal, non-append-only files in transactions. For
example, .hg/store/fncache and .hg/store/phaseroots should be written as part of
the transaction, but are not append only files.
This adds a journal.backupfiles along side the normal journal. This tracks which
files have been backed up as part of the transaction. transaction.addbackup()
creates a backup of the file (using a hardlink), which is later used to recover
in the event of the transaction failing.
Using a seperate journal allows the repository to still be used by older
versions of Mercurial. A future patch will use this functionality and add tests
for it.
Durham Goode <durham@fb.com> [Mon, 24 Mar 2014 15:57:47 -0700] rev 20881
transaction: add onclose/onabort hook for pre-close logic
Adds an optional onclose parameter to transactions that gets called just before
the transaction is committed. This allows things that build up data over the
course of the transaction (like the fncache) to commit their data.
Also adds onabort. It's not used, but will allow extensions to hook into onclose
and onabort to provide transaction support.
Durham Goode <durham@fb.com> [Mon, 24 Mar 2014 15:38:20 -0700] rev 20880
clone: put streaming clones in a transaction
Streaming clones were writing to files outside of a transaction. Soon the
fncache will be written at transaction close time, so we need streaming clones
to be in a transaction.
Durham Goode <durham@fb.com> [Mon, 24 Mar 2014 15:31:47 -0700] rev 20879
fncache: remove the rewriting logic
The fncache could rewrite itself during a read operation if it noticed any
entries that were no longer on disk. This was problematic because it caused
Mercurial to perform write operations outside the scope of a lock or
transaction, which could interefere with any other pending writes.
This will be replaced in a future patch by logic that cleans up the fncache
as files are deleted during strips.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 15:55:32 -0700] rev 20878
pull: prevent duplicated entry in `op.pulledsubset`
In the bare pull case we could add the same node multiple time to the
`pulloperation.pulledsubset`. Beside being a bit wrong this confused the new
revset implementation of `revset._revancestor` into giving bad result.
This changeset fix the pull operation part. The fix for the revset itself will
come in another changeset.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 20 Mar 2014 01:24:45 -0700] rev 20877
bundle2: part params
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 19 Mar 2014 23:36:15 -0700] rev 20876
bundle2: support for bundling and unbundling payload
We add the ability to bundle and unbundle a payload in parts. The payload is the
actual binary data of the part. It is used to convey all the applicative data.
For now we stick to very simple implementation with all the data fit in single
chunk. This open the door to some bundle2 testing usage. This will be improved before
bundle2 get used for real. We need to be able to stream the payload in multiple
part to exchange any changegroup efficiently. This simple version will do for
now.
Bundling and unbundling are done in the same changeset because the test for
parts is less modular. However, the result is not too complex.
Matt Mackall <mpm@selenic.com> [Tue, 01 Apr 2014 17:59:06 -0500] rev 20875
merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 01 Apr 2014 17:57:04 -0500] rev 20874
Added signature for changeset 3f83fc5cfe71
Matt Mackall <mpm@selenic.com> [Tue, 01 Apr 2014 17:56:55 -0500] rev 20873
Added tag 2.9.2 for changeset 3f83fc5cfe71
Yuya Nishihara <yuya@tcha.org> [Sat, 08 Mar 2014 18:52:16 +0900] rev 20872
backout: correct commit status of no changes made (BC) (issue4190)
If backout generated no changes to commit, it showed wrong status, "changeset
<target> backs out changeset <target>", and raised TypeError with -v option.
This changes the return code to 1, which is the same as "hg commit" and
"hg rebase".
Yuya Nishihara <yuya@tcha.org> [Sat, 08 Mar 2014 18:41:56 +0900] rev 20871
backout: document return code of merge conflict
Matt Mackall <mpm@selenic.com> [Tue, 01 Apr 2014 15:11:19 -0500] rev 20870
merge with stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 01 Apr 2014 02:46:03 +0900] rev 20869
i18n: fix "% inside _()" problems
Before this patch, "contrib/check-code.py" can't detect these
problems, because the regexp pattern to detect "% inside _()" doesn't
suppose the case that format string consists of multiple string
components concatenated implicitly or explicitly,
This patch does below for that regexp pattern to detect "% inside _()"
problems in such case.
- put "+" into separator part ("[ \t\n]") for explicit concatenation
("...." + "...." style)
- enclose "component and separator" part by "(?:....)+" for
concatenation itself ("...." "...." or "...." + "....")
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 01 Apr 2014 02:46:03 +0900] rev 20868
i18n: fix "% inside _()" problems
Before this patch, "contrib/check-code.py" can't detect these
problems, because the regexp pattern to detect "% inside _()" doesn't
suppose the case that the format string and "%" aren't placed in the
same line.
This patch replaces "\s" in that regexp pattern with "[ \t\n]" to
detect "% inside _()" problems in such case.
"[\s\n]" can't be used in this purpose, because "\s" is automatically
replaced with "[ \t]" by "_preparepats()" and "\s" in "[]" causes
nested "[]" unexpectedly.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 01 Apr 2014 02:46:03 +0900] rev 20867
merge: fix lack of "%s" in format string causing TypeError at runtime
Wagner Bruna <wbruna@softwareexpress.com.br> [Tue, 01 Apr 2014 13:27:12 -0300] rev 20866
i18n-pt_BR: synchronized with c57c9cece645
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 31 Mar 2014 21:03:39 +0900] rev 20865
i18n-ja: synchronized with e259d4c462b5
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 19 Mar 2014 23:04:03 -0700] rev 20864
bundle2: support unbundling empty part
We augment the unbundler to make it able to unbundle the empty part we are now
able to bundle.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 28 Mar 2014 17:00:13 -0700] rev 20863
revset: raise ValueError when calling min or max on empty smartset
min([]) raise a ValueError, we do the same thing in smartset.min() and
smartset.max() for the sake of consistency.
The min/amax test are greatly improved in the process to prevent this familly
of regression
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 20 Mar 2014 18:44:25 -0700] rev 20862
revpair: smartset compatibility
Since recent revset changes, revrange now return a smartset. This smart set
probably does not support indexing (_addset does not). This led to crash.
Instead when the smartset is ordered we use the `min` and `max` method of
smart set. Otherwise we turn is into a list and use indexing on it.
The tests have been updated to catch such regression.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 28 Mar 2014 16:12:05 -0700] rev 20861
revsetbenchmark: add entry for ::rev::
Revsets of the form ::rev:: were identified as the source behind the
regressions in issue 4201. Ensure we have explicit coverage of that
revset.
Kevin Bullock <kbullock@ringworld.org> [Mon, 31 Mar 2014 10:12:07 -0500] rev 20860
merge with stable
This should correct an earlier couple of bad merges (5433856b2558 and
596960a4ad0d, now pruned) that accidentally brought in a change that had
been marked obsolete (244ac996a821).
Sean Farley <sean.michael.farley@gmail.com> [Fri, 28 Mar 2014 14:33:27 -0500] rev 20859
tests: use TESTTMP instead of TESTDIR
In 57d0c8c3b947, f042d4b263f4, 1e686e55780c, and 5d22cadd1938, new tests were
added that used TESTDIR instead of TESTTMP thereby leading to polluting the
working directory with these temporary files. Now, we use TESTTMP so that they
will be cleaned up properly.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 29 Mar 2014 01:20:07 +0900] rev 20858
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
Since changeset 6f72e7d28b35, "reposetup()" of each extensions is
invoked only on repositories enabling corresponded extensions.
This causes that largefiles specific interactions between the
repository enabling largefiles locally and remote (wire) peer fail,
because there is no way to know whether largefiles is enabled on the
remote repository behind the wire peer, and largefiles specific
"wireproto functions" are not given to any wire peers.
To avoid this problem, largefiles should be enabled in wider scope
than each repositories (e.g. user-wide "${HOME}/.hgrc").
This patch introduces "wirepeersetupfuncs" to setup wire peer by
extensions already enabled. Functions registered into
"wirepeersetupfuncs" are invoked for all wire peers.
This patch uses plain list instead of "util.hooks" for
"wirepeersetupfuncs", because the former allows to control order of
function invocation by order of extension enabling: it may be useful
for workaround of problems with combination of enabled extensions
Sean Farley <sean.michael.farley@gmail.com> [Thu, 27 Mar 2014 17:21:27 -0500] rev 20857
templater: raise error for unknown func
Previously, if a template '{foo()}' was given, the buildfunc would not be able
to match it and hit a code path that would not return so it would error out
later in the templater stating that NoneType was not iterable. This patch makes
sure that a proper error is raised so that the user can be informed.
Tests have been updated.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 14:29:33 -0700] rev 20856
bundle2: support bundling of empty part (with a type)
Here start the work on bundle2 parts. Our first step is to be able to bundle a simplistic
part that just have a type, no parameters, empty payload.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 18:51:49 -0700] rev 20855
revsetbenchmark: add a summary at the end of execution
The summary list timing per revset making it much more easier to compare
revision to each other.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 18:39:56 -0700] rev 20854
revsetbenchmark: retrieve the benchmark value in python
We retrieve the output of the perf extension and print it ourself. This open the
door to processing of this data in the script.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 18:36:19 -0700] rev 20853
revsetbenchmark: get revision to benchmark in a function
And move it to proper subprocess call.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 18:27:17 -0700] rev 20852
revsetbenchmark: convert revision display to proper subprocesscall
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 18:26:18 -0700] rev 20851
revsetbenchmark: convert performance call to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 18:14:15 -0700] rev 20850
revsetbenchmark: convert update to proper subprocess call
Matt Mackall <mpm@selenic.com> [Thu, 27 Mar 2014 16:52:24 -0500] rev 20849
revsetbenchmark: fix semicolon
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 18:03:30 -0700] rev 20848
revsetbenchmark: simplify and convert the script to python
The script is now in python. That translation is very raw, more improvement to
comes:
The "current code" and "base" entry have been dropped. This is trivial to get
same result using a tagged revision or "." in the list of benchmarked revision.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 16:38:08 -0700] rev 20847
revsetbenchmapi: fix template
The revision description missed an \n
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 17:25:11 -0700] rev 20846
perf: unroll the result in perfrevset
With the new lazy revset implementation, we need to actually read all elements
to trigger all the computations. Otherwise a no-op if of course much faster than
the full work.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 20 Mar 2014 18:55:28 -0700] rev 20845
_addset: add a __len__ method
Back in the time where repo.revs(...) returned a list, calling `len(...)` on the
result was quite common. We reinstall this on _addset.
There is absolutely no easy way to test this from the command line. The commands
using this in the evolve extension will eventually land into core.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 19 Mar 2014 17:53:45 -0700] rev 20844
bundle2: implement the mandatory/advisory logic for parameter
Parameter starting with an upper case are mandatory, the one starting with a
lower case are advisory and may be ignored.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 19 Mar 2014 17:11:49 -0700] rev 20843
bundle2: print debug information during unbundling
The unbundler class is now feed with an ui object and use it to transmit data
about the unbundling process.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 19:07:10 -0700] rev 20842
bundle2: print debug information during bundling
The bundler class is now feed with an ui object and use it to transmit data
about the bundling process.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 19 Mar 2014 02:36:21 -0700] rev 20841
bundle2: add ability to write to a file to the test
Next changesets are about improving debug output during bundling. We won't be
able to simply bundle to stdin in this case. The bundle2 stream would be
interleaved with debug output.
Siddharth Agarwal <sid0@fb.com> [Fri, 21 Mar 2014 16:09:17 -0700] rev 20840
subrepo: factor out Git version check to add doctests
Followup to 6a2acb0d9352::e5641536e4d5.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 15 Feb 2014 19:51:20 +0900] rev 20839
contrib: add "hgperf" command to measure performance of commands easily
Newly added "hgperf" command repeats "dispatch.runcommand()" for
specified Mercurial command and measure performance of it in the same
manner of "contrib/perf.py" extension.
Users (mainly developers) can examine performance of the target
command easily, without adding new entry for it to "contrib/perf.py"
extension.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 15 Feb 2014 19:54:14 +0900] rev 20838
grep: exit loop immediately, if matching is found in the file for "hg grep -l"
Before this patch, internal function "display()" of "hg grep" is not
efficient for "-l"/"--files-with-matches", because loop is continued,
even after the first matching is found in the specified file.
This patch exits loop immediately, if matching is found for
"--files-with-matches".
In this case, "before is None" is equal to "opts.get('files_with_matches')".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 15 Feb 2014 19:54:05 +0900] rev 20837
grep: use "found" instead of "filerevmatches" examination for efficiency
Before this patch, internal function "display()" of "hg grep" stores
whether matching is already found or not into the dictionary
"filerevmatches" by "(fn, rev)" tuple as the key.
But this is redundant, because:
- "filerevmatches" is local variable of "display()", so each
"display()" invocations don't affect others
- both "fn" and "rev" (gotten from "ctx" argument) are never changed
in each "display()" invocations
Then, "filerevmatches" should have only one entry at most, and "(fn,
rev) in filerevmatches" should be equal to "found".
This patch uses "found" instead of "filerevmatches" examination for
efficiency.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 15 Feb 2014 19:52:36 +0900] rev 20836
grep: reuse the first "util.binary()" result for efficiency
Before this patch, to check whether the file in the specified revision
is binary or not, "util.binary()" is invoked via internal function
"binary()" of "hg grep" once per a line of "hg grep" output, even
though binary-ness is not changed in the same file.
This patch reuses the first "util.binary()" invocation result by
annotating internal function "binary()" with "@util.cachefunc".
Performance improvement measured by "hgperf grep -r 88d8e568add1 vfs
mercurial/scmutil.py":
before this patch:
! wall 0.024000 comb 0.015600 user 0.015600 sys 0.000000 (best of 118)
after this patch:
! wall 0.023000 comb 0.015600 user 0.015600 sys 0.000000 (best of 123)
Status of recent(88d8e568add1) "mercurial/scmutil.py":
# of lines: 919 (may affect cost of search)
# of bytes: 29633 (may affect cost of "util.binary()")
# of matches: 22 (may affect frequency of "util.binary()")
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 15 Feb 2014 19:52:26 +0900] rev 20835
util: add the code path to "cachefunc()" for the function taking no arguments
Before this patch, "util.cachefunc()" caches the value returned by the
specified function into dictionary "cache", even if the specified
function takes no arguments.
In such case, "cache" has at most one entry, and distinction between
entries in "cache" is meaningless.
This patch adds the code path to "cachefunc()" for the function taking
no arguments for efficiency: to store only one cached value, using
list "cache" is a little faster than using dictionary "cache".
Matt Mackall <mpm@selenic.com> [Wed, 26 Mar 2014 12:52:57 -0500] rev 20834
help: add examples to incoming
Durham Goode <durham@fb.com> [Tue, 25 Mar 2014 16:10:07 -0700] rev 20833
revset: fix generatorset race condition
If two things were iterating over a generatorset at the same time, they could
miss out on the things the other was generating, resulting in incomplete
results. This fixes it by making it possible for two things to iterate at once,
by always checking the _genlist at the beginning of each iteration.
I was only able to repro it with pending changes from my other commits, but they
aren't ready yet. So I'm unable to add a test for now.
Olle Lundberg <geek@nerd.sh> [Tue, 25 Mar 2014 23:07:52 +0100] rev 20832
tests: don't hardcode path to bash interpreter
Use the env binary to figure out the correct bash to use.
Certain systems ships with an ancient version of bash, but the
user might have installed a newer one that is earlier in $PATH.
For example the current version of Mac OS X ships version 3.2.51
of bash, which does not understand new fancy builtins such as
readarray. A user might install a newer version of bash, use that
as their shell and add that path before bin.
Olle Lundberg <geek@nerd.sh> [Wed, 26 Mar 2014 11:59:13 +0100] rev 20831
contrib: don't hardcode path to bash interpreter
Use the env binary to figure out the correct bash to use.
Certain systems ships with an ancient version of bash, but the
user might have installed a newer one that is earlier in $PATH.
For example the current version of Mac OS X ships version 3.2.51
of bash, which does not understand new fancy builtins such as
readarray. A user might install a newer version of bash, use that
as their shell and add that path before bin.
Olle Lundberg <geek@nerd.sh> [Tue, 25 Mar 2014 23:10:15 +0100] rev 20830
contrib: explicitly enable perf extension for revset tests
If a developer doesn't have the perf extension enabled the revset
benchmarking will fail. This patch explicitly enables the
perf extension when running the tests.
Matt Mackall <mpm@selenic.com> [Tue, 25 Mar 2014 16:17:16 -0500] rev 20829
merge with stable
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 24 Mar 2014 20:00:18 -0700] rev 20828
revset: improve performance of _generatorset.__contains__ (issue 4201)
_generatorset.__contains__ and __contains__ from child classes were
calling into __iter__ to look for values. Since all
previously-encountered values from the generator were cached and checked
in __contains__ before this iteration, __contains__ was effectively
performing iteration busy work which could lead to an explosion of
redundant work.
This patch changes __contains__ to be more intelligent. Instead of
looking at all values via __iter__, __contains__ will instead go
straight to "new" values from the underlying generator.
On a clone of the Firefox repository with around 200,000 changesets,
this patch decreases the execution time of the revset '::(200067)::'
from ~100s to ~4s on the author's machine. Rebase operations (which use
the aforementioned revset), speed up accordingly.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 22 Mar 2014 23:39:51 +0900] rev 20827
localrepo: omit ".hgsubstate" also from "added" files
Before this patch, "localrepository.commit()" omits ".hgsubstate" from
"modified" (changes[0]) and "removed" (changes[2]) file list before
checking subrepositories, but leaves one in "added" (changes[1]) as it
is.
Then, "localrepository.commit()" adds ".hgsubstate" into "modified" or
"removed" list forcibly, according to subrepository statuses.
If "added" contains ".hgsubstate", the committed context will contain
two ".hgsubstate" in its "files": one from "added" (not omitted one),
and another from "modified" or "removed" (newly added one).
How many times ".hgsubstate" appears in "files" changes node hash,
even though revision content is same, because node hash calculation
uses the specified "files" directly (without duplication check or so).
This means that node hash of committed revision changes according to
existence of ".hgsubstate" in "added" at "localrepository.commit()".
".hgsubstate" is treated as "added", not only in accidental cases, but
also in the case of "qpush" for the patch adding ".hgsubstate".
This patch omits ".hgsubstate" also from "added" files before checking
subrepositories. This patch also omits ".hgsubstate" exclusion in
"qnew"/"qrefresh" introduced by changeset d666da075b91, because this
patch makes them meaningless.
"hg parents --template '{files}\n'" newly added to "test-mq-subrepo.t"
enhances checking unexpected multiple appearances of ".hgsubstate" in
"files" of created/refreshed MQ revisions.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 07 Mar 2014 14:06:52 -0500] rev 20826
dispatch: only do __import__(debugger) when a debugger is requested
When having ui.debugger=somedebugger in one's ~/.hgrc, this then
somedebugger would be imported for every hg command. With this patch,
this import only happens if the --debugger parameter is passed.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 25 Mar 2014 19:34:17 +0900] rev 20825
hg: use "os.path.join()" to join path components which may be empty (issue4203)
Changset 2d0ab571b822 rewriting "hg.copystore()" with vfs uses
'dstbase + "/lock"' instead of "os.path.join()", because target files
given from "store.copyfiles()" already uses "/" as path separator
But in the repository using revlog format 0, "dstbase" becomes empty
("data" directory is located under ".hg" directly), and 'dstbase +
"/lock"' is treated as "/lock": in almost all cases, write access to
"/lock" causes "permission denied".
This patch uses "os.path.join()" to join path components which may be
empty in "hg.copystore()".
Matt Harbison <matt_harbison@yahoo.com> [Mon, 24 Mar 2014 21:27:40 -0400] rev 20824
revset: document the regular expression support for tag(name)
This has been supported since 20f55613fb2a, in 2.3.
Matt Mackall <mpm@selenic.com> [Sat, 22 Mar 2014 14:46:55 -0500] rev 20823
help: allow -k to find debug commands
Mads Kiilerich <madski@unity3d.com> [Sat, 15 Mar 2014 16:14:04 +0100] rev 20822
help: let 'hg help debug' show the list of secret debug commands
The names of the debug commands are not easy to remember and they are not easy
to find.
Mads Kiilerich <madski@unity3d.com> [Fri, 28 Feb 2014 02:09:00 +0100] rev 20821
tests: add run-tests --changed option for running tests changed in revisions
Convenient when polishing patches and changing details of how they change test
output.
This will probably break in weird ways for revsets with special quoting ... but
it is good enough for run-tests.
Usage example:
yes | ./run-tests.py -li --changed qparent
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 00:18:30 +0100] rev 20820
repo: rephrase the "missing requirement" error message
Unknown requirements will now be reported as:
abort: repository requires features unknown to this Mercurial: largefiles!
(see http://mercurial.selenic.com/wiki/MissingRequirement for more information)
Some features of this phrasing:
* avoid double ':' in abort message
* make it more clear who requires and knows what
* don't quote the requirement names - it is not something the user entered or
need the exact spelling of ... and it is "identifiers" that are unambiguous
anyway
* remove double hint by removing "(upgrade Mercurial)" comment
* don't mention upgrading Mercurial without mentioning enabling the feature -
instead, just refer to wiki page for both
* don't just talk about "details", talk about "more information"
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 20 Mar 2014 17:34:02 -0700] rev 20819
revpair: drop useless conditional
The `if not revs:` case is tested at the beginning of the function.
Matt Mackall <mpm@selenic.com> [Fri, 21 Mar 2014 17:20:56 -0500] rev 20818
merge with stable
Siddharth Agarwal <sid0@fb.com> [Thu, 20 Mar 2014 19:39:05 -0700] rev 20817
subrepo: add trailing newlines to warnings
Siddharth Agarwal <sid0@fb.com> [Thu, 20 Mar 2014 19:38:17 -0700] rev 20816
subrepo: convert matched string to integer before comparing Git version
(1, '4') is greater than (1, 5) so the version check never actually worked.
Siddharth Agarwal <sid0@fb.com> [Thu, 20 Mar 2014 19:37:01 -0700] rev 20815
subrepo: only retrieve the first two components of the Git version
This makes the version detection compatible with Git versions like '1.9-rc0'.
We only cared about the first two components of the version anyway.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 18:56:08 -0700] rev 20814
bundle2: force the first char of parameter to be an letter.
We need a case sensitive character to convey mandatory/advisory parameter
semantic in a later patches.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 18:40:31 -0700] rev 20813
bundle2: refuse empty parameter name
The bundle2 now raise value error when seeing invalid parameter names. The first
introduced rules is: no empty parameter.
The test extension is improve to properly abort when ValueError are encountered.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 17:43:08 -0700] rev 20812
bundle2: urlunquote stream parameter name and value during unbundling
Align to new escaping used during bundling.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 17:38:11 -0700] rev 20811
bundle2: urlquote stream parameter name and value
This introduces support for arbitrary characters in stream parameters name and
value. The urlquote format has been chosen because it is:
- simple,
- standard,
- no-op on simple alphanumerical entry.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 16:12:33 -0700] rev 20810
bundle2: support for unbundling parameter value
The unbundler now understand parameter value. introduced in the previous
changeset.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 16:05:06 -0700] rev 20809
bundle2: support for bundling parameter value
Parameter can now have a value. We use a `<name>=<value>` form inspired from
capabilities.
There is still no kind of escaping in the name or value, yet.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 20 Mar 2014 13:18:34 -0700] rev 20808
bundle2: clarify stream parameter design in the documentation
Stream level parameter have very restricted use case. Clarify why we chosen a
textual format and point that applicative data goes in applicative parts.
Sean Farley <sean.michael.farley@gmail.com> [Tue, 18 Mar 2014 20:10:33 -0500] rev 20807
repoview: add non-global tags to candidate list for blocking hidden changesets
Previously, only bookmarks would be considered for blocking a changeset from
being hidden. Now, we also consider non-global tags. This is helpful if we have
local tags that might be hard to find once they are hidden, or tag that are
added by extensions (e.g. hggit or remotebranches).
David Soria Parra <davidsp@fb.com> [Thu, 13 Mar 2014 16:05:06 -0700] rev 20806
histedit: select the lowest rev when looking for a root in a revset (bc)
When we specify a revision or a revset we just get the last element from the
list. For revsets this can lead to unintended effects where you specify a
revset like only() but instead histedit selects the highest revision in the
set as root. Therefore we should always use the lowest revision number as
root.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 15:56:24 -0700] rev 20805
bundle2: support for unbundling simple parameter
the unbundler now understand simple list of parameter.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 19 Mar 2014 14:52:03 -0700] rev 20804
bundle2: support bundling simple parameter
This changeset add bundling capacity for simple parameters, not value or any
special case are handled.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 16:35:34 -0700] rev 20803
bundle2: make sure the unbundler refuse non bundle2 stream
We now make use of the magic string at the beginning of the file.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 14:28:42 -0700] rev 20802
bundle2: a very first version of bundle2 unbundler
This changeset introduce an unbundler class to match the bundle2 bundler. It is
currently able to unbundle an empty bundle2 only and will gain more feature at
the same pace than the bundler.
It also comes with its special extension command in test.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 18 Mar 2014 14:00:50 -0700] rev 20801
bundle2: very first version of a bundle2 bundler
This changeset is the very first of a long series. It create a new bundle2
module and add a simple class that generate and empty bundle2 container.
The module is documented with the current state of the implementation. For
information about the final goal you may want to consult the mercurial wiki
page:
http://mercurial.selenic.com/wiki/BundleFormat2
The documentation of the module will be updated with later patches adding more and
more feature to the format.
This patches also introduce a test case. This test case build and use its own
small extension that use the new bundle2 module. Since the new format is unable
to do anything right now, we could not use real mercurial code to test it.
Moreover, some advanced feature of the bundle2 spec will not be used by core
mercurial at all. So we need to have them tested.
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Mar 2014 00:46:12 +0900] rev 20800
clone: abort if default destination has no meaningful name (BC)
If source URL has no path, default destination is resolved as '.'. It is
surprising than useful, and perhaps an unexpected behavior.
This change does not solve issue3880, but can avoid to clone into current
directory by accident.
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Mar 2014 00:46:08 +0900] rev 20799
clone: add doctest for default destination
Durham Goode <durham@fb.com> [Thu, 20 Mar 2014 09:55:44 -0700] rev 20798
scmutil: fix revrange when multiple revs are specified
revrange was trying to add a list to a revset class, but revset classes only
support adding with other revset classes. So wrap the lists in basesets.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 20 Mar 2014 00:01:59 -0400] rev 20797
parsers: fix compiler errors on MSVC 2008
This broke in 3681de20b0a7.
Matt Mackall <mpm@selenic.com> [Wed, 19 Mar 2014 18:04:03 -0500] rev 20796
check-code: check for argument passing py2.6ism
Matt Mackall <mpm@selenic.com> [Wed, 19 Mar 2014 16:21:53 -0500] rev 20795
merge with stable
Siddharth Agarwal <sid0@fb.com> [Tue, 18 Mar 2014 13:40:03 -0700] rev 20794
sshpeer: only print out 'running ssh' messages in debug mode (BC)
Previously, if another command was run with --verbose, and for whatever reason
that invoked sshpeer, we'd get a 'running ssh' message from sshpeer. This extra
line would interfere with that command's output and cause dumb parsers to
break.
For example, hg annotate can be run with --verbose to get full usernames. This,
combined with the third-party remotefilelog extension which can cause ssh
connections to be created, leads to an extra 'running ssh' line that breaks
most parsers.
This patch is (BC) because hg pull --verbose will no longer print out exactly
what ssh command it is running.
No tests are affected by this change.
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 00:19:54 +0100] rev 20793
tests: small refactoring of run-tests' handling of tests list
Mads Kiilerich <madski@unity3d.com> [Fri, 28 Feb 2014 02:26:03 +0100] rev 20792
merge: mark mergestate as dirty when resolve changes _state
Correctness - no visible difference so far.
Mads Kiilerich <madski@unity3d.com> [Mon, 24 Feb 2014 22:42:14 +0100] rev 20791
backout: improve confusing 'cannot backout change on a different branch' abort
These days 'branch' usually refer to a named branch.
Instead, abort with 'cannot backout change that not is an ancestor'.
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 02:45:14 +0100] rev 20790
config: set a 'source' in most cases where config don't come from file but code
Some extensions set configuration settings that showed up in 'hg showconfig
--debug' with 'none' as source. That was confusing.
Instead, they will now tell which extension they come from.
This change tries to be consistent and specify a source everywhere - also where
it perhaps is less relevant.
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 02:45:14 +0100] rev 20789
config: don't set source when no source is specified - don't overwrite with ''
This prevents ui.fixconfig from overwriting the source of paths and it will
thus show up in showconfig --debug.
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 02:45:04 +0100] rev 20788
config: give a useful hint of source for the most common command line settings
'hg showconfig --debug' will instead of:
none: ui.verbose=False
give the better hint:
--verbose: ui.verbose=False
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 01:59:15 +0100] rev 20787
config: backout 77f1f206e135 - 743daa601445 removed the only use of overlay
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 20 Mar 2014 00:10:45 +0900] rev 20786
mq: omit ".hgsubstate" from qnew/qrefresh target list for consistent node hash
Before this patch, even if specified file patterns and -I/-X options
cause listing ".hgsubstate" up in the target list, qnew/qrefresh put
".hgsubstate" into the target list individually and forcibly.
This changes how many times ".hgsubstate" appear in the target list
according to run-time conditions, and causes inconsistent node hash,
even though revision content is same, because node hash calculation
uses the specified target list directly (without duplication check or
so).
This patch always omits ".hgsubstate" from qnew/qrefresh target list
for consistent node hash.
This omitting doesn't miss including ".hgsubstate" changes, because:
- "localrepository.commit()" puts ".hgsubstate" into the target list
for "commitctx()" forcibly if needed
- "mq.putsubstate2changes()" puts ".hgsubstate" into the target list
for "patch.diff()" if it is not yet listed up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 20 Mar 2014 00:10:45 +0900] rev 20785
qnew: omit meaningless and harmful putting subrepositories into target list
Before this patch, qnew puts updated subrepositories into target list
forcibly, if any of -I, -X or patterns are specified.
But this is meaningless and harmful, because:
- putting subrepositories into target list doesn't affect the result
of "localrepository.status()"
"dirstate.status()" invoked via "localrepository.status()" always
omits subrepositories from the result of it
- any -I/-X opts and empty "pats" causes unexpected failure
when any -I/-X opts are specified, "inclsubs" are always added to
"pats", even if "pats" is empty.
but this changes meaning of "pats" from "including all to be
included" to "including only listed subrepositories"
this may exclude ".hgsub" and cause unexpected exception raising
("can't commit subrepos without .hgsub" ).
- qnew at other than repository root (with -I, -X or any patterns)
causes unexpected failure
"scmutil.match()" treats pattern without syntax type as 'relpath'
type (= one rooted at cwd).
but qnew puts subrepository paths rooted at the repository root,
and it causes unexpected exception raising ("SUBREPO not under
root ROOT" in "pathutil.canonpath()"), if "hg qnew" is executed at
other than repository root with -I, -X or any patterns.
This patch omits meaningless and harmful putting subrepositories into
target list.
This omitting doesn't miss including updated subrepositories, because
subrepositories are specified to "scmutil.matchfiles()" directly, to
get "match" object for "localrepository.commit()".
Mads Kiilerich <madski@unity3d.com> [Wed, 19 Mar 2014 00:19:54 +0100] rev 20784
convert: more clear documentation of the 'include' default of a 'include .'
At first glance it can be confusing that adding a superfluous include directive
will exclude more files.
Matt Mackall <mpm@selenic.com> [Tue, 18 Mar 2014 18:57:19 -0500] rev 20783
config: mention edit options and config topic in help
Matt Mackall <mpm@selenic.com> [Tue, 18 Mar 2014 18:49:30 -0500] rev 20782
config: add --global and --local flags
These start an editor on the system-wide or repository-level config files.
Matt Mackall <mpm@selenic.com> [Tue, 18 Mar 2014 17:56:27 -0500] rev 20781
revrange: pass repo to revset parser
This allows handling of hyphenated symbols for command-line revsets.
Matt Mackall <mpm@selenic.com> [Tue, 18 Mar 2014 17:54:42 -0500] rev 20780
revset: try to handle hyphenated symbols if lookup callback is available
Formerly an expression like "2.4-rc::" was tokenized as 2.4|-|rc|::.
This allows dashes in symbols iff the whole symbol-like string can be
looked up. Otherwise, it's tokenized as a series of symbols and
operators.
No attempt is made to accept dashed symbols inside larger symbol-like
string, for instance foo-bar or bar-baz inside foo-bar-baz.
Matt Mackall <mpm@selenic.com> [Tue, 18 Mar 2014 17:19:44 -0500] rev 20779
revset: pass a lookup function to the tokenizer
Matt Mackall <mpm@selenic.com> [Tue, 18 Mar 2014 17:17:23 -0500] rev 20778
parser: allow passing a lookup function to a tokenizer
This will allow us to dynamically handle hyphenated symbols in revsets.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 15 Mar 2014 18:11:51 -0700] rev 20777
benchmark-revset: add full version of benchmarked revset
All revsets added to benchmark so far are aimed to show an improvement of
performance from laziness. We had more wider version to track impact of laziness
on them.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 14 Mar 2014 00:02:05 -0700] rev 20776
localrepo: rename capability set to lower case.
This is not C and they are not even constant.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 12 Mar 2014 14:46:41 -0700] rev 20775
wireproto: move wireproto capabilities computation in a subfunction
It will help people that need to add capabilities (in a more subtle was that
just adding some to the list) in multiple way:
1. This function returns a list, not a string. Making it easier to look at,
extend or alter the content.
2. The original capabilities function will be store in the dictionary of wire
protocol command. So extension that wrap this function also need to update
the dictionary entry.
Both wrapping and update of the dictionary entry are needed because the
`hello` wire protocol use the function itself. This is specifically sneaky for
extension writer as ssh use the `hello` command while http use the
`capabilities` command.
With this new `_capabilities` function there is one and only one obvious
place to wrap when needed.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 11 Mar 2014 01:38:02 -0700] rev 20774
wireproto: extract capabilities list in outside the wireproto function
Before that it was over complicated to add capabilities from an extension.
This mimic was is done for capabilities in localrepo.
Matt Mackall <mpm@selenic.com> [Tue, 18 Mar 2014 14:25:28 -0500] rev 20773
merge with stable
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Mon, 17 Mar 2014 14:57:13 -0400] rev 20772
commit: propagate --secret option to subrepos (issue4182)
Before this patch, `hg commit --secret` was not getting propagated
correctly, and subrepos were not getting the commit in the secret
phase. The problem is that subrepos get their ui from the base repo's
baseui object and ignore the ui object passed on to them. This sets
and restores both ui objects with the appropriate option.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 19 Mar 2014 01:07:41 +0900] rev 20771
amend: save commit message into ".hg/last-message.txt"
Before this patch, commit message (may be manually edited) for "commit
--amend" is never saved into ".hg/last-message.txt", because it uses
"localrepository.commitctx()" instead of "localrepository.commit()":
saving into ".hg/last-message.txt" is executed only in the latter.
This patch saves commit message for "commit --amend" into
".hg/last-message.txt" just after user editing.
This is the simplest implementation to fix on stable. Editing and
saving commit message for memctx should be centralized into the
framework like "localrepository.commit()" with "editor" argument or so
in the future.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 19 Mar 2014 01:07:41 +0900] rev 20770
histedit: save manually edited commit message into ".hg/last-message.txt"
Before this patch, manually edited commit message for "fold" command
in histedit-ing is never saved into ".hg/last-message.txt", because it
uses "localrepository.commitctx()" instead of
"localrepository.commit()": saving into ".hg/last-message.txt" is
executed only in the latter.
This patch saves manually edited commit message for "fold" command in
histedit-ing into ".hg/last-message.txt" just after user editing.
This is the simplest implementation to fix on stable. Editing and
saving commit message for memctx should be centralized into the
framework like "localrepository.commit()" with "editor" argument or so
in the future.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 19 Mar 2014 01:07:41 +0900] rev 20769
qfold: save manually edited commit message into ".hg/last-message.txt"
Before this patch, manually edited commit message for "hg qfold -e"
isn't saved into ".hg/last-message.txt" until it is saved by
"localrepository.savecommitmessage()" in "localrepository.commit()".
This may lose such commit message, if unexpected exception is raised.
This patch saves manually edited commit message for "hg qfold -e" into
".hg/last-message.txt" just after user editing. This patch doesn't
save the message specified by -m/-l options as same as other commands.
This is the simplest implementation to fix on stable. Editing and
saving commit message should be centralized into the framework of
"localrepository.commit()" with "editor" argument in the future.
This patch uses repository wrapping class for exception raising before
saving commit message in "localrepository.commit()" easily and
certainly, because such exception requires corner case condition.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 19 Mar 2014 01:07:41 +0900] rev 20768
qnew: save manually edited commit message into ".hg/last-message.txt"
Before this patch, manually edited commit message for "hg qnew -e"
isn't saved into ".hg/last-message.txt" until it is saved by
"localrepository.savecommitmessage()" in "localrepository.commit()".
This may lose such commit message, if unexpected exception is raised.
This patch saves manually edited commit message for "hg qnew -e" into
".hg/last-message.txt" just after user editing. This patch doesn't
save the message specified by -m/-l options as same as other commands.
This is the simplest implementation to fix on stable. Editing and
saving commit message should be centralized into the framework of
"localrepository.commit()" with "editor" argument in the future.
This patch uses repository wrapping class for exception raising before
saving commit message in "localrepository.commit()" easily and
certainly, because such exception requires corner case condition.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 19 Mar 2014 01:07:41 +0900] rev 20767
tag: save manually edited commit message into ".hg/last-message.txt"
Before this patch, manually edited commit message for "hg tag -e"
isn't saved into ".hg/last-message.txt" until it is saved by
"localrepository.savecommitmessage()" in "localrepository.commit()".
This may lose such commit message, if unexpected exception is raised.
This patch saves manually edited commit message for "hg tag -e" into
".hg/last-message.txt" just after user editing. This patch doesn't
save the message specified by -m option (-l is not supported for "hg
tag") as same as other commands.
This is the simplest implementation to fix on stable. Editing and
saving commit message should be centralized into the framework of
"localrepository.commit()" with "editor" argument in the future.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 19 Mar 2014 01:07:41 +0900] rev 20766
rebase: use "commitforceeditor" instead of "ui.edit()" for "--collapse"
Before this patch, "rebase --collapse --edit" without "--message" and
"--logfile" invokes editor twice unexpectedly:
1. explicit "ui.edit()" invocation in rebase extension itself
2. indirect invocation in "localrepository.commit()" with "editor =
commitforceeditor" assigned by "--edit" option
This patch uses indirect "commitforceeditor" invocation instead of
"ui.edit()" for "--collapse" without "--message" and "--logfile" to:
- suppress redundant the former invocation
- ensure editor invocation even when "--edit" is not specified
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 19 Mar 2014 01:07:41 +0900] rev 20765
localrepo: save manually edited commit message as soon as possible
Before this patch, "localrepository.commit()" invokes specified
"editor" to edit commit message manually, and saves it after checking
sub-repositories.
This may lose manually edited commit message, if unexpected exception
is raised while checking (or commiting recursively) sub-repositories.
This patch saves manually edited commit message as soon as possible.
Andrew Shadura <andrew@shadura.me> [Sat, 15 Mar 2014 15:44:51 +0100] rev 20764
hgk: enable selected patch text on Windows
Port a patch from gitk. Original description:
On windows, mouse input follows the keyboard focus, so to allow selecting
text from the patch canvas we must not shift focus back to the top level.
This change has no negative impact on X, so we don't explicitly test
for Win32 on this change. This provides similar selection capability
as already available using X-Windows.
Signed-off-by: Mark Levedahl <mdl123@verizon.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Andrew Shadura <andrew@shadura.me> [Sat, 15 Mar 2014 15:33:50 +0100] rev 20763
hgk: ignore ctrl-z as EOF on windows
Port a patch from gitk. Original description:
Cygwin's Tcl is configured to honor any occurence of ctrl-z as an
end-of-file marker, while some commits in the git repository and possibly
elsewhere include that character in the commit comment. This causes gitk
ignore commit history following such a comment and incorrect graphs. This
change affects only Windows as Tcl on other platforms already has
eofchar == {}. This fixes problems noted by me and by Ray Lehtiniemi, and
the fix was suggested by Shawn Pierce.
Signed-off-by: Mark Levedahl <mdl123@verizon.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 08:46:46 -0700] rev 20762
graphmod: changed code in dagwalker to use lazy implementations
Used lazy methods when possible.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 08:47:57 -0700] rev 20761
webcommands: changed code to use lazy classes when calling dagwalker
This needs to be changed to use a baseset since dagwalker now expects to
receive a smartset. This is basically wrapping revs into a baseset to be
compatible with smartset implementations.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 13:27:12 -0700] rev 20760
cmdutil: changed max method for lazy call
Used the lazy max call instead of the python max implementation to be able to
use lazysets for graphlog.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 13:26:40 -0700] rev 20759
getgraphlogrevs: return an empty baseset instead of a empty list
We aims at returning smartset only so that function higher in the stack can use
smartset feature.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 14 Mar 2014 16:26:50 -0700] rev 20758
getgraphlogrevs: do not convert smartset to baseset
We are now sure that revs is a smartset. We remove the baseset call that would
defeat any lazyness.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 08:44:52 -0700] rev 20757
cmdutil: changed revset for spanset
Instead of using baseset(repo.changelog) changed it for spanset(repo) which is
much faster.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 11:35:17 -0700] rev 20756
cmdutil: changed code in _makegraphlogrevset not to use getitem
__getitem__ is a method that is not implemented lazily on many of the new
classes and it can be easily replaced with a structure that takes advantage of
the new lazy implementations instead.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 08:43:52 -0700] rev 20755
cmdutil: changed code in getgraphlogrevs not to use getitem
__getitem__ is a method that is not implemented lazily on many of the new
classes and it can be easily replaced with a structure that takes advantage of
the new lazy implementations instead.
Lucas Moscovicz <lmoscovicz@fb.com> [Tue, 18 Feb 2014 11:35:03 -0800] rev 20754
revset: changed minrev and maxrev implementations to use ordered sets
Performance Benchmarking:
0) max(tip:0)
1) min(0:tip)
2) min(0::)
b96cb15ec9e0 (2.9.1 release)
0) ! wall 0.005699 comb 0.000000 user 0.000000 sys 0.000000 (best of 450)
1) ! wall 0.005414 comb 0.010000 user 0.010000 sys 0.000000 (best of 493)
2) ! wall 0.025951 comb 0.030000 user 0.030000 sys 0.000000 (best of 107)
05267e6e94dd (public tip at submission time)
0) ! wall 0.015177 comb 0.020000 user 0.020000 sys 0.000000 (best of 175)
1) ! wall 0.014779 comb 0.010000 user 0.010000 sys 0.000000 (best of 189)
2) ! wall 12.345179 comb 12.350000 user 12.350000 sys 0.000000 (best of 3)
Current patches:
0) ! wall 0.001911 comb 0.000000 user 0.000000 sys 0.000000 (best of 1357)
1) ! wall 0.001943 comb 0.010000 user 0.010000 sys 0.000000 (best of 1406)
2) ! wall 0.000405 comb 0.000000 user 0.000000 sys 0.000000 (best of 6761)
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 14:43:44 -0700] rev 20753
revset: changed addset to extend _orderedsetmixin
Now _addset can use the lazy min and max implementation.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 14 Mar 2014 11:41:26 -0700] rev 20752
revset: add a default argument for baseset.__init__
We are now able to create empty baseset using `baseset()` as we are able to
create empty list with `list()`.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 13 Mar 2014 11:36:45 -0700] rev 20751
revset: changed orderedlazyset to also extend _orderedsetmixin
Now orderedlazyset can use the lazy min and max implementation.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 13 Mar 2014 11:36:11 -0700] rev 20750
revset: changed spanset to extend _orderedsetmixin
Now spanset can use the lazy min and max methods implementation.
Lucas Moscovicz <lmoscovicz@fb.com> [Wed, 12 Mar 2014 16:40:18 -0700] rev 20749
revset: added _orderedsetmixin class
This class has utility methods for any ordered class to get the min and the
max values.
Lucas Moscovicz <lmoscovicz@fb.com> [Wed, 19 Feb 2014 09:28:17 -0800] rev 20748
revset: added min and max methods to baseset and lazyset
This classes have no particular order so they rely on python min() and max()
implementation. This methods will be implemented in every smartset class in
future patches. For other classes there are lazy implementations that can be
made for this methods.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 14 Mar 2014 15:47:29 -0700] rev 20747
contrib: make revset benchmark script able to read from stdin
This help fine control of what we want to benchmark
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 14 Mar 2014 15:43:55 -0700] rev 20746
contrib: have the revset benchmark test script take a revset
The script now selection revision to run benchmark against using a revset query
instead of a revision range.
It is expected that people benchmarking revset have some knowledge of revset.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 11:24:59 -0700] rev 20745
contrib: added revset performance benchmarking script
This script takes two arguments (starting revision, ending revision) and tests
for each revision in between the entire list of revsets in the script using
perfrevset.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 15:00:15 -0700] rev 20744
contrib: added revset examples for benchmarking performance
Added list of revsets used for benchmarking revset performance so far.
Simon Heimberg <simohe@besonet.ch> [Mon, 17 Feb 2014 07:39:53 +0100] rev 20743
help: filter out deprecated options with untranslated descriptions
When using a different language than English, deprecated options were only
removed from the output of `hg help anycmd` when "DEPRECATED" in the options
description was translated.
Chris Jerdonek <chris.jerdonek@gmail.com> [Wed, 04 Dec 2013 20:38:27 -0800] rev 20742
parsers: fail fast if Python has wrong minor version (issue4110)
This change causes an informative ImportError to be raised when importing
the parsers extension module if the minor version of the currently-running
Python interpreter doesn't match that of the Python used when compiling
the extension module.
This change also exposes a parsers.versionerrortext constant in the
C implementation of the module. Its presence can be used to determine
whether this behavior is present in a version of the module. The value
of the constant is the leading text of the ImportError raised and is set
to "Python minor version mismatch".
Here is an example of what the new error looks like:
Traceback (most recent call last):
File "test.py", line 1, in <module>
import mercurial.parsers
ImportError: Python minor version mismatch: The Mercurial extension
modules were compiled with Python 2.7.6, but Mercurial is currently using
Python with sys.hexversion=33883888: Python 2.5.6
(r256:88840, Nov 18 2012, 05:37:10)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))]
at: /opt/local/Library/Frameworks/Python.framework/Versions/2.5/Resources/
Python.app/Contents/MacOS/Python
The reason for raising an error in this scenario is that Python's C API
is known not to be compatible from minor version to minor version, even
if sys.api_version is the same. See for example this Python bug report
about incompatibilities between 2.5 and 2.6+:
http://bugs.python.org/issue8118
These incompatibilities can cause Mercurial to break in mysterious,
unforeseen ways. For example, when Mercurial compiled with Python 2.7 was
run with 2.5, the following crash occurred when running "hg status":
http://bz.selenic.com/show_bug.cgi?id=4110
After this crash was fixed, running with Python 2.5 no longer crashes, but
the following puzzling behavior still occurs:
$ hg status
...
File ".../mercurial/changelog.py", line 123, in __init__
revlog.revlog.__init__(self, opener, "00changelog.i")
File ".../mercurial/revlog.py", line 251, in __init__
d = self._io.parseindex(i, self._inline)
File ".../mercurial/revlog.py", line 158, in parseindex
index, cache = parsers.parse_index2(data, inline)
TypeError: data is not a string
which can be reproduced more simply with:
import mercurial.parsers as parsers
parsers.parse_index2("", True)
Both the crash and the TypeError occurred because the Python C API's
PyString_Check() returns the wrong value when the C header files from
Python 2.7 are run with Python 2.5. This is an example of an
incompatibility of the sort mentioned in the Python bug report above.
Failing fast with an informative error message results in a better user
experience in cases like the above. The information in the ImportError
also simplifies troubleshooting for those on Mercurial mailing lists, the
bug tracker, etc.
This patch only adds the version check to parsers.c, which is sufficient
to affect command-line commands like "hg status" and "hg summary".
An idea for a future improvement is to move the version-checking C code
to a more central location, and have it run when importing all
Mercurial extension modules and not just parsers.c.
Matt Mackall <mpm@selenic.com> [Fri, 14 Mar 2014 16:00:11 -0500] rev 20741
debuginstall: change showing to checking for consistency and future checking
Chris Jerdonek <chris.jerdonek@gmail.com> [Tue, 31 Dec 2013 00:37:16 -0800] rev 20740
debuginstall: add Python information to debuginstall output (issue4128)
This change adds to the output of "hg debuginstall" information about the
Python being used by Mercurial. It adds both the path to the Python
executable (i.e. the value of sys.executable) and the version of Python
(specifically the major, minor, and micro versions).
Below is an example of what the output looks like after this change.
The marked lines are the new output lines:
$ hg debuginstall
checking encoding (UTF-8)...
-->showing Python executable (/Users/chris/.virtualenvs/default/bin/python)
-->showing Python version (2.7.6)
checking Python lib (/Users/chris/.virtualenvs/default/lib/python2.7)...
checking installed modules (/Users/chris/mercurial)...
checking templates (/Users/chris/mercurial/templates)...
checking commit editor...
checking username...
no problems detected
Note that we use the word "showing" without an ellipsis for the new lines
because, unlike the other lines (except for "Python lib" which will be
adjusted in a subsequent commit), no check follows the display of this
information.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 14 Mar 2014 10:57:04 -0700] rev 20739
revset: add documentation and comment for _generatorset
(clean up some old irrelevant comment in the process)
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 14 Mar 2014 10:55:03 -0700] rev 20738
revset: add some documentation for lazyset
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 10:59:51 -0700] rev 20737
revset: added documentation and comment for spanset class
Lucas Moscovicz <lmoscovicz@fb.com> [Tue, 11 Mar 2014 17:25:53 -0700] rev 20736
revset: extend sorting tests
Matt Mackall <mpm@selenic.com> [Fri, 14 Mar 2014 13:12:45 -0500] rev 20735
merge with crew
Lucas Moscovicz <lmoscovicz@fb.com> [Tue, 11 Mar 2014 17:25:53 -0700] rev 20734
revset: changed smartset methods to return ordered addsets
Now when adding two structures that are ordered, they are wrapped into an
_addset and they get added lazily while keeping the order.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 10:24:09 -0700] rev 20733
revset: added isascending and isdescending methods to _addset
This methods are intended to duck-type baseset, so we will still have _addset
as a private class but now we can return it without wrapping it into an
orderedlazyset or a lazyset.
These were the last methods to add for smartset compatibility.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 10:23:54 -0700] rev 20732
revset: added __add__ method to _addset
This method is intended to duck-type baseset, so we will still have _addset as a
private class but we will be able to return it without wrapping it into an
orderedlazyset or a lazyset.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 10:22:51 -0700] rev 20731
revset: added __sub__ mehtod to _addset
This method is intended to duck-type baseset, so we will still have _addset as a
private class but now will be able to return it without wrapping it into an
orderedlazyset or a lazyset.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 10:22:29 -0700] rev 20730
revset: added __and__ method to _addset
This method is intended to duck-type baseset, so we will still have _addset as a
private class but we will be able to return it without wrapping it into an
orderedlazyset or a lazyset.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 10:21:56 -0700] rev 20729
revset: added ascending and descending methods to _addset
This methods are intended to duck-type baseset, so we will still have _addset
as a private class but will be able return it without wrapping it into an
orderedlazyset or a lazyset.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 13 Mar 2014 19:12:36 -0700] rev 20728
revset: added filter method to _addset
This method is intended to duck-type baseset, so we will still have _addset
as a private class but we will be able return it without wrapping it into an
orderedlazyset or a lazyset.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 09:18:14 -0700] rev 20727
revset: added comments to all methods needed to duck-type from baseset
All this methods are required to duck-type for any class that works as a smart
set.
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 10:10:18 -0700] rev 20726
revset: use more explicit argument names for baseset methods
Use other instead of x and condition instead of l
Lucas Moscovicz <lmoscovicz@fb.com> [Tue, 11 Mar 2014 17:09:23 -0700] rev 20725
revset: added isascending and isdescending methods to smartset classes
This methods state if the class is sorted in an ascending or descending order
We need this to implement methods based on order on smartset classes in order
to be able to create new objects with a given order.
We cannot just rely on a simple boolean since unordered set are neither
ascending nor descending.
Lucas Moscovicz <lmoscovicz@fb.com> [Tue, 11 Mar 2014 17:03:43 -0700] rev 20724
revset: added sort method in addset
We need this method to duck-type generatorset since this class is not going to
be used outside revset.py and we don't need to duck-type baseset.
This sort method will only do something when the addset is not already sorted
or is not sorted in the way we want it to be.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 13 Mar 2014 18:57:30 -0700] rev 20723
revset: added reverse method to addset
This method is needed to duck type generatorset.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 13 Mar 2014 13:29:04 -0700] rev 20722
revset: changed _iterator() method on addset to work with a given order
If the two collections are in ascending order, yield their values in an
ordered way by iterating both at the same time and picking the values to
yield.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 13 Mar 2014 14:51:04 -0700] rev 20721
revset: changed _iterator() in addset to use the generated list when available
Now when all the elements have been generated, the iterator will just use the
generated list instead of going through all the elements again.
Lucas Moscovicz <lmoscovicz@fb.com> [Tue, 11 Mar 2014 16:59:42 -0700] rev 20720
revset: added cached generated list to addset
This way when all the values have been generated the list can be sorted
without having to generate them all again.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 13 Mar 2014 17:15:21 -0700] rev 20719
revset: changed sort method to use native sort implementation of smartsets
When sort is done by revision or reversed revision number it can just call
sort on the set and doesn't have to iterate it all over again.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 13 Mar 2014 17:16:58 -0700] rev 20718
revset: fixed sorting issue with spanset
When a spanset was being sorted it didn't take into account it's current
state (ascending or descending) and it reversed itself everytime the reverse
parameter was True.
This is not yet used but it will be as soon as the sort revset is changed to
directly use the structures sort method.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 13 Mar 2014 17:20:03 -0700] rev 20717
tests: added tests to test sort revset
This tests are intended to test sort in many different cases where it could
fail when using the new structures
Lucas Moscovicz <lmoscovicz@fb.com> [Fri, 14 Mar 2014 09:07:59 -0700] rev 20716
revset: added __nonzero__ method to spanset class
Implemented it in a lazy way, just look for the first non-filtered revision
and return True if there's any revision at all.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Sat, 25 Jun 2011 02:46:23 +0200] rev 20715
require: provide a link to a wiki page in addition of suggesting upgrade
The wiki page is intended to describe several solution to the requirement issue.
Some of those solutions does not involve upgrading mercurial. That is very
useful for people that can't easily upgrade they Mercurial in some place.
Lucas Moscovicz <lmoscovicz@fb.com> [Thu, 06 Mar 2014 09:41:47 -0800] rev 20714
revset: optimized sort method in lazyset class
We are taking advantage of the smartset classes sort method when it exists and
converting the set to a baseset otherwise.
Durham Goode <durham@fb.com> [Thu, 13 Mar 2014 13:47:21 -0700] rev 20713
revset: improve head revset performance
Previously the head() revset would iterate over every item in the subset and
check if it was a head. Since the subset is often the entire repo, this was
slow on large repos. Now we iterate over each item in the head list and check if
it's in the subset, which results in much less work.
hg log -r 'head()' on a large repo:
Before: 0.95s
After: 0.28s
Lucas Moscovicz <lmoscovicz@fb.com> [Tue, 11 Mar 2014 16:52:15 -0700] rev 20712
revset: added ascending attribute to addset class
In case both collections are in an ascending/descending order then we will be
able to iterate them lazily while keeping the order.
Lucas Moscovicz <lmoscovicz@fb.com> [Mon, 10 Mar 2014 10:49:04 -0700] rev 20711
revset: added set method to addset to duck type generatorset
Since this class is only going to be used inside revset.py (it does not duck
type baseset) it needs to duck type only a few more methods for the next
patches.
Matt Mackall <mpm@selenic.com> [Thu, 13 Mar 2014 15:00:34 -0500] rev 20710
merge with default
Matt Mackall <mpm@selenic.com> [Thu, 13 Mar 2014 14:34:32 -0500] rev 20709
revsets: backout d04aac468bf4 due to performance regressions
Lucas Moscovicz <lmoscovicz@fb.com> [Wed, 12 Mar 2014 17:20:26 -0700] rev 20708
revset: made addset a private class
This class is not supposed to be used outside revset.py since it only
wraps content that is used by baseset typed classes.
It only gets created by revset operations or private methods.
Lucas Moscovicz <lmoscovicz@fb.com> [Wed, 12 Mar 2014 17:19:46 -0700] rev 20707
revset: made descgeneratorset a private class
This class is not supposed to be used outside revset.py since it only
wraps content that is used by baseset typed classes.
It only gets created by revset operations or private methods.
Lucas Moscovicz <lmoscovicz@fb.com> [Wed, 12 Mar 2014 17:18:54 -0700] rev 20706
revset: made ascgeneratorset a private class
This class is not supposed to be used outside revset.py since it only
wraps content that is used by baseset typed classes.
It only gets created by revset operations or private methods.
Lucas Moscovicz <lmoscovicz@fb.com> [Wed, 12 Mar 2014 17:07:38 -0700] rev 20705
revset: made generatorset a private class
This class are not supposed to be used outside revset.py since it only
wraps content that is used by baseset typed classes.
It only gets created by revset operations or private methods.
Lucas Moscovicz <lmoscovicz@fb.com> [Wed, 05 Mar 2014 18:49:47 -0800] rev 20704
cmdutil: changed walkchangerevs to use spanset instead of baseset
Using a spanset takes almost no memory at all. A baseset builds the entire
list in memory and is much slower for methods like __contains__.
Lucas Moscovicz <lmoscovicz@fb.com> [Mon, 24 Feb 2014 16:36:17 -0800] rev 20703
revset: added sort methods to generatorsets
Method needed to propagate sort calls amongst lazy structures.
The generated list (stored in the object) is sorted.
If the generated list did not contain all elements from the generator, we
take care of that before sorting the list.
Matt Mackall <mpm@selenic.com> [Thu, 13 Mar 2014 12:05:08 -0500] rev 20702
merge with stable
Augie Fackler <raf@durin42.com> [Tue, 04 Feb 2014 18:33:25 -0500] rev 20701
fix_bytesmod: use the "from mercurial" form of the import to avoid breaking httpclient
Without this patch, 2to3's rewrites to httpclient cause it to fail to
import. With this patch, it's probably hopelessly broken, but at least
won't block forward progress on non-http2 functionality on Python 3.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Mar 2014 19:48:41 +0900] rev 20700
commit: create new amend changeset as secret correctly for "--secret" option
Before this patch, "hg commit --amend --secret" doesn't create new
amend changeset as secret, even though the internal function
"commitfunc()" passed to "cmdutil.amend()" make "phases.new-commit"
configuration as "secret" temporarily.
"cmdutil.amend()" uses specified "commitfunc" only for temporary amend
commit, and creates the final amend commit changeset by
"localrepository.commitctx()" directly with memctx.
This patch creates new amend changeset as secret correctly for
"--secret" option, by changing "phases.new-commit" configuration
temporarily before "localrepository.commitctx()".
Cristian Zamfir <cristi_zmf@yahoo.com> [Wed, 12 Mar 2014 10:26:48 +0200] rev 20699
hg log: solves bug regarding hg log -r 0:null (issue4039)
'hg log -r 0:null' was showing only one changeset(the '-1' one) instead of the first two changesets.
Augie Fackler <raf@durin42.com> [Mon, 10 Mar 2014 17:52:42 -0400] rev 20698
killdaemons: drop superfluous L suffix from constant
As far as I'm aware PEP 237[0] means this suffix is superfluous even
on Python 2.4, and we can just drop it, which makes this code happy on
Python 3.
0: http://legacy.python.org/dev/peps/pep-0237/