Sat, 19 Apr 2014 20:53:45 -0700 run-tests: move remaining result processing to Test.run()
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()
Sat, 19 Apr 2014 20:52:58 -0700 run-tests: move output difference 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()
Sat, 19 Apr 2014 20:48:16 -0700 run-tests: generate timeout result in 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()
Sat, 19 Apr 2014 20:47:14 -0700 run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:47:14 -0700] rev 21324
run-tests: add skip processing to Test
Sat, 19 Apr 2014 20:41:08 -0700 run-tests: move fail() into 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.
Sat, 19 Apr 2014 20:35:54 -0700 run-tests: move success() into Test
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:35:54 -0700] rev 21322
run-tests: move success() into Test
Sat, 19 Apr 2014 20:32:38 -0700 run-tests: move err path handling to 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
Sat, 19 Apr 2014 20:27:18 -0700 run-tests: handle interrupted in Test.run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 20:27:18 -0700] rev 21320
run-tests: handle interrupted in Test.run()
Sat, 19 Apr 2014 20:22:32 -0700 run-tests: kill daemons during Test.cleanup()
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().
Sat, 19 Apr 2014 18:50:40 -0700 run-tests: capture reference output in Test.__init__
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.
Sat, 19 Apr 2014 16:14:30 -0700 run-tests: make globmatch a static method of TTest
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
Sat, 19 Apr 2014 16:13:02 -0700 run-tests: make rematch 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
Sat, 19 Apr 2014 16:11:49 -0700 run-tests: make linematch 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.
Sat, 19 Apr 2014 15:37:50 -0700 run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 15:37:50 -0700] rev 21314
run-tests: finish moving tsttest() into TTest
Sat, 19 Apr 2014 15:28:31 -0700 run-tests: move t test execution from tsttest() to TTest.run()
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.
Sat, 19 Apr 2014 15:19:28 -0700 run-tests: move t test parsing into its own function
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.
Sat, 19 Apr 2014 14:54:04 -0700 run-tests: roll pytest() into PythonTest._run()
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.
Sat, 19 Apr 2014 14:51:43 -0700 run-tests: remove threadtmp in Test.cleanup()
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.
Sat, 19 Apr 2014 14:47:34 -0700 run-tests: allow Test.run() to run multiple times
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.
Sat, 19 Apr 2014 14:09:46 -0700 run-tests: capture reference output in TestResult class
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 14:09:46 -0700] rev 21308
run-tests: capture reference output in TestResult class
Sat, 19 Apr 2014 14:01:18 -0700 run-tests: give TestResult a skipped attribute
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 14:01:18 -0700] rev 21307
run-tests: give TestResult a skipped attribute
Sat, 19 Apr 2014 18:31:22 -0700 run-tests: pass TestResult into run()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 19 Apr 2014 18:31:22 -0700] rev 21306
run-tests: pass TestResult into run()
Sat, 19 Apr 2014 13:50:25 -0700 run-tests: capture execution results in a TestResult class
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().
Sat, 19 Apr 2014 13:29:26 -0700 run-tests: clean up temp directory variables
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.
Sat, 19 Apr 2014 13:26:12 -0700 run-tests: move env into Test
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.
Sat, 19 Apr 2014 13:22:52 -0700 run-tests: move killdaemons into Test.run()
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.
Sat, 19 Apr 2014 13:18:55 -0700 run-tests: move replacements and port management 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.
Sat, 19 Apr 2014 13:11:49 -0700 run-tests: move createhgrc() call into Test.run()
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.
Sat, 19 Apr 2014 13:07:05 -0700 run-tests: move createenv() into Test
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.
Sat, 19 Apr 2014 13:03:24 -0700 run-tests: move replacements generation into Test
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.
Sat, 19 Apr 2014 12:54:09 -0700 run-tests: move testtmp into Test class
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.
Sat, 19 Apr 2014 12:26:34 -0700 run-tests: create classes for representing tests
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.
Wed, 30 Apr 2014 18:40:20 -0700 revsetbenchmark: add `author(mpm) or author(lmoscovicz)` to the canonical list
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.
Tue, 13 May 2014 19:29:45 -0500 filterpyflakes: filter WindowsError unconditionally
Matt Mackall <mpm@selenic.com> [Tue, 13 May 2014 19:29:45 -0500] rev 21294
filterpyflakes: filter WindowsError unconditionally
Tue, 13 May 2014 19:22:40 -0500 filterpyflakes: make memoryview filtering unconditional
Matt Mackall <mpm@selenic.com> [Tue, 13 May 2014 19:22:40 -0500] rev 21293
filterpyflakes: make memoryview filtering unconditional
Tue, 13 May 2014 15:22:36 -0500 py3kcompat: drop unused export
Matt Mackall <mpm@selenic.com> [Tue, 13 May 2014 15:22:36 -0500] rev 21292
py3kcompat: drop unused export
Sat, 10 May 2014 15:22:04 -0700 py3kcompat: don't convert os.environ to bytes
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.
Sat, 10 May 2014 14:57:25 -0700 demandimport: pass proper level to __import__ in Python 3
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).
Wed, 16 Apr 2014 19:55:40 -0400 help: suggest keyword search when no topic is found
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.
Wed, 16 Apr 2014 20:01:03 -0400 help: provide a more helpful message when no keyword are matched
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.
Tue, 29 Apr 2014 11:40:42 -0700 revsetbenchmark: use optparse to retrieve argument
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.
Fri, 25 Apr 2014 13:35:31 -0700 revsetbenchmark: add a usage message when no arguments are passed
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.
Tue, 29 Apr 2014 19:15:36 -0700 revsetbenchmark: add `::tip and draft()` to the canonical list
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.
Mon, 28 Apr 2014 15:14:11 -0700 revset: cosmetic changes in spanset range comparison
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
Fri, 25 Apr 2014 23:38:24 -0700 revset: drop spanset._contained
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)
Mon, 05 May 2014 22:47:14 -0700 patchbomb: includes series information in the header
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.
Fri, 09 May 2014 13:32:56 -0500 pager: add attend-<command> option
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.
Fri, 09 May 2014 13:10:23 -0500 pager: variable reorder
Matt Mackall <mpm@selenic.com> [Fri, 09 May 2014 13:10:23 -0500] rev 21280
pager: variable reorder
Fri, 09 May 2014 13:07:50 -0500 pager: break auto out of command check loop
Matt Mackall <mpm@selenic.com> [Fri, 09 May 2014 13:07:50 -0500] rev 21279
pager: break auto out of command check loop
Fri, 09 May 2014 13:05:52 -0500 pager: break always 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
Fri, 09 May 2014 12:58:53 -0500 pager: break pager invocation 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
Thu, 08 May 2014 11:11:27 -0500 tests: fix test failure on vfat
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.
Thu, 08 May 2014 19:45:22 +0200 largefiles: include largefiles when doing log on a directory (issue4241)
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.
Thu, 08 May 2014 14:58:25 +0000 journal: set Abort hint when failing due to an abandoned transaction
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
Thu, 08 May 2014 16:37:33 -0700 merge: define conflict marker labels in filemerge()
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.
Thu, 08 May 2014 16:33:06 -0700 merge: prevent simplemerge from mutating label list
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).
Fri, 09 May 2014 08:44:53 +0900 tests: ignore "undefined name 'memoryview'" pyflakes error on earlier Python
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
Fri, 09 May 2014 08:44:53 +0900 mq: eliminate unused variable for test-check-pyflakes.t
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.
Tue, 22 Apr 2014 02:09:24 +0200 merge: make debug output slightly more helpful by including message for action
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
Sun, 13 May 2012 17:45:08 +0200 merge: simplify mergestate iter
Mads Kiilerich <mads@kiilerich.com> [Sun, 13 May 2012 17:45:08 +0200] rev 21268
merge: simplify mergestate iter
Fri, 09 May 2014 14:46:50 -0500 resolve: simplify "finished" message
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)
Fri, 18 Apr 2014 22:19:25 -0700 resolve: print message when no unresolved files remain (issue4214)
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.
Fri, 18 Apr 2014 18:56:26 -0700 resolve: print warning when no work performed (issue4208)
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.
Fri, 18 Apr 2014 19:08:32 -0700 resolve: abort when not applicable (BC)
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.
Fri, 18 Apr 2014 18:26:42 -0700 resolve: split test
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.
Fri, 18 Apr 2014 18:19:46 -0700 resolve: use early continue and deindent
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 18 Apr 2014 18:19:46 -0700] rev 21262
resolve: use early continue and deindent
Thu, 08 May 2014 16:48:28 -0700 mergestate: consistently set variables to None
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.
Wed, 07 May 2014 17:22:34 -0700 changegroup: refactor outgoing logic into a function
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.
Wed, 07 May 2014 17:24:19 -0700 bundle2: fix bundle2 pulling all revs on empty pulls
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.
Wed, 07 May 2014 19:26:15 -0700 exchange: fix bad indentation
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.
Wed, 07 May 2014 19:28:17 -0700 exchange: propagate arguments to the _getbundleextrapart function
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).
Wed, 07 May 2014 17:20:38 -0700 bundle2: fix configuration name mismatch
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.
Wed, 07 May 2014 17:58:13 -0500 build: initial support for in-tree autobuilding recipes
Matt Mackall <mpm@selenic.com> [Wed, 07 May 2014 17:58:13 -0500] rev 21255
build: initial support for in-tree autobuilding recipes
Sun, 04 May 2014 22:48:07 -0700 tests: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 22:48:07 -0700] rev 21254
tests: declare commands using decorator
Sun, 04 May 2014 21:33:14 -0700 share: 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
Sun, 04 May 2014 21:52:25 -0700 relink: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:52:25 -0700] rev 21252
relink: declare command using decorator
Sun, 04 May 2014 22:35:37 -0700 record: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 22:35:37 -0700] rev 21251
record: declare commands using decorator
Sun, 04 May 2014 21:31:51 -0700 hgk: 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
Sun, 04 May 2014 21:48:10 -0700 color: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:48:10 -0700] rev 21249
color: declare command using decorator
Sun, 04 May 2014 21:46:49 -0700 children: 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
Sun, 04 May 2014 21:48:41 -0700 fetch: 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
Sun, 04 May 2014 21:54:01 -0700 extdiff: 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
Sun, 04 May 2014 21:46:24 -0700 churn: 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
Sun, 04 May 2014 21:17:04 -0700 convert: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:17:04 -0700] rev 21244
convert: declare commands using decorator
Sun, 04 May 2014 21:19:31 -0700 debugshell: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:19:31 -0700] rev 21243
debugshell: declare command using decorator
Sun, 04 May 2014 21:09:06 -0700 largefiles: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 04 May 2014 21:09:06 -0700] rev 21242
largefiles: declare commands using decorator
Mon, 05 May 2014 21:26:40 +0900 cmdutil: omit redundant "savecommitmessage()" in "tryimportone()"
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.
Mon, 05 May 2014 21:26:40 +0900 amend: use "editor" argument for "memctx.__init__" to save commit message
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.
Mon, 05 May 2014 21:26:40 +0900 histedit: pass "editor" argument to "memctx.__init__()" for "collapse" command
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.
Mon, 05 May 2014 21:26:40 +0900 context: move editor invocation from "makememctx()" to "memctx.__init__()"
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.
Mon, 05 May 2014 21:26:40 +0900 localrepo: add "editor" argument to "tag()"
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.
Mon, 05 May 2014 21:26:40 +0900 qrefresh: use "editor" argument of "commit()" instead of explicit "ui.edit()"
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()".
Mon, 05 May 2014 21:26:40 +0900 qrefresh: relocate message/patch-header handling to delay message determination
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.
Mon, 05 May 2014 21:26:40 +0900 qnew: use "editor" argument of "commit()" instead of explicit "ui.edit()"
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".
Mon, 05 May 2014 21:26:40 +0900 histedit: use "editor" argument of "commit()" instead of explicit "ui.edit()"
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.
Tue, 29 Apr 2014 12:54:01 +0900 test-pyflakes: detect undefined name error
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'
Fri, 02 May 2014 18:25:23 +0900 run-tests: initialize global variables to suppress pyflakes warning
Yuya Nishihara <yuya@tcha.org> [Fri, 02 May 2014 18:25:23 +0900] rev 21231
run-tests: initialize global variables to suppress pyflakes warning
Tue, 06 May 2014 12:47:59 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 06 May 2014 12:47:59 -0500] rev 21230
merge with stable
Mon, 05 May 2014 16:54:15 +0200 setup.py, make: avoid problems with outdated, existing hgext/__index__.py* 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.
Fri, 02 May 2014 18:24:10 +0900 factotum: initialize global variables to suppress pyflakes warning
Yuya Nishihara <yuya@tcha.org> [Fri, 02 May 2014 18:24:10 +0900] rev 21228
factotum: initialize global variables to suppress pyflakes warning
Sat, 03 May 2014 03:29:30 +0200 color: don't fail on error messages when no curses (issue4237) stable
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.
Sat, 03 May 2014 10:33:54 +0200 win32: backout 1a9ebc83a74c stable
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()
Mon, 05 May 2014 13:42:08 -0500 test-check-code-hg: use locate instead of manifest
Matt Mackall <mpm@selenic.com> [Mon, 05 May 2014 13:42:08 -0500] rev 21225
test-check-code-hg: use locate instead of manifest
Mon, 05 May 2014 13:41:29 -0500 test-check-code-hg: drop manual check of non-.py scripts
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
Mon, 05 May 2014 13:42:58 -0500 test-check-code-hg: use test-repo check
Matt Mackall <mpm@selenic.com> [Mon, 05 May 2014 13:42:58 -0500] rev 21223
test-check-code-hg: use test-repo check
Mon, 05 May 2014 13:37:59 -0500 check-code: look at shebang to identify Python scripts
Matt Mackall <mpm@selenic.com> [Mon, 05 May 2014 13:37:59 -0500] rev 21222
check-code: look at shebang to identify Python scripts
Fri, 02 May 2014 00:23:58 -0500 tests: use locate to find files for pyflakes check
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
Thu, 01 May 2014 19:24:03 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 19:24:03 -0500] rev 21220
merge with stable
Thu, 01 May 2014 17:48:02 -0500 Added signature for changeset 2195ac506c6a stable
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 17:48:02 -0500] rev 21219
Added signature for changeset 2195ac506c6a
Thu, 01 May 2014 17:47:24 -0500 Added tag 3.0 for changeset 2195ac506c6a stable
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 17:47:24 -0500] rev 21218
Added tag 3.0 for changeset 2195ac506c6a
Thu, 01 May 2014 14:07:04 -0700 revset: directly use __contains__ instead of a lambda stable 3.0
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)
Thu, 01 May 2014 14:33:06 -0500 tests: suppress spurious lchmod error from unzip (issue4088) stable
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.
Thu, 01 May 2014 12:15:28 -0700 orderedlazyset: directly use __contains__ instead of a lambda stable
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)
Thu, 01 May 2014 12:15:00 -0700 lazyset: directly use __contains__ instead of a lambda stable
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)
Thu, 01 May 2014 13:42:12 -0500 merge with i18n stable
Matt Mackall <mpm@selenic.com> [Thu, 01 May 2014 13:42:12 -0500] rev 21213
merge with i18n
Wed, 30 Apr 2014 23:20:46 +0900 i18n-ja: synchronized with e9c2f76be74b stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 30 Apr 2014 23:20:46 +0900] rev 21212
i18n-ja: synchronized with e9c2f76be74b
Wed, 30 Apr 2014 11:01:50 -0300 i18n-pt_BR: synchronized with e9c2f76be74b stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 30 Apr 2014 11:01:50 -0300] rev 21211
i18n-pt_BR: synchronized with e9c2f76be74b
Thu, 01 May 2014 16:47:50 +0200 rebase: empty revset should be a gentle no-op with exit code 1, not an error stable
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
Thu, 01 May 2014 15:12:49 +0200 largefiles: better handling of log from other working directory (issue4236) stable
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.
Thu, 01 May 2014 09:42:23 -0500 tests: add repository check for pyflakes test stable
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.
Sat, 26 Apr 2014 00:38:02 -0700 spanset: directly use __contains__ instead of a lambda stable
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.
Wed, 30 Apr 2014 15:36:38 -0700 transaction: fix file descriptor leak for journal.backupfiles 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).
Fri, 25 Apr 2014 18:00:07 -0700 revset: also inline spanset._contained in __len__ stable
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.
Mon, 28 Apr 2014 15:15:36 -0700 revset: inline spanset containment check (fix perf regression) stable
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.
Wed, 30 Apr 2014 14:19:01 -0500 ancestor: silence multiple ancestor warning outside of merge (issue4234) stable
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.
Fri, 25 Apr 2014 13:44:51 -0700 revsetbenchmark: fix error raising stable
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.)
Mon, 28 Apr 2014 16:28:52 -0700 revset: fix revision filtering in spanset.contains (regression) stable
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.
Mon, 28 Apr 2014 17:25:36 -0700 graft: do not use `.remove` on a smart set (regression) stable
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.
Mon, 28 Apr 2014 15:09:23 -0700 help: clarify distinction among `contains`/`file`/`filelog` stable
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).
Thu, 24 Apr 2014 16:47:22 +0200 discovery: don't report all "unsynced" remote heads (issue4230) stable
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'.
Wed, 23 Apr 2014 13:51:35 +0200 rebase: don't abort if we're asked to rebase an empty revset stable
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.
Fri, 25 Apr 2014 22:34:09 -0400 largefiles: remove directories emptied after their files are moved (issue3515) stable
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)
Sat, 26 Apr 2014 18:13:06 +0900 cmdserver: forcibly use L channel to read password input (issue3161) stable
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.
Tue, 29 Apr 2014 12:37:36 +0900 killdaemons: correct typo of _check() function caught by pyflakes stable
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 12:37:36 +0900] rev 21194
killdaemons: correct typo of _check() function caught by pyflakes
Tue, 29 Apr 2014 12:35:50 +0900 win32: add missing definition of _ERROR_NO_MORE_FILES caught by pyflakes stable
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
Tue, 29 Apr 2014 12:35:02 +0900 exchange: fix invalid reference to bundle2.UnknownPartError caught by pyflakes stable
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
Tue, 29 Apr 2014 11:02:40 +0900 match: fix NameError 'pat' on overflow of regex pattern length stable
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.
Sun, 27 Apr 2014 15:09:48 +0900 color: add missing handling of stderr capture introduced by 350dc24a553d stable
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().
Wed, 23 Apr 2014 20:23:30 +0100 hgweb: replace excanvas.js with a newer version stable
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.
Wed, 23 Apr 2014 23:29:55 +0200 httppeer: reintroduce _abort that accidentally was removed in 167047ba3cfa stable
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.
Mon, 21 Apr 2014 16:13:15 -0700 bundle2: gracefully handle hook abort stable
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.
Mon, 21 Apr 2014 17:51:58 -0700 bundle2: gracefully handle PushRaced error during unbundle stable
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.
Mon, 21 Apr 2014 20:04:54 -0700 bundle2: add an error message to push race error stable
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.
Mon, 21 Apr 2014 18:59:09 -0700 bundle2: fix raising errors during heads checking stable
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.
Mon, 21 Apr 2014 16:02:03 -0700 bundle2: gracefully handle UnknownPartError during unbundle stable
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.
Tue, 22 Apr 2014 11:41:34 -0700 bundle2: catch UnknownPartError during local push stable
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.
Mon, 21 Apr 2014 19:43:01 -0700 bundle2: catch UnknownPartError during pull stable
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.
Mon, 21 Apr 2014 19:42:51 -0700 bundle2: catch UnknownPartError during push stable
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.
Mon, 21 Apr 2014 19:42:40 -0700 bundle2: use a more specific UnknownPartError when no handler is found stable
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.
Mon, 21 Apr 2014 15:59:55 -0700 bundle2: make error testing more modular stable
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.
Mon, 21 Apr 2014 15:48:52 -0700 bundle2: gracefully handle abort during unbundle stable
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.
Tue, 22 Apr 2014 11:22:41 -0700 bundle2: decorate exception raised during bundle processing stable
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.
Tue, 22 Apr 2014 10:14:16 -0300 histedit, i18n: replace '+' with concatenation to make hggettext happy stable
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
Tue, 22 Apr 2014 10:12:21 -0300 commands: fix typo in --graph description stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Tue, 22 Apr 2014 10:12:21 -0300] rev 21174
commands: fix typo in --graph description
Tue, 22 Apr 2014 10:12:13 -0300 revset, i18n: add translator comment to "only" stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Tue, 22 Apr 2014 10:12:13 -0300] rev 21173
revset, i18n: add translator comment to "only"
Mon, 21 Apr 2014 20:24:54 +0200 merge: improve notes for listing the bids for ambiguous merges stable
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
Fri, 18 Apr 2014 13:33:20 +0200 merge: tell the user when we are using bid merge stable
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
Mon, 21 Apr 2014 20:22:14 +0200 merge: fix stray character in bid merge message stable
Mads Kiilerich <madski@unity3d.com> [Mon, 21 Apr 2014 20:22:14 +0200] rev 21170
merge: fix stray character in bid merge message
Mon, 21 Apr 2014 20:18:42 +0200 tests: better test coverage for bid merge stable
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.
Mon, 21 Apr 2014 19:53:19 +0200 merge: fix wrong number of arguments for bid merge message stable
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
Mon, 21 Apr 2014 15:08:39 -0500 merge: fix test failures with new merge code on OS X stable
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.
Sat, 19 Apr 2014 20:12:53 +0200 obsolete: fix one-element tuple in module docstring stable
Martin Geisler <martin@geisler.net> [Sat, 19 Apr 2014 20:12:53 +0200] rev 21166
obsolete: fix one-element tuple in module docstring
Sat, 19 Apr 2014 19:53:46 +0200 obsolete: let N denote number of obsoleted changestes in a marker stable
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.
Sat, 19 Apr 2014 19:52:09 +0200 obsolete: fix language and grammar in module docstring stable
Martin Geisler <martin@geisler.net> [Sat, 19 Apr 2014 19:52:09 +0200] rev 21164
obsolete: fix language and grammar in module docstring
Sat, 19 Apr 2014 15:11:25 +0200 churn: compute padding with unicode strings stable
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.
Thu, 17 Apr 2014 19:39:04 -0400 Added signature for changeset 564f55b25122 stable
Matt Mackall <mpm@selenic.com> [Thu, 17 Apr 2014 19:39:04 -0400] rev 21162
Added signature for changeset 564f55b25122
Thu, 17 Apr 2014 19:39:00 -0400 Added tag 3.0-rc for changeset 564f55b25122 stable
Matt Mackall <mpm@selenic.com> [Thu, 17 Apr 2014 19:39:00 -0400] rev 21161
Added tag 3.0-rc for changeset 564f55b25122
Thu, 17 Apr 2014 19:36:17 -0400 merge default into stable for 3.0 code freeze stable 3.0-rc
Matt Mackall <mpm@selenic.com> [Thu, 17 Apr 2014 19:36:17 -0400] rev 21160
merge default into stable for 3.0 code freeze
Thu, 17 Apr 2014 16:56:15 -0400 bundle2: allow extensions to extend the getbundle request
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.
Thu, 17 Apr 2014 17:32:34 -0400 bundle2: add a way to add parts during a `getbundle` request
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.
Thu, 17 Apr 2014 17:25:50 -0400 getbundle: pass arbitrary arguments all along the call chain
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.
Thu, 17 Apr 2014 17:59:28 -0400 bundle2: call a hook after the transaction is closed
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.
Thu, 17 Apr 2014 17:21:39 -0400 bundle2: call a hook prior to closing the transaction
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.
Thu, 17 Apr 2014 17:16:21 -0400 bundle2: inform transaction that we are in a bundle2 unbundle
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.
Thu, 17 Apr 2014 17:46:26 -0400 changegroup: use tr.hookargs when calling changegroup hooks
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.
Thu, 17 Apr 2014 17:15:02 -0400 changegroup: use tr.hookargs when calling pretxnchangegroup hooks
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.
Thu, 17 Apr 2014 17:09:20 -0400 addchangegroup: register data in tr.hookargs
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.
Thu, 17 Apr 2014 17:04:59 -0400 transaction: add a notion of hook arguments
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.
Thu, 17 Apr 2014 16:54:15 -0400 bundle2: allow extensions to plug into the push process
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.
Thu, 17 Apr 2014 16:04:58 -0400 bundle2: require both client and server to opt in
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.
Thu, 17 Apr 2014 16:01:58 -0400 bundle2: move bundle2 config option to section "experimental"
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`.
Thu, 17 Apr 2014 15:45:12 -0400 bundle2: move all parts into a `bx2` namespace
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.
Thu, 17 Apr 2014 15:33:17 -0400 bundle2: rename server capability to bundle2-exp
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.
Thu, 17 Apr 2014 15:27:54 -0400 bundle2: use HG2X in the header
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.
Thu, 17 Apr 2014 02:01:38 -0400 bundle2: transmit capabilities to getbundle during pull
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`.
Thu, 17 Apr 2014 14:37:24 -0400 bundle2: include client capabilities in the pushed bundle
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.
Thu, 17 Apr 2014 01:49:20 -0400 bundle2: advertise bundle2 caps in server capabilities
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).
Thu, 17 Apr 2014 01:50:28 -0400 bundle2: add bundle2caps dict on localrepo object
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.
Thu, 17 Apr 2014 01:44:53 -0400 bundle2: capabilities encoding
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 17 Apr 2014 01:44:53 -0400] rev 21139
bundle2: capabilities encoding
Thu, 17 Apr 2014 01:09:05 -0400 bundle2: extract capabilities decoding
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).
Thu, 17 Apr 2014 01:03:33 -0400 bundle2: protect capabilities name and values with url quoting
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.
Thu, 17 Apr 2014 11:44:49 -0400 bundle2: support for capabilities with values
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.
Thu, 17 Apr 2014 11:32:30 -0400 bundle2: add capabilities support in `replycaps` part
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.
Wed, 16 Apr 2014 23:55:59 -0400 bundle2: adds a capabilities attribute on bundler20
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.
Wed, 16 Apr 2014 23:18:27 -0400 bundle2: include stderr when capturing handlers output
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.
Wed, 16 Apr 2014 23:36:57 -0400 ui: pushbuffer can now also capture stderr
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.
Wed, 16 Apr 2014 14:22:24 -0400 bundle2: capture remote stdout while unbundling
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.
Wed, 16 Apr 2014 14:09:35 -0400 bundle2: introduce `replycaps` part for on-demand reply
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.
Wed, 16 Apr 2014 18:41:48 -0400 bundle2: use an official iterparts method to unbundle parts
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.
Fri, 28 Feb 2014 02:52:32 +0100 merge: with merge.preferancestor=*, run an auction with bids from ancestors
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.
Fri, 28 Feb 2014 15:10:56 -0800 log: changed implementation to use graphlog code
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.
Mon, 24 Feb 2014 22:42:14 +0100 context: introduce merge.preferancestor for controlling which ancestor to pick
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.
Thu, 17 Apr 2014 17:32:04 +0200 context: tell when .ancestor picks one of multiple common ancestors heads
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.
Thu, 17 Apr 2014 09:36:09 +0900 hgweb: align entries in "changelog" and "revisions" pages of "spartan" style
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.
Thu, 17 Apr 2014 09:36:09 +0900 hgweb: show revisions and hashes gotten from changelog in "comparison" page
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.
Thu, 17 Apr 2014 09:36:08 +0900 hgweb: show as same parents as "hg parents -r REV FILE" in pages for file
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
Thu, 17 Apr 2014 09:36:08 +0900 hgweb: make "comparison" get parent from not filelog but changelog
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.
Thu, 17 Apr 2014 09:36:08 +0900 hgweb: fix lack of "bookmarks" link in "/file" page of "paper" style
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.
Thu, 17 Apr 2014 11:48:22 -0700 hgweb: adding article link to rss feed
Aaron Jensen <ajensen@webmd.net> [Thu, 17 Apr 2014 11:48:22 -0700] rev 21119
hgweb: adding article link to rss feed
Thu, 17 Apr 2014 11:47:49 -0700 hgweb: adding branch names from inbranch template 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
Thu, 17 Apr 2014 11:45:43 -0700 hgweb: adding branch names from inbranch template to atom 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
Thu, 03 Oct 2013 18:01:21 +0200 dirstate: report bad subdirectories as match.bad, not just a warning (BC)
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
Thu, 03 Oct 2013 18:01:21 +0200 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 21115
dirstate: improve documentation and readability of match and ignore in the walker
Thu, 03 Oct 2013 18:01:21 +0200 context: remove redundant handling of match.bad return value
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.
Thu, 03 Oct 2013 18:01:21 +0200 match: remove last traces of unused .missing callback
Mads Kiilerich <madski@unity3d.com> [Thu, 03 Oct 2013 18:01:21 +0200] rev 21113
match: remove last traces of unused .missing callback
Sun, 13 Apr 2014 22:00:08 +0200 match: _globre doctests
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 22:00:08 +0200] rev 21112
match: _globre doctests
Thu, 03 Oct 2013 18:01:21 +0200 match: improve documentation - docstrings and more descriptive variable naming
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
Wed, 05 Mar 2014 15:55:09 -0800 largefiles: changed overridelog to work with graphlog
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.]
Thu, 06 Mar 2014 14:52:07 -0800 largefiles: added test coverage for graph log
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.]
Tue, 25 Feb 2014 10:40:04 -0800 cmdutil: changed _makegraphlogrevset to _makelogrevset
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.
Thu, 17 Apr 2014 20:01:39 +0200 revlog: backout 514d32de6646 - commonancestors
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 20:01:39 +0200] rev 21107
revlog: backout 514d32de6646 - commonancestors
Thu, 17 Apr 2014 20:01:39 +0200 localrepo: use commonancestorsheads for checking linear heritage in file commit
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.
Thu, 17 Apr 2014 20:01:39 +0200 backout: use commonancestorsheads for checking linear heritage
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.
Thu, 17 Apr 2014 20:01:35 +0200 revlog: introduce commonancestorsheads method
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.
Thu, 17 Apr 2014 19:58:08 +0200 parsers: remove unnecessary gca variable in index_commonancestorsheads
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 19:58:08 +0200] rev 21103
parsers: remove unnecessary gca variable in index_commonancestorsheads
Mon, 24 Feb 2014 22:42:14 +0100 parsers: introduce 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.
Thu, 17 Apr 2014 19:49:56 +0200 ancestors: extract candidates function as commonancestorsheads
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 19:49:56 +0200] rev 21101
ancestors: extract candidates function as commonancestorsheads
Thu, 17 Apr 2014 14:54:46 +0200 filemerge: better handling of failing remove of temporary files
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.
Thu, 17 Apr 2014 14:54:46 +0200 contrib: remove mergetools.hgrc premerge=False for Beyond Compare and Araxis
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.)
Wed, 16 Apr 2014 03:05:00 +0900 obsolete: add '%' specifier to the format string to avoid TypeError at runtime
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.
Wed, 16 Apr 2014 03:05:00 +0900 check-code: detect "% inside _()" when there are leading whitespaces
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.
Wed, 16 Apr 2014 03:05:00 +0900 i18n: fix "% inside _()" problem
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 Apr 2014 03:05:00 +0900] rev 21096
i18n: fix "% inside _()" problem
Sun, 13 Apr 2014 18:45:43 +0200 largefiles: revert override, install matchfn outside the try/except restoring it
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
Sun, 28 Apr 2013 13:18:25 +0200 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com> [Sun, 28 Apr 2013 13:18:25 +0200] rev 21094
largefiles: simplify revert - use getstandinsstate like other commands do
Sun, 13 Apr 2014 18:45:43 +0200 largefiles: remove dummy assignments for creating an already existing closure
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
Sun, 13 Apr 2014 18:45:43 +0200 largefiles: remove silent handling of incorrect invocation of restorematchfn
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.
Sun, 13 Apr 2014 18:45:43 +0200 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 21091
largefiles: copy override, install matchfn outside the try/except restoring it
Sun, 13 Apr 2014 18:45:43 +0200 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com> [Sun, 13 Apr 2014 18:45:43 +0200] rev 21090
largefiles: clarify installmatchfn documentation
Sat, 27 Apr 2013 23:19:52 +0200 largefiles: use more reasonable locking for update
Mads Kiilerich <madski@unity3d.com> [Sat, 27 Apr 2013 23:19:52 +0200] rev 21089
largefiles: use more reasonable locking for update
Sat, 27 Apr 2013 23:19:52 +0200 largefiles: full debugdirstate functionality for largefiles
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.
(0) -10000 -3000 -1000 -240 +240 +1000 +3000 +10000 +30000 tip