Yuya Nishihara <yuya@tcha.org> [Sat, 13 May 2017 17:53:55 +0900] rev 32336
gendoc: make sure locale path is set before loading any modules
Otherwise some messages wouldn't be translated depending on when the util
was loaded.
Wez Furlong <wez@fb.com> [Thu, 18 May 2017 12:49:10 -0700] rev 32335
fsmonitor: don't attempt state-leave if we didn't state-enter
The state-enter command may not have been successful; for example, the watchman
client session may have timed out if the user was busy/idle for a long period
during a merge conflict resolution earlier in processing a rebase for a stack
of diffs.
It's cleaner (from the perspective of the watchman logs) to avoid issuing the
state-leave command in these cases.
Test Plan:
ran
`hg rebase --tool :merge -r '(draft() & date(-14)) - master::' -d master`
and didn't observe any errors in the watchman logs or in the output from
`watchman -p -j <<<'["subscribe", "/data/users/wez/fbsource", "wez", {"expression": ["name", ".hg/updatestate"]}]'`
Wez Furlong <wez@fb.com> [Thu, 18 May 2017 12:48:07 -0700] rev 32334
fsmonitor: acquire localrepo.wlock prior to emitting hg.update state
we see some weird things in the watchman logs where the mercurial
process is seemingly confused about which hg.update state it is publishing
through watchman.
On closer examination, we're seeing conflicting pids for the clients involved
and this implies a race.
To resolve this, we extend the wlock around the state-enter/state-leave
events that are emitted to watchman.
Test Plan:
Some manual testing:
In one window, run this, and then checkout a different rev:
```
$ watchman -p -j <<<'["subscribe", "/data/users/wez/fbsource", "wez", {"expression": ["name", ".hg/updatestate"]}]'
{
"version": "4.9.0",
"subscribe": "wez",
"clock": "c:
1495034090:814028:1:312576"
}
{
"state-enter": "hg.update",
"version": "4.9.0",
"clock": "c:
1495034090:814028:1:312596",
"unilateral": true,
"subscription": "wez",
"metadata": {
"status": "ok",
"distance": 125,
"rev": "
a1275d79ffa6c58b53116c8ec401c275ca6c1e2a",
"partial": false
},
"root": "/data/users/wez/fbsource"
}
{
"root": "/data/users/wez/fbsource",
"metadata": {
"status": "ok",
"distance": 125,
"rev": "
a1275d79ffa6c58b53116c8ec401c275ca6c1e2a",
"partial": false
},
"subscription": "wez",
"unilateral": true,
"version": "4.9.0",
"clock": "c:
1495034090:814028:1:312627",
"state-leave": "hg.update"
}
```
Tailed the watchman log file and looked for invalid state assertion errors,
then ran my `rebase-all` script to update/rebase all of my heads.
Didn't trigger the error condition (but couldn't reliably trigger it previously
anyway), and the output captured above shows that the states are being emitted
correctly.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 19 May 2017 13:12:42 +0200] rev 32333
obsolete: move the 'isenabled' function at the top of the file
That is a simple and important function so having it at the top next to the
related constant seems better.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 19 May 2017 13:09:23 +0200] rev 32332
cache: make the cache updated callback easily accessible to extension
This will help extension to benefit from this new logic. As a side effect this
clarify the 'transaction' method a little bit.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 19 May 2017 12:35:14 +0200] rev 32331
obscheckhead: skip context creation to test phase
On repository with many many heads, this is called often enough to show an
overhead to appears in some profile. So we skip the 'changectx' creation to test
the node phases.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 19 May 2017 02:44:30 +0200] rev 32330
tests: add missing 'test-push-checkheads-partial-C1.t'
For some reason, this one test case did not made it with the others as they got
upstreamed during the 4.2 cycle.
Kostia Balytskyi <ikostia@fb.com> [Thu, 18 May 2017 14:36:46 -0700] rev 32329
contrib: add editmerge version for powershell
This just adds a translation of existing contrib/editmerge to powershell.
It allows users on Windows to iteratively resolve conflicts in their
editor of choice.
# no-check-commit
Kostia Balytskyi <ikostia@fb.com> [Wed, 17 May 2017 12:51:40 -0700] rev 32328
run-tests: allow hg executable to be hg.exe
When running tests on Windows (via msys), user sometimes does not want to run
them against source hg, but against compiled hg.exe. For that purpose,
--with-hg option can be used, but currently run-tests.py prints a warning if
the value of this argument is not a file with basename 'hg'. This patch allows
such file to be 'hg.exe'.
Durham Goode <durham@fb.com> [Tue, 09 May 2017 16:29:31 -0700] rev 32327
obsolete: add operation metadata to rebase/amend/histedit obsmarkers
By recording what operation created the obsmarker, we can show very intuitive
messages to the user in various UIs. For instance, log output could have
messages like "Amended as XXX" to show why a commit is old and has an 'x' on it.
@ ac28e3 durham
/ First commit
|
| o d4afe7 durham
| | Second commit
| |
| x 8e9a5d (Amended as ac28e3) durham
|/ First commit
|
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 17 May 2017 15:39:37 +0200] rev 32326
obsolete: invalidate "volatile" set cache after merging marker
Adding markers to the repository might affect the set of obsolete changesets. So we
most remove the "volatile" set who rely in that data. We add two missing
invalidations after merging markers. This was caught by code change in the evolve
extensions tests.
This issues highlight that the current way to do things is a bit fragile,
however we keep things simple for stable.
Martin von Zweigbergk <martinvonz@google.com> [Wed, 17 May 2017 22:33:15 -0700] rev 32325
match: use match.prefix() in subdirmatcher
It seems like the subdirmatcher should be checking if the matcher it's
based on is matching prefixes. It was effectively doing that already
because "prefix() == not always() and not anypats() and not
isexact()", subdirmatcher was checking the first two parts of that
condition and I don't think it will ever be given an "exact" matcher
with it's directory name (because exact matchers are for matching
files, not directories). Still, let's switch to using prefix() for
clarity (and because I'm trying to remove code that reaches for
matchers internals).
Martin von Zweigbergk <martinvonz@google.com> [Fri, 12 May 2017 16:31:21 -0700] rev 32324
match: avoid accessing match._pathrestricted from subdirmatcher
Accessing only the public API wherever possible helps us refactor
matchers later.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 May 2017 10:17:57 -0700] rev 32323
match: override visitdir() the usual way in subdirmatcher
Just override the function instead of replacing it on each instance.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 May 2017 09:04:37 -0700] rev 32322
match: make _fileroots a @propertycache and rename it to _fileset
The files in the set are not necesserily roots of anything. Making it
a @propertycache will help towards extracting a base class for
matchers.
Martin von Zweigbergk <martinvonz@google.com> [Wed, 17 May 2017 23:54:43 -0700] rev 32321
fsmonitor: use modern match API
It seems like fsmonitor/__init__.py was based on a pretty old version
of dirstate.py. Let's copy over the changes from the following two
commits:
55c449345b10 (match: add isexact() method to hide internals, 2014-10-29)
3c346969c321 (dirstate: avoid match.files() in walk(), 2015-05-19)
Andrew Zwicky <andrew.zwicky@gmail.com> [Wed, 17 May 2017 20:51:17 -0500] rev 32320
diffstat: properly count lines starting in '--' or '++' (
issue5479)
Lines that start in '--' or '++' were previously not counted
as deletions or additions in diffstat, resulting in incorrect
addition/deletion counts. The bug was present if the start
of the line, combined with the diff character resulted
in '---' or '+++'.
diffstatdata will now track, for each file, if it has moved
pas the header section by looking for a line beginning with
'@@'. Once that has happened, lines beginning with '-'
or '+' will be counted for deletions and additions. Once a
line beginning with 'diff' is found, the process starts over.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 19 May 2017 12:38:34 +0200] rev 32319
test-http-bad-server: match different in output
Same as for previous update, the longer port number can affect this ouput.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 18 May 2017 13:38:37 -0700] rev 32318
config: make config.items() return a copy
config.items() was iterating over a copy of the data for the the
specified section on Python 2 by using .items(). However, on Python 3,
items() does not make a copy, so let's switch to explicitly making a
copy to make it safe on both Python 2 and Python 3.
Stanislau Hlebik <stash@fb.com> [Fri, 19 May 2017 03:47:43 -0700] rev 32317
filemerge: store error messages in module variables
Copytracing may be disabled because it's too slow (see
experimental.disablecopytrace config option). In that case user may get errors
like 'local changed FILE which other deleted'. It would be nice to give user a
hint to rerun command with `--config experimental.disablecopytrace=False`. To
make it possible let's extract error message to variables so that extension may
overwrite them.
Jun Wu <quark@fb.com> [Tue, 16 May 2017 23:10:31 -0700] rev 32316
run-tests: support multiple cases in .t test
Sometimes we want to run similar tests with slightly different
configurations. Previously we duplicate the test files. This patch
introduces special "#testcases" syntax that allows a single .t file to
contain multiple test cases.
Defined cases could be tested using "#if".
For example, if a test should behave the same with or without an
experimental flag, we can add the following to the .t header:
#testcases default experimental-a
#if experimental-a
$ cat >> $HGRCPATH << EOF
> [experimental]
> feature=a
> EOF
#endif
The "experimental-a" block won't be executed when running the "default" test
case.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 17 May 2017 19:52:18 -0700] rev 32315
revlog: rename constants (API)
Feature flag constants don't need "NG" in the name because they will
presumably apply to non-"NG" version revlogs.
All feature flag constants should also share a similar naming
convention to identify them as such.
And, "RevlogNG" isn't a great internal name since it isn't obvious it
maps to version 1 revlogs. Plus, "NG" (next generation) is only a good
name as long as it is the latest version. Since we're talking about
version 2, now is as good a time as any to move on from that naming.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 17 May 2017 20:01:29 -0700] rev 32314
localrepo: reformat set literals
Putting multiple elements on the same line makes diffs harder
to read. Switch to one line per element so future changes are
easier on the eyes.
Jeremy Fitzhardinge <jsgf@fb.com> [Thu, 18 May 2017 13:18:05 -0700] rev 32313
rebase: make sure merge state is cleaned up for no-op rebases (
issue5494)
If a rebase ends up doing a no-op commit, make sure the merge state is still cleaned up.
Martin von Zweigbergk <martinvonz@google.com> [Wed, 17 May 2017 09:43:50 -0700] rev 32312
match: remove ispartial()
The function was added in
d1d69ca78883 (match: add match.ispartial(),
2015-05-15) for use by narrowhg, but narrowhg never ended up needing
it.
Jun Wu <quark@fb.com> [Tue, 16 May 2017 21:17:40 -0700] rev 32311
run-tests: rename test description dict to testdesc
Previously the word "test" was used for both a Test instance and a path or
test dict. This patch renames them so it's clear that "testdesc" is the
dict, and "test" is the instance.
Jun Wu <quark@fb.com> [Sat, 29 Apr 2017 11:40:47 -0700] rev 32310
run-tests: change test identity from a path to a dict
Previously, we use path to identify a test. A later patch adds more
information so a path is not enough to identify a test. So we change it to a
dictionary.
Martin von Zweigbergk <martinvonz@google.com> [Wed, 17 May 2017 14:31:47 -0700] rev 32309
largefiles: delete unnecessary meddling with matcher internals
lfutil.getstandinmatcher() was setting match._always to False because
it wanted a matcher of no patterns to match no files and match.match()
instead matches everything. However, since
ba8089433090 (largefiles:
ensure lfutil.getstandinmatcher() only matches standins, 2015-08-12),
it never actually passes an empty list of patterns, so the hack has
become unnecessary.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 00:23:09 +0530] rev 32308
py3: explicitly convert a list to bytes to pass in ui.debug
Here pats is a list obviously. Since we can't pass unicodes to ui.debug, we
have to pass this as bytes.
Jun Wu <quark@fb.com> [Wed, 17 May 2017 20:14:27 -0700] rev 32307
changelog: make sure datafile is 00changelog.d (API)
0ad0d26ff7 makes it possible for changelog datafile to be "00changelog.i.d",
which is wrong. This patch adds an explicit datafile parameter to fix it.
Yuya Nishihara <yuya@tcha.org> [Wed, 17 May 2017 23:01:56 +0900] rev 32306
util: drop unneeded override, sortdict.copy()
OrderedDict.copy() returns self.__class__(self).
Jun Wu <quark@fb.com> [Wed, 17 May 2017 10:48:56 -0700] rev 32305
drawdag: provide filenode for its dummy filectx
basefctx has filenode, which will be used in a future fast path of skipping
flag processor during repo._filecommit.
This patch adds filenode to drawdag's faked filectx so we don't need to use
hasattr in localrepo.py.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 13 May 2017 21:30:02 -0400] rev 32304
tests: fix up recent conditionalized output changes
It looks like (!) can have surprising results matching back to the original
output when adjacent lines change, probably because it uses the same code
matching that allows (?) to skip missing output.
24f55686a63d ended up adding
unconditionalized check*{exec,link} lines, duplicating the conditionalized
lines. A Windows run wanted to delete the unconditionalized lines. This now
runs on both Windows and Linux.
Martin von Zweigbergk <martinvonz@google.com> [Tue, 16 May 2017 14:42:13 -0700] rev 32303
run-tests: drop fallback for proc.terminate() for pre-py2.6
Martin von Zweigbergk <martinvonz@google.com> [Tue, 16 May 2017 14:40:22 -0700] rev 32302
run-tests: drop fallback for sysconfig for pre-py2.7
Martin von Zweigbergk <martinvonz@google.com> [Tue, 16 May 2017 17:47:27 -0700] rev 32301
largefiles: move identical statement to after if/else
Martin von Zweigbergk <martinvonz@google.com> [Tue, 16 May 2017 23:40:29 -0700] rev 32300
util: rewrite sortdict using Python 2.7's OrderedDict
Pattern copied from
https://docs.python.org/dev/library/collections.html#ordereddict-examples-and-recipes.
Yuya Nishihara <yuya@tcha.org> [Tue, 16 May 2017 23:36:38 +0900] rev 32299
encoding: use i.startswith() instead of i[0] to eliminate py2/3 divergence
Matt Harbison <matt_harbison@yahoo.com> [Sat, 13 May 2017 21:15:56 -0400] rev 32298
test-casefolding: sync with latest code changes
This goes with
c2380b448265.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 15 May 2017 19:37:11 -0700] rev 32297
perf: always pass node to revlog.revision()
I removed this in
73c3e226d2fc thinking it wasn't necessary. In fact,
we need to always pass a node so the code is compatible with revisions
before
d7d64b89a65c.
The new code uses a variable to avoid check-style complaining
about "r.revision(r.node(" patterns.
Durham Goode <durham@fb.com> [Mon, 15 May 2017 18:55:58 -0700] rev 32296
hg: backout optimizing for treemanifests
It turns out that the files list is not sufficient to identify with revlogs have
changed. In a merge commit, no files could've changed but directories would
have. For now let's just backout this optimization.
Jun Wu <quark@fb.com> [Mon, 15 May 2017 13:29:18 -0700] rev 32295
test-hardlink: do not test .hg/cache/checklink
Linux and BSD have different behavior on "os.link(src, dst)" where "src" is
a symlink. That causes test difference.
According to POSIX [1]:
If path1 names a symbolic link, it is implementation-defined whether
link() follows the symbolic link, or creates a new link to the symbolic
link itself.
So both behaviors are correct. This patch removes the trouble maker
"checklink" to make the test pass on both platforms.
[1]: http://pubs.opengroup.org/onlinepubs/
9699919799/functions/link.html
Jun Wu <quark@fb.com> [Mon, 15 May 2017 13:25:59 -0700] rev 32294
test-hardlinks: unify two test files into one
The "whitelisted" test could be unified using "#if"s.
Augie Fackler <augie@google.com> [Mon, 15 May 2017 14:08:02 -0400] rev 32293
style: ban [ foo == bar] bashism in tests
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 13 May 2017 16:26:43 -0700] rev 32292
changelog: load pending file directly
When changelogs are written, a copy of the index (or inline revlog)
may be written to an 00changelog.i.a file to facilitate hooks and
other processes having access to the pending data before it is
finalized.
The way it works today, the localrepo class loads the changelog
like normal. Then, if it detects a pending transaction, it asks
the changelog class to load a pending changelog. The changelog
class looks for a 00changelog.i.a file. If it exists, it is
loaded and internal data structures on the new revlog class are
copied to the original instance.
The existing mechanism is inefficient because it loads 2 revlog
files. The index, node map, and chunk cache for 00changelog.i
are thrown away and replaced by those for 00changelog.i.a.
The existing mechanism is also brittle because it is a layering
violation to access the data structures being accessed. For example,
the code copies the "chunk cache" because for inline revlogs
this cache contains the raw revision chunks and allows the original
changelog/revlog instance to access revision data for these pending
revisions. This whole behavior of course relies on the revlog
constructor reading the entirety of an inline revlog into memory
and caching it. That's why it is brittle. (I discovered all this
as part of modifying behavior of the chunk cache.)
This patch streamlines the loading of a pending 00changelog.i.a
revlog by doing it directly in the changelog constructor if told
to do so. When this code path is active, we no longer load the
00changelog.i file at all.
The only negative outcome I see from this change is if loading
00changelog.i was somehow facilitating a role. But I can't imagine
what that would be because we throw away its data (the index data
structures are replaced and inline revision data is replaced via
the chunk cache) and since 00changelog.i.a is a copy of
00changelog.i, file content should be identical, so there should
be no meaninful file integrity checking at play. I think this was
all just sub-optimal code.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 10 Feb 2017 16:56:29 -0800] rev 32291
cleanup: use set literals
We no longer support Python 2.6, so we can now use set literals.
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 06 May 2017 04:51:25 +0530] rev 32290
py3: convert date and format arguments str before passing in time.strptime
time.strptime() raises ValueError if the arguments are not str.
Source Code: https://hg.python.org/cpython/file/3.5/Lib/_strptime.py#l307
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 00:24:21 +0530] rev 32289
py3: convert kwargs' keys to str using pycompat.strkwargs
Jun Wu <quark@fb.com> [Sun, 14 May 2017 09:38:06 -0700] rev 32288
verify: add a config option to skip certain flag processors
Previously, "hg verify" verifies everything, which could be undesirable when
there are expensive flag processor contents.
This patch adds a "verify.skipflags" developer config. A flag processor will
be skipped if (flag & verify.skipflags) == 0.
In the LFS usecase, that means "hg verify --config verify.skipflags=8192"
will not download all LFS blobs, which could be too large to be stored
locally.
Note: "renamed" is also skipped since its default implementation may call
filelog.data() which will trigger the flag processor.
Durham Goode <durham@fb.com> [Mon, 15 May 2017 09:35:27 -0700] rev 32287
changegroup: add bundlecaps back
Commit
282b288aa20c333c removed the unused bundlecaps argument from the
changegroup code. While it is unused in core Mercurial, it was an important
feature for the remotefilelog extension because it allowed the exchange layer to
communicate to the changegroup packer that this was a shallow repo and that
filelogs should not be included. Without bundlecaps, there is currently no other
way to pass that information along without a more extensive refactor of
exchange, bundle, and changegroup code.
This patch backs out the original removal, and merges it with some recent
changes to changegroup apis.
Jun Wu <quark@fb.com> [Wed, 10 May 2017 16:17:58 -0700] rev 32286
flagprocessor: add a fast path when flags is 0
When flags is 0, _processflags could be a no-op instead of iterating through
the flag bits.
Kostia Balytskyi <ikostia@fb.com> [Sat, 13 May 2017 14:52:29 -0700] rev 32285
shelve: make shelvestate use simplekeyvaluefile
Currently shelvestate uses line ordering to differentiate fields. This
makes it hard for extensions to wrap shelve, since if two alternative
versions of code add a new line, correct merging is going to be problematic.
simplekeyvaluefile was introduced fot this purpose specifically.
After this patch:
- shelve will always write a simplekeyvaluefile
- unshelve will check the first line of the file for a version, and if the
version is 1, will read it in a position-based way, if the version is 2,
will read it in a key-value way
As discussed with Yuya previously, this will be able to handle old-style
shelvedstate files, but old Mercurial versions will fail on the attempt to
read shelvedstate file of version 2 with a self-explanatory message:
'abort: this version of shelve is incompatible with the version used
in this repo'
Kostia Balytskyi <ikostia@fb.com> [Sun, 14 May 2017 14:15:07 -0700] rev 32284
shelve: refactor shelvestate loading
This is a preparatory patch which separates file reading from the
minimal validation we have (like turning version into int and
checking that this version is supported). The purpose of this patch
is to be able to read statefile form simplekeyvaluefile, which is
implemented in the following patch.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 11 May 2017 22:33:45 -0400] rev 32283
extdiff: copy back execbit-only changes to the working directory
Some tools like BeyondCompare allow the file mode to be changed. The change
was previously applied if the content of the file changed (either according to
size or mtime), but was not being copied back for a mode-only change. That
would seem to indicate handling this in an 'elif' branch, but I opted not to in
order to avoid copying back the mode without the content changes when mtime and
size are unchanged. (Yes, that's a rare corner case, but all the more reason
not to have a subtle difference in behavior.)
The only way I can think to handle this undetected change is to set each file in
the non-wdir() snapshot to readonly, and check for that attribute (as well as
mtime) when deciding to copy back. That would avoid the overhead of copying the
whole file when only the mode changed. But a chmod in a diff tool is likely
rare. See also
affd753ddaf1.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 13 May 2017 12:14:24 -0700] rev 32282
tests: remove regular expression matching for Python 2.6
This effectively reverts
52cca17ac523. Some lines still have (re)
due to variable length port numbers. There's not much we can do
about that. But at least this change removes most of the ugliness.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 13 May 2017 11:58:08 -0700] rev 32281
branchmap: remove use of buffer() to support Python 2.6
The use of buffer() was added in
7359157b9e46 to support Python 2.6,
which we no longer support.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 13 May 2017 11:55:39 -0700] rev 32280
py3: remove delayed import of importlib
All supported versions of Python now have importlib. This
effectively reverts
b85fa6bf298b.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 13 May 2017 11:52:44 -0700] rev 32279
tests: use context manager form of assertRaises
Support for using unittest.TestCase.assertRaises as a context
manager was added in Python 2.7. This form is more readable,
especially for complex tests.
While I was here, I also restored the use of assertRaisesRegexp,
which was removed in
c6921568cd20 for Python 2.6 compatibility.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 13 May 2017 11:42:42 -0700] rev 32278
obsolete: use 2 argument form of enumerate()
The 2 argument form of enumerate was added in Python 2.6. This
change effectively reverts
10880c8aad85.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 13 May 2017 11:31:36 -0700] rev 32277
tests: remove special handling for undefined memoryview
'memoryview' was introduced in Python 2.7.
4adc090fa2fb added code
to filterpyflakes.py to ignore "undefined name 'memoryview'" pyflakes
warnings. Since we no longer support <Python 2.7, we can remove this
workaround.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 13 May 2017 11:20:51 -0700] rev 32276
encoding: remove workaround for locale.getpreferredencoding()
locale.getpreferredencoding() was buggy in OS X for Python <2.7.
Since we no longer support Python <2.7, we no longer need this
workaround.
This essentially reverts
2be70ca17311.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 13 May 2017 11:12:44 -0700] rev 32275
mail: remove code to support < Python 2.7
This code was added in
594b98846ce1. Since we no longer support
Python <2.7, it can be removed.
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 11 May 2017 00:02:32 -0700] rev 32274
help: clarify that colons are allowed in fingerprints values
This was suggested by Lars Rohwedder in
issue5559.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 10 May 2017 23:49:37 -0700] rev 32273
sslutil: tweak the legacy [hostfingerprints] warning message
Lars Rohwedder noted in
issue5559 that the previous wording was
confusing. I agree.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 11 May 2017 11:37:18 -0700] rev 32272
rebase: allow rebase even if some revisions need no rebase (BC) (
issue5422)
This allows you to do e.g. "hg rebase -d @ -r 'draft()'" even if some
drafts are already based off of @. You'd still need to exclude
obsolete and troubled revisions, though. We will deal with those cases
later.
Implemented by treating state[rev]==rev as "no need to rebase". I
considered adding another fake revision number like revdone=-6. That
would make the code clearer in a few places, but would add extra code
in other places.
I moved the existing test out of test-rebase-base.t and into a new
file and added more tests there, since not all are using --base.
Jun Wu <quark@fb.com> [Wed, 10 May 2017 11:55:22 -0700] rev 32271
chgserver: more explicit about sensitive environ variables
Environment variables like HGUSER, HGEDITOR, HGEDITFROM should not trigger
a new chgserver. This patch uses a whitelist for environ variables starting
with "HG" to reduce the number of servers.
I have went through `grep -o "[\"']HG[A-Z_0-9]*['\"]" -hR . | sort -u` so
the list should be up-to-date.
Kostia Balytskyi <ikostia@fb.com> [Thu, 11 May 2017 08:49:33 -0700] rev 32270
scmutil: make simplekeyvaluefile able to have a non-key-value first line
To ease migration from files with version numbers in their first lines,
we want simplekeyvaluefile to support a non-key-value first line. In this
way, old versions of Mercurial will read such files, discover a newer version
than the one they know how to handle and fail gracefully, rather than with
exception. Shelve's shelvestate file is an example.
Kostia Balytskyi <ikostia@fb.com> [Thu, 11 May 2017 08:39:44 -0700] rev 32269
scmutil: add simplekeyvaluefile reading test
Before this patch, mockvfs did not emulate readlines correctly
and there was no test for simplekeyvaluefile reading.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 18:57:52 +0200] rev 32268
caches: stop warming the cache after changegroup application
Now that we garantee that branchmap cache is updated at the end of the
transaction we can drop this update. This removes a problematic case with
nested transaction where the new cache could be written on disk before the
transaction is finished (and even roll-backed)
Such premature cache write was visible in the following test:
* tests/test-acl.t
* tests/test-rebase-conflicts.t
In addition, running the cache update later means having more date about the
state of the repository (in particular: phases). So we can generate caches with
more information. This creates harmless changes to the following tests:
* tests/test-hardlinks-whitelisted.t
* tests/test-hardlinks.t
* tests/test-phases.t
* tests/test-tags.t
* tests/test-inherit-mode.t
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 22:27:44 +0200] rev 32267
caches: move the 'updating the branch cache' message in 'updatecaches'
We are about to remove the branchmap cache update in changegroup application.
There is a debug message alongside this update that we do not want to loose. We
move the message beforehand to simplify the test update in the next changeset.
The message move is quite noisy and isolating that noise is useful.
Most tests update are just line reordering since the message is issued at a
later point during the transaction.
After this changes, the message is displayed in more case since local commit
creation also issue it.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 18:56:07 +0200] rev 32266
caches: stop warming the cache after 'localrepo.commitctx'
Now that we garantee that branchmap cache are updated at the end of the
transaction we can drop that one. This removes a problematic case with nested
transaction where the new cache could be written on disk before the transaction
is finished.
The test change is harmless, since we update the cache at a later point, the
dirstate have been updated in between.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 21:35:06 +0200] rev 32265
caches: introduce a 'debugupdatecaches' command
That command make sure caches are updated. This is based on
'localrepo.updatecaches' so when we move support for new cache in that function this
command will benefit from it.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 19:05:58 +0200] rev 32264
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Regenerating the cache after a 'strip' or a 'rollback' is useful. So we call the
generic cache warming function as other caches than just branchmap will be
updated there in the future.
To do so, we have to make 'repo.updatecache()' able to take no arguments. In
such cases, we reload all caches.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 21:39:43 +0200] rev 32263
caches: introduce a function to warm cache
We have multiple caches that gain from being kept up to date. For example in a
server setup, we want to make sure the branchcache cache is hot for other
read-only clients.
Right now each cache tries to update themself in place where new data have been
added. However the approach is error prone (we might miss some spot) and
fragile. When nested transaction are involved, such cache updates might happen
before a top level transaction is committed. Writing caches for uncommitted
data on disk.
Having a single entry point, run at the end of each successful transaction,
helps to ensure the cache is up to date and refreshed at the right time.
We start with updating the branchmap cache but other will come.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 18:45:51 +0200] rev 32262
transaction: track newly introduced revisions
Tracking revisions is not the data that will unlock the most new capability.
However, they are the simplest thing to track and still unlock some nice
improvements in regard with caching.
We plug ourself at the changelog level to make sure we do not miss any revision
additions.
The 'revs' set is configured at the repository level because the transaction
itself does not needs to know that much about the business logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 02 May 2017 18:31:18 +0200] rev 32261
transaction: introduce "changes" dictionary to precisely track updates
The transaction is already tracking some data intended for hooks (in
'hookargs'). However, that information is minimal as we optimise for
passing data to other processes through environment variables. There are
multiple places were we could use more complete and lower level
information locally (eg: cache update, better report of changes to
hooks, etc...).
For this purpose we introduces a 'changes' dictionary on the
transaction. It is intended to track every changes happening to the
repository (eg: new revs, bookmarks move, phases move, obs-markers,
etc).
For now we just adds the 'changes' dictionary. We'll adds more tracking
and usages over time.
Siddharth Agarwal <sid0@fb.com> [Thu, 11 May 2017 10:50:05 -0700] rev 32260
clone: add a server-side option to disable full getbundles (pull-based clones)
For large enough repositories, pull-based clones take too long, and an attempt
to use them indicates some sort of configuration or other issue or maybe an
outdated Mercurial. Add a config option to disable them.
Siddharth Agarwal <sid0@fb.com> [Mon, 08 May 2017 20:01:06 -0700] rev 32259
clone: warn when streaming was requested but couldn't be performed
This helps both users and the people who support them figure out why
a stream clone couldn't be performed.
In an upcoming patch we're going to add a way for servers to hard
abort on a full getbundle. In those cases servers might expect
clients to perform a stream clone, so it's important to communicate
why one couldn't be done.
Siddharth Agarwal <sid0@fb.com> [Mon, 08 May 2017 18:47:24 -0700] rev 32258
clone: test streaming disabled because client is missing requirement
Turns out we had no coverage for this important case.
Siddharth Agarwal <sid0@fb.com> [Mon, 08 May 2017 17:30:51 -0700] rev 32257
bundle2: don't check for whether we can do stream clones
At the moment this isn't used and all stream clones use the legacy protocol.
In an upcoming diff, canperformstreamclone will print out a message if a stream
clone was requested but couldn't happen for some reason. Removing this call
ensures the message isn't printed twice.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 13 May 2017 03:37:50 +0900] rev 32256
debugcommands: add debugpickmergetool to examine which merge tool is chosen
Before this patch, there is no convenient way to know which merge tool
is chosen for each managed files without actual merging.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 13 May 2017 03:31:42 +0900] rev 32255
filemerge: add internal merge tool to dump files forcibly
Internal merge tool :dump implies premerge. Therefore, files aren't
dumped, if premerge runs successfully.
This undocumented behavior might confuse users, if they want to always
dump files. But just making :dump omit premerge might cause backward
compatibility issue for existing automation.
This patch adds new internal merge tool :forcedump, which works as
same as :dump, but omits premerge always.
Internal tools annotated with "nomerge" should merge "change and
delete" correctly, but _forcedump() can't. Therefore, it is annotated
with "mergeonly" to always omit premerge, even though it doesn't merge
files actually.
This patch also adds explanation about premerge to :dump, to clarify
how :dump actually works.
BTW, this patch specifies internal tools with "internal:" prefix in
newly added test scenario in test-merge-tools.t, even though this
prefix is already deprecated. This is only for similarity to other
tests in test-merge-tools.t.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 13 May 2017 03:28:36 +0900] rev 32254
filemerge: make warning message more i18n friendly
Before this patch, " specified for " part of warning messages
(e.g. "couldn't find merge tool TOOL specified for PAT") isn't
translatable.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 13 May 2017 03:28:36 +0900] rev 32253
filemerge: show warning about choice of :prompt only at an actual fallback
Before this patch, internal merge tool :prompt shows "no tool found to
merge FILE" line, even if :prompt is explicitly specified as a tool to
be used.
This patch shows warning message about choice of :prompt only at an
actual fallback, in which case any tool is rejected by capability for
binary or symlink.
It is for backward compatibility to omit warning message in
"changedelete" case.
Durham Goode <durham@fb.com> [Tue, 09 May 2017 13:56:46 -0700] rev 32252
treemanifest: allow manifestrevlog to take an explicit treemanifest arg
Previously we relied on the opener options to tell the revlog to be a tree
manifest. This makes it complicated for extensions to create treemanifests and
normal manifests at the same time. Let's add a construtor argument to create a
treemanifest revlog as well.
I considered removing the options['treemanifest'] logic from manifestrevlog
entirely, but doing so shifts the responsibility to the caller which ends up
requiring changes in localrepo, bundlerepo, and unionrepo. I figured having the
dual mechanism was better than polluting other parts of the code base with
treemanifest knowledge.
Yuya Nishihara <yuya@tcha.org> [Wed, 26 Apr 2017 23:02:43 +0900] rev 32251
policy: relax the default for in-place build
We're going to make the 'c' policy more strict, where no missing attribute
will be allowed. Since we want to run 'hg bisect' without rebuilding the C
extension modules, we'll need a looser policy for development environment.
The default for system installation isn't changed.
Note that the current 'c' policy is practically 'allow'-ish as we have lots
of adhoc fallbacks to pure functions.
Jun Wu <quark@fb.com> [Thu, 11 May 2017 14:52:02 -0700] rev 32250
verify: always check rawsize
Previously, verify only checks "rawsize == len(rawtext)", if
"len(fl.read()) != fl.size()".
With flag processor, "len(fl.read()) != fl.size()" does not necessarily mean
"rawsize == len(rawtext)". So we may miss a useful check.
This patch removes the "if len(fl.read()) != fl.size()" condition so the
rawsize check is always performed.
With the condition removed, "fl.read(n)" looks unnecessary so a comment was
added to explain the side effect is wanted.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 11 May 2017 22:38:15 -0700] rev 32249
rebase: rename "target" to "destination" in messages
The help text for rebase calls it "the destination" (never "target"),
so let's use that in messages as well.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 11 May 2017 22:38:03 -0700] rev 32248
rebase: rename "target" to "dest" in variable names
It took me a while to figure out that "target" was actually what's
passed to --dest.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 10 May 2017 23:32:00 -0700] rev 32247
sslutil: remove conditional cipher code needed for Python 2.6
We dropped support for Python 2.6. So this code to work around a
missing feature on 2.6 is no longer necessary.
Phil Cohen <phillco@fb.com> [Thu, 11 May 2017 18:38:43 -0700] rev 32246
merge: use repo.wvfs.setflags() instead of util.setflags()
Most merge.py code goes through the vfs instead of maniulating
files directly, so let's do the same here.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 12 May 2017 11:20:25 -0700] rev 32245
merge with stable
Jun Wu <quark@fb.com> [Tue, 09 May 2017 21:27:06 -0700] rev 32244
revlog: move part of "addrevision" to "addrawrevision"
"addrawrevision" will be the public API to reuse revision rawdata elsewhere.
It will be used by a future patch.
Jun Wu <quark@fb.com> [Tue, 09 May 2017 20:23:21 -0700] rev 32243
filectx: add an overlayfilectx class
The end goal is to make it possible to avoid potential expensive fctx.data()
when unnecessary.
While memctx is useful for creating new file contexts, there are many cases
where we could reuse an existing raw file revision (amend, histedit, rebase,
process a revision constructed by a remote peer, etc). The overlayfilectx
class is made to support such reuse cases. Together with a later patch, hash
calculation and expensive flag processor could be avoided.
Jun Wu <quark@fb.com> [Tue, 09 May 2017 19:16:48 -0700] rev 32242
filectx: remove __new__
It does not seem to be used anywhere, and breaks a later patch.
Jun Wu <quark@fb.com> [Tue, 09 May 2017 16:34:12 -0700] rev 32241
filectx: add a rawflags method
The new method returns the low-level revlog flag. We already have "rawdata"
so a "rawflags" makes sense.
Both "rawflags" and "rawdata" will be used in a later patch.