Thu, 18 May 2017 10:17:57 -0700 match: override visitdir() the usual way in subdirmatcher
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.
Thu, 18 May 2017 09:04:37 -0700 match: make _fileroots a @propertycache and rename it to _fileset
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.
Wed, 17 May 2017 23:54:43 -0700 fsmonitor: use modern match API
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)
Wed, 17 May 2017 20:51:17 -0500 diffstat: properly count lines starting in '--' or '++' (issue5479)
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.
Fri, 19 May 2017 12:38:34 +0200 test-http-bad-server: match different in output
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.
Thu, 18 May 2017 13:38:37 -0700 config: make config.items() return a copy
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.
Fri, 19 May 2017 03:47:43 -0700 filemerge: store error messages in module variables
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.
Tue, 16 May 2017 23:10:31 -0700 run-tests: support multiple cases in .t test
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.
Wed, 17 May 2017 19:52:18 -0700 revlog: rename constants (API)
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.
Wed, 17 May 2017 20:01:29 -0700 localrepo: reformat set literals
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.
Thu, 18 May 2017 13:18:05 -0700 rebase: make sure merge state is cleaned up for no-op rebases (issue5494)
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.
Wed, 17 May 2017 09:43:50 -0700 match: remove ispartial()
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.
Tue, 16 May 2017 21:17:40 -0700 run-tests: rename test description dict to testdesc
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.
Sat, 29 Apr 2017 11:40:47 -0700 run-tests: change test identity from a path to a dict
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.
Wed, 17 May 2017 14:31:47 -0700 largefiles: delete unnecessary meddling with matcher internals
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.
Thu, 04 May 2017 00:23:09 +0530 py3: explicitly convert a list to bytes to pass in ui.debug
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.
Wed, 17 May 2017 20:14:27 -0700 changelog: make sure datafile is 00changelog.d (API)
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.
Wed, 17 May 2017 23:01:56 +0900 util: drop unneeded override, sortdict.copy()
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).
Wed, 17 May 2017 10:48:56 -0700 drawdag: provide filenode for its dummy filectx
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.
Sat, 13 May 2017 21:30:02 -0400 tests: fix up recent conditionalized output changes
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.
Tue, 16 May 2017 14:42:13 -0700 run-tests: drop fallback for proc.terminate() for pre-py2.6
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
Tue, 16 May 2017 14:40:22 -0700 run-tests: drop fallback for sysconfig for pre-py2.7
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
Tue, 16 May 2017 17:47:27 -0700 largefiles: move identical statement to after if/else
Martin von Zweigbergk <martinvonz@google.com> [Tue, 16 May 2017 17:47:27 -0700] rev 32301
largefiles: move identical statement to after if/else
Tue, 16 May 2017 23:40:29 -0700 util: rewrite sortdict using Python 2.7's OrderedDict
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.
Tue, 16 May 2017 23:36:38 +0900 encoding: use i.startswith() instead of i[0] to eliminate py2/3 divergence
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
Sat, 13 May 2017 21:15:56 -0400 test-casefolding: sync with latest code changes
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.
Mon, 15 May 2017 19:37:11 -0700 perf: always pass node to revlog.revision()
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.
Mon, 15 May 2017 18:55:58 -0700 hg: backout optimizing for treemanifests
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.
Mon, 15 May 2017 13:29:18 -0700 test-hardlink: do not test .hg/cache/checklink
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
Mon, 15 May 2017 13:25:59 -0700 test-hardlinks: unify two test files into one
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.
Mon, 15 May 2017 14:08:02 -0400 style: ban [ foo == bar] bashism in tests
Augie Fackler <augie@google.com> [Mon, 15 May 2017 14:08:02 -0400] rev 32293
style: ban [ foo == bar] bashism in tests
Sat, 13 May 2017 16:26:43 -0700 changelog: load pending file directly
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.
Fri, 10 Feb 2017 16:56:29 -0800 cleanup: use set literals
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.
Sat, 06 May 2017 04:51:25 +0530 py3: convert date and format arguments str before passing in time.strptime
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
Thu, 04 May 2017 00:24:21 +0530 py3: convert kwargs' keys to str using pycompat.strkwargs
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 04 May 2017 00:24:21 +0530] rev 32289
py3: convert kwargs' keys to str using pycompat.strkwargs
Sun, 14 May 2017 09:38:06 -0700 verify: add a config option to skip certain flag processors
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.
Mon, 15 May 2017 09:35:27 -0700 changegroup: add bundlecaps back
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.
Wed, 10 May 2017 16:17:58 -0700 flagprocessor: add a fast path when flags is 0
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.
Sat, 13 May 2017 14:52:29 -0700 shelve: make shelvestate use simplekeyvaluefile
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'
Sun, 14 May 2017 14:15:07 -0700 shelve: refactor shelvestate loading
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.
Thu, 11 May 2017 22:33:45 -0400 extdiff: copy back execbit-only changes to the working directory
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.
Sat, 13 May 2017 12:14:24 -0700 tests: remove regular expression matching for Python 2.6
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.
Sat, 13 May 2017 11:58:08 -0700 branchmap: remove use of buffer() to support Python 2.6
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.
Sat, 13 May 2017 11:55:39 -0700 py3: remove delayed import of importlib
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.
Sat, 13 May 2017 11:52:44 -0700 tests: use context manager form of assertRaises
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.
Sat, 13 May 2017 11:42:42 -0700 obsolete: use 2 argument form of enumerate()
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.
Sat, 13 May 2017 11:31:36 -0700 tests: remove special handling for undefined memoryview
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.
Sat, 13 May 2017 11:20:51 -0700 encoding: remove workaround for locale.getpreferredencoding()
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.
(0) -30000 -10000 -3000 -1000 -300 -100 -48 +48 +100 +300 +1000 +3000 +10000 tip