Tue, 08 May 2012 22:43:44 +0200 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu> [Tue, 08 May 2012 22:43:44 +0200] rev 16777
graphlog: turn getlogrevs() into a generator This improves the poor "time to first changeset" compared to the original log command. When running: $ hg log -u user log will enumerate the changelog and display matching revisions when they are found. But: $ hg log -G -u user will first find all revisions matching the user then start to display them. Initially, I considered turning revset.match() into a generator. This is doable but requires a fair amount of work. Instead, cmdutil.increasingwindows() is reused to call the revset matcher repeatedly. This has the nice properties of: - Let us reorder the windows after filtering, which is necessary as the matcher can reorder inputs but is an internal detail not a feature. - Let us feed the matcher with windows in changelog order, which is good for performances. - Have a generator designed for log-like commands, returning small windows at first then batching larger ones. I feel that calling the matcher multiple times is correct, at least with the revsets involved in getlogrevs() because they are: - stateless (no limit()) - respecting f(a|b) = f(a) | f(b), though I have no valid argument about that. Known issues compared to log code: - Calling the revset matcher multiple times can be slow when revset functions have to create expensive data structure for filtering. This will be addressed in a followup. - Predicate combinations like "--user foo --user bar" or "--user foo and --branch bar" are inherently slower because all input revision are checked against the first condition, then against the second, and so forth. log would enumerate the input revisions once and check each of them once against all conditions, which is faster. There are solutions but nothing cheap to implement. Some numbers against mozilla repository: first line total * hg log -u rnewman /Users/pmezard/bin/hg-2.2 0.148s 7.293s /Users/pmezard/bin/hgdev 0.132s 5.747s * hg log -u rnewman -u girard /Users/pmezard/bin/hg-2.2 0.146s 7.323s /Users/pmezard/bin/hgdev 0.136s 11.096s * hg log -l 10 /Users/pmezard/bin/hg-2.2 0.137s 0.153s /Users/pmezard/bin/hgdev 0.128s 0.144s * hg log -l 10 -u rnewman /Users/pmezard/bin/hg-2.2 0.146s 0.265s /Users/pmezard/bin/hgdev 0.133s 0.236s * hg log -b GECKO193a2_20100228_RELBRANCH /Users/pmezard/bin/hg-2.2 2.332s 6.618s /Users/pmezard/bin/hgdev 1.972s 5.543s * hg log xulrunner /Users/pmezard/bin/hg-2.2 5.829s 5.958s /Users/pmezard/bin/hgdev 0.194s 6.017s * hg log --follow xulrunner/build.mk /Users/pmezard/bin/hg-2.2 0.353s 0.438s /Users/pmezard/bin/hgdev 0.394s 0.580s * hg log -u girard tools /Users/pmezard/bin/hg-2.2 5.853s 6.012s /Users/pmezard/bin/hgdev 0.195s 6.030s * hg log -b COMM2000_20110314_RELBRANCH --copies /Users/pmezard/bin/hg-2.2 2.231s 6.653s /Users/pmezard/bin/hgdev 1.897s 5.585s * hg log --follow /Users/pmezard/bin/hg-2.2 0.137s 14.140s /Users/pmezard/bin/hgdev 0.381s 44.246s * hg log --follow -r 80000:90000 /Users/pmezard/bin/hg-2.2 0.127s 1.611s /Users/pmezard/bin/hgdev 0.147s 1.847s * hg log --follow -r 90000:80000 /Users/pmezard/bin/hg-2.2 0.130s 1.702s /Users/pmezard/bin/hgdev 0.368s 6.106s * hg log --follow -r 80000:90000 js/src/jsproxy.cpp /Users/pmezard/bin/hg-2.2 0.343s 0.388s /Users/pmezard/bin/hgdev 0.437s 0.631s * hg log --follow -r 90000:80000 js/src/jsproxy.cpp /Users/pmezard/bin/hg-2.2 0.342s 0.389s /Users/pmezard/bin/hgdev 0.442s 0.628s
Tue, 08 May 2012 22:43:44 +0200 cmdutil: extract increasing_windows() from walkchangerevs()
Patrick Mezard <patrick@mezard.eu> [Tue, 08 May 2012 22:43:44 +0200] rev 16776
cmdutil: extract increasing_windows() from walkchangerevs() It will be reused in the revset-based version.
Sat, 19 May 2012 09:34:25 -0500 httpclient: omit tests for the client since we don't run them anyway
Augie Fackler <raf@durin42.com> [Sat, 19 May 2012 09:34:25 -0500] rev 16775
httpclient: omit tests for the client since we don't run them anyway
Fri, 18 May 2012 17:05:17 -0500 httpclient: update to c5abd358e543 of httpplus
Augie Fackler <raf@durin42.com> [Fri, 18 May 2012 17:05:17 -0500] rev 16774
httpclient: update to c5abd358e543 of httpplus
Mon, 21 May 2012 00:20:05 +0200 hgweb: make graph data suitable for template usage
Paul Boddie <paul@boddie.org.uk> [Mon, 21 May 2012 00:20:05 +0200] rev 16773
hgweb: make graph data suitable for template usage Previously, graph data has been encoded for processing done by JavaScript code run in the browser, employing simple structures with implicit member positions. This patch modifies the graph command to also produce data employing a dictionary-based structure suitable for use with the templating mechanism, thus permitting other ways of presenting repository graphs using that mechanism. In order to test these changes, the raw theme has been modified to include templates for graph nodes and edges. In a similar fashion, themes could employ technologies such as SVG that lend themselves to templating to produce the graph display. This patch makes use of a much simpler output representation than SVG in order to maintain clarity.
Sat, 19 May 2012 17:19:55 +0200 revset: fix infinite alias expansion detection stable
Patrick Mezard <patrick@mezard.eu> [Sat, 19 May 2012 17:19:55 +0200] rev 16772
revset: fix infinite alias expansion detection The alias expansion code it changed from: 1- Get replacement tree 2- Substitute arguments in the replacement tree 3- Expand the replacement tree again into: 1- Get the replacement tree 2- Expand the replacement tree 3- Expand the arguments 4- Substitute the expanded arguments in the replacement tree and fixes cases like: [revsetalias] level1($1, $2) = $1 or $2 level2($1, $2) = level1($2, $1) $ hg log -r "level2(level1(1, 2), 3)" where the original version incorrectly aborted on infinite expansion error, because it was confusing the expanded aliases with their arguments.
Sat, 19 May 2012 17:18:29 +0200 revset: explicitely tag alias arguments for expansion stable
Patrick Mezard <patrick@mezard.eu> [Sat, 19 May 2012 17:18:29 +0200] rev 16771
revset: explicitely tag alias arguments for expansion The current revset alias expansion code works like: 1- Get the replacement tree 2- Substitute the variables in the replacement tree 3- Expand the replacement tree It makes it easy to substitute alias arguments because the placeholders are always replaced before the updated replacement tree is expanded again. Unfortunately, to fix other alias expansion issues, we need to reorder the sequence and delay the argument substitution. To solve this, a new "virtual" construct called _aliasarg() is introduced and injected when parsing the aliases definitions. Only _aliasarg() will be substituted in the argument expansion phase instead of all regular matching string. We also check user inputs do not contain unexpected _aliasarg() instances to avoid argument injections.
Mon, 21 May 2012 14:25:46 -0500 clone: add progress calls to uncompressed code path
Augie Fackler <raf@durin42.com> [Mon, 21 May 2012 14:25:46 -0500] rev 16770
clone: add progress calls to uncompressed code path
Mon, 21 May 2012 17:35:28 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 21 May 2012 17:35:28 -0500] rev 16769
merge with stable
Mon, 21 May 2012 14:24:24 -0500 util: fix bad variable use in bytecount introduced by f0f7f3fab315 stable
Augie Fackler <raf@durin42.com> [Mon, 21 May 2012 14:24:24 -0500] rev 16768
util: fix bad variable use in bytecount introduced by f0f7f3fab315
Fri, 18 May 2012 13:50:02 -0300 acl: 'util.never' can be used instead of a more complex expression
Elifarley Callado Coelho Cruz [Fri, 18 May 2012 13:50:02 -0300] rev 16767
acl: 'util.never' can be used instead of a more complex expression
Fri, 18 May 2012 13:47:44 -0300 acl: perform some computations earlier, so that returned lambda functions are simpler
Elifarley Callado Coelho Cruz [Fri, 18 May 2012 13:47:44 -0300] rev 16766
acl: perform some computations earlier, so that returned lambda functions are simpler
Fri, 18 May 2012 12:48:24 -0300 acl: added some comments to easily identify branch- and path-based verifications
Elifarley Callado Coelho Cruz [Fri, 18 May 2012 12:48:24 -0300] rev 16765
acl: added some comments to easily identify branch- and path-based verifications
Fri, 18 May 2012 12:40:04 -0300 acl: 'util.never' used
Elifarley Callado Coelho Cruz [Fri, 18 May 2012 12:40:04 -0300] rev 16764
acl: 'util.never' used
Fri, 18 May 2012 12:37:23 -0300 acl: cleanup
Elifarley Callado Coelho Cruz [Fri, 18 May 2012 12:37:23 -0300] rev 16763
acl: cleanup
Mon, 21 May 2012 16:36:09 -0500 revlog: don't handle long for revision matching
Matt Mackall <mpm@selenic.com> [Mon, 21 May 2012 16:36:09 -0500] rev 16762
revlog: don't handle long for revision matching The underlying C code doesn't support indexing by longs, there are no legitimate reasons to use a long, and longs should generally be converted to ints at a higher level by context's constructor.
Mon, 21 May 2012 16:35:27 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 21 May 2012 16:35:27 -0500] rev 16761
merge with stable
Mon, 21 May 2012 16:32:50 -0500 context: grudging accept longs in constructor stable
Matt Mackall <mpm@selenic.com> [Mon, 21 May 2012 16:32:50 -0500] rev 16760
context: grudging accept longs in constructor
Mon, 21 May 2012 16:32:49 -0500 win32: fix encoding handling for registry strings (issue3467) stable
Matt Mackall <mpm@selenic.com> [Mon, 21 May 2012 16:32:49 -0500] rev 16759
win32: fix encoding handling for registry strings (issue3467) This stopped handling non-ASCII strings in 1.8
Sun, 20 May 2012 01:28:31 +0200 mpatch: use Py_ssize_t for string length
Adrian Buehlmann <adrian@cadifra.com> [Sun, 20 May 2012 01:28:31 +0200] rev 16758
mpatch: use Py_ssize_t for string length
Sun, 20 May 2012 00:08:18 +0200 mpatch: use Py_ssize_t
Adrian Buehlmann <adrian@cadifra.com> [Sun, 20 May 2012 00:08:18 +0200] rev 16757
mpatch: use Py_ssize_t Eliminates mpatch.c(73) : warning C4244: 'return' : conversion from '__int64' to 'int', possible loss of data mpatch.c(299) : warning C4244: 'function' : conversion from 'Py_ssize_t' to 'int', possible loss of data mpatch.c(321) : warning C4244: '=' : conversion from 'Py_ssize_t' to 'int', possible loss of data mpatch.c(335) : warning C4244: 'function' : conversion from 'Py_ssize_t' to 'int', possible loss of data mpatch.c(346) : warning C4244: 'function' : conversion from 'Py_ssize_t' to 'int', possible loss of data when compiling for Windows x64 target using the Microsoft compiler.
Sun, 20 May 2012 21:11:34 +0300 subrepo: make subrepo.subrepo(<not a subrepo path>) fail
Dov Feldstern <dfeldstern@gmail.com> [Sun, 20 May 2012 21:11:34 +0300] rev 16756
subrepo: make subrepo.subrepo(<not a subrepo path>) fail Until now, when calling subrepo.subrepo with a path at which there is no subrepo, a "nullstate" tuple would be returned. However, this is not very useful (the tuple can't really be used for creating a subrepo), so we'd just as soon have the function just fail, and leave it up to the caller to decide what to do. The motivation for doing this now is to simplify the solution for (issue3056).
Sun, 20 May 2012 14:40:36 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Sun, 20 May 2012 14:40:36 -0500] rev 16755
merge with stable
Sun, 20 May 2012 14:37:22 -0500 hgweb: use ui.nontty to disable all cooked I/O
Matt Mackall <mpm@selenic.com> [Sun, 20 May 2012 14:37:22 -0500] rev 16754
hgweb: use ui.nontty to disable all cooked I/O
Sun, 20 May 2012 14:37:20 -0500 progress: use ui._isatty
Matt Mackall <mpm@selenic.com> [Sun, 20 May 2012 14:37:20 -0500] rev 16753
progress: use ui._isatty
Sun, 20 May 2012 14:33:49 -0500 pager: use ui._isatty infrastructure
Matt Mackall <mpm@selenic.com> [Sun, 20 May 2012 14:33:49 -0500] rev 16752
pager: use ui._isatty infrastructure
Sun, 20 May 2012 14:31:56 -0500 ui: add _isatty method to easily disable cooked I/O
Matt Mackall <mpm@selenic.com> [Sun, 20 May 2012 14:31:56 -0500] rev 16751
ui: add _isatty method to easily disable cooked I/O
Tue, 15 May 2012 22:36:47 +0200 bdiff: check and cast first parameter value on putbe32() calls
Adrian Buehlmann <adrian@cadifra.com> [Tue, 15 May 2012 22:36:47 +0200] rev 16750
bdiff: check and cast first parameter value on putbe32() calls Eliminates mercurial/bdiff.c(383) : warning C4244: 'function' : conversion from '__int64' to 'uint32_t', possible loss of data mercurial/bdiff.c(384) : warning C4244: 'function' : conversion from '__int64' to 'uint32_t', possible loss of data mercurial/bdiff.c(385) : warning C4244: 'function' : conversion from 'Py_ssize_t' to 'uint32_t', possible loss of data when compiling for Windows x64 target using the Microsoft compiler.
Tue, 15 May 2012 22:36:27 +0200 bdiff: use Py_ssize_t instead of int
Adrian Buehlmann <adrian@cadifra.com> [Tue, 15 May 2012 22:36:27 +0200] rev 16749
bdiff: use Py_ssize_t instead of int Reduces the conversion warnings mercurial/bdiff.c(61) : warning C4244: '=' : conversion from '__int64' to 'int', possible loss of data mercurial/bdiff.c(307) : warning C4244: 'function' : conversion from 'Py_ssize_t' to 'int', possible loss of data mercurial/bdiff.c(308) : warning C4244: 'function' : conversion from 'Py_ssize_t' to 'int', possible loss of data mercurial/bdiff.c(362) : warning C4244: '+=' : conversion from '__int64' to 'int', possible loss of data mercurial/bdiff.c(380) : warning C4244: '=' : conversion from '__int64' to 'int', possible loss of data mercurial/bdiff.c(381) : warning C4244: 'function' : conversion from '__int64' to 'uint32_t', possible loss of data mercurial/bdiff.c(382) : warning C4244: 'function' : conversion from '__int64' to 'uint32_t', possible loss of data mercurial/bdiff.c(416) : warning C4244: '=' : conversion from 'Py_ssize_t' to 'int', possible loss of data to mercurial/bdiff.c(383) : warning C4244: 'function' : conversion from '__int64' to 'uint32_t', possible loss of data mercurial/bdiff.c(384) : warning C4244: 'function' : conversion from '__int64' to 'uint32_t', possible loss of data mercurial/bdiff.c(385) : warning C4244: 'function' : conversion from 'Py_ssize_t' to 'uint32_t', possible loss of data on the three putbe32() calls in the function bdiff when compiling for Windows x64 target using the Microsoft compiler.
Wed, 16 May 2012 17:02:30 +0900 doc: add detail explanation for 'present()' predicate of revsets stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 16 May 2012 17:02:30 +0900] rev 16748
doc: add detail explanation for 'present()' predicate of revsets
Fri, 18 May 2012 14:34:33 -0500 osutil: handle deletion race with readdir/stat (issue3463) stable
Matt Mackall <mpm@selenic.com> [Fri, 18 May 2012 14:34:33 -0500] rev 16747
osutil: handle deletion race with readdir/stat (issue3463)
Thu, 17 May 2012 15:52:14 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 17 May 2012 15:52:14 -0500] rev 16746
merge with stable
(0) -10000 -3000 -1000 -300 -100 -50 -32 +32 +50 +100 +300 +1000 +3000 +10000 +30000 tip