Brodie Rao <brodie@bitheap.org> [Sun, 01 May 2011 12:14:22 +0200] rev 14103
color: use ui.formatted() to test TTYness, not sys.stdout.isatty()
This fixes the color extension not working with pager (broken in
877390020477). The pager extension already sets ui.formatted=True to
allow this use case.
Brodie Rao <brodie@bitheap.org> [Sun, 01 May 2011 11:12:36 +0200] rev 14102
pushkey: add hooks for pushkey/listkeys
Augie Fackler <durin42@gmail.com> [Sat, 30 Apr 2011 12:02:09 -0500] rev 14101
test-patchbomb.t: clean up progress tests
Matt Mackall <mpm@selenic.com> [Sun, 01 May 2011 04:56:24 -0500] rev 14100
util: really drop size from readfile
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sun, 01 May 2011 11:46:49 +0200] rev 14099
util: add readfile() & writefile() helper functions
These two functions allow quickly reading or writing a file, without
relying on reference counting to close the file handle afterwards.
Alexander Solovyov <alexander@solovyov.net> [Sat, 30 Apr 2011 18:30:14 +0200] rev 14098
revset aliases
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sat, 30 Apr 2011 19:41:53 +0200] rev 14097
opener: add read & write utility methods
The two new methods are useful for quickly opening a file for reading
or writing. Unlike 'opener(...).read()', they ensure they the file is
immediately closed without relying on CPython reference counting.
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sun, 01 May 2011 11:01:57 +0200] rev 14096
dispatch: handle IndexErrors
Augie Fackler <durin42@gmail.com> [Sat, 30 Apr 2011 11:18:43 -0500] rev 14095
color: verify stdout is a tty before using curses
Without this change, curses complains when invoked in certain contexts
because stdout isn't a tty (such as emacs integration) but we ask it
to check for various bits of information from terminfo.
Matt Mackall <mpm@selenic.com> [Sun, 01 May 2011 03:51:04 -0500] rev 14094
http: minor tweaks to long arg handling
x-arg -> x-hgarg
replace itertools.count(1)
Steven Brown <StevenGBrown@gmail.com> [Sun, 01 May 2011 01:04:37 +0800] rev 14093
httprepo: long arguments support (issue2126)
Send the command arguments in the HTTP headers. The command is still part
of the URL. If the server does not have the 'httpheader' capability, the
client will send the command arguments in the URL as it did previously.
Web servers typically allow more data to be placed within the headers than
in the URL, so this approach will:
- Avoid HTTP errors due to using a URL that is too large.
- Allow Mercurial to implement a more efficient wire protocol.
An alternate approach is to send the arguments as part of the request body.
This approach has been rejected because it requires the use of POST
requests, so it would break any existing configuration that relies on the
request type for authentication or caching.
Extensibility:
- The header size is provided by the server, which makes it possible to
introduce an hgrc setting for it.
- The client ignores the capability value after the first comma, which
allows more information to be included in the future.
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sat, 30 Apr 2011 19:36:48 +0200] rev 14092
store: rename the 'opener' argument to 'openertype'
The 'opener' argument wasn't, in fact, an actual opener instance, but
rather something expected to return an opener. The normal argument,
from localrepository, is the scmutil.opener type; hence 'openertype'.
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sat, 30 Apr 2011 19:41:25 +0200] rev 14091
statichttprepo: make the opener a subclass of abstractopener
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sat, 30 Apr 2011 19:37:13 +0200] rev 14090
add filteropener abstraction for store openers
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sat, 30 Apr 2011 19:36:48 +0200] rev 14089
opener: introduce an abstact superclass of it
Currently, this class doesn't do anything useful.
Patrick Mezard <pmezard@gmail.com> [Sat, 30 Apr 2011 19:42:00 +0200] rev 14088
graphlog: use a set for inclusion test
This makes a big difference in performance in the special case where all
revisions are being graphed.
Idan Kamara <idankk86@gmail.com> [Sat, 30 Apr 2011 15:10:58 +0300] rev 14087
graphmod: restore generator nature of dagwalker
9966c95b8c4f introduced the ability to walk the DAG
given arbitrary revisions, but changed the behaviour of
it to return a list of all nodes (and create a changectx
for each one) rather than doing it lazily.
This has a pretty significant impact on performance for large
repositories (tested on CPython repo, with output disabled):
$ time hg glog
real 0m2.642s
user 0m2.560s
sys 0m0.080s
Before 9966c95b8c4f:
$ time hg glog
real 0m0.143s
user 0m0.112s
sys 0m0.032s
And after this fix:
$ time hg glog
real 0m0.213s
user 0m0.184s
sys 0m0.028s
Patrick Mezard <pmezard@gmail.com> [Sat, 30 Apr 2011 19:42:00 +0200] rev 14086
graphlog: log -G --follow file does not work, forbid it
We do not have revsets to follow file history.
Patrick Mezard <pmezard@gmail.com> [Sat, 30 Apr 2011 19:42:00 +0200] rev 14085
graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com> [Sat, 30 Apr 2011 19:42:00 +0200] rev 14084
graphlog: fix log -G --prune
follow() revset really means '::.' while we want something based on the passed
argument. Also, ancestors() revset does not include the parent revisions.
Patrick Mezard <pmezard@gmail.com> [Sat, 30 Apr 2011 19:42:00 +0200] rev 14083
graphlog: escape log -G single value option arguments
Patrick Mezard <pmezard@gmail.com> [Sat, 30 Apr 2011 19:42:00 +0200] rev 14082
graphlog: fix log -G --removed
Current version was mispelled and processed like a valued argument.
Patrick Mezard <pmezard@gmail.com> [Sat, 30 Apr 2011 19:42:00 +0200] rev 14081
graphlog: fix log -G option types when translating to revset
For instance, --keyword is a multiple value option while it was processed as a
single value option.
Kevin Gessner <kevin@kevingessner.com> [Sat, 30 Apr 2011 18:53:56 +0200] rev 14080
revset: add tests for multiple and mixed ^ and ~ operators
Kevin Gessner <kevin@kevingessner.com> [Sat, 30 Apr 2011 18:27:39 +0200] rev 14079
extensions: obsolete and remove parentrevspec extension
As of 305c97670d7a, revsets implements the ^ and ~ operators that this
extension provides, so it's no longer necessary.
Steve Borho <steve@borho.org> [Sat, 30 Apr 2011 11:53:57 -0500] rev 14078
wix: a new mercurial.js has replaced graph.js
Brodie Rao <brodie@bitheap.org> [Sat, 30 Apr 2011 09:43:23 -0700] rev 14077
util.url: copy urllib.unquote() into util to improve startup times
The ui class uses util.hasscheme() in a couple of places, causing hg
to import urllib even when it doesn't need to. This copies
urllib.unquote() to avoid that import.
perfstartup time before the URL refactoring (8796fb6af67e):
! wall 0.050692 comb 0.000000 user 0.000000 sys 0.000000 (best of 100)
before this change:
! wall 0.064742 comb 0.000000 user 0.000000 sys 0.000000 (best of 100)
after this change:
! wall 0.052126 comb 0.000000 user 0.000000 sys 0.000000 (best of 100
Brodie Rao <brodie@bitheap.org> [Sat, 30 Apr 2011 09:43:20 -0700] rev 14076
url: move URL parsing functions into util to improve startup time
The introduction of the new URL parsing code has created a startup
time regression. This is mainly due to the use of url.hasscheme() in
the ui class. It ends up importing many libraries that the url module
requires.
This fix helps marginally, but if we can get rid of the urllib import
in the URL parser all together, startup time will go back to normal.
perfstartup time before the URL refactoring (8796fb6af67e):
! wall 0.050692 comb 0.000000 user 0.000000 sys 0.000000 (best of 100)
current startup time (139fb11210bb):
! wall 0.070685 comb 0.000000 user 0.000000 sys 0.000000 (best of 100)
after this change:
! wall 0.064667 comb 0.000000 user 0.000000 sys 0.000000 (best of 100)
Sune Foldager <cryo@cyanite.org> [Sat, 30 Apr 2011 16:33:47 +0200] rev 14075
revlog: introduce _chunkbase to allow filelog to override
Used by revlog.revision to retrieve the base-chunk in a delta chain.
Sune Foldager <cryo@cyanite.org> [Sat, 30 Apr 2011 16:32:50 +0200] rev 14074
filelog: extract metadata parsing and packing
_parsemeta returns the dictionary and a list of keys in the order they appear
in metadata. This can be used to repack the dictionary in the same order.
_packmeta creates metadata from a dictionary and an optional key-order list.
In _parsemeta, we use slices and re.search indead of str.index so we can accept
both buffers and strings.
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Sat, 30 Apr 2011 17:21:37 +0200] rev 14073
discovery: drop findoutgoing and simplify findcommonincoming's api
This is a long desired cleanup and paves the way for new discovery.
To specify subsets for bundling changes, all code should use the heads
of the desired subset ("heads") and the heads of the common subset
("common") to be excluded from the bundled set. These can be used
revlog.findmissing instead of revlog.nodesbetween.
This fixes an actual bug exposed by the change in test-bundle-r.t
where we try to bundle a changeset while specifying that said changeset
is to be assumed already present in the target. This used to still
bundle the changeset. It no longer does. This is similar to the bugs
fixed by the recent switch to heads/common for incoming/pull.
Kevin Gessner <kevin@kevingessner.com> [Sat, 30 Apr 2011 18:25:45 +0200] rev 14072
revset: add missing whitespace
Brodie Rao <brodie@bitheap.org> [Sat, 30 Apr 2011 07:00:13 -0700] rev 14071
url: remove unused/obsolete functions
Kevin Gessner <kevin@kevingessner.com> [Sat, 30 Apr 2011 17:43:04 +0200] rev 14070
revset: add ^ and ~ operators from parentrevspec extension
^ (Nth parent) and ~ (Nth first ancestor) are infix operators that match
certain ancestors of the set:
set^0
the set
set^1 (also available as set^)
the first parent of every changeset in set
set^2
the second parent of every changeset in set
set~0
the set
set~1
the first ancestor (i.e. the first parent) of every changeset in set
set~2
the second ancestor (i.e. first parent of first parent) of every changeset
in set
set~N
the Nth ancestor (following first parents only) of every changeset in set;
set~N is equivalent to set^1^1..., with ^1 repeated N times.
Matt Mackall <mpm@selenic.com> [Sat, 30 Apr 2011 10:57:13 -0500] rev 14069
encoding: add an encoding-aware lower function
Kevin Gessner <kevin@kevingessner.com> [Sat, 30 Apr 2011 12:39:46 +0200] rev 14068
add: notify when adding a file that would cause a case-folding collision
On a case-sensitive file system, files can be added with names that differ
only in case (a "case collision"). This would cause an error on case-insensitive
filesystems. A warning or error is now given for such collisions, depending on
the value of ui.portablefilenames ('warn', 'abort', or 'ignore'):
$ touch file File
$ hg add --config ui.portablefilenames=abort File
abort: possible case-folding collision for File
$ hg add File
warning: possible case-folding collision for File
Kevin Gessner <kevin@kevingessner.com> [Sat, 30 Apr 2011 11:08:24 +0200] rev 14067
scmutil: refactor ui.portablefilenames processing
The ui.portablefilenames config handling is generally useful for notifying the
user of various portability problems.
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sat, 30 Apr 2011 15:05:36 +0200] rev 14066
pure bdiff: don't use a generator
Generators are slow, and currently defeat the PyPy JIT.
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sat, 30 Apr 2011 15:05:34 +0200] rev 14065
pure mpatch: avoid using list.insert(0, ...)
In Python lists are implemented as arrays with overallocation. As a
result, list.insert(0, ...) is O(n), whereas list.append() has an
amortised running time of O(1). Reversing the internal representation
of the list should cause a slight speedup for pure Python builds.
Alexander Solovyov <alexander@solovyov.net> [Sat, 30 Apr 2011 13:59:14 +0200] rev 14064
remove unused imports and variables
Augie Fackler <durin42@gmail.com> [Sat, 30 Apr 2011 07:30:38 -0500] rev 14063
Zeroconf: catch both ValueError and KeyError in get()
This prevents a traceback during discovery of available hosts.
Idan Kamara <idankk86@gmail.com> [Sat, 30 Apr 2011 15:20:27 +0300] rev 14062
run-tests: print a new line before writing the diff
Matt Mackall <mpm@selenic.com> [Sat, 30 Apr 2011 10:56:43 -0500] rev 14061
revsets: add a last function
last(set, n) = reverser(limit(reverse(set), n))
Benoit Boissinot <benoit.boissinot@ens-lyon.org> [Sat, 30 Apr 2011 14:22:03 +0200] rev 14060
bundle: more comments about the different header types, remove useless if
Martin Geisler <mg@lazybytes.net> [Sat, 30 Apr 2011 15:30:51 +0200] rev 14059
merge with mpm
Martin Geisler <mg@lazybytes.net> [Sat, 30 Apr 2011 13:47:22 +0200] rev 14058
hgweb: initialize permhooks at definition time
This is simpler than creating it empty and then appending the default
checkauthz hook 50 lines below.
Brodie Rao <brodie@bitheap.org> [Sat, 30 Apr 2011 06:58:22 -0700] rev 14057
revset: fix undefined name ParseError
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Sat, 30 Apr 2011 12:56:28 +0200] rev 14056
branchcache: improve speed relative to the amount of heads
Updating the branch cache is quadratic to the amount of heads in the
repository. One consequence of this was that cloning a pathological
repository with 10,000 heads (and nothing else) took hours of CPU
time.
This patch makes one of the inner loop much faster, by removing a
changectx instantiation, and removes another entirely in cases where
there are no candidate branch heads which descend from other branch
heads.
Alexander Solovyov <alexander@solovyov.net> [Sat, 30 Apr 2011 12:55:07 +0200] rev 14055
drop {short,hex}(ctx.node()) calls in favor of ctx methods
Idan Kamara <idankk86@gmail.com> [Fri, 29 Apr 2011 22:21:13 +0300] rev 14054
mq: be more explicit on invalid patch name message
Benoit Boissinot <benoit.boissinot@ens-lyon.org> [Sat, 30 Apr 2011 11:16:52 +0200] rev 14053
fix broken tests
test-debugcomplete.t broken by 58e58406ed19
test-highlight.t broken by b24e5a708fad
Matt Mackall <mpm@selenic.com> [Sat, 30 Apr 2011 03:44:31 -0500] rev 14052
merge with stable
Idan Kamara <idankk86@gmail.com> [Fri, 29 Apr 2011 22:21:13 +0300] rev 14051
mq: add '.' and '..' to list of forbidden patch names
When an empty string is being passed to normname
it would return '.' causing checkfile() to always
return that a patch with that name exists.
Patrick Mezard <pmezard@gmail.com> [Fri, 04 Mar 2011 14:00:49 +0100] rev 14050
subrepo: handle svn tracked/unknown directory collisions
This happens more often than expected. Say you have an svn subrepository with
python code. Python would have generated unknown .pyc files. Now, you rebase
this setup on a revision where a directory containing python code does not
exist. Subversion is first asked to remove this directory when updating, but
will not because it contains untracked items. Then it will have to bring back
the directory after the merge but will fail because it now collides with an
untracked directory.
Using --force is not very elegant and only works with svn >= 1.5 but the only
alternative I can think of is to write our own purge command for subversion.
Matt Mackall <mpm@selenic.com> [Sat, 30 Apr 2011 03:00:38 -0500] rev 14049
subrepo: backout bcc6ed0f6c3b
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Fri, 29 Apr 2011 14:54:01 +0200] rev 14048
wireproto: add test for new optional arg missing on server
New argument is silently ignored by both HTTP and SSH servers.
This means we can, for instance, add new flags to getbundle()
to request advanced features (like lightweight-copy-aware bundles),
and older servers will silently ignore this request and send back
a plain bundle.
Matt Mackall <mpm@selenic.com> [Sat, 30 Apr 2011 02:42:05 -0500] rev 14047
merge with stable
Benoit Allard <benoit@aeteurope.nl> [Thu, 28 Apr 2011 17:02:39 +0200] rev 14046
web: Made elapsed time calculation dynamic (javascript).
This allow safe caching of the pages by the browser and still display the right
amount of elapsed time upon page refresh.
If javascript is disabled, absolute time is displayed, leaving it readable.
All the templates have been updated.
Steven Stallion <sstallion@gmail.com> [Wed, 27 Apr 2011 21:55:46 -0400] rev 14045
extdiff: add repository root as a variable
Some external diff tools (notably Plan 9 diff(1)) require the absolute path
to the file being diffed for proper function. A root variable was added to
inform an external tool of the repository root (the tool is invoked with the
cwd set to tmproot).
Yun Lee <yun.lee.bj@gmail.com> [Sun, 17 Apr 2011 23:08:35 +0800] rev 14044
help: move hgignore man page into built-in help (issue2769)