Pierre-Yves David <pierre-yves.david@fb.com> [Sun, 28 Sep 2014 00:49:36 -0700] rev 25744
bookmarks: change bookmark within a transaction
For some time, bookmark can and should be moved in the transaction. This
changeset migrates the 'hg bookmarks' commands to use a transaction.
Tests regarding rollback and transaction hooks are impacted for
obvious reasons. Some have to be slightly updated to keep testing the
same things. Some can just be dropped because they do not make sense
anymore.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 01 Jul 2015 01:09:57 -0700] rev 25743
bookmark: remove the "touch changelog" hack
Any changes to bookmarks used to touch the changelog to ensure hgweb was
reloaded. This was fairly hacky and stops working when bookmarks are moved as
part of the transaction. As hgweb is now explicitly tracking bookmark changes,
we can remove this hack (and no tests break).
Durham Goode <durham@fb.com> [Mon, 29 Jun 2015 13:44:24 -0700] rev 25742
convert: add config option for disabling ancestor parent checks
When converting merge commits, convert checks if any of the parents are
ancestors of any of the other parents. To do this, it builds an ancestor list
for every commit in the repository. On large repos this can take a long time
(30min+). Let's add an option for disabling this check to preserve performance.
The downside of this is that it may create unnecessary parent connections when
enabled (which is unfortunate, but not incorrect).
To verify, I ran the convert tests with the flag enabled, and verified the graph
changes were all just to add new parents that were ancestors of existing
parents.
Durham Goode <durham@fb.com> [Mon, 29 Jun 2015 13:40:20 -0700] rev 25741
convert: add config to not convert tags
In some cases we do not want to convert tags from the source repo to be tags in
the target repo (for instance, in a large repository, hgtags cause scaling
issues so we want to avoid them). This adds a config option to disable
converting tags.
Yuya Nishihara <yuya@tcha.org> [Thu, 02 Jul 2015 22:18:21 +0900] rev 25740
templatekw: make {rev} return wdirrev instead of None
wdirrev/wdirnode identifiers are still experimental, but {node} is mapped to
wdirnode. So {rev} should do the same for consistency.
I'm not sure if templatekw can import scmutil. If not, we should move intrev()
to node module.
Yuya Nishihara <yuya@tcha.org> [Thu, 02 Jul 2015 22:03:06 +0900] rev 25739
changeset_printer: use node.wdirrev to calculate meaningful parentrevs
Because we defined the working-directory revision is INT_MAX, it makes sense
that "hg log -r 'wdir()'" displays the "parent:" field. This is the same for
two revisions that are semantically contiguous but the intermediate revisions
are hidden.
Yuya Nishihara <yuya@tcha.org> [Mon, 22 Jun 2015 22:05:10 +0900] rev 25738
workingctx: use node.wdirid constant
Yuya Nishihara <yuya@tcha.org> [Mon, 22 Jun 2015 22:01:33 +0900] rev 25737
node: define experimental identifiers for working directory
The "ff..." node was introduced at 183965a00c76, and we also need an integer
that can be processed in revset. We could use len(repo), but it would be
likely to hide possible bugs. Instead, using INT_MAX, we can notice such bugs
by IndexError, at the cost of handling non-contiguous revisions.
Yuya Nishihara <yuya@tcha.org> [Sat, 14 Mar 2015 17:58:18 +0900] rev 25736
templatekw: apply manifest template only if ctx.manifestnode() exists
This will prevent crash by "hg log -r 'wdir()' -Tdefault". We could use the
pseudo ff... hash introduced by 183965a00c76, but it isn't proven idea yet.
For now, I want to make "hg log" just works in order to test 'wdir()' revset.
Note that unlike its name, "{manifest}" is not a list of files in that
revision, but a pair of (manifestrev, manifestnode).
Matt Mackall <mpm@selenic.com> [Tue, 07 Jul 2015 19:07:04 -0500] rev 25735
merge with stable
Yuya Nishihara <yuya@tcha.org> [Sat, 04 Jul 2015 10:56:37 +0900] rev 25734
import-checker: exclude mercurial packages installed into the system path
If mercurial was installed into a directory other than the site-packages,
test-module-imports.t failed as 'mercurial.node' was listed in stdlib_modules:
testpackage/latesymbolimport.py relative import of stdlib module
Instead, we should exclude our packages explicitly.
Yuya Nishihara <yuya@tcha.org> [Sat, 04 Jul 2015 10:54:03 +0900] rev 25733
import-checker: recurse into subtree of sys.path only if __init__.py exists
We can't assume that the site-packages is the only directory that has Python
files but is not handled as a package. For example, we have dist-packages
directory on Debian.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 03 Jul 2015 06:56:03 +0900] rev 25732
hghave: allow adding customized features at runtime
Before this patch, there is no way to add customized features to
`hghave` without changing `hghave` and `hghave.py` themselves.
This decreases reusability of `run-tests.py` framework for third party
tools, because they may want to examine custom features at runtime
(e.g. existence of some external tools).
To allow adding customized features at runtime, this patch makes
`hghave` import `hghaveaddon` module, only when `hghaveaddon.py` file
can be found in directories below:
- `TESTDIR` for invocation via `run-tests.py`
- `.` for invocation via command line
The path to the directory where `hghaveaddon.py` should be placed is
added to `sys.path` only while importing `hghaveaddon`, because:
- `.` may not be added to `PYTHONPATH`
- adding additional path to `sys.path` may change behavior of
subsequent `import` for other features
`hghave` is terminated with exit code '2' at failure of `import
hghaveaddon`, because exit code '2' terminates `run-tests.py`
immediately.
This is a one of preparations for issue4677.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 03 Jul 2015 06:56:03 +0900] rev 25731
import-checker.py: exit with code 0 if no error is detected
Before this patch, `import-checker.py` exits with non-0 code, if no
error is detected. This is unusual as Unix command.
This change may be a one of preparations for issue4677, because this
can avoid extra explanation about unusual exit code of
`import-checker.py` for third party tool developers.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 03 Jul 2015 06:56:03 +0900] rev 25730
run-tests.py: add TESTDIR to PATH if it differs from RUNTESTDIR
Before this patch, `RUNTESTDIR` is added to `PATH`, but `TESTDIR`
isn't.
This doesn't cause any problems, if `run-tests.py` runs in `tests`
directory of Mercurial source tree. In this case, `RUNTESTDIR` should
be equal to `TESTDIR`.
On the other hand, if `run-tests.py` runs in `tests` of third party
tools, commands in that directory should be executed with explicit
`$TESTDIR/` prefix in `*.t` test scripts. This isn't suitable for the
policy "drop explicit $TESTDIR from executables" of Mercurial itself
(see 4d2b9b304ad0).
BTW, 4d2b9b304ad0 describes that "$TESTDIR is added to the path" even
though `TESTDIR` isn't added to `PATH` exactly speaking, because
`TESTDIR` and `RUNTESTDIR` weren't yet distinguished from each other
at that time.
This is a one of preparations for issue4677.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 03 Jul 2015 06:56:03 +0900] rev 25729
run-tests.py: add RUNTESTDIR to refer `tests` of Mercurial
Before this patch, there is no way to refer files under `tests` or so
of Mercurial source tree, when `run-tests.py` runs in `tests` of third
party tools. In this case, `TESTDIR` refers the latter `tests`.
This prevents third party tools from using useful tools in Mercurial
source tree (e.g. `contrib/check-code.py`).
This patch adds `RUNTESTDIR` environment variable to refer `tests` of
Mercurial source tree, in which `run-tests.py` now running is
placed. For example, tests of third party tools can refer
`contrib/check-code.py` in Mercurial source tree as
`$RUNTESTDIR/../contrib/check-code.py`.
BTW, for similarity with `TESTDIR` referring `test*s*` directory,
newly added environment variable isn't named as `RUNTEST*S*DIR`. In
addition to it, the corresponded local variable is also named as
`runtestdir`.
This is a one of preparations for issue4677.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 03 Jul 2015 06:56:03 +0900] rev 25728
run-tests.py: execute hghave by the path relative to run-tests.py
Before this patch, `run-tests.py` executes `hghave` by the path
relative to `TESTDIR` (= cwd of `run-tests.py` running).
This prevents third party tools for Mercurial from running
`run-tests.py`, which is placed in `tests` of Mercurial source tree,
in `tests` of own source tree. In such cases, `TESTDIR` refers the
latter `tests`, and `hghave` doesn't exist in it.
This is a one of preparations for issue4677.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 06 Jul 2015 23:23:22 -0400] rev 25727
templatekw: make {latesttag} a hybrid list
This maintains the previous behavior of expanding {latesttag} to a string
containing all of the tags, joined by ':'. But now it also allows list type
operations.
I'm unsure if the plural handling is correct (i.e. it seems like it is usually
"{foos % '{foo}'}"), but I guess we are stuck with this because the singular
form previously existed.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 06 Jul 2015 23:12:24 -0400] rev 25726
templatekw: allow the caller of showlist() to specify the join() separator
The keyword {latesttag} currently manually joins the list of tags using ':',
which prevents a transparent switch over to a hybrid list.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 30 Jun 2015 23:56:49 -0400] rev 25725
archive: use {changessincelatesttag} to build the metadata file
This isolates the current magic when dealing with wdir() and only().
Matt Harbison <matt_harbison@yahoo.com> [Fri, 26 Jun 2015 23:11:05 -0400] rev 25724
templatekw: introduce the changessincelatesttag keyword
Archive is putting a value with the same name in the metadata file, to count all
of the changes not covered by the latest tag, instead of just along the longest
path. It seems that this would be useful to have on the command line as well.
It might be nice for the name to start with 'latesttag' so that it is grouped
with the other tag keywords, but I can't think of a better name.
The initial version of this counted a clean wdir() and '.' as the same value,
and a dirty wdir() as the same value after it is committed. Yuya objected on
the grounds of consistency [1]. Since revsets can be used to conditionally
select a dirty wdir() or '.' when clean, I can build the version string I need
and will defer to him on this.
[1] https://www.selenic.com/pipermail/mercurial-devel/2015-June/071588.html
Matt Harbison <matt_harbison@yahoo.com> [Sat, 04 Jul 2015 23:11:32 -0400] rev 25723
help: support 'hg help template.somekeyword'
Previously the output was simply 'abort: help section not found'.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 02 Jul 2015 00:04:08 -0400] rev 25722
test-convert-git: use a relative gitmodule url
The absolute URL was causing this error with 1.9.5 on Windows, which had a
cascading effect:
@@ -466,22 +466,24 @@
> url = $TESTTMP/git-repo5
> EOF
$ git commit -a -m "weird white space submodule"
- [master *] weird white space submodule (glob)
- Author: nottest <test@example.org>
- 1 file changed, 3 insertions(+)
+ fatal: bad config file line 6 in $TESTTMP/git-repo6/.gitmodules
+ [128]
$ cd ..
$ hg convert git-repo6 hg-repo6
initializing destination hg-repo6 repository
scanning source...
For reasons unknown, there is still this delta on Windows:
@@ -490,7 +490,6 @@
$ git commit -q -m "missing .gitmodules"
$ cd ..
$ hg convert git-repo6 hg-repo6 --traceback
- fatal: Path '.gitmodules' does not exist in '*' (glob)
initializing destination hg-repo6 repository
scanning source...
sorting...
Matt Harbison <matt_harbison@yahoo.com> [Wed, 01 Jul 2015 20:53:12 -0400] rev 25721
test-convert-git: stablize for git 1.7.7.6
The output has apparently changed slightly since this version. Since they are
just commits without any obvious importance to the test, and I can't figure out
how to glob them away, silence them.
Sample diffs were like this:
@@ -468,7 +468,7 @@
$ git commit -a -m "weird white space submodule"
[master *] weird white space submodule (glob)
Author: nottest <test@example.org>
- 1 file changed, 3 insertions(+)
+ 1 files changed, 3 insertions(+), 0 deletions(-)
$ cd ..
$ hg convert git-repo6 hg-repo6
initializing destination hg-repo6 repository
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 30 Jun 2015 23:55:22 -0700] rev 25720
hgweb: also monitor change to bookmarks
This makes changes to bookmarks visible to hgweb through the official
way. There is no change to tests because there is currently another
hack in place to ensure the same behavior.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 01 Jul 2015 01:02:27 -0700] rev 25719
hgweb: also refresh the repo on changes to the obsstore
Before this change, hgweb could miss update to the obsolescence markers store
if that was the only change between two commands.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 01 Jul 2015 00:18:50 -0700] rev 25718
hgweb: use an extensible list of files to check for refresh
The refresh feature was explicitly testing if '00changelog.i' and 'phaseroots'
changed. This is overlooking other important information like bookmarks and
obsstore (bookmark have their own hack to work around it).
We move to a more extensible system with a list of files of interest
that will be used to build the repo state. The system should probably
move into a more central place so that the command server and other
systems are able to use it. Extension writers will also be able to add
entries to ensure that changes to extension data are properly detected.
Also the current key (mtime, size) is notably weak for bookmarks and phases
whose files can easily change content without effect on their size.
Still, this patch seems like a valuable minimal first step.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 03 Jul 2015 10:07:51 -0700] rev 25717
hgweb: drop the default argument for get_stat
This default argument is used twice and is making things confusing. Making it
explicit helps to clarify coming changesets
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 02 Jul 2015 23:46:18 -0700] rev 25716
revset: prefetch method in "parents"
As already demonstrated, saving attribute lookup gains us some minor but
noticeable performance improvements.
revset #0: parents(all())
before) 0.024169
after ) 0.022756 94%
Eugene Baranov <eug.baranov@gmail.com> [Fri, 03 Jul 2015 18:10:58 +0100] rev 25715
convert: handle deleted files when converting from Perforce (issue4743)
Nathan Goldbaum <ngoldbau@ucsc.edu> [Mon, 06 Jul 2015 16:22:57 -0700] rev 25714
forget: add a note to the command help about remove
Colin Chan <colinchan@fb.com> [Wed, 01 Jul 2015 13:14:03 -0700] rev 25713
shelve: only keep the latest N shelve backups
This will keep the backup directory from growing indefinitely. The number of
backups to keep can be set using the shelve.maxbackups config option (defaults
to 10 backups).
Colin Chan <colinchan@fb.com> [Wed, 01 Jul 2015 13:13:02 -0700] rev 25712
shelve: always backup shelves instead of deleting them
Instead of being deleted, shelve files are now moved into the .hg/shelve-backup
directory. This is designed similarly to how strip saves backups into
.ht/strip-backup. The goal is to prevent data loss especially when using
unshelve. There are cases in which a user can complete an unshelve but lose
some of the data that was shelved by, for example, resolving merge conflicts
incorrectly. Storing backups will allow the user to recover the data that was
shelved, at the expense of using more disk space over time.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 30 Jun 2015 22:02:40 -0700] rev 25711
wireproto: remove a debug print
This looks like someone forgot something here.
Pierre-Yves David <pierre-yves.david@fb.com> [Sun, 28 Sep 2014 01:09:16 -0700] rev 25710
amend: move obsmarkers creation in the "new changeset" conditional
We already check if we created a new changesets right above this piece of code,
so we can just drop the condition and indent the markers creation.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 30 Jun 2015 22:28:40 -0700] rev 25709
amend: move createmarkers evaluation earlier
The value is used at multiple points in the function. Retrieving the
value in the middle of the transaction scope gives the false
impression that it has a single user. We move it at the start of the
function to clarify this.
Augie Fackler <augie@google.com> [Tue, 30 Jun 2015 19:19:17 -0400] rev 25708
wireproto: correctly escape batched args and responses (issue4739)
This issue appears to be as old as wireproto batching itself: I can
reproduce the failure as far back as 08ef6b5f3715 trivially by
rebasing the test changes in this patch, which was back in the 1.9
era. I didn't test before that change, because prior to that the
testfile has a different name and I'm lazy.
Note that the test thought it was checking this case, but it actually
wasn't: it put a literal ; in the arg and response for its greet
command, but the mangle/unmangle step defined in the test meant that
instead of "Fo, =;o" going over the wire, "Gp-!><p" went instead,
which doesn't contain any special characters (those being [.=;]) and
thus not exercising the escaping. The test has been updated to use
pre-unmangled special characters, so the request is now "Fo+<:o",
which mangles to "Gp,=;p". I have confirmed that the test fails
without the adjustment to the escaping rules in wireproto.py.
No existing clients of RPC batching were depending on the old behavior
in any way. The only *actual* users of batchable RPCs in core were:
1) largefiles, wherein it batches up many statlfile calls. It sends
hexlified hashes over the wire and gets a 0, 1, or 2 back as a
response. No risk of special characters.
2) setdiscovery, which was using heads() and known(), both of which
communicate via hexlified nodes. Again, no risk of special characters.
Since the escaping functionality has been completely broken since it
was introduced, we know that it has no users. As such, we can change
the escaping mechanism without having to worry about backwards
compatibility issues.
For the curious, this was detected by chance: it happens that the
lz4-compressed text of a test file for remotefilelog compressed to
something containing a ;, which then caused the failure when I moved
remotefilelog to using batching for file content fetching.
Matt Mackall <mpm@selenic.com> [Wed, 01 Jul 2015 17:51:57 -0500] rev 25707
merge with stable
Yuya Nishihara <yuya@tcha.org> [Sun, 28 Jun 2015 22:57:33 +0900] rev 25706
revset: port extra() to support keyword arguments
This is an example to show how keyword arguments are processed.
Yuya Nishihara <yuya@tcha.org> [Sat, 27 Jun 2015 17:25:01 +0900] rev 25705
revset: add function to build dict of positional and keyword arguments
Keyword arguments will be convenient for functions that will take more than
one optional or boolean flags. For example,
file(pattern[, subrepos=false])
subrepo([[pattern], status])
Because I don't think all functions should accept key=value syntax, getkwargs()
does not support variadic functions such as 'ancestor(*changeset)'.
The core logic is placed in the parser module because keyword arguments will
be more useful in the templater, where functions take more options. Test cases
will be added by the next patch.
Yuya Nishihara <yuya@tcha.org> [Sat, 27 Jun 2015 17:05:28 +0900] rev 25704
revset: add parsing rule for key=value pair
It will be used as an keyword argument.
Note that our "=" operator is left-associative. In general, the assignment
operator is right-associative, but we don't care because it isn't allowed to
chain "=" operations.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 28 Jun 2015 12:46:34 -0700] rev 25703
import-checker: establish modern import convention
We introduce a new convention for declaring imports and enforce it via
the import checker script.
The new convention is only active when absolute imports are used, which is
currently nowhere. Keying off "from __future__ import absolute_import" to
engage the new import convention seems like the easiest solution. It is
also beneficial for Mercurial to use this mode because it means less work
and ambiguity for the importer and potentially better performance due to
fewer stat() system calls because the importer won't look for modules in
relative paths unless explicitly asked.
Once all files are converted to use absolute import, we can refactor
this code to again only have a single import convention and we can
require use of absolute import in the style checker.
The rules for the new convention are documented in the docstring of the
added function. Tests have been added to test-module-imports.t. Some
tests are sensitive to newlines and source column position, which makes
docstring testing difficult and/or impossible.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 28 Jun 2015 12:28:48 -0700] rev 25702
import-checker: establish new function for verifying import conventions
A future patch will formalize the modern import convention. In
preparation for that, introduce a new wrapper function that will invoke
the proper function.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 28 Jun 2015 09:36:58 -0700] rev 25701
import-checker: resolve relative imports
"from . import X" will produce an ImportFrom ast node with .module =
None. This resulted in a run-time error from attempting to concatenate
None with a str.
Another problem with relative imports is that the prefix may be dynamic
based on the "level" attribute of the import. e.g. "from ." has level 1
and "from .." has level 2.
We teach the "fromlocal" function how to cope with relative imports.
Where appropriate, the consumer passes in the level so relative module
names may be resolved properly.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 26 Jun 2015 23:23:10 -0400] rev 25700
templatekw: use a list of tags in getlatesttags() instead of joining them
This will be used in the next patch.
It also points out that the documentation for '{latesttag}' is not quite
accurate, since it says "most recent global tag" (singular). I assume it is too
radical of a change to convert it to a list of strings. At least ':' is
currently a reserved character in tag names.
Durham Goode <durham@fb.com> [Mon, 29 Jun 2015 17:19:58 -0700] rev 25699
convert: improve support for unusual .gitmodules
Previously convert would throw an exception if it encountered a git commit with
a .gitmodules file that was malformed (i.e. was missing, but had submodule
files, or was malformed).
Instead of breaking the convert entirely, let's print error messages and move
on.
Durham Goode <durham@fb.com> [Mon, 29 Jun 2015 17:19:18 -0700] rev 25698
convert: handle .gitmodules with non-tab whitespaces
The old implementation assumed .gitmodules file lines always began
with tabs. It can be any whitespace, so lets trim the lines
appropriately.
Durham Goode <durham@fb.com> [Mon, 29 Jun 2015 13:39:05 -0700] rev 25697
convert: fix bug with converting the same commit twice
Convert had a bug where it relied on repo.tip() to be the newly committed
commit. This was not the case if the commit already existed in the repository
(since repo.commitctx() did nothing, the tip() referenced some random other
commit and the revmap got corrupted).
This fixes it by using the node returned by repo.commitctx().
Yuya Nishihara <yuya@tcha.org> [Sat, 27 Jun 2015 15:28:46 +0900] rev 25696
templater: remove workaround for escaped quoted string in quoted template
This patch backs out 554d6fcc3c84 which should no longer be needed.
The test for '{\"invalid\"}' is removed because the parser is permissive for
\"...\" literal.
Matt Mackall <mpm@selenic.com> [Wed, 01 Jul 2015 16:33:31 -0500] rev 25695
merge with stable
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 30 Jun 2015 22:39:28 -0700] rev 25694
amend: stop updating the bookmarks twice
There was code to move the bookmarks around both in the 'cmdutil' help and in
the main 'commit' function. We kill the 'commit' version as it is performed
outside the transaction.
The debug note is moved into cmdutil.
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 30 Jun 2015 22:36:49 -0700] rev 25693
amend: collaborate with the transaction when moving bookmarks
We have code moving bookmarks from the old changeset to the new one within the
transaction scope. Yet this code was still writing to disk instead of
handing the change to the transaction. This changeset fixes this.
Augie Fackler <augie@google.com> [Mon, 29 Jun 2015 17:10:36 -0400] rev 25692
sshserver: drop ancient do_{lock,unlock,addchangegroup} methods
These were marked as deprecated and dangerous way back in
e8c4f3d3df8c, which was first included in Mercurial 0.9.1. While it's
possible that clients from that long ago are still around somewhere,
they're risky for servers in that they want to lock the repo, and then
might leave it locked if they died before finishing their transaction.
Given that it's been 9 years, let's go ahead and cut this last
lingering tie with a basically-untested protocol.
Mike Edgar <adgar@google.com> [Mon, 29 Jun 2015 12:35:31 -0400] rev 25691
wireproto: add config knob for http header length limit
Well-behaved Mercurial clients will respect the httpheader capability by not
sending http headers longer than the given limit in bytes. The limit is
currently hard-coded at 1024 bytes, a safe value for any web server.
Since parsing headers is a notable factor in web server performance, tuning
header size can nontrivially improve performance for request-heavy operations
(eg. obsolete marker negotiation). Exposing the maximum header length limit
as a configuration setting is a simple way to enable such tuning.
Matt Mackall <mpm@selenic.com> [Wed, 01 Jul 2015 15:12:45 -0500] rev 25690
archive: fix changesincelatesttag with wdir()
Matt Harbison <matt_harbison@yahoo.com> [Mon, 29 Jun 2015 10:34:56 -0400] rev 25689
revset: fix a crash in parents() when 'wdir()' is in the set
The crash was "TypeError: expected string or Unicode object, NoneType found"
down in revlog.parentrevs(). This fixes heads() too (which is where I found
it.)
Matt Harbison <matt_harbison@yahoo.com> [Sun, 28 Jun 2015 13:38:03 -0400] rev 25688
workingctx: don't report the tags for its parents
This fixes the bad distance calculation for '{latesttagdistance}' mentioned in
the previous patch.
Anton Shestakov <av6@dwimlabs.net> [Tue, 30 Jun 2015 23:34:12 +0800] rev 25687
hgweb: don't try to show repo on repo-not-found page in monoblue
Anton Shestakov <av6@dwimlabs.net> [Tue, 30 Jun 2015 23:31:19 +0800] rev 25686
hgweb: fix help pages title in gitweb and monoblue
Help pages in gitweb and monoblue were setting a completely inappropriate
title: "Branches". Let's have a proper title (copy-pasted from paper style).
Anton Shestakov <av6@dwimlabs.net> [Tue, 30 Jun 2015 22:15:58 +0800] rev 25685
hgweb: don't show summary link as active on error pages in monoblue
These two error pages in monoblue think they are the summary page, when they
clearly aren't.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 28 Jun 2015 13:22:17 -0400] rev 25684
identify: build the tag list directly instead of using wctx.tags()
The current implementation of workingctx.tags() returns the tags of the parents.
This causes the calculation of {lastesttagdistance} from wdir() to be wrong.
The value when updated to a tag is 0, but updated to the tag's child is 2, the
child of that 3, and so on. This prepares for workingctx.tags() to not report
the parent tags.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 28 Jun 2015 18:39:58 -0400] rev 25683
identify: avoid a crash when given '-r wdir()'
The crash was 'NoneType is not subscriptable' in hexfunc(ctx.node()), because
the node for wdir() is None. This can be avoided simply by detecting 'wdir()'
and taking the existing path for no given revision.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 26 Jun 2015 14:33:34 -0700] rev 25682
tests: clean up duplicated output in test-subrepo-recursion progress
We have fixed a bug where two progress instance were created and competed with
each other (in 95f490136e75). But we did not updated the non-hardlink section of
'test-subrepo-recursion.t'. This patch fixes it.
Matt Mackall <mpm@selenic.com> [Wed, 01 Jul 2015 17:46:37 -0500] rev 25681
Added signature for changeset 540cd0ddac49
Matt Mackall <mpm@selenic.com> [Wed, 01 Jul 2015 17:46:37 -0500] rev 25680
Added tag 3.4.2 for changeset 540cd0ddac49
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 29 Jun 2015 19:09:42 -0700] rev 25679
transplant: only pull the transplanted revision (issue4692)
For some reason, transplant was pulling all remote revisions when transplanting
from a remote repository (unless --branch was
specified).
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 29 Jun 2015 19:18:51 -0700] rev 25678
transplant: update test to use hash for remote transplant
Transplant is apparently allowing using revision numbers when transplanting
through http. I call this nonsense and update the test to use an explicit hash.
This "feature" will break in the next change fixing another bug.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 29 Jun 2015 11:20:09 -0700] rev 25677
changegroup: properly compute common base in changeggroupsubset (issue4736)
The computation of roots was buggy, any ancestor of a bundled merge which was
also a descendant of the parents of a bundled revision were included as part of
the bundle. We fix it and add a test for strip (which revealed the problem).
Check the test for a practical usecase.
Yuya Nishihara <yuya@tcha.org> [Thu, 25 Jun 2015 22:07:38 +0900] rev 25676
templater: parse \"...\" as string for 2.9.2-3.4 compatibility (issue4733)
As of Mercurial 3.4, there were several syntax rules to process nested
template strings. Unfortunately, they were inconsistent and conflicted
each other.
a. buildmap() rule
- template string is _parsed_ as string, and parsed as template
- <\"> is not allowed in nested template:
{xs % "{f(\"{x}\")}"} -> parse error
- template escaping <\{> is handled consistently:
{xs % "\{x}"} -> escaped
b. _evalifliteral() rule
- template string is _interpreted_ as string, and parsed as template
in crafted environment to avoid double processing of escape sequences
- <\"> is allowed in nested template:
{if(x, "{f(\"{x}\")}")}
- <\{> and escape sequences in string literal in nested template are not
handled well
c. pad() rule
- template string is first interpreted as string, and parsed as template,
which means escape sequences are processed twice
- <\"> is allowed in nested template:
{pad("{xs % \"{x}\"}', 10)}
Because of the issue of template escaping, issue4714, 7298da81f5a9 (in stable)
unified the rule (b) to (a). Then, 576d6c74784b (in default) unified the rule
(c) to (b) = (a). But they disabled the following syntax that was somewhat
considered valid.
{if(rev, "{if(rev, \"{rev}\")}")}
{pad("{files % \"{file}\"}", 10)}
So, this patch introduces \"...\" literal to work around the escaped-quoted
nested template strings. Because this parsing rule exists only for the backward
compatibility, it is designed to copy the behavior of old _evalifliteral() as
possible.
Future patches will introduce a better parsing rule similar to a command
substitution of POSIX shells or a string interpolation of Ruby, where extra
escapes won't be necessary at all.
{pad("{files % "{file}"}", 10)}
~~~~~~~~~~~~~~~~~~
parsed as a template, not as a string
Because <\> character wasn't allowed in a template fragment, this patch won't
introduce more breakages. But the syntax of nested templates are interpreted
differently by people, there might be unknown issues. So if we want, we could
instead remove db7463aa080f, 890845af1ac2 and 7298da81f5a9 from the stable
branch as the bug fixed by these patches existed for longer periods.
554d6fcc3c8, "strip single backslash before quotation mark in quoted template",
should be superseded by this patch. I'll remove it later.
Matt Mackall <mpm@selenic.com> [Mon, 29 Jun 2015 16:38:22 -0500] rev 25675
merge with stable
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 27 Jun 2015 17:31:06 -0700] rev 25674
demandimport: support importing builtins for Python 3
__builtin__ was renamed to builtins in Python 3. If importing
__builtin__ fails, fall back to importing builtins in order to support
Python 3.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 27 Jun 2015 17:29:15 -0700] rev 25673
demandimport: alias __builtin__ as builtins
Python 3 renamed the __builtin__ module to builtins. In preparation for
supporting Python 3, alias the imported module as "builtins."
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 26 Jun 2015 11:29:50 -0700] rev 25672
bufferedinputpipe: remove N^2 computation of buffer length (issue4735)
The assumption that dynamically computing the length of the buffer was N^2, but
negligible because fast was False. So we drop the dynamic computation and
manually keep track of the buffer length.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 27 Jun 2015 11:51:25 -0700] rev 25671
bufferedinputpipe: remove an outdate comment
This comment is the remains of a intermediate implementation using
self._buffer += data
This implementation never made it to the repository and we can safely drop the
comment.
Siddharth Agarwal <sid0@fb.com> [Thu, 25 Jun 2015 22:20:09 -0700] rev 25670
statichttprepo: kill off sopener
Siddharth Agarwal <sid0@fb.com> [Thu, 25 Jun 2015 22:19:49 -0700] rev 25669
obsolete: replace references to 'sopener' with 'svfs'
Siddharth Agarwal <sid0@fb.com> [Thu, 25 Jun 2015 22:18:56 -0700] rev 25668
exchange: replace references to 'sopener' with 'svfs'
Siddharth Agarwal <sid0@fb.com> [Thu, 25 Jun 2015 22:17:52 -0700] rev 25667
localrepo: kill off sopener (API)
sopener is deprecated since 7034365089bf (Mercurial 2.3). It's annoying for
extension authors to have to deal with both. Let's just kill it off.
Siddharth Agarwal <sid0@fb.com> [Thu, 25 Jun 2015 22:16:36 -0700] rev 25666
share: replace reference to 'sopener' with 'svfs'
sopener is deprecated. It's annoying for extension authors to have to deal with
both. Let's just kill it off.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 25 Jun 2015 21:16:47 -0400] rev 25665
archive: don't assume '.' is being archived for changessincelatesttag
Hardcoding '.' is wrong, and yielded strange results when archiving old
revisions. For example, when archiving the cset that adds the signature to 3.4
(c48850339988), the resulting value was previously 51 (the number of commits on
stable between 3.4 and today), even though it was a direct descendant of a tag,
with a {latesttagdistance} of 2. This still includes all other _ancestor_ paths
not included in {latesttag}.
Note that archiving wdir() currently blows up several lines above this when
building the 'base' variable. Since wdir() isn't documented, ignore that it
needs work to handle wdir() here for now.
Anton Shestakov <av6@dwimlabs.net> [Thu, 25 Jun 2015 20:27:36 +0800] rev 25664
hgweb: use css for stripey background in coal
Since "b8ecc3830c89 or 25dae11bb044::c229a5e7511e" paper style used css for
stripes in background for browsing files, for listing branches/tags/bookmarks,
and so on.
Since coal borrows many paper templates (e.g. shortlogentry.tmpl), it actually
tried to do the same, but it didn't have the needed css classes. You can
compare https://selenic.com/hg?style=coal with
https://selenic.com/hg?style=paper and see how log view in coal style has plain
white background, unlike the one in paper style. This wasn't intended.
Let's copy css classes directly from style-paper.css and remove parity classes
from elements that don't need them anymore. This makes plain white background
have stripes again and makes coal/map even more similar to paper/map (which can
ease porting changes or %including paper/map in future).
Matt Harbison <matt_harbison@yahoo.com> [Wed, 24 Jun 2015 11:15:00 -0400] rev 25663
templatekw: correct typo in activebookmark documentation
Matt Mackall <mpm@selenic.com> [Wed, 24 Jun 2015 13:41:27 -0500] rev 25662
merge with stable
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 23 Jun 2015 22:20:01 -0700] rev 25661
check-code: detect legacy exception syntax
We just rewrote all files to use modern exception syntax. Ban the old
form.
This will detect the "except type, instance" and
"except (type1, type2), instance" forms.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 23 Jun 2015 22:20:08 -0700] rev 25660
global: mass rewrite to use modern exception syntax
Python 2.6 introduced the "except type as instance" syntax, replacing
the "except type, instance" syntax that came before. Python 3 dropped
support for the latter syntax. Since we no longer support Python 2.4 or
2.5, we have no need to continue supporting the "except type, instance".
This patch mass rewrites the exception syntax to be Python 2.6+ and
Python 3 compatible.
This patch was produced by running `2to3 -f except -w -n .`.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 23 Jun 2015 22:38:21 -0700] rev 25659
check-code: detect legacy octal syntax
Now that we have mass rewriting all files to use the modern octal
syntax, detect and ban the legacy syntax, which is no longer supported
in Python 3.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 23 Jun 2015 22:30:33 -0700] rev 25658
global: mass rewrite to use modern octal syntax
Python 2.6 introduced a new octal syntax: "0oXXX", replacing "0XXX". The
old syntax is not recognized in Python 3 and will result in a parse
error.
Mass rewrite all instances of the old octal syntax to the new syntax.
This patch was generated by `2to3 -f numliterals -w -n .` and the diff
was selectively recorded to exclude changes to "<N>l" syntax conversion,
which will be handled separately.
Laurent Charignon <lcharignon@fb.com> [Tue, 23 Jun 2015 14:28:15 -0700] rev 25657
revert: change the direction of revert -i
After the discussion on the list about hg revert -i, it seems like we are
satisfied with what we called proposition 2. It shows the changes to revert in
the same direction as hg diff. This patch makes it the default option.
It changes all the + in - and vice versa in the tests for revert -i.
Laurent Charignon <lcharignon@fb.com> [Tue, 23 Jun 2015 13:46:58 -0700] rev 25656
revert: change a test to make the change of direction of revert -i easier
Currently we are handling editing of newly-added files with the interactive
interface. We are not handling editing of deleted files. In the test for revert,
we were editing a newly-added file. Since we want to change the direction of
revert -i, this editing of a newly-added file will become editing of a deleted file.
Since we don't support that, this patch changes the test to make the rest of
the series cleaner.
Yuya Nishihara <yuya@tcha.org> [Sun, 21 Jun 2015 00:56:09 +0900] rev 25655
parser: update documentation about tokenizer and elements
Yuya Nishihara <yuya@tcha.org> [Sun, 21 Jun 2015 00:49:26 +0900] rev 25654
parser: accept iterator of tokens instead of tokenizer function and program
This can simplify the interface of parse() function. Our tokenizer tends to
have optional arguments other than the message to be parsed.
Before this patch, the "lookup" argument existed only for the revset, and the
templater had to pack [program, start, end] to be passed to its tokenizer.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 20 Jun 2015 20:11:53 -0700] rev 25653
verify: print hint to run debugrebuildfncache
Corrupt fncache is now a recoverable operation. Inform the user how to
recover from this warning.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 22 Jun 2015 09:59:48 -0700] rev 25652
repair: add functionality to rebuild fncache
Currently, there is no way to recover from a missing or corrupt fncache
file in place (a clone is required). For certain use cases such as
servers and with large repositories, an in-place repair may be
desirable. This patch adds functionality for in-place repair of the
fncache.
The `hg debugrebuildfncache` command is introduced. It ensures the
fncache is up to date by reconstructing the fncache from all seen files
encountered during a brute force traversal of the repository's entire
history.
The command will add missing entries and will prune excess ones.
Currently, the command no-ops unless the repository has the fncache
requirement. The command could later grow the ability to "upgrade" an
existing repository to be fncache enabled, if desired.
When testing this patch on a local clone of the Firefox repository, it
removed a bunch of entries. Investigation revealed that removed entries
belonged to empty (0 byte size) .i filelogs. The functionality for
pruning fncache of stripped revlogs was introduced in f49d60fa40a5, so
the presence of these entries likely predates this feature.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 23 Jun 2015 13:56:53 -0400] rev 25651
import: cross-reference patch.fuzz option from `hg help import`
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 23 Jun 2015 13:57:39 -0400] rev 25650
import: cross-reference ui.patch option from `hg help import`
This is a fairly obscure patch option. It seems reasonable to expose
it a bit more from the help text for `hg import`.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 23 Jun 2015 13:47:42 -0400] rev 25649
doc: document the ui.patch option
This option has been undocumented since e56c7e05c7e6 (July 2007).