Mads Kiilerich <madski@unity3d.com> [Thu, 04 Sep 2014 21:36:35 +0200] rev 23142
config: introduce "built-in" default configuration settings in default.d
This helps providing a more consistent user experience on all platforms and
with all packaging.
The exact location of default.d depends on how Mercurial is installed and
whether it is 'frozen'. The exact location should never be relevant to users
and is intentionally not explained in details in the documentation. It will
however always be next to the help and templates files.
Note that setting HGRCPATH also disables these defaults. I don't know if that
should be considered a bug or a feature.
Mads Kiilerich <madski@unity3d.com> [Sat, 18 Oct 2014 21:48:38 +0200] rev 23141
contrib: buildrpm checking of md5 checksums of downloaded Python and Docutils
Mads Kiilerich <madski@unity3d.com> [Sun, 02 Nov 2014 16:39:02 +0100] rev 23140
contrib: update build defaults to latest Python and docutils versions
Use Python 2.7.8 and Docutils 0.12 for Makefile.python and buildrpm (CentOS 5
rpms).
Mads Kiilerich <madski@unity3d.com> [Thu, 17 Apr 2014 22:47:38 +0200] rev 23139
spelling: fixes from proofreading of spell checker issues
Michael Fyles <mf@vorston.net> [Thu, 26 Jul 2012 11:38:13 +0100] rev 23138
extdiff: quote user-supplied options passed to shell
$ hg extdiff -p cmd -o "name <user@example.com>"
resulted in a shell redirection error (due to the less-than sign),
rather than passing the single option to cmd. This was due to options
not being quoted for passing to the shell, via util.system(). Apply
util.shellquote() to each of the user-specified options (-o) to the
comparison program before they are concatenated and passed to
util.system(). The requested external diff command (-p) and the
files/directories being compared are already quoted correctly.
The discussion at the time of changeset be98c5ce4022 correctly noted
that this course of action breaks whitespace-separated options specified
for external diff commands in the configuration. The lower part of the
patch corrects this by lexing options read from the configuration file
into separate options rather than reading them all into the first
option.
Update test to cover these conditions.
Related changesets (reverse-chronological):
- be98c5ce4022 (fix reverted to make configuration file options work)
- 453097750fbf (issue fixed but without fix for configuration file)
Yuya Nishihara <yuya@tcha.org> [Sun, 02 Nov 2014 13:20:07 +0900] rev 23137
serve: correct meta variable of --daemon-pipefds option
It was changed to lock path at e22695b4472f.
Yuya Nishihara <yuya@tcha.org> [Sun, 02 Nov 2014 13:08:46 +0900] rev 23136
tests: have dumbhttp.py use cmdutil.service() to wait for child to listen()
Because the original dumbhttp.py exited without waiting for listen(), several
tests could fail with "abort: error: Connection refused" if subsequent hg
command is fast enough.
Martin von Zweigbergk <martinvonz@google.com> [Sun, 19 Oct 2014 22:09:03 -0700] rev 23135
test-revert: remove obsolete comment about known misbehavior
It seems like the last known misbehvior that the comment was referring
to was dealt with in 2ff28e07d7d6 (revert: properly back up added
files with local modification, 2014-08-31).
Matt Mackall <mpm@selenic.com> [Mon, 03 Nov 2014 11:06:51 -0600] rev 23134
test-revert.t: fix wc check-code false positive
Matt Mackall <mpm@selenic.com> [Mon, 03 Nov 2014 14:01:52 -0600] rev 23133
merge with stable
Matt Mackall <mpm@selenic.com> [Sat, 01 Nov 2014 22:48:49 -0500] rev 23132
Added signature for changeset ced632394371
Matt Mackall <mpm@selenic.com> [Sat, 01 Nov 2014 22:48:12 -0500] rev 23131
Added tag 3.2 for changeset ced632394371
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 01 Nov 2014 23:52:53 +0000] rev 23130
setdiscovery: limit the size of all sample (issue4411)
Further digging on this issue show that the limit on the sample size used in
discovery never works for heads. Here is a quote from the code itself:
desiredlen = size - len(always)
if desiredlen <= 0:
# This could be bad if there are very many heads, all unknown to the
# server. We're counting on long request support here.
The long request support never landed and evolution make the "very many heads,
all unknown to the server" case quite common.
We implement a simple and stupid hard limit of sample size for all query. This
should prevent HTTP 414 error with the current state of the code.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 01 Nov 2014 23:17:50 +0000] rev 23129
hook: protect commit hooks against stripping of temporary commit (issue4422)
History rewriting commands like histedit tend to use temporary
commits. They may schedule hook execution on these temporary commits
for after the lock has been released. But temporary commits are likely
to have been stripped before the lock is released (and the hook run).
Hook executed for missing revisions leads to various crashes.
We disable hooks execution for revision missing in the repo. This
provides a dirty but simple fix to user issues.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 01 Nov 2014 22:59:37 +0000] rev 23128
mq: do not call [0] on revset
The __getitem__ method have been removed. The "first" method is to be used
instead. Test have been extended to test this code path.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 01 Nov 2014 22:58:30 +0000] rev 23127
addset: fix `first` and `last` on sorted addset (issue4426)
The lazy sorting were not enforced on addset. This was made visible through MQ.
Matt Mackall <mpm@selenic.com> [Sat, 01 Nov 2014 17:30:57 -0500] rev 23126
clone: properly mark branches closed with --uncompressed (issue4428)
On streaming clone, we were priming the local branch cache with the
remote branchmap, without checking which heads were closed.
This fixes an issue introduced in:
changeset: 17740:e6067bec18da
user: Tomasz Kleczek <tomasz.kleczek@fb.com>
date: Wed Oct 03 13:19:53 2012 -0700
summary: branchcache: fetch source branchcache during clone (issue3378)
that was exposed in 2.9 by:
changeset: 20192:38fad5e76ee8
user: Brodie Rao <brodie@sf.io>
date: Mon Sep 16 01:08:29 2013 -0700
summary: branches: simplify with repo.branchmap().iterbranches()
Mads Kiilerich <madski@unity3d.com> [Sat, 01 Nov 2014 20:00:31 +0100] rev 23125
Makefile: update .PHONY
Based on
sed -n 's/^\([a-z0-9-]*\):\(\s.*\)\?$/\1/gp' Makefile | xargs echo
add check, check-code, update-pot, some packaging targets
Mads Kiilerich <madski@unity3d.com> [Sat, 01 Nov 2014 20:00:00 +0100] rev 23124
buildrpm: fix use of invalid $PLATFORM in mercurial.repo
Matt Mackall <mpm@selenic.com> [Sat, 01 Nov 2014 13:13:04 -0500] rev 23123
debuglocks: add missing usage summary
Mads Kiilerich <madski@unity3d.com> [Sat, 01 Nov 2014 19:02:31 +0100] rev 23122
help: don't crash on help for 'sections' with multiple '.'
Mads Kiilerich <madski@unity3d.com> [Sat, 01 Nov 2014 18:28:54 +0100] rev 23121
help: fix config description of ui.reportoldssl
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 18:03:17 +0900] rev 23120
i18n-ja: synchronized with f3baaeffe841
Wagner Bruna <wbruna@yahoo.com> [Fri, 31 Oct 2014 22:30:39 -0200] rev 23119
i18n-pt_BR: synchronized with 0b7853f969ac
Wagner Bruna <wbruna@yahoo.com> [Fri, 31 Oct 2014 22:22:41 -0200] rev 23118
merge with i18n
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 01:03:11 +0900] rev 23117
i18n-ja: synchronized with 5459b30aa498
Durham Goode <durham@fb.com> [Fri, 31 Oct 2014 12:56:25 -0700] rev 23116
clone: fix copying bookmarks in uncompressed clones (issue4430)
ef62c66bee1b broke bookmarks getting copied during uncompressed clones. Since
most of the pull logic has been moved into exchange.py, lets just call
exchange.pull to fix up the repo with the latest bits after the streaming clone
has bootstrapped the repo. This keeps us from having to duplicate the bookmark
logic.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 31 Oct 2014 10:41:36 -0700] rev 23115
revset: don't recreate matcher for every revision
The matcher variable 'm' in checkstatus() is reset to None on each
call, so the caching of the matcher no longer happens as it was
intended. This seems to be a regression in ed7b674824a3 (revset: added
lazyset implementation to checkstatus, 2014-01-03).
Fix by moving the cached matcher into the enclosing function so it's
actually cached across calls. This speeds up
hg log -r 'modifies(mercurial/context.py)' >/dev/null
from 7.5s to 4s.
Also see similar fix in f2aeff8a87b6 (revset: avoid recalculating
filesets, 2014-10-22).
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23114
help: use ":hg:`command`" instead of incorrect ":hg:'command'" notation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23113
i18n: add i18n comment to error messages of filesets predicates
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23112
i18n: add i18n comment to error messages of template functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23111
help: refer ":merge3" instead of "internal:merge3"
According to warning message (introduced by 38e0363dcbe0) in
filemerge.py, the former should be used as official name.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23110
i18n: make hint message of exception translatable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:43:08 +0900] rev 23109
help: use "hg files" instead of "hg locate" in "hg help filesets"
The latter command is already deprecated.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 01 Nov 2014 02:41:18 +0900] rev 23108
files: refer "hg help filesets" instead of "hg help revsets" in help text
"specifying FILE patterns" should refer the former.
Matt Mackall <mpm@selenic.com> [Thu, 30 Oct 2014 17:52:01 -0500] rev 23107
tests: silence output race in test-run-tests.t
Matt Mackall <mpm@selenic.com> [Thu, 30 Oct 2014 16:57:28 -0500] rev 23106
merge with i18n
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 27 Oct 2014 20:38:17 -0200] rev 23105
i18n-pt_BR: synchronized with 8d43c6bb38c0
Wagner Bruna <wbruna@softwareexpress.com.br> [Thu, 23 Oct 2014 18:17:00 -0200] rev 23104
i18n-pt_BR: synchronized with c312ef382033
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 17 Oct 2014 21:25:48 -0700] rev 23103
transaction: only generate file when we actually close the transaction
Before this change, the file were written for every call to `tr.close()`
exposing data to reader far too early.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 29 Sep 2014 00:59:25 -0700] rev 23102
transaction: extract file generation into its own function
We extract the code generating files into its own function. We are
about to move this code around to fix a bug. We'll need it in a
function soon to reuse it for "pending" logic. So we move the code
into a function instead of moving it twice.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 28 Oct 2014 23:05:19 -0400] rev 23101
amend: abort early if no username is configured with evolve enabled (issue4211)
Amend will reuse the original username if a new one is not provided
with -U, but obsolete.createmarkers() only considers ui.username() for
the obsolete marker's metadata. Allowing the metadata field to be
spoofed seems to defeat the point of the field in the first place.
This covers 'evolve amend' and 'ci --amend' with evolve enabled.
Without this, the transaction aborts but the parent changeset is set to -1. The
corresponding test will be added to evolve separately.
Durham Goode <durham@fb.com> [Tue, 28 Oct 2014 14:06:06 -0700] rev 23100
revset: fix O(2^n) perf regression in addset
hg log -r 1 ... -r 100 was never returning due to a regression in the
way addset computes __nonzero__. It used 'bool(self._r1 or self._r2)'
which required executing self._r1.__nonzero__ twice (once for the or,
once for the bool). hg log with a lot of -r's happens to build a one
sided addset tree of N length, which ends up being 2^N performance.
This patch fixes it by converting to bool before or'ing.
This problem can be repro'd with something as simple as:
hg log `for x in $(seq 1 50) ; do echo "-r $x "; done`
Adding '1 + 2 + ... + 20' to the revsetbenchmark.txt didn't seem to repro the
problem, so I wasn't able to add a revset benchmark for this issue.
Matt Mackall <mpm@selenic.com> [Mon, 27 Oct 2014 23:47:41 -0500] rev 23099
tests: add missing glob for Windows
Matt Mackall <mpm@selenic.com> [Mon, 27 Oct 2014 18:44:05 -0500] rev 23098
test-convert-svn-sink: properly isolate symlink section
This was fixed earlier by moving all the symlink bits to a section to
the end of the file, but then it was broken (by the same person) by
adding more tests at the end.
Siddharth Agarwal <sid0@fb.com> [Fri, 24 Oct 2014 11:39:39 -0700] rev 23097
util.fspath: use a dict rather than a linear scan for lookups
Previously, we'd scan through the entire directory listing looking for a
normalized match. This is O(N) in the number of files in the directory. If we
decide to call util.fspath on each file in it, the overall complexity works out
to O(N^2). This becomes a problem with directories a few thousand files or
larger.
Switch to using a dictionary instead. There is a slightly higher upfront cost
to pay, but for cases like the above this is amortized O(1). Plus there is a
lower constant factor because generator comprehensions are faster than for
loops, so overall it works out to be a very small loss in performance for 1
file, and a huge gain when there's more.
For a large repo with around 200k files in it on a case-insensitive file
system, for a large directory with over 30,000 files in it, the following
command was tested:
ls | shuf -n $COUNT | xargs hg status
This command leads to util.fspath being called on $COUNT files in the
directory.
COUNT before after
1 0.77s 0.78s
100 1.42s 0.80s
1000 6.3s 0.96s
I also tested with COUNT=10000, but before took too long so I gave up.
Matt Mackall <mpm@selenic.com> [Mon, 27 Oct 2014 16:53:01 -0500] rev 23096
test-clone.t: drop message about listing bookmarks with no hardlinks
Matt Mackall <mpm@selenic.com> [Mon, 27 Oct 2014 16:39:57 -0500] rev 23095
tests: don't try to test unix sockets on vfat
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 00:19:18 +0900] rev 23094
tests: change obsolete timestamp to avoid "gmtime()" problem on Windows
Before this patch, "test-obsolete.t" fails on Windows environment,
because strings corresponded to "tm_wday" (day of the week) field are
incorrect.
On POSIX environment, "gmtime()" returns correct "tm_wday" value even
for negative "time_t" value. On the other hand, it returns incorrect
one on Windows environment. At least, "gmtime()" of the Windows
runtime library bundled with Python 2.7.3 does.
According to 9a7d0f7e0561 introducing original timestamp value '56
120', it shouldn't cause negative "time_t" value.
test-obsolete: remove subminute timezone in test
Obsmarker format "1" does not supports sub minute timezone. So we
change the test to something slightly more sensible.
It replaced "-d '56 12'" by "-d '56 120'".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 00:19:18 +0900] rev 23093
tests: use "%HG_ARGS%" in shell alias on Windows instead of "$HG_ARGS"
Before this patch, a part of "test-alias.t" fails unexpectedly on
Windows environment, because "cmd.exe" can't evaluate "$HG_ARGS"
expression in shell alias correctly.
This patch uses "%HG_ARGS%" in shell alias on Windows instead of
"$HG_ARGS" to expand it correctly.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 00:19:18 +0900] rev 23092
tests: introduce "checkeditform-n-cat.sh" script to invoke "cat" in it safely
Before this patch, a part of "test-transplant.t" fails unexpectedly on
Windows environment, because semicolon (";") in HGEDITOR isn't
recognized as the command separator by "cmd.exe".
This patch newly introduces "checkeditform-n-cat.sh" script to invoke
"cat" in it safely anywhere.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 24 Oct 2014 13:50:00 -0400] rev 23091
doc: change 'revision or range' to 'revision or revset'
The phrase "revision or range" comes from a pre-revset era. Since the
documentation for ranges now is under the revset docs, and as a
helpful hint nudging users towards revsets, I think it's better to say
"revision or revset"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 01:14:12 +0900] rev 23090
largefiles: add examination of exec bit in "hg status --rev REV" case
Before this patch, "hg status --rev REV" doesn't list largefiles up
with "M" mark, even if exec bit of them is changed, because
"lfilesrepo.status" doesn't examine exec bit in such case.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 28 Oct 2014 01:14:11 +0900] rev 23089
largefiles: ignore removal status of files not managed in the target context
Before this patch, "hg status --rev REV" listed largefiles removed in
the working directory up with "R" mark, even if they aren't managed in
the REV. Normal files aren't listed up in such case.
When "lfilesrepo.status" is invoked for "hg status --rev REV", it
treats files on conditions below as "removed" (to avoid manifest full
scan in "ctx.status" ?):
- marked as "R" in lfdirstate, or
- files managed in the target revision but unknown in the manifest
of the working context (= not including "R" files)
But the former can include files not managed in the target context.
To ignore removal status of files not managed in the target context,
this patch drops files unknown in the target revision from "removed"
list.
Mads Kiilerich <madski@unity3d.com> [Sun, 26 Oct 2014 12:14:12 +0100] rev 23088
changelog: use headrevsfiltered
2b5940f64750 introduced use of the new filtering headrevs C implementation. It
caught TypeError to detect when to fall back to the implementation that was
compatible with old extensions. That method was however not reliable.
Instead, use the new headrevsfiltered function when passing a filter. It will
reliably fail with AttributeError when an old extension that predates
headrevsfiltered is used.
Mads Kiilerich <madski@unity3d.com> [Sun, 26 Oct 2014 12:14:10 +0100] rev 23087
parsers: introduce headrevsfiltered in C extension
All extensions that have this function do support filtering. The existing
headrevs function may support filtering but we cannot reliably detect whether
it does.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 25 Oct 2014 21:34:49 -0400] rev 23086
httppeer: close the temporary bundle file after two-way streaming it
This fixes several push tests in test-bundle2-exchange.t that were failing on
Windows with messages like the following:
$ hg -R main push http://localhost:$HGPORT2/ -r 32af7686d403 \
--bookmark book_32af
pushing to http://localhost:$HGPORT2/
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: 1 new obsolescence markers
updating bookmark book_32af
abort: The process cannot access the file because it is being used by another
process: 'C:\path\to\tmp\bundle.hg'
[255]
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Oct 2014 14:24:28 -0700] rev 23085
status: make 'hg status --rev' faster when there are deleted files
In order not to avoid listing files as both added and deleted, for
example, we check for every file in the manifest if it is in the
_list_ of deleted files. This can get quite slow when there are many
deleted files. Change it to a set to make the containment check
faster. On a somewhat contrived example of the Mozilla repo with the
entire testing/ directory deleted (~14k files), this makes
'hg status --rev .^' go from 26s to 2s.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 27 Oct 2014 17:52:33 +0100] rev 23084
setdiscovery: limit the size of the initial sample (issue4411)
The set discovery start by sending a "known" command with all local heads. When
the number of local heads is massive (eg: using hidden changesets) such request
becomes too large. This lead to 414 error over http, aborting the whole
process.
We limit the size of the sample used by the first query to fix this.
The test are impacted because they do test massive number of heads. But they do
not test it over real world http setup.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 27 Oct 2014 17:40:32 +0100] rev 23083
setdiscovery: extract sample limitation in a `_limitsample` function
We need to reuse this logic for the initial query. We extract it in a function
to unsure sample limiting is applied consistently in all cases.