Thu, 12 Apr 2012 15:21:54 -0700 store: speed up read and write of large fncache files
Bryan O'Sullivan <bryano@fb.com> [Thu, 12 Apr 2012 15:21:54 -0700] rev 16404
store: speed up read and write of large fncache files In my tests of an fncache containing 300,000 entries, this improves read time from 567ms to 307, and write time from 1328ms to 533. These numbers aren't so great, since the fncache file is only 17MB in size, but they're an improvement.
Thu, 12 Apr 2012 15:21:52 -0700 perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com> [Thu, 12 Apr 2012 15:21:52 -0700] rev 16403
perf: time fncache read and write performance
Sun, 01 Apr 2012 14:12:14 +0200 revset: add "matching" keyword
Angel Ezquerra <angel.ezquerra@gmail.com> [Sun, 01 Apr 2012 14:12:14 +0200] rev 16402
revset: add "matching" keyword This keyword can be used to find revisions that "match" one or more fields of a given set of revisions. A revision matches another if all the selected fields (description, author, branch, date, files, phase, parents, substate, user, summary and/or metadata) match the corresponding values of those fields on the source revision. By default this keyword looks for revisions that whose metadata match (description, author and date) making it ideal to look for duplicate revisions. matching takes 2 arguments (the second being optional): 1.- rev: a revset represeting a _single_ revision (e.g. tip, ., p1(.), etc) 2.- [field(s) to match]: an optional string containing the field or fields (separated by spaces) to match. Valid fields are most regular context fields and some special fields: * regular fields: - description, author, branch, date, files, phase, parents, substate, user. Note that author and user are synonyms. * special fields: summary, metadata. - summary: matches the first line of the description. - metatadata: It is equivalent to matching 'description user date' (i.e. it matches the main metadata fields). Examples: 1.- Look for revisions with the same metadata (author, description and date) as the 11th revision: hg log -r "matching(11)" 2.- Look for revisions with the same description as the 11th revision: hg log -r "matching(11, description)" 3.- Look for revisions with the same 'summary' (i.e. same first line on their description) as the 11th revision: hg log -r "matching(11, summary)" 4.- Look for revisions with the same author as the current revision: hg log -r "matching(., author)" You could use 'user' rather than 'author' to get the same result. 5.- Look for revisions with the same description _AND_ author as the tip of the repository: hg log -r "matching(tip, 'author description')" 6.- Look for revisions touching the same files as the parent of the tip of the repository hg log -r "matching(p1(tip), files)" 7.- Look for revisions whose subrepos are on the same state as the tip of the repository or its parent hg log -r "matching(p1(tip):tip, substate)" 8.- Look for revisions whose author and subrepo states both match those of any of the revisions on the stable branch: hg log -r "matching(branch(stable), 'author substate')"
Tue, 10 Apr 2012 23:40:20 -0700 plan9: add execute permissions to 9diff
Steven Stallion <sstallion@gmail.com> [Tue, 10 Apr 2012 23:40:20 -0700] rev 16401
plan9: add execute permissions to 9diff
Tue, 10 Apr 2012 23:24:12 -0700 transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com> [Tue, 10 Apr 2012 23:24:12 -0700] rev 16400
transplant: permit merge changesets via --parent This change permits the transplant extension to operate on merge changesets by way of --parent. This is particularly useful for workflows which cherrypick branch merges rather than each commit within a branch.
Thu, 12 Apr 2012 20:22:18 -0500 help: fix indentation on cacert (issue3350)
Matt Mackall <mpm@selenic.com> [Thu, 12 Apr 2012 20:22:18 -0500] rev 16399
help: fix indentation on cacert (issue3350) The parser doesn't really handle nesting, so reorder so the nested bit is last.
Thu, 12 Apr 2012 20:22:18 -0500 stream_in: avoid debug calls when debug is disabled
Matt Mackall <mpm@selenic.com> [Thu, 12 Apr 2012 20:22:18 -0500] rev 16398
stream_in: avoid debug calls when debug is disabled
Thu, 12 Apr 2012 20:22:18 -0500 util: create bytecount array just once
Matt Mackall <mpm@selenic.com> [Thu, 12 Apr 2012 20:22:18 -0500] rev 16397
util: create bytecount array just once This avoids tons of gettext calls on workloads that call bytecount a lot.
Sun, 08 Apr 2012 11:14:56 +0200 revset: avoid set duplication in roots() stable
Patrick Mezard <patrick@mezard.eu> [Sun, 08 Apr 2012 11:14:56 +0200] rev 16396
revset: avoid set duplication in roots()
Sun, 08 Apr 2012 11:13:06 +0200 revset: retrieve a bit less parents in roots() stable
Patrick Mezard <patrick@mezard.eu> [Sun, 08 Apr 2012 11:13:06 +0200] rev 16395
revset: retrieve a bit less parents in roots()
Sun, 08 Apr 2012 11:11:30 +0200 revset: do not ignore input revisions in roots() stable
Patrick Mezard <patrick@mezard.eu> [Sun, 08 Apr 2012 11:11:30 +0200] rev 16394
revset: do not ignore input revisions in roots() 0329d3b12d8e is also partially reverted to use the 'narrow' parameter again and make less changesets parents lookups.
Tue, 10 Apr 2012 16:53:29 -0500 util.h: more Python 2.4 fixes
Matt Mackall <mpm@selenic.com> [Tue, 10 Apr 2012 16:53:29 -0500] rev 16393
util.h: more Python 2.4 fixes
Mon, 09 Apr 2012 13:48:45 -0700 dispatch: add support for statprof as a profiler
Bryan O'Sullivan <bryano@fb.com> [Mon, 09 Apr 2012 13:48:45 -0700] rev 16392
dispatch: add support for statprof as a profiler This can be selected using the config variable profiling.type or the environment variable HGPROF ("ls" for the default, "stat" for statprof). The only tuneable is the frequency, profiling.freq, which defaults to 1000 Hz. If statprof is not available, a warning is printed.
Mon, 09 Apr 2012 14:36:16 -0700 ui: optionally quiesce ssl verification warnings on python 2.5
Steven Stallion <sstallion@gmail.com> [Mon, 09 Apr 2012 14:36:16 -0700] rev 16391
ui: optionally quiesce ssl verification warnings on python 2.5 Some platforms, notably Plan 9 from Bell Labs are stuck on older releases of Python. Due to restrictions in the platform, it is not possible to backport the SSL library to the existing Python port. This patch permits the UI to quiesce SSL verification warnings by adding a configuration entry named reportoldssl to ui.
Mon, 09 Apr 2012 22:16:26 -0700 scmutil: speed up revrange
Bryan O'Sullivan <bryano@fb.com> [Mon, 09 Apr 2012 22:16:26 -0700] rev 16390
scmutil: speed up revrange This improves the performance of "hg log -l1" from 0.21 seconds to 0.07 on a Linux kernel tree. Ideally we could use xrange instead of range on the most common path, and thus avoid a ton of allocation, but xrange doesn't support slice-based indexing.
Tue, 10 Apr 2012 12:49:12 -0500 graft: add --dry-run support (issue3362)
Matt Mackall <mpm@selenic.com> [Tue, 10 Apr 2012 12:49:12 -0500] rev 16389
graft: add --dry-run support (issue3362)
Fri, 06 Apr 2012 16:18:33 +0300 repair: allow giving strip backup a different name
Idan Kamara <idankk86@gmail.com> [Fri, 06 Apr 2012 16:18:33 +0300] rev 16388
repair: allow giving strip backup a different name So the user can differentiate amend backups from the rest.
Tue, 10 Apr 2012 12:07:18 -0500 encoding: add fast-path for ASCII lowercase
Matt Mackall <mpm@selenic.com> [Tue, 10 Apr 2012 12:07:18 -0500] rev 16387
encoding: add fast-path for ASCII lowercase
Tue, 10 Apr 2012 12:07:16 -0500 perf: add case collision auditor perf
Matt Mackall <mpm@selenic.com> [Tue, 10 Apr 2012 12:07:16 -0500] rev 16386
perf: add case collision auditor perf
Tue, 10 Apr 2012 12:07:14 -0500 util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com> [Tue, 10 Apr 2012 12:07:14 -0500] rev 16385
util.h: unify some common platform tweaks
Tue, 10 Apr 2012 12:07:09 -0500 util.h: move Py_ssize_t bits from mpatch.c
Matt Mackall <mpm@selenic.com> [Tue, 10 Apr 2012 12:07:09 -0500] rev 16384
util.h: move Py_ssize_t bits from mpatch.c
Sun, 08 Apr 2012 12:43:41 -0700 plan9: initial support for plan 9 from bell labs
Steven Stallion <sstallion@gmail.com> [Sun, 08 Apr 2012 12:43:41 -0700] rev 16383
plan9: initial support for plan 9 from bell labs This patch contains support for Plan 9 from Bell Labs. A README is provided in contrib/plan9 which describes the port in greater detail. A new extension is also provided named factotum which permits the factotum(4) authentication agent to provide credentials for HTTP repositories. This extension is also applicable to other POSIX platforms which make use of Plan 9 from User Space (aka plan9ports).
Sun, 08 Apr 2012 22:17:51 -0500 util.h: add a typedef for Py_ssize_t with Python 2.4
Matt Mackall <mpm@selenic.com> [Sun, 08 Apr 2012 22:17:51 -0500] rev 16382
util.h: add a typedef for Py_ssize_t with Python 2.4
Sun, 08 Apr 2012 12:38:26 -0500 log: bypass file scan part of fastpath when no files
Matt Mackall <mpm@selenic.com> [Sun, 08 Apr 2012 12:38:26 -0500] rev 16381
log: bypass file scan part of fastpath when no files This avoids loading dirstate parents, looking up p1 rev, and loading p1 manifest to match against an empty matcher.
Sun, 08 Apr 2012 12:38:24 -0500 cmdutil: use context instead of lookup
Matt Mackall <mpm@selenic.com> [Sun, 08 Apr 2012 12:38:24 -0500] rev 16380
cmdutil: use context instead of lookup
Sun, 08 Apr 2012 12:38:23 -0500 scmutil: use context instead of lookup
Matt Mackall <mpm@selenic.com> [Sun, 08 Apr 2012 12:38:23 -0500] rev 16379
scmutil: use context instead of lookup
Sun, 08 Apr 2012 12:38:10 -0500 localrepo: lookup now goes through context
Matt Mackall <mpm@selenic.com> [Sun, 08 Apr 2012 12:38:10 -0500] rev 16378
localrepo: lookup now goes through context
Sun, 08 Apr 2012 12:38:08 -0500 context: use rev for changelog lookup
Matt Mackall <mpm@selenic.com> [Sun, 08 Apr 2012 12:38:08 -0500] rev 16377
context: use rev for changelog lookup Faster when we're doing numeric scanning
Sun, 08 Apr 2012 12:38:07 -0500 context: internalize lookup logic
Matt Mackall <mpm@selenic.com> [Sun, 08 Apr 2012 12:38:07 -0500] rev 16376
context: internalize lookup logic This allows us to avoid doing rev->node->rev lookups on silly instances like "0", which end up caching the whole nodemap.
Sun, 08 Apr 2012 12:38:02 -0500 revlog: allow retrieving contents by revision number
Matt Mackall <mpm@selenic.com> [Sun, 08 Apr 2012 12:38:02 -0500] rev 16375
revlog: allow retrieving contents by revision number
Sat, 07 Apr 2012 15:43:18 -0500 revlog: add hasnode helper method
Matt Mackall <mpm@selenic.com> [Sat, 07 Apr 2012 15:43:18 -0500] rev 16374
revlog: add hasnode helper method
Fri, 06 Apr 2012 15:18:14 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Fri, 06 Apr 2012 15:18:14 -0500] rev 16373
merge with stable
Fri, 06 Apr 2012 15:17:50 -0500 merge with crew stable
Matt Mackall <mpm@selenic.com> [Fri, 06 Apr 2012 15:17:50 -0500] rev 16372
merge with crew
Fri, 06 Apr 2012 15:16:30 -0500 tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com> [Fri, 06 Apr 2012 15:16:30 -0500] rev 16371
tags: defer tag validation until repo.tags() is called Before, we were validating all tags for any tag operation, which meant building a (nearly) full node->tag lookup tree for most operations.
Fri, 06 Apr 2012 00:28:36 -0700 parsers: fix a memleak, and add a clearcaches method to the index
Bryan O'Sullivan <bryano@fb.com> [Fri, 06 Apr 2012 00:28:36 -0700] rev 16370
parsers: fix a memleak, and add a clearcaches method to the index This change also fixes a nasty memory leak: previously, self->caches was not being freed. The new clearcaches method lets us benchmark with finer granularity, as it lets us separate the cost of loading a revlog index from those of populating and accessing the cache data structures.
Wed, 04 Apr 2012 15:59:56 +0200 hghave: remove symlink test made useless by ac0da5caebec stable
Patrick Mezard <patrick@mezard.eu> [Wed, 04 Apr 2012 15:59:56 +0200] rev 16369
hghave: remove symlink test made useless by ac0da5caebec
Wed, 04 Apr 2012 13:55:11 +0200 tests: disable progress estimate in test-debugbuilddag.t stable
Julien Cristau <julien.cristau@logilab.fr> [Wed, 04 Apr 2012 13:55:11 +0200] rev 16368
tests: disable progress estimate in test-debugbuilddag.t If the command takes long enough, including 'estimate' in the format will add some more data to the progress bar output, and make the test fail. See e.g. https://buildd.debian.org/status/fetch.php?pkg=mercurial&arch=kfreebsd-amd64&ver=2.1.2-2&stamp=1333493711
Wed, 04 Apr 2012 12:46:54 -0500 ui: swallow EBADF on stderr stable
Kevin Bullock <kbullock@ringworld.org> [Wed, 04 Apr 2012 12:46:54 -0500] rev 16367
ui: swallow EBADF on stderr ui.write_err already swallows EPIPE and EIO if a write to stderr fails. On Mac OS X at least, a write to a closed file descriptor results in EBADF. Before this patch, hg would exit with status 1 if a write to stderr failed during startup (e.g. while trying to print a warning about not finding an extension): $ ./hg --config extensions.foo= version 2>&-; echo $? 1 With this patch, it correctly swallows stderr and continues to run the command: $ ./hg --config extensions.foo= version 2>&- Mercurial Distributed SCM (version 2.1) ...
Thu, 05 Apr 2012 23:52:55 +0900 mq: use list of already known target files instead of matching object for diff
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 05 Apr 2012 23:52:55 +0900] rev 16366
mq: use list of already known target files instead of matching object for diff 'hg qnew' passes matching object to 'patch.diff()' to specify target filenames, and it causes 'dirstate.walk()' via 'repo.status()' in 'patch.diff()'. but target files are already known before 'patch.diff()' invocation. to avoid useless 'dirstate.walk()' invocation, this patch uses 'changes' argument to pass already known target files to 'patch.diff()' instead of 'match' argument. 'changes' argument of 'patch.diff()' should have lists for modified, added and removed files separately, so this patch saves status of '.hgsubstate' before commit, and put it into appropriate list in 'changes'.
Thu, 05 Apr 2012 23:52:06 +0900 mq: use exact matching in the second dirstate walking for efficiency of 'qnew'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 05 Apr 2012 23:52:06 +0900] rev 16365
mq: use exact matching in the second dirstate walking for efficiency of 'qnew' 'hg qnew' with pattern/-I/-X creates matching object with them, and uses it twice for 'dirstate.walk()': via 'repo.status()' and 'repo.commit()'. this may cause full manifest scan in the second 'dirstate.walk()', even though mq already knows complete target filenames at the first 'dirstate.walk()'. this patch creates exact matching object also in this case, and use it at 'repo.commit()' invocation to avoid full manifest scan in the second 'dirstate.walk()'. even though 'inclsubs' is added to 'pats' for original matching object, it is also passed to exact matching object, because subrepositories are deleted from result of 'dirstate.walk()' at the end of it.
Thu, 05 Apr 2012 12:31:21 +0100 tests: avoid test-hup hanging on AIX stable
Jim Hague <jim.hague@acm.org> [Thu, 05 Apr 2012 12:31:21 +0100] rev 16364
tests: avoid test-hup hanging on AIX test-hup hangs on AIX. Under ksh89 on AIX (the default shell), echo Hello; while [ ! -s not-there ]; do true; done produces no output while the loop executes. Replacing 'true' with 'sleep 0' fixes, as does using a less broken shell. ksh93 is fine. Update check-code.py to look for this, and make same change in test-serve.t. In fact test-serve works fine, probably because of additional commands between echo and the loop, but that's a subtlety not easy to test for.
Thu, 05 Apr 2012 13:00:35 -0700 parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com> [Thu, 05 Apr 2012 13:00:35 -0700] rev 16363
parsers: incrementally parse the revlog index in C We only parse entries in a revlog index file when they are actually needed, and cache them when first requested. This makes a huge difference to performance on large revlogs when accessing the tip revision or performing a handful of numeric lookups (very common cases). For instance, "hg --time tip --template {node}" on a tree with 300,000 revs takes 0.15 before, 0.02 after. Even for revlog-intensive operations (e.g. running "hg log" to completion), the lazy approach is about 1% faster than the eager parse_index2.
Thu, 05 Apr 2012 15:39:07 +0200 mdiff: fix diff header generation for files with spaces (issue3357) stable
Patrick Mezard <patrick@mezard.eu> [Thu, 05 Apr 2012 15:39:07 +0200] rev 16362
mdiff: fix diff header generation for files with spaces (issue3357) diff ---/+++ should end filenames with a TAB when they contain spaces. Current code failed to do so when only the +++ file had spaces. This only happened with git renames from a name without space to one with space.
Wed, 04 Apr 2012 00:00:47 +0200 protocol: Add the stream-preferred capability
Benoit Allard <benoit@aeteurope.nl> [Wed, 04 Apr 2012 00:00:47 +0200] rev 16361
protocol: Add the stream-preferred capability This makes the client use the uncompressed protocol.
Wed, 28 Mar 2012 16:06:20 +0200 templates/filters: extracting the user portion of an email address
Matteo Capobianco <m.capobianco@gmail.com> [Wed, 28 Mar 2012 16:06:20 +0200] rev 16360
templates/filters: extracting the user portion of an email address Currently, the 'user' filter is using util.shortuser(text) (which clearly doesn't extract only the user portion of an email address, even though the help text says it does). The new 'emailuser' filter uses the new util.emailuser(text) function which, instead, does exactly that. The help text on the 'user' filter has been modified accordingly.
Thu, 05 Apr 2012 19:15:23 +0200 context: make changectx.mutable() benefit from .phase() logic stable
Patrick Mezard <patrick@mezard.eu> [Thu, 05 Apr 2012 19:15:23 +0200] rev 16359
context: make changectx.mutable() benefit from .phase() logic This fixes "hg qimport -r null". Previous versions used to: - Traceback because null revision mutability was not defined - Add an empty -1.diff patch to the series The error message: abort: revision -1 is not mutable is symptomatic of a deeper problem in phase command revision handling. It could be fixed easily in the command itself but I feel a better fix must be done in phase API which raises the issue of phase updates atomicity: aborting in phases.advanceboundary/retractboundary requires a better rollback behaviour to avoid partial changes.
Thu, 05 Apr 2012 19:23:04 +0200 patch: remove useless variable assignment
Patrick Mezard <patrick@mezard.eu> [Thu, 05 Apr 2012 19:23:04 +0200] rev 16358
patch: remove useless variable assignment
Wed, 04 Apr 2012 12:31:31 +0200 export: catch exporting empty revsets (issue3353) stable
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 04 Apr 2012 12:31:31 +0200] rev 16357
export: catch exporting empty revsets (issue3353) Additionally add tests for empty revsets and unknown revisions.
Wed, 04 Apr 2012 11:19:09 +0200 merge with stable
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 04 Apr 2012 11:19:09 +0200] rev 16356
merge with stable
Wed, 04 Apr 2012 11:18:42 +0200 test-merge-types: allow different output with existing hgmerge (issue3346) stable
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 04 Apr 2012 11:18:42 +0200] rev 16355
test-merge-types: allow different output with existing hgmerge (issue3346) Because hgmerge was meant to be adjusted to personal needs, there may be many remaining copies in people's $PATH.
Wed, 04 Apr 2012 10:57:48 +0200 inotify: catch SignalInterrupt during shutdown (issue3351) stable
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 04 Apr 2012 10:57:48 +0200] rev 16354
inotify: catch SignalInterrupt during shutdown (issue3351) When inotify.repowatcher.shutdown() is called, mercurial.error.SignalInterrupt exception is thrown by mercurial.dispatch._runcatch.catchterm(), therefore socketlistener.shutdown() is not called. Catching this allows cleanup action (removing the socket file) to proceed.
Tue, 03 Apr 2012 22:02:04 +0200 merge with stable
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 03 Apr 2012 22:02:04 +0200] rev 16353
merge with stable
Tue, 03 Apr 2012 22:01:28 +0200 clone: always close source repository (issue2491) stable
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 03 Apr 2012 22:01:28 +0200] rev 16352
clone: always close source repository (issue2491) This is especially needed for cloning from bundles as a temporary bundlerepository is created which needs to be deleted after clone has finished.
Tue, 03 Apr 2012 21:02:00 +0200 merge with stable
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 03 Apr 2012 21:02:00 +0200] rev 16351
merge with stable
Tue, 03 Apr 2012 19:06:35 +0200 tests: make tests work if directory contains special characters stable
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 03 Apr 2012 19:06:35 +0200] rev 16350
tests: make tests work if directory contains special characters With this quoting tests will work e.g. in "/tmp/foo bar/mercurial/".
Tue, 03 Apr 2012 16:36:25 +0200 test-gpg: replace 825565136235 by md5sum check stable
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 03 Apr 2012 16:36:25 +0200] rev 16349
test-gpg: replace 825565136235 by md5sum check The call to 'hg identify' would have needed '--cwd "$TESTDIR' to make it work anyway, but by using a checksum this test can work outside a repository.
Tue, 03 Apr 2012 11:35:04 -0500 config: discard UTF-8 BOM if found
Matt Mackall <mpm@selenic.com> [Tue, 03 Apr 2012 11:35:04 -0500] rev 16348
config: discard UTF-8 BOM if found
Mon, 02 Apr 2012 17:02:50 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Apr 2012 17:02:50 -0500] rev 16347
merge with stable
Mon, 02 Apr 2012 17:02:03 -0500 tests: shorten post-test sleeps
Matt Mackall <mpm@selenic.com> [Mon, 02 Apr 2012 17:02:03 -0500] rev 16346
tests: shorten post-test sleeps This helps expose races
Mon, 02 Apr 2012 22:25:55 +0100 tests: don't run test-gpg if not in a working directory stable
Javi Merino <cibervicho@gmail.com> [Mon, 02 Apr 2012 22:25:55 +0100] rev 16345
tests: don't run test-gpg if not in a working directory test-gpg has to be run in a mercurial working directory as it uses that to verify that it hasn't modified the trustdb.gpg file. Skip the test if it is running in an exploded tarball.
(0) -10000 -3000 -1000 -300 -100 -60 +60 +100 +300 +1000 +3000 +10000 +30000 tip