bisect: merge ancestor lists when pushing to children
- eliminate some redundant tests and assignments
- move ancestor list merging to child update
bisect: skip calculations on candidates with too many ancestors
Once an ancestor list has grown past the perfect threshold, all
descendants are less optimal. Use a poison dict to avoid pointless
operations on their long ancestor lists, thus eliminating most of the
work.
bisect: use a dict for children
We fill in the children only for ancestors of badrev
bisect: propagate ancestor lists directly to children
- calculate the children of all candidates
- for each candidate, combine ancestor lists
- pass ancestor lists to children
- store ancestor count
This eliminates the O(n**2) memory usage, while maintaining about the
same performance.
Backed out changeset
c2a21fe60994
Unfortunately, this breaks backward compatibility.
Show number of changesets written to bundle files by default (
issue569)
This was only shown with -v before.
"C" status code considered harmful, so changed to "=" (
issue899)
C means conflict in other SCMs, and = is more intuitive anyway.
Adjust changed test output after
0145f9afb0e7 (trailing whitespace)
Clarify some messages during commit:
- use "branch 'foo'" to distinguish from "branch merge".
- commit messags can be empty (to abort commits)
- Added value for editor message: Tell about HG: lines like CVS does.
prompt: kill matchflags
Python already lets one to embed RE flags directly in a regex, which
is a much nicer way to do things:
(?iLmsux)
(One or more letters from the set "i", "L", "m", "s", "u", "x".)
...
matchflags was introduced in
67afecb8d6cc, and the record extension is the only
user. I've killed matchflag, and adjusted record code appropriately.