"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Tue, 20 Sep 2011 20:19:48 +0200] rev 15146
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
Use repo.set() wherever possible, instead of locally trying to
reproduce complex graph computations.
'pruned' now means 'all csets that will no longer be visited by the
bisection'. The change is done is this very patch instead of its own
dedicated one becasue the code changes all over the place, and the
previous 'pruned' code was totally rewritten by the cleanup, so it
was easier to just change the behavior at the same time.
The previous series went in too fast for this cleanup pass to be
included, so here it is. ;-)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Matt Mackall <mpm@selenic.com> [Wed, 21 Sep 2011 13:00:48 -0500] rev 15145
help: use RST to format option lists
Matt Mackall <mpm@selenic.com> [Wed, 21 Sep 2011 13:00:47 -0500] rev 15144
minirst: fix column handling for simple tables
Matt Mackall <mpm@selenic.com> [Wed, 21 Sep 2011 13:00:46 -0500] rev 15143
encoding: add getcols to extract substrings based on column width
Matt Mackall <mpm@selenic.com> [Wed, 21 Sep 2011 13:00:41 -0500] rev 15142
encoding: colwidth input is in the local encoding
Brodie Rao <brodie@bitheap.org> [Mon, 19 Sep 2011 15:58:03 -0700] rev 15141
mdiff: speed up showfunc for large diffs
This addresses the following issues with showfunc:
- Silly usage of regular expressions.
- Doing str.rstrip() needlessly in an inner loop.
- Doing catastrophic backtracking when trying to find a function line.
Finding function text is now at worst O(n lines in the old file), and
at best close to O(n hunks).
Given a diff like this[1]:
src/main/antlr3/uk/ac/cam/ch/wwmm/pregenerated/ChemicalChunker.g | 4 +-
src/main/java/uk/ac/cam/ch/wwmm/pregenerated/ChemicalChunkerLexer.java | 2 +-
src/main/java/uk/ac/cam/ch/wwmm/pregenerated/ChemicalChunkerParser.java | 29189 +++++----
3 files changed, 14741 insertions(+), 14454 deletions(-)
[1]: https://bitbucket.org/wwmm/chemicaltagger/changeset/d2bfbaecd4fc/raw
Without this change, hg log --stat --config diff.showfunc=1 takes an
absurdly long time to complete:
CallCount Recursive Total(ms) Inline(ms) module:lineno(function)
32813 0 80.3546 40.6086 mercurial.mdiff:160(yieldhunk)
+65062746 0 25.7227 25.7227 +<method 'match' of '_sre.SRE_Pattern' objects>
+65062746 0 14.0221 14.0221 +<method 'rstrip' of 'str' objects>
+1809 0 0.0009 0.0009 +mercurial.mdiff:148(contextend)
+1809 0 0.0003 0.0003 +<len>
65062746 0 25.7227 25.7227 <method 'match' of '_sre.SRE_Pattern' objects>
65062763 0 14.0221 14.0221 <method 'rstrip' of 'str' objects>
543 0 0.1631 0.1631 <zlib.decompress>
3 0 0.0505 0.0505 <mercurial.bdiff.blocks>
31007 0 80.4564 0.0477 mercurial.mdiff:147(_unidiff)
+32813 0 80.3546 40.6086 +mercurial.mdiff:160(yieldhunk)
+3 0 0.0505 0.0505 +<mercurial.bdiff.blocks>
+3618 0 0.0022 0.0022 +mercurial.mdiff:154(contextstart)
+5427 0 0.0013 0.0013 +<len>
+3 0 0.0001 0.0000 +re:188(compile)
1 0 80.8381 0.0322 mercurial.patch:1777(diffstatdata)
+107499 0 0.0235 0.0235 +<method 'startswith' of 'str' objects>
+31014 0 80.7820 0.0071 +mercurial.util:1284(iterlines)
+3 0 0.0000 0.0000 +<method 'search' of '_sre.SRE_Pattern' objects>
+4 0 0.0000 0.0000 +mercurial.patch:1783(addresult)
+3 0 0.0000 0.0000 +<method 'group' of '_sre.SRE_Match' objects>
6 0 0.0444 0.0283 mercurial.mdiff:12(splitnewlines)
+6 0 0.0160 0.0160 +<method 'split' of 'str' objects>
32 0 0.0246 0.0246 <method 'update' of '_hashlib.HASH' objects>
11 0 0.0236 0.0236 <method 'read' of 'file' objects>
Time: real 80.880 secs (user 80.200+0.000 sys 0.380+0.000)
With this change, it's almost as fast as not using showfunc at all:
CallCount Recursive Total(ms) Inline(ms) module:lineno(function)
543 0 0.1699 0.1699 <zlib.decompress>
3 0 0.0501 0.0501 <mercurial.bdiff.blocks>
32813 0 0.0415 0.0348 mercurial.mdiff:161(yieldhunk)
+70837 0 0.0058 0.0058 +<method 'isalnum' of 'str' objects>
+1809 0 0.0006 0.0006 +mercurial.mdiff:148(contextend)
+1809 0 0.0002 0.0002 +<len>
1 0 0.4879 0.0310 mercurial.patch:1777(diffstatdata)
+107499 0 0.0230 0.0230 +<method 'startswith' of 'str' objects>
+31014 0 0.4335 0.0065 +mercurial.util:1284(iterlines)
+3 0 0.0000 0.0000 +<method 'search' of '_sre.SRE_Pattern' objects>
+4 0 0.0000 0.0000 +mercurial.patch:1783(addresult)
+1 0 0.0004 0.0000 +re:188(compile)
32 0 0.0293 0.0293 <method 'update' of '_hashlib.HASH' objects>
6 0 0.0427 0.0279 mercurial.mdiff:12(splitnewlines)
+6 0 0.0147 0.0147 +<method 'split' of 'str' objects>
31007 0 0.1169 0.0235 mercurial.mdiff:147(_unidiff)
+3 0 0.0501 0.0501 +<mercurial.bdiff.blocks>
+32813 0 0.0415 0.0348 +mercurial.mdiff:161(yieldhunk)
+3618 0 0.0012 0.0012 +mercurial.mdiff:154(contextstart)
+5427 0 0.0006 0.0006 +<len>
107597 0 0.0230 0.0230 <method 'startswith' of 'str' objects>
16 0 0.0213 0.0213 <mercurial.mpatch.patches>
194 0 0.0149 0.0149 <method 'split' of 'str' objects>
Time: real 0.530 secs (user 0.450+0.000 sys 0.070+0.000)
Matt Mackall <mpm@selenic.com> [Mon, 19 Sep 2011 16:28:44 -0500] rev 15140
revset: add 'l' flag to formatspec for args
This makes it easy to calculate a revset with lists:
good = [1, 2, 3]
bad = [10, 11, 12]
between = repo.set('%ld::%ld', good, bad)
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Sun, 18 Sep 2011 23:57:49 +0200] rev 15139
bisect: add some bisection examples, and some log revset.bisect() examples
Add a few examples on how to use bisect:
- a few bisection examples
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Sat, 17 Sep 2011 14:33:20 +0200] rev 15138
revset.bisect: add new 'untested' set to the bisect keyword
The 'untested' set is made of changesets that are in the bisection range
but for which the status is still unknown, and that can later be used to
further decide on the bisection outcome.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Sat, 17 Sep 2011 17:30:35 +0200] rev 15137
revset.bisect: add new 'pruned' set to the bisect keyword
The 'pruned' set is made of changesets that did participate to
the bisection. They are made of
- all good changesets
- all bad changsets
- all skipped changesets, provided they are in the bisection range
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Sat, 17 Sep 2011 17:33:34 +0200] rev 15136
revset.bisect: add new 'range' set to the bisect keyword
The 'range' set is made of all changesets that make the bisection
range, that is
- csets that are ancestors of bad csets and descendants of good csets
or
- csets that are ancestors of good csets and descendants of bad csets
That is, roughly equivalent of:
bisect(good)::bisect(bad) | bisect(bad)::bisect(good)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Sat, 17 Sep 2011 00:20:45 +0200] rev 15135
revset.bisect: move bisect() code to hbisect.py
Computing the ranges of csets in the bisection belongs to the hbisect
code. This allows for reusing the status computation from many places,
not only the revset code, but also to later display the bisection status
of a cset...
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Sun, 18 Sep 2011 22:54:11 +0200] rev 15134
revset: rename bisected() to bisect()
Rename the 'bisected' keyword to simply 'bisect'.
Still accept the old name, but no longer advertise it.
As discussed with Matt on IRC.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Sun, 18 Sep 2011 10:07:51 +0200] rev 15133
revset.bisected: remove 'unknown' state
'unknown' is not a valid bisect state, so causes a traceback.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 19 Sep 2011 16:57:13 +0200] rev 15132
rebase: allow rebase to ancestor (issue3010)
We only deny rebasing onto direct parent. Thanks to the ancestor argument of
merge. the "implementation" of this feature only consist in loosing the check
and imply detach when rebasing on ancestor.
Greg Ward <greg@gerg.ca> [Sun, 18 Sep 2011 19:59:33 -0400] rev 15131
rollback: only restore dirstate and branch when appropriate.
If the working dir parent was destroyed by rollback, then the old
behaviour is perfectly reasonable: restore dirstate, branch, and
bookmarks. That way the working dir moves back to an existing
changeset rather than becoming an orphan.
But if the working dir parent was unaffected -- say, you updated to an
older changeset and then did rollback -- then it's silly to restore
dirstate and branch. So don't do that. Leave the status of the working
dir alone. (But always restore bookmarks, because that file refers to
changeset IDs that may have been destroyed.)
Greg Ward <greg@gerg.ca> [Fri, 16 Sep 2011 21:38:06 -0400] rev 15130
rollback: refactor for readability; cosmetics.
- clarify how we parse undo.desc
- fix bad grammar in an error message
- factor out ui local
- rename some local variables
- standardize string quoting
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 14:55:55 -0500] rev 15129
help: make optlist local to subfunctions
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 14:50:42 -0500] rev 15128
help: move option list display into subfunctions
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 14:46:13 -0500] rev 15127
help: fold header selection into helplist
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 14:46:00 -0500] rev 15126
help: fold some list help clauses into the helplist function
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 14:17:09 -0500] rev 15125
minirst: end all blocks with newlines
Formerly RST blocks were formatted without a trailing newline, which
wasn't particularly helpful. Now everything that comes back from the
formatter has a trailing newline so remove all the extra ones added by
users.
Martin Geisler <mg@aragost.com> [Mon, 19 Sep 2011 14:19:26 +0200] rev 15124
convert: rename local variable
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 13:42:11 -0500] rev 15123
minirst: don't choke on empty text
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 13:37:50 -0500] rev 15122
minirst: remove some whitespace
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 13:37:49 -0500] rev 15121
minirst: remove pointless transcoding
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 13:37:47 -0500] rev 15120
tests: fix up help test for new verbose sections
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 13:20:10 -0500] rev 15119
status: add some help examples
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 13:08:24 -0500] rev 15118
forget: add help examples
Matt Mackall <mpm@selenic.com> [Sat, 17 Sep 2011 12:34:47 -0500] rev 15117
revsets: add first alias for last
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 22:57:47 -0500] rev 15116
revset: add default of 1 to limit and last functions
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 17:53:58 -0500] rev 15115
remove: suggest forget to undo adds
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 17:41:36 -0500] rev 15114
remove: simplify help
- move the obscure parts into the verbose help
- drop confusing references to "remove from repository" / "not remove
from history"
- add mention of hg forget
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 17:08:18 -0500] rev 15113
import: add help examples
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 16:52:45 -0500] rev 15112
id: add some help examples
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 16:40:27 -0500] rev 15111
export: add help examples
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 16:39:55 -0500] rev 15110
diff: add help examples
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 15:31:21 -0500] rev 15109
archive: add help examples
Greg Ward <greg@gerg.ca> [Wed, 14 Sep 2011 22:01:39 -0400] rev 15108
test-rollback: tinker a bit to make it easier to add more tests.
etienne <etienne.desautels@gmail.com> [Thu, 15 Sep 2011 15:03:54 -0400] rev 15107
convert: added bookmarks support in filemap
When using the convert extension from a Mercurial rep. to subset it with
filemap, the bookmarks are not copied. I fixed this by calling the
base.get_bookmarks() from the filemap getbookmarks() instead of returning an
empty dictionary. It should work also for other converters that implement
getbookmarks() (like git). I don't see any drawbacks except that the bookmarks
are always copied (not necessarily wanted all the times).
Simon Heimberg <simohe@besonet.ch> [Sat, 23 Jul 2011 06:18:18 +0200] rev 15106
util: fix finding of hgexecutable
The version introduced in 89d9f92f6fdd would for example return thg
(thanks to Mads Kiilerich for pointing to this)
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 14:37:57 -0500] rev 15105
log: add a usage note about --removed
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 14:37:56 -0500] rev 15104
log: rearrange the help text a bit
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 14:37:55 -0500] rev 15103
log: add some usage examples to verbose help
Matt Mackall <mpm@selenic.com> [Fri, 16 Sep 2011 14:37:53 -0500] rev 15102
minirst: fix container stripping logic
Greg Ward <greg@gerg.ca> [Wed, 14 Sep 2011 22:28:27 -0400] rev 15101
share: allow trailing newline on .hg/sharedpath.
This is extremely handy for those occasional circumstances where you
need to edit .hg/sharedpath manually, since modern Unix text editors
make it surprisingly difficult to create a text file with no trailing
newline.
Ben Hockey <neonstalwart@gmail.com> [Wed, 07 Sep 2011 10:24:26 -0400] rev 15100
contrib: some support for named branches in zsh_completion (issue2988)
named branches were not included for autocompletion in zsh. by adding
_hg_branches and calling it from _hg_labels, named branches are now included
when autocompleting many commands in zsh. support for completion of hg log -b
was also added. there are possibly other cases where support needs to be
explicitly added.
Simon Heimberg <simohe@besonet.ch> [Wed, 14 Sep 2011 17:06:33 +0200] rev 15099
test: test for options duplicate with global options
issue2995 should not happen anymore
Matt Mackall <mpm@selenic.com> [Wed, 14 Sep 2011 14:37:10 -0500] rev 15098
merge with stable
Greg Ward <greg-hg@gerg.ca> [Sun, 11 Sep 2011 21:21:58 -0400] rev 15097
rollback: improve readability; clarify that the return value is an int.
Simon Heimberg <simohe@besonet.ch> [Mon, 22 Aug 2011 22:50:52 +0200] rev 15096
demandimport: determine at load time if __import__ has level argument
Matt Mackall <mpm@selenic.com> [Tue, 13 Sep 2011 17:01:07 -0500] rev 15095
win32: quietly ignore missing CreateHardLinkA for Wine
Steve Streeting <steve@stevestreeting.com> [Thu, 08 Sep 2011 11:34:59 +0100] rev 15094
osutil: avoid accidentally destroying the True object in isgui (issue2937)
Needed to use 'Py_RETURN_TRUE' instead of 'return Py_True' to avoid
reference count errors which would randomly crash the Python
executable during merge. This only happened when you had something
configured in merge-tools and the merge was large enough.
Sune Foldager <cryo@cyanite.org> [Wed, 14 Sep 2011 13:57:56 +0200] rev 15093
merge with stable
Sune Foldager <cryo@cyanite.org> [Wed, 14 Sep 2011 13:57:31 +0200] rev 15092
merge
Sune Foldager <cryo@cyanite.org> [Wed, 14 Sep 2011 13:51:50 +0200] rev 15091
bundlerepo: add argument check before unlink
The default argument value of None, for bundlename, would cause an exception.
Callers currently pass an empty string, thus dodging this problem.
Lee Cantey <lcantey@gmail.com> [Mon, 12 Sep 2011 09:20:31 -0700] rev 15090
test-setdiscovery: allow for leading space in output of wc
Matt Mackall <mpm@selenic.com> [Mon, 12 Sep 2011 23:02:45 -0500] rev 15089
merge with stable
Simon Heimberg <simohe@besonet.ch> [Sun, 11 Sep 2011 14:42:30 +0200] rev 15088
ui: write traceback to self.ferr
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sun, 11 Sep 2011 18:49:54 +0200] rev 15087
mq: split up overly long line