Mon, 21 Dec 2015 21:33:52 -0800 patch: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Dec 2015 21:33:52 -0800] rev 27485
patch: use absolute_import
Mon, 21 Dec 2015 21:26:14 -0800 mdiff: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Dec 2015 21:26:14 -0800] rev 27484
mdiff: use absolute_import
Mon, 21 Dec 2015 21:24:49 -0800 scmposix: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Dec 2015 21:24:49 -0800] rev 27483
scmposix: use absolute_import
Mon, 21 Dec 2015 21:23:43 -0800 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Dec 2015 21:23:43 -0800] rev 27482
scmutil: use absolute_import
Mon, 21 Dec 2015 21:21:09 -0800 scmwindows: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Dec 2015 21:21:09 -0800] rev 27481
scmwindows: use absolute_import
Mon, 21 Dec 2015 21:19:57 -0800 store: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Dec 2015 21:19:57 -0800] rev 27480
store: use absolute_import
Mon, 21 Dec 2015 21:33:27 -0800 help: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Dec 2015 21:33:27 -0800] rev 27479
help: use absolute_import
Mon, 21 Dec 2015 20:29:32 -0500 test-commit-interactive: updates for the no-execbit case
Matt Harbison <matt_harbison@yahoo.com> [Mon, 21 Dec 2015 20:29:32 -0500] rev 27478
test-commit-interactive: updates for the no-execbit case This goes with c84a07530040 and 14b184263846.
Mon, 21 Dec 2015 20:18:06 -0500 test-fileset: conditionalize output with symlink
Matt Harbison <matt_harbison@yahoo.com> [Mon, 21 Dec 2015 20:18:06 -0500] rev 27477
test-fileset: conditionalize output with symlink
Tue, 22 Dec 2015 02:24:16 +0000 commands: the first word of each note should be capital or `hg`
timeless <timeless@mozdev.org> [Tue, 22 Dec 2015 02:24:16 +0000] rev 27476
commands: the first word of each note should be capital or `hg`
Sun, 20 Dec 2015 16:00:27 -0800 revlog: avoid string slice when decompressing u* chunks
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Dec 2015 16:00:27 -0800] rev 27475
revlog: avoid string slice when decompressing u* chunks Revlog chunks can be stored uncompressed. If the first byte of the raw data is \0, we store the data as is. Else we prefix it with 'u'. Before, we performed a string slice to strip out the 'u' prefix. With this patch, we use a buffer to avoid an extra memory copy and associated garbage collection overhead. I was unable to verify any performance impact of this patch. For both mozilla-central and the hg repos, the number of manifest revisions with 'u' prefixes is very small - under 1%. So this change likely isn't called enough to have an impact on manifest reading. However, the reasoning behind this change is solid, so it should be safe.
Thu, 17 Dec 2015 23:53:09 +0900 osutil: implement pure version of recvfds() for PyPy
Yuya Nishihara <yuya@tcha.org> [Thu, 17 Dec 2015 23:53:09 +0900] rev 27474
osutil: implement pure version of recvfds() for PyPy This is less portable than the C version, but PyPy can't load CPython extensions. So for now, this will be used on PyPy. I've tested it on Linux amd64 and Mac OS X.
Thu, 17 Dec 2015 23:41:46 +0900 osutil: implement recvmsg() of SCM_RIGHTS for chg command server
Yuya Nishihara <yuya@tcha.org> [Thu, 17 Dec 2015 23:41:46 +0900] rev 27473
osutil: implement recvmsg() of SCM_RIGHTS for chg command server It will be used to attach client's stdio files to a background chg command server. The socket module of Python 2.x doesn't provide recvmsg(). This could be implemented by using ctypes, but it would be less portable than the C version because the handling of socket ancillary data heavily depends on preprocessor. Also, some length fields are wrongly typed in the Linux kernel.
Mon, 21 Dec 2015 14:52:18 -0600 cleanup: back out performance hacks amended into previous commit
Matt Mackall <mpm@selenic.com> [Mon, 21 Dec 2015 14:52:18 -0600] rev 27472
cleanup: back out performance hacks amended into previous commit
Fri, 18 Dec 2015 06:33:48 +0000 commands: consistently indent notes 3 spaces
timeless <timeless@mozdev.org> [Fri, 18 Dec 2015 06:33:48 +0000] rev 27471
commands: consistently indent notes 3 spaces most notes have 3 spaces for indentation, these had 2...
Sun, 20 Dec 2015 18:38:21 -0800 perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Dec 2015 18:38:21 -0800] rev 27470
perf: add perfrevlogrevision As part of investigating performance improvements to revlog reading, I needed a mechanism to measure every part of revlog reading so I knew where time was spent and how effective optimizations were. This patch implements a perf command for benchmarking the various stages of reading a single revlog revision. When executed against a manifest revision at the end of a 30,000+ long delta chain in mozilla-central, the command demonstrates that ~80% of time is spent in zlib decompression.
Sun, 20 Dec 2015 19:02:02 -0800 commands: use revlog._deltachain in debugdeltachain
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Dec 2015 19:02:02 -0800] rev 27469
commands: use revlog._deltachain in debugdeltachain We have a nice API now. Use it. This does mean we introduce an extra index lookup for each revision. Considering this is a debug command, the overhead should be acceptable. We could add the chain size to revlog._deltachain(). However, that feels like avoidable overhead.
Sun, 20 Dec 2015 18:56:05 -0800 revlog: refactor delta chain computation into own function
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Dec 2015 18:56:05 -0800] rev 27468
revlog: refactor delta chain computation into own function This code is already written in multiple locations. While this code needs to be fast and extracting it to its own function adds overhead, code paths reading delta chains typically read, decompress, and do binary patching on revlog data from the delta chain. This other work (especially zlib decompression) almost certainly accounts for a lot more time than the overhead of introducing a Python function call. So I'm not worried about the performance impact of this change.
Sun, 20 Dec 2015 17:57:44 -0800 perf: call clearcaches() in perfmanifest
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Dec 2015 17:57:44 -0800] rev 27467
perf: call clearcaches() in perfmanifest The old code only partially cleared the caches. Now that we have a comprehensive method for wiping all caches, let's call it. This appears to introduce a marginal regression in `hg perfmanifest` on mozilla-central. This is good because the new result is more accurate since caches aren't being used.
Sun, 20 Dec 2015 19:31:46 -0800 manifest: implement clearcaches()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Dec 2015 19:31:46 -0800] rev 27466
manifest: implement clearcaches() The manifest implements its own caches in addition to revlog's. Extend the base clearcaches() to wipe these as well.
Sun, 20 Dec 2015 17:48:20 -0800 revlog: make clearcaches() more effective
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 20 Dec 2015 17:48:20 -0800] rev 27465
revlog: make clearcaches() more effective clearcaches() was added several years ago in e8d37b78acfb as part of implementing a perf command. Since revlog instances have many caches and since the spirit of this mostly unused method is to facilitate performance testing, I think it's appropriate for all the revlog's caches to get cleared when it is called.
Mon, 21 Dec 2015 22:31:16 +0900 fileset: detect unintentional existing() invocation at runtime
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 21 Dec 2015 22:31:16 +0900] rev 27464
fileset: detect unintentional existing() invocation at runtime A fileset predicate can invoke 'matchctx.existing()' successfully, even if it isn't marked as "existing caller". It is aborted only in some corner cases: e.g. there were one deleted file in the working directory (see 8a0513bf030a for detail). This patch makes 'matchctx.existing()' invocation abort if not '_existingenabled', which is true only while "existing caller" running. After this changes, non-"existing caller" predicate function is aborted immediately, whenever it invokes 'matchctx.existing()'. This prevent developer from forgetting to mark a predicate as "existing caller". BTW, unintentional 'matchctx.status()' invocation can be detected easily without any additional trick like this patch, because it returns 'None' if a predicate isn't marked as "status caller", and referring field (e.g. '.modified') of it is always aborted.
Mon, 21 Dec 2015 22:31:16 +0900 fileset: use set instead of list to mark predicates for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 21 Dec 2015 22:31:16 +0900] rev 27463
fileset: use set instead of list to mark predicates for efficiency (API) This reduces cost of examining whether given predicate calls 'matchctx.status()' or 'matchctx.existing()' in 'getfileset()' at runtime. This kind of examination is used also in subsequent patch, which detects unintentional 'matchctx.existing()' invocation per each predicate evaluation.
Mon, 21 Dec 2015 22:31:16 +0900 fileset: use decorator to mark a predicate as "existing caller"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 21 Dec 2015 22:31:16 +0900] rev 27462
fileset: use decorator to mark a predicate as "existing caller" This can localize changes for adding (or removing) an "existing caller" predicate function in source code.
Mon, 21 Dec 2015 22:31:16 +0900 fileset: use decorator to mark a predicate as "status caller"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 21 Dec 2015 22:31:16 +0900] rev 27461
fileset: use decorator to mark a predicate as "status caller" Before this patch, predicates calling 'matchctx.status()' are listed up by immediate list value in 'getfileset()'. This prevents 3rd party extensions from adding specific predicate calling 'matchctx.status()'. This uses decorator to mark a predicate as "status caller". This can also localize changes for adding (or removing) a "status caller" predicate function in source code.
Mon, 21 Dec 2015 22:31:16 +0900 fileset: use decorator to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 21 Dec 2015 22:31:16 +0900] rev 27460
fileset: use decorator to mark a function as fileset predicate Using decorator can localize changes for adding (or removing) a fileset predicate function in source code. It is also useful to pick predicates up for specific purpose. For example, subsequent patches marks predicates as "call status" or "use existing" via decorator. To avoid (1) redundancy between "predicate name" and (the beginning of) help document, and (2) accidental typo of help document, this patch also makes decorator put predicate declration into the beginning of help.
Mon, 21 Dec 2015 22:31:16 +0900 fileset: treat encoding and eol as the predicate calling _existing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 21 Dec 2015 22:31:16 +0900] rev 27459
fileset: treat encoding and eol as the predicate calling _existing Before this patch, predicate function 'encoding' and 'eol' aren't listed up in '_existingcallers', even though they invoke 'existing()'. This causes unexpected failure of these predicate, if there is a (manually) deleted file in the working directory. 8a0513bf030a and 3ce3f2b059a1 seem to overlook putting already existing 'encoding' or newly introduced 'eol' into '_existingcallers'. This patch also changes order of fileset "eol(unix)" output in test, because "existing caller" predicates show "A(dded)" files before "C(lean)" ones.
Fri, 18 Dec 2015 18:32:15 +0000 rebase: mention conflict in documentation instead of merge
timeless <timeless@mozdev.org> [Fri, 18 Dec 2015 18:32:15 +0000] rev 27458
rebase: mention conflict in documentation instead of merge
Fri, 18 Dec 2015 18:31:45 +0000 rebase: simplify documentation about heads
timeless <timeless@mozdev.org> [Fri, 18 Dec 2015 18:31:45 +0000] rev 27457
rebase: simplify documentation about heads
Fri, 18 Dec 2015 18:22:03 +0000 rebase: simplify documentation about --keep
timeless <timeless@mozdev.org> [Fri, 18 Dec 2015 18:22:03 +0000] rev 27456
rebase: simplify documentation about --keep Also include a warning about bookmarks
Fri, 18 Dec 2015 18:24:41 +0000 rebase: simplify documentation about selecting commits to rebase
timeless <timeless@mozdev.org> [Fri, 18 Dec 2015 18:24:41 +0000] rev 27455
rebase: simplify documentation about selecting commits to rebase
Fri, 18 Dec 2015 18:06:43 +0000 rebase: simplify documentation about public commits
timeless <timeless@mozdev.org> [Fri, 18 Dec 2015 18:06:43 +0000] rev 27454
rebase: simplify documentation about public commits add reference to graft
Sun, 20 Dec 2015 16:33:44 -0600 verify: clean up weird error/warning lists
Matt Mackall <mpm@selenic.com> [Sun, 20 Dec 2015 16:33:44 -0600] rev 27453
verify: clean up weird error/warning lists Nested functions in Python are not able to assign to variables in the outer scope without something like the list trick because assignments refer to the inner scope. So, we formerly used a list to give an object to assign into. Now that error and warning are object members, the [0] hack is no longer needed.
Fri, 18 Dec 2015 18:52:25 +0000 diff: clarify comparison as first parent
timeless <timeless@mozdev.org> [Fri, 18 Dec 2015 18:52:25 +0000] rev 27452
diff: clarify comparison as first parent
Fri, 18 Dec 2015 06:19:22 +0000 histedit: add progress support
timeless <timeless@mozdev.org> [Fri, 18 Dec 2015 06:19:22 +0000] rev 27451
histedit: add progress support
Sun, 20 Dec 2015 18:38:21 +0900 verify: remove unreachable code to reraise KeyboardInterrupt
Yuya Nishihara <yuya@tcha.org> [Sun, 20 Dec 2015 18:38:21 +0900] rev 27450
verify: remove unreachable code to reraise KeyboardInterrupt KeyboardInterrupt should never be caught as it doesn't inherit Exception in Python 2.5 or later. And if it was, "interrupted" would be printed twice. https://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
Sun, 20 Dec 2015 16:34:54 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Sun, 20 Dec 2015 16:34:54 -0600] rev 27449
merge with stable
Fri, 18 Dec 2015 16:42:39 -0800 verify: move exc() function onto class
Durham Goode <durham@fb.com> [Fri, 18 Dec 2015 16:42:39 -0800] rev 27448
verify: move exc() function onto class This is part of an effort to make verify more modular so extensions can hook into it.
Fri, 18 Dec 2015 16:42:39 -0800 verify: move err() to be a class function
Durham Goode <durham@fb.com> [Fri, 18 Dec 2015 16:42:39 -0800] rev 27447
verify: move err() to be a class function This is part of an effort to make it easier for extensions to hook into verify.
Fri, 18 Dec 2015 16:42:39 -0800 verify: move warn() to a class level function
Durham Goode <durham@fb.com> [Fri, 18 Dec 2015 16:42:39 -0800] rev 27446
verify: move warn() to a class level function This is part of the effort to make verify more modular so extensions can hook into it more easily.
Fri, 18 Dec 2015 16:42:39 -0800 verify: move fncachewarned up to a class variable
Durham Goode <durham@fb.com> [Fri, 18 Dec 2015 16:42:39 -0800] rev 27445
verify: move fncachewarned up to a class variable This is part of making verify more modular so hooks can extend it.
Fri, 18 Dec 2015 16:42:39 -0800 verify: move widely used variables into class members
Durham Goode <durham@fb.com> [Fri, 18 Dec 2015 16:42:39 -0800] rev 27444
verify: move widely used variables into class members This will allow us to start moving some of the nested functions inside verify() out onto the class. This will allow extensions to hook into verify more easily.
Fri, 18 Dec 2015 16:42:39 -0800 verify: move verify logic into a class
Durham Goode <durham@fb.com> [Fri, 18 Dec 2015 16:42:39 -0800] rev 27443
verify: move verify logic into a class In order to allow extensions to hook into the verification logic more easily, we need to refactor it into multiple functions. The first step is to move it to a class so the shared state can be more easily accessed.
Thu, 17 Dec 2015 21:18:02 -0500 test-install: perform the wix checking on wdir() instead of "."
Matt Harbison <matt_harbison@yahoo.com> [Thu, 17 Dec 2015 21:18:02 -0500] rev 27442
test-install: perform the wix checking on wdir() instead of "." This allows catching problems before they are committed.
Fri, 18 Dec 2015 20:54:41 -0800 revlog: fix bad indentation (replace tab by space) stable
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Dec 2015 20:54:41 -0800] rev 27441
revlog: fix bad indentation (replace tab by space)
Fri, 18 Dec 2015 12:54:45 -0800 log: speed up hg log <file|folder>
Laurent Charignon <lcharignon@fb.com> [Fri, 18 Dec 2015 12:54:45 -0800] rev 27440
log: speed up hg log <file|folder> This patch makes hg log <file|folder> faster by using changelog.readfiles instead of changelog.read. On our large repos for hg log <file|folder> -l5 operations that were taking: - ~8s I see a 25% improvement - ~15s, I see a 35% improvement For recently modified folder/file, the difference is negligible as we don't have to consider many revisions.
Fri, 18 Dec 2015 13:45:55 -0800 changelog: add a new method to get files modified by a changeset
Laurent Charignon <lcharignon@fb.com> [Fri, 18 Dec 2015 13:45:55 -0800] rev 27439
changelog: add a new method to get files modified by a changeset This patch adds a new method "readfiles" to get the files modified by a changeset. It extracts some logic from "read" to only return the files modified by a changeset as efficiently as possible. This is used in the next patch to speed up hg log <file|folder>
Wed, 16 Dec 2015 17:22:37 -0500 tests: convert directory separators to '/' for MSYS in test-check-py-compat
Matt Harbison <matt_harbison@yahoo.com> [Wed, 16 Dec 2015 17:22:37 -0500] rev 27438
tests: convert directory separators to '/' for MSYS in test-check-py-compat This is the same fix as 8c1d7a0e737b.
(0) -10000 -3000 -1000 -300 -100 -48 +48 +100 +300 +1000 +3000 +10000 tip