Fri, 12 Jan 2018 17:10:55 +0100 test-pull-r: explicitly kill server processes
Joerg Sonnenberger <joerg@bec.de> [Fri, 12 Jan 2018 17:10:55 +0100] rev 35612
test-pull-r: explicitly kill server processes Differential Revision: https://phab.mercurial-scm.org/D1855
Fri, 05 Jan 2018 22:28:06 +0530 bookmarks: add bookmarks to hidden revs if directaccess config is set
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 Jan 2018 22:28:06 +0530] rev 35611
bookmarks: add bookmarks to hidden revs if directaccess config is set This patch adds support to add bookmarks to hidden revs if `experimental.directaccessi=True` config is set. A warning is also printed saying "accessing hidden changeset <revhash>". Differential Revision: https://phab.mercurial-scm.org/D1813
Fri, 12 Jan 2018 11:15:41 +0000 visibility: pass a normal repo to _getfilteredreason
Boris Feld <boris.feld@octobus.net> [Fri, 12 Jan 2018 11:15:41 +0000] rev 35610
visibility: pass a normal repo to _getfilteredreason There is no reason to pass an unfiltered-repo to _getfilteredreason and successorssets, so use a normal repo instead. Differential Revision: https://phab.mercurial-scm.org/D1853
Fri, 12 Jan 2018 11:10:18 +0000 visibility: make the filtered message translatable
Boris Feld <boris.feld@octobus.net> [Fri, 12 Jan 2018 11:10:18 +0000] rev 35609
visibility: make the filtered message translatable Introduce a filtered message table to ease translation of these messages. Differential Revision: https://phab.mercurial-scm.org/D1852
Fri, 12 Jan 2018 11:09:04 +0000 visibility: fix a comment introduced before which is not up-to-date
Boris Feld <boris.feld@octobus.net> [Fri, 12 Jan 2018 11:09:04 +0000] rev 35608
visibility: fix a comment introduced before which is not up-to-date 265cd9e19d26 introduced a comment in _filterederror that was not updated with the latest iterations of the patch, fix the comment. Differential Revision: https://phab.mercurial-scm.org/D1851
Wed, 10 Jan 2018 19:24:58 -0800 rust: avoid redundant 'static lifetime
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 10 Jan 2018 19:24:58 -0800] rev 35607
rust: avoid redundant 'static lifetime 'static is apparently automatic for const variables. Differential Revision: https://phab.mercurial-scm.org/D1846
Thu, 11 Jan 2018 11:57:59 +0000 pull: hold wlock for the full operation when --update is used
Boris Feld <boris.feld@octobus.net> [Thu, 11 Jan 2018 11:57:59 +0000] rev 35606
pull: hold wlock for the full operation when --update is used With now, the wlock is not held between the pull and the update. This can lead to race condition and make logic checking to post pull results more complicated (eg: with _afterlock).
Thu, 11 Jan 2018 18:20:08 +0800 hgweb: drop support of browsers that don't understand <canvas> (BC)
Anton Shestakov <av6@dwimlabs.net> [Thu, 11 Jan 2018 18:20:08 +0800] rev 35605
hgweb: drop support of browsers that don't understand <canvas> (BC) Internet Explorer 8 and below need excanvas aka ExplorerCanvas to support canvas tag at all. We used to vendor the library in Mercurial, but IE8 was discontinued and all support for it ceased in January 2016. We should do the same and remove excanvas library. Apart from just cleaning up code, this will also make downstream Debian packages stop depending on libjs-excanvas, for example.
Wed, 10 Jan 2018 19:36:45 -0800 rust: add TODO about lifetime of program_name variable
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 10 Jan 2018 19:36:45 -0800] rev 35604
rust: add TODO about lifetime of program_name variable Per review comment in D1581. Differential Revision: https://phab.mercurial-scm.org/D1847
Wed, 10 Jan 2018 19:23:36 -0800 rust: move import of PathBuf
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 10 Jan 2018 19:23:36 -0800] rev 35603
rust: move import of PathBuf By moving it to the single function that uses it, we eliminate a #cfg. Differential Revision: https://phab.mercurial-scm.org/D1845
Wed, 10 Jan 2018 21:09:57 -0800 perf: do not import util.queue
Jun Wu <quark@fb.com> [Wed, 10 Jan 2018 21:09:57 -0800] rev 35602
perf: do not import util.queue This was added by af25237be091. But util.queue is not a module and is not importable. I guess it wasn't noticed because of demandimport. Differential Revision: https://phab.mercurial-scm.org/D1848
Wed, 10 Jan 2018 19:08:51 -0800 rust: move Cargo.lock
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 10 Jan 2018 19:08:51 -0800] rev 35601
rust: move Cargo.lock If you do a `cargo build` in rust/, Cargo will create rust/Cargo.lock. Furthermore, the previous rust/hgcli/Cargo.lock appears to not even be consulted because the auto-generated rust/Cargo.lock varied from rust/hgcli/Cargo.lock. This commit moves Cargo.lock to where Cargo expects it to be. While we're here, bump the version of libc to the latest available. Differential Revision: https://phab.mercurial-scm.org/D1844
Wed, 10 Jan 2018 19:04:52 -0800 run-tests: fix regular expression for path test
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 10 Jan 2018 19:04:52 -0800] rev 35600
run-tests: fix regular expression for path test The previous regexp would match the empty string. This fixes a mistake added in 964212780daf. Differential Revision: https://phab.mercurial-scm.org/D1843
Sun, 17 Dec 2017 04:31:27 +0100 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net> [Sun, 17 Dec 2017 04:31:27 +0100] rev 35599
perf: add threading capability to perfbdiff Since we are releasing the GIL during diffing, it is interesting to see how a thread pool would perform on diffing. We add a new `--threads` argument to commands. Synchronizing the thread pool is a bit complex because we want to be able to reuse it from one run to another. On my computer (i7 with 4 cores + hyperthreading), I get the following data for about 12000 revisions: threads wall comb wall gain comb overhead none 31.596715 31.59 0.00% 0.00% 1 31.621228 31.62 -0.08% 0.09% 2 16.406202 32.8 48.08% 3.83% 3 11.598334 34.76 63.29% 10.03% 4 9.205421 36.77 70.87% 16.40% 5 8.517604 42.51 73.04% 34.57% 6 7.94645 47.58 74.85% 50.62% 7 7.434972 51.92 76.47% 64.36% 8 7.070638 55.34 77.62% 75.18% Compared to the feature disabled (threads=0), the overhead is negligible with the threading code (threads=1), and the gain is already 48% with two threads.
Wed, 10 Jan 2018 17:24:25 +0100 upgraderepo: select correct deltareuse depending on actions
Paul Morelle <paul.morelle@octobus.net> [Wed, 10 Jan 2018 17:24:25 +0100] rev 35598
upgraderepo: select correct deltareuse depending on actions Only 'redeltafulladd' was taken into account because of a small typo.
Tue, 02 Jan 2018 18:35:11 +0900 revsetlang: add %p specifier to format list of function arguments
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Jan 2018 18:35:11 +0900] rev 35597
revsetlang: add %p specifier to format list of function arguments This will be used to construct parameters passed to _matchfiles().
Tue, 02 Jan 2018 21:05:40 +0900 revsetlang: unnest inner functions from formatspec()
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Jan 2018 21:05:40 +0900] rev 35596
revsetlang: unnest inner functions from formatspec()
Sat, 01 Apr 2017 17:51:56 +0900 revsetlang: fix quoting of %ls string
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 17:51:56 +0900] rev 35595
revsetlang: fix quoting of %ls string Before, "'" wasn't escaped appropriately. This also changes the separator '\0' to '\\0', but that's okay as a string token is unescaped.
Sat, 01 Apr 2017 17:44:07 +0900 revsetlang: catch invalid value passed to formatspec()
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 17:44:07 +0900] rev 35594
revsetlang: catch invalid value passed to formatspec() The scope of AttributeError is narrowed because it's more likely to be triggered by mistake.
Sat, 01 Apr 2017 17:28:28 +0900 revsetlang: check incomplete revspec format character
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 17:28:28 +0900] rev 35593
revsetlang: check incomplete revspec format character
Sat, 01 Apr 2017 17:25:45 +0900 revsetlang: check number of arguments passed to formatspec()
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 17:25:45 +0900] rev 35592
revsetlang: check number of arguments passed to formatspec()
Sat, 01 Apr 2017 17:18:31 +0900 revsetlang: catch invalid format character with %l prefix
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 17:18:31 +0900] rev 35591
revsetlang: catch invalid format character with %l prefix listexp() could call argtype() with an invalid format character, but that wasn't checked before.
Fri, 29 Dec 2017 06:32:17 +0530 py3: add 8 new passing tests to the whitelist
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 06:32:17 +0530] rev 35590
py3: add 8 new passing tests to the whitelist Differential Revision: https://phab.mercurial-scm.org/D1800
Fri, 29 Dec 2017 05:33:36 +0530 py3: use list() to get a list of items using dict.items()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:33:36 +0530] rev 35589
py3: use list() to get a list of items using dict.items() dict.items() on Python 3 returns a generator over the values of the dictionary, hence we can't delete elements while iterating over dict.items() in Python 3. Differential Revision: https://phab.mercurial-scm.org/D1799
Fri, 29 Dec 2017 05:31:27 +0530 py3: convert dict keys' to str before passing as kwargs
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:31:27 +0530] rev 35588
py3: convert dict keys' to str before passing as kwargs We have pycompat.strkwargs() which converts the keys of a dict to str and returns that. Differential Revision: https://phab.mercurial-scm.org/D1798
Fri, 29 Dec 2017 05:29:57 +0530 py3: make sure we open the file to write in bytes mode
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:29:57 +0530] rev 35587
py3: make sure we open the file to write in bytes mode Differential Revision: https://phab.mercurial-scm.org/D1797
Fri, 29 Dec 2017 05:47:17 +0530 py3: don't use dict.iterkeys()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:47:17 +0530] rev 35586
py3: don't use dict.iterkeys() Instead of iterating of dict.iterkeys(), let's iterate of dict as that will be equivalent and dict.iterkeys() is not present in Python 3. Differential Revision: https://phab.mercurial-scm.org/D1796
Fri, 29 Dec 2017 05:29:04 +0530 py3: use pycompat.bytestr() instead of str()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:29:04 +0530] rev 35585
py3: use pycompat.bytestr() instead of str() Differential Revision: https://phab.mercurial-scm.org/D1795
Fri, 29 Dec 2017 05:28:05 +0530 py3: make regular expressions bytes by prepending b''
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:28:05 +0530] rev 35584
py3: make regular expressions bytes by prepending b'' Regexes start with r'' and hence transformer skips adding b'' there. # skip-blame because we are just adding b'' Differential Revision: https://phab.mercurial-scm.org/D1794
Fri, 29 Dec 2017 05:27:00 +0530 py3: slice on bytes instead of indexing
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:27:00 +0530] rev 35583
py3: slice on bytes instead of indexing Indexing returns the ascii value on Python 3. Differential Revision: https://phab.mercurial-scm.org/D1793
Fri, 29 Dec 2017 05:25:27 +0530 py3: use node.hex(h.digest()) instead of h.hexdigest()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:25:27 +0530] rev 35582
py3: use node.hex(h.digest()) instead of h.hexdigest() hashlib.sha1.hexdigest() returns str on Python 3. Differential Revision: https://phab.mercurial-scm.org/D1792
Fri, 29 Dec 2017 05:22:06 +0530 tests: make autodiff.py work on Python 3
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:22:06 +0530] rev 35581
tests: make autodiff.py work on Python 3 This patch adds b'' to string literal to make it compatible with in-core Python 3 compatibility. # skip-blame because we are just adding b'' Differential Revision: https://phab.mercurial-scm.org/D1791
Fri, 29 Dec 2017 03:32:04 +0530 py3: use pycompat.ziplist instead of inbuilt zip
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 03:32:04 +0530] rev 35580
py3: use pycompat.ziplist instead of inbuilt zip zip just like map on Python 3 returns a generator object instead of list. This results in error if we try to iterate over the result once we consume it. We have added pycompat.ziplist which returns a list. Differential Revision: https://phab.mercurial-scm.org/D1790
Fri, 29 Dec 2017 05:35:57 +0530 py3: use bytes and open() instead of file() in test-diff-upgrade.t
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 05:35:57 +0530] rev 35579
py3: use bytes and open() instead of file() in test-diff-upgrade.t file() is not present in Python 3. Differential Revision: https://phab.mercurial-scm.org/D1789
Wed, 10 Jan 2018 11:02:20 -0800 exchange: use context manager for locks and transaction in unbundle()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 10 Jan 2018 11:02:20 -0800] rev 35578
exchange: use context manager for locks and transaction in unbundle() Note that the transactionmanager doesn't actually create a transaction -- that is done the first time .transaction() is called on it (if at all). Consequently, .close() and .release() won't do anything if no transaction has been created. This makes it a little unusual, but it still works as a context manager. Differential Revision: https://phab.mercurial-scm.org/D1841
Wed, 10 Jan 2018 10:49:12 -0800 bookmarks: use context managers for locks and transaction in pushbookmark()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 10 Jan 2018 10:49:12 -0800] rev 35577
bookmarks: use context managers for locks and transaction in pushbookmark() Differential Revision: https://phab.mercurial-scm.org/D1840
Wed, 10 Jan 2018 10:47:13 -0800 bookmarks: use context managers for lock and transaction in update()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 10 Jan 2018 10:47:13 -0800] rev 35576
bookmarks: use context managers for lock and transaction in update() Differential Revision: https://phab.mercurial-scm.org/D1839
Wed, 10 Jan 2018 10:44:21 -0800 phase: use context managers for lock and transaction
Martin von Zweigbergk <martinvonz@google.com> [Wed, 10 Jan 2018 10:44:21 -0800] rev 35575
phase: use context managers for lock and transaction Differential Revision: https://phab.mercurial-scm.org/D1838
Wed, 10 Jan 2018 10:33:11 -0800 obsolete: use context manager for transaction in pushmarker()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 10 Jan 2018 10:33:11 -0800] rev 35574
obsolete: use context manager for transaction in pushmarker() Differential Revision: https://phab.mercurial-scm.org/D1837
Wed, 10 Jan 2018 10:32:16 -0800 obsolete: use context manager for lock in pushmarker()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 10 Jan 2018 10:32:16 -0800] rev 35573
obsolete: use context manager for lock in pushmarker() Differential Revision: https://phab.mercurial-scm.org/D1836
Wed, 10 Jan 2018 10:30:51 -0800 obsolete: use context manager for transaction in createmarkers()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 10 Jan 2018 10:30:51 -0800] rev 35572
obsolete: use context manager for transaction in createmarkers() Differential Revision: https://phab.mercurial-scm.org/D1835
Fri, 05 Jan 2018 09:12:08 +0100 visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net> [Fri, 05 Jan 2018 09:12:08 +0100] rev 35571
visibility: improve the message when accessing filtered obsolete rev When trying to access filtered revision, it is likely because they have been obsoleted by an obs-marker. The current message shows how to access the revision anyway: abort: hidden revision '13bedc178fce'! But in the case of an obsoleted revision, the user is likely to want to update to or use the successor of the revision. We update the message to display more information about the obsolescence fate of the revision in the following cases: abort: hidden revision '13bedc178fce' is pruned! abort: hidden revision '13bedc178fce' has diverged! abort: hidden revision '13bedc178fce' was rewritten as X, Y and 2 more! Differential Revision: https://phab.mercurial-scm.org/D1591
Fri, 29 Dec 2017 03:37:36 +0530 tests: add b'' to string literals where bytes are required
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 29 Dec 2017 03:37:36 +0530] rev 35570
tests: add b'' to string literals where bytes are required Since we are internally dealing with bytes only, we need to use bytes in the tests too. This is one of the many patches which will make all the tests completely use bytes. # skip-blame because we are just adding b'' Differential Revision: https://phab.mercurial-scm.org/D1788
Wed, 10 Jan 2018 08:53:22 -0800 rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 10 Jan 2018 08:53:22 -0800] rev 35569
rust: implementation of `hg` This commit provides a mostly-working implementation of the `hg` script in Rust along with scaffolding to support Rust in the repository. If you are familiar with Rust, the contents of the added rust/ directory should be pretty straightforward. We create an "hgcli" package that implements a binary application to run Mercurial. The output of this package is an "hg" binary. Our Rust `hg` (henceforth "rhg") essentially is a port of the existing `hg` Python script. The main difference is the creation of the embedded CPython interpreter is handled by the binary itself instead of relying on the shebang. In that sense, rhg is more similar to the "exe wrapper" we currently use on Windows. However, unlike the exe wrapper, rhg does not call the `hg` Python script. Instead, it uses the CPython APIs to import mercurial modules and call appropriate functions. The amount of code here is surprisingly small. It is my intent to replace the existing C-based exe wrapper with rhg. Preferably in the next Mercurial release. This should be achievable - at least for some Mercurial distributions. The future/timeline for rhg on other platforms is less clear. We already ship a hg.exe on Windows. So if we get the quirks with Rust worked out, shipping a Rust-based hg.exe should hopefully not be too contentious. Now onto the implementation. We're using python27-sys and the cpython crates for talking to the CPython API. We currently don't use too much functionality of the cpython crate and could have probably cut it out. However, it does provide a reasonable abstraction over unsafe {} CPython function calls. While we still have our fair share of those, at least we're not dealing with too much refcounting, error checking, etc. So I think the use of the cpython crate is justified. Plus, there is not-yet-implemented functionality that could benefit from cpython. I see our use of this crate only increasing. The cpython and python27-sys crates are not without their issues. The cpython crate didn't seem to account for the embedding use case in its design. Instead, it seems to assume that you are building a Python extension. It is making some questionable decisions around certain CPython APIs. For example, it insists that PyEval_ThreadsInitialized() is called and that the Python code likely isn't the main thread in the underlying application. It is also missing some functionality that is important for embedded use cases (such as exporting the path to the Python interpreter from its build script). After spending several hours trying to wrangle python27-sys and cpython, I gave up and forked the project on GitHub. Our Cargo.toml tracks this fork. I'm optimistic that the upstream project will accept our contributions and we can eventually unfork. There is a non-trivial amount of code in our custom Cargo build script. Our build.rs (which is called as part of building the hgcli crate): * Validates that the Python interpreter that was detected by the python27-sys crate provides a shared library (we only support shared library linking at this time - although this restriction could be loosened). * Validates that the Python is built with UCS-4 support. This ensures maximum Unicode compatibility. * Exports variables to the crate build allowing the built crate to e.g. find the path to the Python interpreter. The produced rhg should be considered alpha quality. There are several known deficiencies. Many of these are documented with inline TODOs. Probably the biggest limitation of rhg is that it assumes it is running from the ./rust/target/<target> directory of a source distribution. So, rhg is currently not very practical for real-world use. But, if you can `cargo build` it, running the binary *should* yield a working Mercurial CLI. In order to support using rhg with the test harness, we needed to hack up run-tests.py so the path to Mercurial's Python files is set properly. The change is extremely hacky and is only intended to be a stop-gap until the test harness gains first-class support for installing rhg. This will likely occur after we support running rhg outside the source directory. Despite its officially alpha quality, rhg copes extremely well with the test harness (at least on Linux). Using `run-tests.py --with-hg ../rust/target/debug/hg`, I only encounter the following failures: * test-run-tests.t -- Warnings emitted about using an unexpected Mercurial library. This is due to the hacky nature of setting the Python directory when run-tests.py detected rhg. * test-devel-warnings.t -- Expected stack trace missing frame for `hg` (This is expected since we no longer have an `hg` script!) * test-convert.t -- Test running `$PYTHON "$BINDIR"/hg`, which obviously assumes `hg` is a Python script. * test-merge-tools.t -- Same assumption about `hg` being executable with Python. * test-http-bad-server.t -- Seeing exit code 255 instead of 1 around line 358. * test-blackbox.t -- Exit code 255 instead of 1. * test-basic.t -- Exit code 255 instead of 1. It certainly looks like we have a bug around exit code handling. I don't think it is severe enough to hold up review and landing of this initial implementation. Perfect is the enemy of good. Differential Revision: https://phab.mercurial-scm.org/D1581
Sun, 07 Jan 2018 15:21:16 -0500 lfs: improve the error message for a missing remote blob
Matt Harbison <matt_harbison@yahoo.com> [Sun, 07 Jan 2018 15:21:16 -0500] rev 35568
lfs: improve the error message for a missing remote blob It seems better to print the name known to the user, not the internal file. The previous code unconditionally set 'p.filename'. That potentially made the attribute None, and would be printed as such in _gitlfsremote._checkforservererror() instead of "unknown". Normally, files are printed relative to CWD, but I don't see a way to get the repo path to make that adjustment. The test modified here apparently only runs within Facebook, but a print statement confirmed the name change. I tried uploading the blob to a different remote store (so the git server never saw it), and also killing the git server and removing the blob directory, and removing the 'lfs.db' file. All resulted in a message: abort: LFS server claims required objects do not exist: bdc26931acfb734b142a8d675f205becf27560dc461f501822de13274fe6fc8a! So I have no idea how to make this test generally runnable.
Sun, 07 Jan 2018 15:01:59 -0500 filelog: add the ability to report the user facing name
Matt Harbison <matt_harbison@yahoo.com> [Sun, 07 Jan 2018 15:01:59 -0500] rev 35567
filelog: add the ability to report the user facing name This will be used by lfs, but is probably generally useful. There are various bits of code that reverse engineer this from the index or data file names, but it seems better to just store it. Especially if there's experimenting with backing storage other than revlog.
Tue, 19 Dec 2017 20:41:25 +0800 hgweb: make different kinds of commits look differently on /graph
Anton Shestakov <av6@dwimlabs.net> [Tue, 19 Dec 2017 20:41:25 +0800] rev 35566
hgweb: make different kinds of commits look differently on /graph Regular hg log -G uses different symbols for some graph nodes, such as commits that close branches and hidden commits. It also marks the currently checked out commit with "@". Since hg serve is sometimes used/recommended as a more visual alternative to CLI, it makes sense to port these features to hgweb. "graphnode" includes the style of a particular node and also if it's currently checked out or not, both at the same time. This is different from hg log -G (which uses templatekw.showgraphnode), where there's only place for one character, but hgweb doesn't have this limitation, since it uses <canvas> and not plain text. I'm using one string of 1 or 2 characters in this patch, it's not the most self-explanatory format, but it's concise, uses the same characters as hg log -G, and is internal to hgweb (i.e. not used for json-graph). I'm more or less fine with how things look visually, but there's still room for improvement. Feel free to criticise or point me to good-looking graphs of this kind for inspiration.
Thu, 21 Dec 2017 13:58:11 +0100 clonebundle: make it possible to retrieve the initial bundle through largefile
Boris Feld <boris.feld@octobus.net> [Thu, 21 Dec 2017 13:58:11 +0100] rev 35565
clonebundle: make it possible to retrieve the initial bundle through largefile By setting the default path early enough, we make it possible to retrieve a clone bundle as a largefile from the repository we are cloning. But... why? Clone bundle is a great feature to speeds up clone of large repository. However one of the main obstacle for clone bundle deployment is the authentication scheme. For non public project, just putting a static file on some random CDN is not an option as we have to make sure people have the proper permission to retrieves the bundle. On the other hand, 'largefiles' already have all the necessary logic to serve arbitrary binary files -after- an authentication checks. So reusing an existing large file infrastructure can be a significant shortcut to clone bundle in this kind of closed environment. The idea might seems strange, but the necessary update to the large file extensions are quite small while the benefits are huge. In addition, since all the extra logic live in the 'largefiles' extensions, core does not have to know anything about it.
Thu, 21 Dec 2017 13:57:57 +0100 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net> [Thu, 21 Dec 2017 13:57:57 +0100] rev 35564
largefiles: add support for 'largefiles://' url scheme This changesets allows Mercurial to transparently download content from the configured largefile store. This handle all authentication and largefile protocol details. The target usecase is to leverage largefile infrastructure for clone bundle. See next changeset for details
Thu, 21 Dec 2017 13:53:26 +0100 largefiles: add a 'debuglfput' command to put largefile into the store
Boris Feld <boris.feld@octobus.net> [Thu, 21 Dec 2017 13:53:26 +0100] rev 35563
largefiles: add a 'debuglfput' command to put largefile into the store We add a new debug command able to add arbitrary new files into the largefile store. This will be useful for debugging, testing and other unholy usecase.
Fri, 15 Dec 2017 09:30:16 +0100 debug: add a 'debugdownload' command
Boris Feld <boris.feld@octobus.net> [Fri, 15 Dec 2017 09:30:16 +0100] rev 35562
debug: add a 'debugdownload' command This command resolve and fetch and URL through the Mercurial logic. Mercurial logic add various headers (including authentication) while resolving an URL so the commands helps with building the same request Mercurial would be doing. A new test file is created because we'll add more logic regarding Mercurial download logic and it will grow to a reasonable size.
Sat, 01 Apr 2017 17:12:48 +0900 revsetlang: raise ParseError to report invalid format character
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 17:12:48 +0900] rev 35561
revsetlang: raise ParseError to report invalid format character It's more common in revset and templater than raising Abort. I have a couple more patches to address exceptions caused by bad format string passed to revset() template function.
Sat, 01 Apr 2017 17:04:49 +0900 revsetlang: use iterator to track current argument in formatspec()
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 17:04:49 +0900] rev 35560
revsetlang: use iterator to track current argument in formatspec()
Sat, 01 Apr 2017 16:56:47 +0900 revsetlang: unnest "if True" in formatrevspec()
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 16:56:47 +0900] rev 35559
revsetlang: unnest "if True" in formatrevspec()
Sat, 01 Apr 2017 16:55:28 +0900 revsetlang: use str.find() to scan expr in formatspec()
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 16:55:28 +0900] rev 35558
revsetlang: use str.find() to scan expr in formatspec() There should be no need to walk character one by one in Python.
Sat, 01 Apr 2017 16:50:11 +0900 revsetlang: avoid string concatenation in formatspec()
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Apr 2017 16:50:11 +0900] rev 35557
revsetlang: avoid string concatenation in formatspec()
Thu, 04 Jan 2018 12:30:55 +0900 test-glog: hook cmdutil.getlogrevs() so -frREV is rewritten accordingly
Yuya Nishihara <yuya@tcha.org> [Thu, 04 Jan 2018 12:30:55 +0900] rev 35556
test-glog: hook cmdutil.getlogrevs() so -frREV is rewritten accordingly Before, these tests didn't match the real behavior of "log -frREV".
Wed, 03 Jan 2018 17:12:30 +0900 test-glog: dump computed set
Yuya Nishihara <yuya@tcha.org> [Wed, 03 Jan 2018 17:12:30 +0900] rev 35555
test-glog: dump computed set It's more important than the revset expression built from command options.
Wed, 03 Jan 2018 17:09:16 +0900 test-glog: drop uninteresting nodes from AST output
Yuya Nishihara <yuya@tcha.org> [Wed, 03 Jan 2018 17:09:16 +0900] rev 35554
test-glog: drop uninteresting nodes from AST output This makes future test changes more readable.
Sun, 07 Jan 2018 01:14:52 -0500 lfs: remove the verification option when writing to the local store
Matt Harbison <matt_harbison@yahoo.com> [Sun, 07 Jan 2018 01:14:52 -0500] rev 35553
lfs: remove the verification option when writing to the local store This partially reverts 417e8e040102 and bb6a80fc969a. But since there's now a dedicated download function, there's no functional change. The last sentence in the commit message of the latter is wrong- write() didn't need the one time hash check if verification wasn't requested. I suspect I missed 'read()' in there ("... but _read()_ also needs to do a one time check..."), because that did fail without the hash check before linking to the usercache. The write() method simply took the same check for consistency. While here, clarify that the write() method is *only* for storing content directly from filelog, which has already checked the hash. If someone can come up with a way to bridge the differences between writing to a file and sending a urlreq.request across the wire, we can create an upload() function and cleanup read() in a similar way. About the only common thread I see is an open() that verifies the content before returning a file descriptor.
Thu, 21 Dec 2017 21:20:00 -0500 lfs: use the localstore download method to transfer from remote stores
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Dec 2017 21:20:00 -0500] rev 35552
lfs: use the localstore download method to transfer from remote stores Both gitlfsremote and file based remotes benefit from not requiring the whole file in memory (though the whole file is still loaded when passing through the revlog interface). With a method specific to downloading from a remote store, the misleading 'use hg verify' hint is removed. The behavior is otherwise unchanged, in that a download from both remote store types will yield a copy of the blob via util.atomictempfile. There's no response payload defined for the non 'download' actions, but the previous code attempted to read the payload in this case anyway. This refactored code made that more obvious, so any payload is printed as a debug message, just in case.
Thu, 21 Dec 2017 18:56:04 -0500 lfs: introduce a localstore method for downloading from remote stores
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Dec 2017 18:56:04 -0500] rev 35551
lfs: introduce a localstore method for downloading from remote stores The current local.write() method requires the full data, which means concatenating file chunks in memory when downloading from a git server. The dedicated method downloads in chunks, verifies the content on the fly, and creates the usercache hardlink if successful. It can also be used for the file system based remotestore. An explicit division of labor between downloading from a remote store (which should be verified) and writing to the store because of a commit or similar (which doesn't need verification), seems clearer. I can't figure out how to make a similar function for upload, because for a file remote store, it's a simple open/read/write operation. For a gitremote store, it's open the file and a urlreq.request(), and process that.
Tue, 02 Jan 2018 12:14:08 +0900 win32: do not call GetVolumePathName() with the minimum buffer length
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Jan 2018 12:14:08 +0900] rev 35550
win32: do not call GetVolumePathName() with the minimum buffer length It fails on Windows XP even though the doc says "a safer but slower way to set the size of the return buffer is to call the GetFullPathName function, and then make sure that the buffer size is at least the same size as the full path that GetFullPathName returns." https://msdn.microsoft.com/en-us/library/windows/desktop/aa364996(v=vs.85).aspx Well, more "safe" way would be to simply rely on MAX_PATH for common scenarios.
Tue, 02 Jan 2018 12:02:25 +0900 win32: allocate buffer of maximum length for GetVolumeInformation()
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Jan 2018 12:02:25 +0900] rev 35549
win32: allocate buffer of maximum length for GetVolumeInformation() It's documented that "the maximum buffer size is MAX_PATH+1", which is slightly larger than 256. https://msdn.microsoft.com/en-us/library/windows/desktop/aa364993(v=vs.85).aspx
Sun, 22 Oct 2017 22:49:11 +0900 log: drop unused expr from return value of getlogrevs()
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Oct 2017 22:49:11 +0900] rev 35548
log: drop unused expr from return value of getlogrevs() Future patches will move some processing of the --follow option out of _makelogrevset(), where the returned 'expr' value will be less consistent with the 'revs'. So let's remove it from the public interface.
Thu, 04 Jan 2018 12:00:18 +0900 log: don't expand aliases in revset built from command options
Yuya Nishihara <yuya@tcha.org> [Thu, 04 Jan 2018 12:00:18 +0900] rev 35547
log: don't expand aliases in revset built from command options Only -rREV should be rewritten with user aliases.
Sun, 22 Oct 2017 22:52:36 +0900 graphlog: remove redundant check for empty revs
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Oct 2017 22:52:36 +0900] rev 35546
graphlog: remove redundant check for empty revs
Sun, 22 Oct 2017 22:38:16 +0900 log: remove redundant handling of --limit
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Oct 2017 22:38:16 +0900] rev 35545
log: remove redundant handling of --limit A returned 'revs' set is pre-filtered by cmdutil.getlogrevs(). The result of displayer.flush() isn't used anymore, so removed.
Sun, 22 Oct 2017 23:04:07 +0900 log: use smartset.slice() to limit number of revisions to be displayed
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Oct 2017 23:04:07 +0900] rev 35544
log: use smartset.slice() to limit number of revisions to be displayed
Thu, 04 Jan 2018 10:51:41 +0900 log: merge getlogrevs() and getgraphlogrevs()
Yuya Nishihara <yuya@tcha.org> [Thu, 04 Jan 2018 10:51:41 +0900] rev 35543
log: merge getlogrevs() and getgraphlogrevs() cmdutil.graphlog() is updated to receive (revs, filematcher) as arguments to make sure that opts['graph'] is set when getlogrevs() is invoked.
Sat, 30 Dec 2017 17:55:23 +0900 revset: parse x^:: as (x^):: (issue5764)
Yuya Nishihara <yuya@tcha.org> [Sat, 30 Dec 2017 17:55:23 +0900] rev 35542
revset: parse x^:: as (x^):: (issue5764) We have to make '::' a valid primary expression to parse 'x^::' as '(x)^(::)' first, but that doesn't change the language because a prefix operator '::y' precedes a primary '::'. I can't think of an intuitive meaning of '::', so it's just rejected. Given 'x::y' can be considered to default to {x = roots(), y = heads()}, '::' could be 'roots()::heads()', which seems not any useful.
Fri, 05 Jan 2018 21:48:29 -0500 lfs: add a comment to describe subtle local blobstore open() behavior
Matt Harbison <matt_harbison@yahoo.com> [Fri, 05 Jan 2018 21:48:29 -0500] rev 35541
lfs: add a comment to describe subtle local blobstore open() behavior
Fri, 05 Jan 2018 11:53:33 -0800 tests: make #testcase available as env var in test
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 Jan 2018 11:53:33 -0800] rev 35540
tests: make #testcase available as env var in test It can be useful for e.g. helper functions to behave differently depending on which test case is being executed. This patch helps with that by making the #testcase case available as a TESTCASE environment variable. Differential Revision: https://phab.mercurial-scm.org/D1816
Fri, 05 Jan 2018 19:30:37 +0530 archive: add support to specify hidden revs if directaccess config is set
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 Jan 2018 19:30:37 +0530] rev 35539
archive: add support to specify hidden revs if directaccess config is set Differential Revision: https://phab.mercurial-scm.org/D1812
Fri, 05 Jan 2018 19:23:30 +0530 annotate: add support to specify hidden revs if directaccess config is set
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 Jan 2018 19:23:30 +0530] rev 35538
annotate: add support to specify hidden revs if directaccess config is set Differential Revision: https://phab.mercurial-scm.org/D1811
Fri, 05 Jan 2018 19:30:30 +0800 hgweb: stop adding strings to innerHTML of #graphnodes and #nodebgs (BC)
Anton Shestakov <av6@dwimlabs.net> [Fri, 05 Jan 2018 19:30:30 +0800] rev 35537
hgweb: stop adding strings to innerHTML of #graphnodes and #nodebgs (BC) There's nothing that uses this functionality anymore, since all HTML is generated server-side now. Changeset entries are still accessible in JS via DOM (that's how we set left padding), so it's still possible to do something unusual by overriding Graph.prototype.vertex().
Fri, 05 Jan 2018 19:22:05 +0800 spartan: make actual changeset entries have backgrounds on /graph
Anton Shestakov <av6@dwimlabs.net> [Fri, 05 Jan 2018 19:22:05 +0800] rev 35536
spartan: make actual changeset entries have backgrounds on /graph This patch removes a separate container for backgrounds only and puts backgrounds on changeset elements themselves. This makes it so that JS code doesn't need to create background elements separately anymore. There's a bit of manipulating positions of elements: every changeset entry has a "fg" element that gets a higher z-index than <canvas> element. This prioritizes text information, so that even if it somehow gets close to the graph drawn on <canvas> (which has z-index of 5), it'll still be on top of it. This can happen if commit message has a long first line and browser window is narrow, for example.
Fri, 05 Jan 2018 19:16:08 +0800 gitweb: make actual changeset entries have backgrounds on /graph
Anton Shestakov <av6@dwimlabs.net> [Fri, 05 Jan 2018 19:16:08 +0800] rev 35535
gitweb: make actual changeset entries have backgrounds on /graph This patch removes a separate container for backgrounds only and puts backgrounds on changeset elements themselves. This makes it so that JS code doesn't need to create background elements separately anymore. There's a bit of manipulating positions of elements: every changeset entry has a "fg" element that gets a higher z-index than <canvas> element. This prioritizes text information, so that even if it somehow gets close to the graph drawn on <canvas> (which has z-index of 5), it'll still be on top of it. This can happen if commit message has a long first line and browser window is narrow, for example.
Fri, 05 Jan 2018 19:08:00 +0800 monoblue: make actual changeset entries have backgrounds on /graph
Anton Shestakov <av6@dwimlabs.net> [Fri, 05 Jan 2018 19:08:00 +0800] rev 35534
monoblue: make actual changeset entries have backgrounds on /graph This patch removes a separate container for backgrounds only and puts backgrounds on changeset elements themselves. This makes it so that JS code doesn't need to create background elements separately anymore. There's a bit of manipulating positions of elements: every changeset entry has a "fg" element that gets a higher z-index than <canvas> element. This prioritizes text information, so that even if it somehow gets close to the graph drawn on <canvas> (which has z-index of 5), it'll still be on top of it. This can happen if commit message has a long first line and browser window is narrow, for example. 'parity' is added to each entry because there's no stripes2 class in monoblue, only in paper.
Fri, 05 Jan 2018 18:46:06 +0800 paper: make actual changeset entries have backgrounds on /graph
Anton Shestakov <av6@dwimlabs.net> [Fri, 05 Jan 2018 18:46:06 +0800] rev 35533
paper: make actual changeset entries have backgrounds on /graph This patch removes a separate container for backgrounds only and puts backgrounds on changeset elements themselves. This makes it so that JS code doesn't need to create background elements separately anymore. There's a bit of manipulating positions of elements: every changeset entry has a "fg" element that gets a higher z-index than <canvas> element. This prioritizes text information, so that even if it somehow gets close to the graph drawn on <canvas> (which has z-index of 5), it'll still be on top of it. This can happen if commit message has a long first line and browser window is narrow, for example.
Thu, 04 Jan 2018 12:34:40 +0100 crecord: fallback to color = no when curses.use_default_colors() fails
Elmar Bartel <elb_hg@leo.org> [Thu, 04 Jan 2018 12:34:40 +0100] rev 35532
crecord: fallback to color = no when curses.use_default_colors() fails Even when python was setup/compiled with curses, curses.use_default_colors() may raise a curses exception when the TERM environment variable specifies a value where no propper color configuration is possible. This patch falls back to non-color mode to let the user continue instead of failing with an unhandled exception.
Thu, 04 Jan 2018 12:12:07 +0100 crecord: honor "ui.color = no" config option
Elmar Bartel <elb_hg@leo.org> [Thu, 04 Jan 2018 12:12:07 +0100] rev 35531
crecord: honor "ui.color = no" config option The current implementation of crecord ignores the ui.color setting. This patch checks the ui.color config option and does the curses setup without colors when the option is set to a falsy value. For other (or missing) setting of ui.color, curses setup is done as before and uses colors.
Tue, 02 Jan 2018 21:46:57 -0500 lfs: use the local store method for opening a blob
Matt Harbison <matt_harbison@yahoo.com> [Tue, 02 Jan 2018 21:46:57 -0500] rev 35530
lfs: use the local store method for opening a blob I noticed that when I cloned without updating and then turned around and pushed that clone to an lfs server, it was only trying to find the blob in the local store. Writes to the dummyremote (file based store) use local.read(), which looks at both the usercache and local store.
Tue, 02 Jan 2018 21:18:30 -0500 lfs: add a local store method for opening a blob
Matt Harbison <matt_harbison@yahoo.com> [Tue, 02 Jan 2018 21:18:30 -0500] rev 35529
lfs: add a local store method for opening a blob The has() and read() methods already dynamically switch between the usercache and local store. This should generally be preferred to directly accessing the vfs instances outside of the store. The file is now explicitly opened in binary mode for clarity. (It was also being opened in binary mode before, but only because vfs.__call__() appends 'b' if needed when not opening with 'text=True'.)
Fri, 05 Jan 2018 17:23:55 +0530 hgdemandimport: use correct hyperlink to python-bug in comments (issue5765)
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 05 Jan 2018 17:23:55 +0530] rev 35528
hgdemandimport: use correct hyperlink to python-bug in comments (issue5765) Differential Revision: https://phab.mercurial-scm.org/D1810
Wed, 03 Jan 2018 10:37:49 +0800 monoblue: adjust font size of graph entries
Anton Shestakov <av6@dwimlabs.net> [Wed, 03 Jan 2018 10:37:49 +0800] rev 35527
monoblue: adjust font size of graph entries /shortlog uses 1.1em font for changesets, so it makes sense to use the same size on /graph too. In practice, 1.2em is 14.784px, and 1.1em is 13.552px.
Wed, 03 Jan 2018 09:41:01 +0800 hgweb: make .info a block element by default
Anton Shestakov <av6@dwimlabs.net> [Wed, 03 Jan 2018 09:41:01 +0800] rev 35526
hgweb: make .info a block element by default Using a <div> instead of a <span> with "display: block" makes more sense. While at it, let's adjust top margin in monoblue so that text in .info doesn't overlap changeset "tags" elements (they are quite large in monoblue).
Mon, 25 Dec 2017 16:31:14 -0700 revlog: don't use slicing to return parents
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 25 Dec 2017 16:31:14 -0700] rev 35525
revlog: don't use slicing to return parents This is the only place we use a slice on index entries, which are currently tuples. In preparation for moving away from tuples, let's stop using slices so we don't have to implement that support on the new type. We also tweak the logic slightly so the exception only catches the IndexError on the index lookup, not on the index entry lookup. The old code should never have been buggy. But it was semantically wrong. Differential Revision: https://phab.mercurial-scm.org/D1764
Thu, 04 Jan 2018 16:29:03 -0800 tests: switch test from '--config ui.editor=~/foo' to HGEDITOR=~/foo
Kyle Lippincott <spectral@google.com> [Thu, 04 Jan 2018 16:29:03 -0800] rev 35524
tests: switch test from '--config ui.editor=~/foo' to HGEDITOR=~/foo The test is currently not testing anything, the '--config ui.editor=~/path' argument is apparently of lower priority than the HGEDITOR that run-tests.py is setting. Differential Revision: https://phab.mercurial-scm.org/D1809
Wed, 27 Dec 2017 00:24:53 +0530 revert: support reverting to hidden cset if directaccess config is set
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 27 Dec 2017 00:24:53 +0530] rev 35523
revert: support reverting to hidden cset if directaccess config is set This patch adds support for reverting files to a hidden changeset if `experimental.directacess=True` is set. Differential Revision: https://phab.mercurial-scm.org/D1763
Wed, 27 Dec 2017 00:14:00 +0530 update: support updating to hidden cset if directaccess config is set
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 27 Dec 2017 00:14:00 +0530] rev 35522
update: support updating to hidden cset if directaccess config is set This patch adds support for updating to a hidden changeset without using --hidden if `experimental.directacces=True` is set. The update command will print out a warning when updating to a hidden changeset saying: `updating to a hidden changeset <hash>` The warning is also printed when directaccess is not used and --hidden is passed which I think is good behaviour. Tests are added for the directaccess part and updated output of tests which have case of updating to hidden cset using `--hidden`. Differential Revision: https://phab.mercurial-scm.org/D1762
Tue, 26 Dec 2017 22:54:45 +0530 commands: check for empty rev before passing to scmutil.unhidehashlikerevs
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Dec 2017 22:54:45 +0530] rev 35521
commands: check for empty rev before passing to scmutil.unhidehashlikerevs Differential Revision: https://phab.mercurial-scm.org/D1760
Mon, 01 Jan 2018 16:48:31 +0100 test-convert-cvs: change TZ=US/Hawaii to TZ=Pacific/Johnston
Elmar Bartel <elb@leo.org> [Mon, 01 Jan 2018 16:48:31 +0100] rev 35520
test-convert-cvs: change TZ=US/Hawaii to TZ=Pacific/Johnston The former was limited to be known on Linux and the test failed on FreeBSD and Solaris platforms. The newer is known on Linux, FreeBSD and Solaris.
Fri, 29 Dec 2017 23:55:52 -0500 osutil: implement getfsmountpoint() on BSD systems
Matt Harbison <matt_harbison@yahoo.com> [Fri, 29 Dec 2017 23:55:52 -0500] rev 35519
osutil: implement getfsmountpoint() on BSD systems I don't have a BSD system handy to test this, but it looks simple enough from the man page.
Fri, 29 Dec 2017 23:50:42 -0500 debugfs: display the tested path and mount point of the filesystem, if known
Matt Harbison <matt_harbison@yahoo.com> [Fri, 29 Dec 2017 23:50:42 -0500] rev 35518
debugfs: display the tested path and mount point of the filesystem, if known While implementing win32.getfstype(), I noticed that MSYS path mangling is getting in the way. Given a path \\host\share\dir: - If strong quoted, hg receives it unchanged, and it works as expected - If double quoted, it converts to \host\share\dir - If unquoted, it converts to \hostsharedir The second and third cases are problematic because those are valid paths relative to the current drive letter, so os.path.realpath() will expand it as such. The net effect is to silently turn a network path test into (typically) a "C:\" test. Additionally, the command hangs after printing out 'symlink: no' for the third case (but is interruptable with Ctrl + C). This path mangling only comes into play because of the command line arguments- it won't affect internally obtained paths. Therefore, the simplest thing to do is to provide feedback on what the command is acting on. I also added the mount point, because Windows supports nesting [1] volumes (see the examples in "Junction Points and Mounted Folders"), and it was a useful diagnostic for figuring out why the wrong filesystem was printed out in the cases above. I opted not to call os.path.realpath() on the path argument, to make it clearer that the mangling isn't being done by Mercurial. [1] https://msdn.microsoft.com/en-us/library/windows/desktop/aa364996(v=vs.85).aspx
Fri, 29 Dec 2017 22:54:14 -0500 util: add a function to show the mount point of the filesystem
Matt Harbison <matt_harbison@yahoo.com> [Fri, 29 Dec 2017 22:54:14 -0500] rev 35517
util: add a function to show the mount point of the filesystem For now, this is Windows only, since Linux doesn't have the value in its statfs structure, and I don't have a BSD system to test with.
Fri, 29 Dec 2017 22:15:37 -0500 win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com> [Fri, 29 Dec 2017 22:15:37 -0500] rev 35516
win32: split a utility function to obtain the volume out of getfstype() This is only done on Windows because it's simple enough to call statfs() on Unix. The goal is to display this in `hg debugfs`.
Sat, 30 Dec 2017 21:15:12 -0500 util: whitelist NTFS for hardlink creation (issue4580)
Matt Harbison <matt_harbison@yahoo.com> [Sat, 30 Dec 2017 21:15:12 -0500] rev 35515
util: whitelist NTFS for hardlink creation (issue4580)
Fri, 29 Dec 2017 21:28:19 -0500 win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com> [Fri, 29 Dec 2017 21:28:19 -0500] rev 35514
win32: implement util.getfstype() This will allow NTFS to be added to the hardlink whitelist, and resume creating hardlinks in transactions (which was disabled globally in 07a92bbd02e5; see also e5ce49a30146). I opted to report "cifs" for remote volumes because this shows in `hg debugfs`, which also reports that hardlinks are supported for these volumes. So being able to distinguish it from "unknown" seems useful. The documentation [1] seems to indicate that SMB isn't supported by these functions, but experimenting shows that mapped drives are reported as "NTFS" on Windows 7. I don't have a second Windows machine, but instead shared a temp directory on C:\. In this setup, both of the following were detected as 'cifs' with the explicit GetDriveType() check: Z:\repo>hg ci -A C:\>hg -R \\hostname\temp\repo ci -A # (without Z:\ being mapped) It looks like this is called 6 times to add and commit a single new file, so I'm a little surprised this isn't cached. [1] https://msdn.microsoft.com/en-us/library/windows/desktop/aa364993(v=vs.85).aspx
Sat, 30 Dec 2017 21:07:03 -0500 util: move getfstype() to the platform modules
Matt Harbison <matt_harbison@yahoo.com> [Sat, 30 Dec 2017 21:07:03 -0500] rev 35513
util: move getfstype() to the platform modules This makes room for implementing on Windows using ctypes.
Fri, 22 Dec 2017 23:17:04 +0800 graphlog: add another graph node type, unstable, using character "*" (BC)
Anton Shestakov <av6@dwimlabs.net> [Fri, 22 Dec 2017 23:17:04 +0800] rev 35512
graphlog: add another graph node type, unstable, using character "*" (BC)
Tue, 26 Dec 2017 23:40:49 -0500 largefiles: modernize how capabilities are added to the wire protocol
Matt Harbison <matt_harbison@yahoo.com> [Tue, 26 Dec 2017 23:40:49 -0500] rev 35511
largefiles: modernize how capabilities are added to the wire protocol See 982f13bef503, which came well after this code was originally written.
Sat, 23 Dec 2017 17:49:12 -0500 lfs: show a friendly message when pushing lfs to a server without lfs enabled
Matt Harbison <matt_harbison@yahoo.com> [Sat, 23 Dec 2017 17:49:12 -0500] rev 35510
lfs: show a friendly message when pushing lfs to a server without lfs enabled Upfront disclaimer: I don't know anything about the wire protocol, and this was pretty much cargo-culted from largefiles, and then clonebundles, since it seems more modern. I was surprised that exchange.push() will ensure all of the proper requirements when exchanging between two local repos, but doesn't care when one is remote. All this new capability marker does is inform the client that the extension is enabled remotely. It may or may not contain commits with external blobs. Open issues: - largefiles uses 'largefiles=serve' for its capability. Someday I hope to be able to push lfs blobs to an `hg serve` instance. That will probably require a distinct capability. Should it change to '=serve' then? Or just add an 'lfs-serve' capability then? - The flip side of this is more complicated. It looks like largefiles adds an 'lheads' command for the client to signal to the server that the extension is loaded. That is then converted to 'heads' and sent through the normal wire protocol plumbing. A client using the 'heads' command directly is kicked out with a message indicating that the largefiles extension must be loaded. We could do similar with 'lfsheads', but then a repo with both largefiles and lfs blobs can't be pushed over the wire. Hopefully somebody with more wire protocol experience can think of something else. I see 'x-hgarg-1' on some commands in the tests, but not on heads, and didn't dig any further.
Sun, 24 Dec 2017 01:26:36 -0500 lfs: allow non-lfs exchanges when the extension is only enabled on one side
Matt Harbison <matt_harbison@yahoo.com> [Sun, 24 Dec 2017 01:26:36 -0500] rev 35509
lfs: allow non-lfs exchanges when the extension is only enabled on one side Once the 'lfs' requirement is added, the extension must be loaded on both sides, and changegroup3 used. But there's no reason that I can see for bailing with cryptic errors if lfs is not required, but randomly enabled somewhere.
Sat, 23 Dec 2017 23:51:40 -0500 lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com> [Sat, 23 Dec 2017 23:51:40 -0500] rev 35508
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs A hook like this is how largefiles manages to do the same. Largefiles uses a changegroup hook, but this uses pretxnchangegroup because that actually causes the transaction to rollback in the unlikely event that writing the requirements out fails. Sadly, the requires file itself isn't rolled back if a subsequent hook fails, but that seems trivial. Now that commit, changegroup and convert are covered, I don't think there's any way to get an lfs repo without the requirement. The grep exit code is blotted out of some test-lfs-serve.t tests now showing the requirement, because run-tests.py doesn't support conditionalizing the exit code.
Sat, 23 Dec 2017 15:07:24 -0500 test-lfs: add tests covering http exchanges
Matt Harbison <matt_harbison@yahoo.com> [Sat, 23 Dec 2017 15:07:24 -0500] rev 35507
test-lfs: add tests covering http exchanges This tries to test every combination of having the extension enabled/disabled on each side, and then push/pull/clone/identify lfs and non-lfs content. SSH is ignored here, because there's enough going on as it is. The root issue here is again that requirements are not exchanged and preserved on push/pull/clone. Doing so should eliminate the cryptic error messages when using `hg serve`. The 500 server error is triggered by "ValueError: no common changegroup version", because the extension forces changegroup3. Or, if changegroup3 is enabled manually, it is triggered by "abort: missing processor for flag '0x2000'!". Sadly, run-tests.py doesn't support conditionalizing the exit code like it does lines of output. Therefore, a couple of tests blot out the exit code by appending "|| true", since these failures will go away shortly anyway.
Fri, 22 Dec 2017 14:53:54 -0500 test-lfs: add tests covering local exchanges
Matt Harbison <matt_harbison@yahoo.com> [Fri, 22 Dec 2017 14:53:54 -0500] rev 35506
test-lfs: add tests covering local exchanges The root issue here is that requirements are not exchanged and preserved on push/pull. This can be handled with a changegroup hook. Testing for remote exchanges is much more extensive (it's possible for one process or the other to not have the extension loaded at all), so it is added separately.
Wed, 27 Dec 2017 11:08:32 -0700 smartset: split generatorset classes to avoid cycle
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 27 Dec 2017 11:08:32 -0700] rev 35505
smartset: split generatorset classes to avoid cycle I uncovered a cycle manifesting in a memory leak by running `hgperfrevset '::tip'`. The cycle was due to generatorset.__init__ assigning a bound method to self.__contains__. Internet sleuthing revealed that assigning a bound method to an instance attribute always creates a cycle. This commit creates two new variants of generatorset for the special cases of ascending and descending generators. The special implementations of __contains__ have been extracted to these classes where they are defined as __contains__. generatorset now implements __new__ and changes the spawned type to one of the new classes if needed. Differential Revision: https://phab.mercurial-scm.org/D1780
Wed, 27 Dec 2017 13:53:21 -0600 merge: raise before running mergedriver if using IMM
Phil Cohen <phillco@fb.com> [Wed, 27 Dec 2017 13:53:21 -0600] rev 35504
merge: raise before running mergedriver if using IMM Merge driver scripts run in the working copy, so disable with IMM for now. Differential Revision: https://phab.mercurial-scm.org/D1781
Tue, 26 Dec 2017 22:56:07 +0530 scmutil: use a tuple of possible values instead of using startswith()
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Dec 2017 22:56:07 +0530] rev 35503
scmutil: use a tuple of possible values instead of using startswith() This patch also adds a review comment which is helpful as inline comment. Differential Revision: https://phab.mercurial-scm.org/D1761
Mon, 25 Dec 2017 22:56:59 +0900 show: use revlog function to compute length of the longest shortest node
Yuya Nishihara <yuya@tcha.org> [Mon, 25 Dec 2017 22:56:59 +0900] rev 35502
show: use revlog function to compute length of the longest shortest node As the core part of shortest() was extracted at 448725a2ef73, we no logner need a templater.
Tue, 19 Dec 2017 11:20:35 +0530 commands: use the new API to access hidden changesets in various commands
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 19 Dec 2017 11:20:35 +0530] rev 35501
commands: use the new API to access hidden changesets in various commands In previous patches, we have added an internal API to unhide hidden changesets. This patch makes the following command use that api in nowarn mode i.e. there will be no warning while accessing hidden changesets. cat, diff, export, files, heads, identify, log, manifest, parents, status This patch also adds test demonstarting the behaviour. .. feature:: Accessing hidden changesets Set config option 'experimental.directaccess = True' to access hidden changesets from read only commands. Differential Revision: https://phab.mercurial-scm.org/D1735
Fri, 15 Dec 2017 04:31:29 +0530 scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 15 Dec 2017 04:31:29 +0530] rev 35500
scmutil: add utility fn to return repo object with user passed revs unhidden There has been a need for accessing hidden changesets by default without passing --hidden. This is currently done using the directaccess extension but is bit hacky. This patch adds a utility function to return a repo object having user passed revisions unhidden. This functionality will live behind a config option and won't be the default behaviour. There is also a config option added by this patch which tells whether we want to unhide only those revisions whose hashes are passed or should we consider revisions numbers also. Differential Revision: https://phab.mercurial-scm.org/D1733
Mon, 18 Dec 2017 17:50:02 +0530 repoview: add a new filtername for accessing hidden commits
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 18 Dec 2017 17:50:02 +0530] rev 35499
repoview: add a new filtername for accessing hidden commits This patch adds a new filter 'visible-hidden' for repository and will be used to return a repo object with user passed revisions unhidden. Unlike the directaccess extension in fb-hgext and previous series adding the functionality, this time we introduce only one new filter as whether to warn user or not is handled by scmutil.unhidehashlikerevs(). Differential Revision: https://phab.mercurial-scm.org/D1734
Fri, 15 Dec 2017 04:25:32 +0530 revsetlang: add utility function to return hash like symbols from the tree
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 15 Dec 2017 04:25:32 +0530] rev 35498
revsetlang: add utility function to return hash like symbols from the tree Functionalities like unhiding changesets whose rev/hash is passed by the user required the knowledge of rev/hashes in the user provided specs. This patch adds functions which can parse tree object and return a list of such values. Differential Revision: https://phab.mercurial-scm.org/D1732
Fri, 22 Dec 2017 22:19:42 +0530 repoview: add visibilityexception argument to filterrevs() and related fns
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 22 Dec 2017 22:19:42 +0530] rev 35497
repoview: add visibilityexception argument to filterrevs() and related fns After this patch, filterrevs() can take an optional argument visibilityexceptions which is a set of revs which should be exception to being hidden. The visibilityexceptions will be passed to the function computing hidden revisions for that filtername and are considered there while calculating the set of hidden revs. Differential Revision: https://phab.mercurial-scm.org/D1747
Fri, 22 Dec 2017 17:57:11 +0530 repoview: add visibilityexceptions as an optional argument to repo.filtered()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 22 Dec 2017 17:57:11 +0530] rev 35496
repoview: add visibilityexceptions as an optional argument to repo.filtered() This will help us in having an API where we can pass the filtername and the visibilityexceptions to get a new repo object. Visibility exceptions are the revs which must be visible even they should in theory belong to the hidden set. They are required as there has been desire to have a functionality to access hidden changesets using certain commands without passing --hidden. After this patch we can make those changesets visibility exceptions so that we can access them without requiring a unfiltered repo. Differential Revision: https://phab.mercurial-scm.org/D1746
Sun, 24 Dec 2017 11:46:13 -0700 streamclone: move wire protocol status code from wireproto command
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 24 Dec 2017 11:46:13 -0700] rev 35495
streamclone: move wire protocol status code from wireproto command This consolidates the code for the streaming clone wire protocol format into streamclone.py. It also eliminates a generator wrapper, which might make streaming clones slightly faster. Differential Revision: https://phab.mercurial-scm.org/D1754
Fri, 22 Dec 2017 15:25:34 -0600 histedit: add ui.log for action count
Phil Cohen <phillco@fb.com> [Fri, 22 Dec 2017 15:25:34 -0600] rev 35494
histedit: add ui.log for action count Differential Revision: https://phab.mercurial-scm.org/D1751
Fri, 22 Dec 2017 17:04:08 -0700 run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 22 Dec 2017 17:04:08 -0700] rev 35493
run-tests: extract sorting of tests to own function TestRunner._run() is a large function and is difficult to follow. Let's extract the test sorting to its own function to make it shorter. When I refactored run-tests.py several years ago, I put a lot of functionality in methods. The prevailing Mercurial style is to use functions - not classes - where possible. While refactoring the code, I decided to undo this historical mistake of mine by moving the code to a standalone function. Differential Revision: https://phab.mercurial-scm.org/D1750
Fri, 22 Dec 2017 12:22:43 -0700 run-tests: remove dead code related to temp directory
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 22 Dec 2017 12:22:43 -0700] rev 35492
run-tests: remove dead code related to temp directory Differential Revision: https://phab.mercurial-scm.org/D1749
Fri, 22 Dec 2017 13:13:45 -0600 rebase: switch ui.log calls to common style
Phil Cohen <phillco@fb.com> [Fri, 22 Dec 2017 13:13:45 -0600] rev 35491
rebase: switch ui.log calls to common style The old style raised errors in some cases. Differential Revision: https://phab.mercurial-scm.org/D1748
Fri, 22 Dec 2017 21:25:46 +0800 hgweb: link to successors of obsoleted changesets
Anton Shestakov <av6@dwimlabs.net> [Fri, 22 Dec 2017 21:25:46 +0800] rev 35490
hgweb: link to successors of obsoleted changesets _siblings() prepare various useful properties to use in templates. This function usually prepares parents and children of changesets for use in hgweb templates, but it can be used for successors too. It's needed because item['successors'] is a _hybrid object that works well when used in regular templates, but in hgweb templates work slightly differently and can't get hex nodes of the successors, which are required for these links to work.
Tue, 21 Nov 2017 17:03:41 +0800 hgweb: display fate of obsolete changesets
Anton Shestakov <av6@dwimlabs.net> [Tue, 21 Nov 2017 17:03:41 +0800] rev 35489
hgweb: display fate of obsolete changesets Operations that obsolete changesets store enough metadata to explain what happened after the fact. One way to get that metadata is showsuccsandmarkers function, which returns a list of successors of a particular changeset and appropriate obsolescence markers. Templates have a set of experimental functions that have names starting with obsfate. This patch uses some of these functions to interpret output of succsandmarkers() and produce human-friendly messages that describe what happened to an obsolete changeset, e.g. "pruned" or "rewritten as 6:3de5eca88c00". In commonentry(), succsandmarkers property is made callable so it's only executed on demand; this saves time when changeset is not obsolete, and also in e.g. /shortlog view, where there are a lot of changesets, but we don't need to show each and every one in detail. In spartan theme, succsandmarkers is used instead of the simple "obsolete: yes", in other themes a new line is added to /rev page.
Sat, 16 Dec 2017 18:58:02 -0500 test-ssh: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com> [Sat, 16 Dec 2017 18:58:02 -0500] rev 35488
test-ssh: stabilize for Windows Previously, this complained: remote: '.' is not recognized as an internal or external command, remote: operable program or batch file. Making this a python script apparently revealed some races[1]. Thanks to Yuya for suggesting this. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-December/109094.html
Fri, 22 Dec 2017 21:19:29 +0900 templater: register keywords to defaults table
Yuya Nishihara <yuya@tcha.org> [Fri, 22 Dec 2017 21:19:29 +0900] rev 35487
templater: register keywords to defaults table Since the keywords are permanent, there should be no need to pass them by a temporary mapping.
Fri, 22 Dec 2017 21:22:49 +0900 templater: drop unneeded resources from conflict-marker data
Yuya Nishihara <yuya@tcha.org> [Fri, 22 Dec 2017 21:22:49 +0900] rev 35486
templater: drop unneeded resources from conflict-marker data Follow-up for 32c278eb876f and f1c54d003327.
Fri, 22 Dec 2017 21:12:17 +0900 templater: rewrite docstring of templater.__init__()
Yuya Nishihara <yuya@tcha.org> [Fri, 22 Dec 2017 21:12:17 +0900] rev 35485
templater: rewrite docstring of templater.__init__() More importantly, this patch adds what the cache is.
Fri, 22 Dec 2017 00:44:36 -0600 rebase: don't take out a dirstate guard for in-memory rebase
Phil Cohen <phillco@fb.com> [Fri, 22 Dec 2017 00:44:36 -0600] rev 35484
rebase: don't take out a dirstate guard for in-memory rebase Since IMM doesn't affect the dirstate, it's not needed, and might be faster. Differential Revision: https://phab.mercurial-scm.org/D1745
Fri, 22 Dec 2017 02:38:08 -0500 test-split: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com> [Fri, 22 Dec 2017 02:38:08 -0500] rev 35483
test-split: stabilize for Windows - $PYTHON needs to be quoted when used as an executable in $HGEDITOR. This avoids the error "'c' is not recognized as an internal or external command". - seq.py is printing out CRLF, and then the subsequent `sed` script seems to convert to LF on MSYS. IDK if python print statements can be made to print LF on Windows, and I'm pretty sure CRLF is baked into some other tests. - A stray glob was causing the 'obsstore-off' case to report 'no result code from test'. - When I ran with --debug, the `hg diff` commands in the test both printed color sequences, and paused the output as it was run through the pager.
Thu, 21 Dec 2017 23:31:46 -0500 lfs: use ui.note() and ui.debug() instead of ui.write() and their flags
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Dec 2017 23:31:46 -0500] rev 35482
lfs: use ui.note() and ui.debug() instead of ui.write() and their flags Even though the upload/download message is still in a ui.verbose check, I switched that to ui.note() too so that the 'ui.note' label is applied. The debug message is no longer marked for translation because check-code complained.
Thu, 21 Dec 2017 14:13:39 -0500 lfs: only hardlink between the usercache and local store if the blob verifies
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Dec 2017 14:13:39 -0500] rev 35481
lfs: only hardlink between the usercache and local store if the blob verifies This fixes the issue where verify (and other read commands) would propagate corrupt blobs. I originalled coded this to only hardlink if 'verify=True' for store.read(), but then good blobs weren't being linked, and this broke a bunch of tests. (The blob in repo5 that is being corrupted seems to be linked into repo5 in the loop running dumpflog.py prior to it being corrupted, but only if verify=False is handled too.) It's probably better to do a one time extra verification in order to create these files, so that the repo can be copied to a removable drive. Adding the same check to store.write() was only for completeness, but also needs to do a one time extra verification to avoid breaking tests.
Fri, 17 Nov 2017 00:06:45 -0500 lfs: verify lfs object content when transferring to and from the remote store
Matt Harbison <matt_harbison@yahoo.com> [Fri, 17 Nov 2017 00:06:45 -0500] rev 35480
lfs: verify lfs object content when transferring to and from the remote store This avoids inserting corrupt files into the usercache, and local and remote stores. One down side is that the bad file won't be available locally for forensic purposes after a remote download. I'm thinking about adding an 'incoming' directory to the local lfs store to handle the download, and then move it to the 'objects' directory after it passes verification. That would have the additional benefit of not concatenating each transfer chunk in memory until the full file is transferred. Verification isn't needed when the data is passed back through the revlog interface or when the oid was just calculated, but otherwise it is on by default. The additional overhead should be well worth avoiding problems with file based remote stores, or buggy lfs servers. Having two different verify functions is a little sad, but the full data of the blob is mostly passed around in memory, because that's what the revlog interface wants. The upload function, however, chunks up the data. It would be ideal if that was how the content is always handled, but that's probably a huge project. I don't really like printing the long hash, but `hg debugdata` isn't a public interface, and is the only way to get it. The filelog and revision info is nowhere near this area, so recommending `hg verify` is the easiest thing to do.
Mon, 04 Dec 2017 21:41:04 -0500 lfs: narrow the exceptions that trigger a transfer retry
Matt Harbison <matt_harbison@yahoo.com> [Mon, 04 Dec 2017 21:41:04 -0500] rev 35479
lfs: narrow the exceptions that trigger a transfer retry The retries were added to workaround TCP RESETs in fb-experimental fc8c131314a9. I have no idea if that's been debugged yet, but this wide net caught local I/O errors, bad hostnames and other things that shouldn't be retried. The next patch will validate objects as they are uploaded, and there's no need to retry those errors. The spec[1] does mention that certain http errors can be retried, including 500. But let's work through the corruption detection issues first. [1] https://github.com/git-lfs/git-lfs/blob/master/docs/api/batch.md
Thu, 16 Nov 2017 22:52:53 -0500 test-lfs: add tests around corrupted lfs objects
Matt Harbison <matt_harbison@yahoo.com> [Thu, 16 Nov 2017 22:52:53 -0500] rev 35478
test-lfs: add tests around corrupted lfs objects These are mostly tests against file:// based remote stores, because that's what we have the most control over. The test uploading a corrupt blob to lfs-test-server demonstrates an overly broad exception handler in the retry loop. A corrupt blob is actually transferred in a download, but eventually caught when it is accessed (only after it leaves the corrupt file in a couple places locally). I don't think we want to trust random 3rd party implementations, and this would be a problem if there were a `debuglfsdownload` command that simply cached the files. And given the cryptic errors, we should probably validate the file hash locally before uploading, and also after downloading.
Tue, 19 Dec 2017 17:53:44 -0500 lfs: add note messages indicating what store holds the lfs blob
Matt Harbison <matt_harbison@yahoo.com> [Tue, 19 Dec 2017 17:53:44 -0500] rev 35477
lfs: add note messages indicating what store holds the lfs blob The following corruption related patches were written prior to adding the user level cache, and it took awhile to track down why the tests changed. (It generally made things more resilient.) But I think this will be useful to the end user as well. I didn't make it --debug level, because there can be a ton of info coming out of clone/push/pull --debug. The pointers are sorted for test stability. I opted for ui.note() instead of checking ui.verbose and then using ui.write() for convenience, but I see most of this extension does the latter. I have no idea what the preferred form is.
Wed, 20 Dec 2017 20:46:33 -0500 tests: teach `f` to handle sha256 checksums
Matt Harbison <matt_harbison@yahoo.com> [Wed, 20 Dec 2017 20:46:33 -0500] rev 35476
tests: teach `f` to handle sha256 checksums
Wed, 20 Dec 2017 20:41:12 -0500 tests: fix a bug in `f` that prevented calculating sha1sum on a file
Matt Harbison <matt_harbison@yahoo.com> [Wed, 20 Dec 2017 20:41:12 -0500] rev 35475
tests: fix a bug in `f` that prevented calculating sha1sum on a file
Thu, 21 Dec 2017 22:17:39 +0900 templater: look up symbols/resources as if they were separated (issue5699)
Yuya Nishihara <yuya@tcha.org> [Thu, 21 Dec 2017 22:17:39 +0900] rev 35474
templater: look up symbols/resources as if they were separated (issue5699) It wouldn't be easy to split the mapping dict into (symbols, resources). This patch instead rejects invalid lookup taking resources.keys() as source of truth. The doctest is updated since mapping['repo'] is now reserved for a repo object.
Thu, 21 Dec 2017 22:05:30 +0900 templater: move repo, ui and cache to per-engine resources
Yuya Nishihara <yuya@tcha.org> [Thu, 21 Dec 2017 22:05:30 +0900] rev 35473
templater: move repo, ui and cache to per-engine resources
Thu, 21 Dec 2017 21:29:06 +0900 templater: keep default resources per template engine (API)
Yuya Nishihara <yuya@tcha.org> [Thu, 21 Dec 2017 21:29:06 +0900] rev 35472
templater: keep default resources per template engine (API) This allows us to register a repo object as a resource in hgweb template, without loosing '{repo}' symbol: symbol('repo') -> mapping['repo'] (n/a) -> defaults['repo'] resource('repo') -> mapping['repo'] (n/a) -> resources['repo'] I'm thinking of redesigning the templatekw API to take (context, mapping) in place of **(context._resources + mapping), but that will be a big change and not implemented yet. props['templ'] is ported to the resources dict as an example. .. api:: mapping does not contain all template resources. use context.resource() in template functions.
Thu, 21 Dec 2017 21:03:25 +0900 templater: look up mapping table through template engine
Yuya Nishihara <yuya@tcha.org> [Thu, 21 Dec 2017 21:03:25 +0900] rev 35471
templater: look up mapping table through template engine These functions are stub for symbol/resource separation. This series is intended to address the following problems: a) internal data may be exposed to user (issue5699) b) defaults['repo'] (a repository name) will conflict with mapping['repo'] (a repo object) in hgweb
Mon, 18 Dec 2017 17:33:43 -0800 debug: add newlines at the end of three locations that appear to need it
Kyle Lippincott <spectral@google.com> [Mon, 18 Dec 2017 17:33:43 -0800] rev 35470
debug: add newlines at the end of three locations that appear to need it Differential Revision: https://phab.mercurial-scm.org/D1720
Mon, 18 Dec 2017 17:33:08 -0800 debug: remove an 'if ui.debug()' that is not doing anything
Kyle Lippincott <spectral@google.com> [Mon, 18 Dec 2017 17:33:08 -0800] rev 35469
debug: remove an 'if ui.debug()' that is not doing anything ui.debug() does not return a value. Differential Revision: https://phab.mercurial-scm.org/D1719
Thu, 21 Dec 2017 21:35:20 +0800 paper: minor adjustments to table styles
Anton Shestakov <av6@dwimlabs.net> [Thu, 21 Dec 2017 21:35:20 +0800] rev 35468
paper: minor adjustments to table styles Adding a bit of padding to table columns on e.g. /log means content and headers are better aligned: headers already have this padding. Right margin is removed from #changesetEntry th because elements with display: table-cell (such as <th>) ignore margins anyway.
Wed, 20 Dec 2017 17:22:16 -0600 filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com> [Wed, 20 Dec 2017 17:22:16 -0600] rev 35467
filemerge: only raise InMemoryMergeConflictsError when running _xmerge The old code here was overly broad and would raise in cases when we didn't end up calling `xmerge` and resolved using an internal tool (such as when `premerge=True`). Instead, let's swap out _xmerge if IMM is enabled and have the new tool raise when called, which is the behavior we want. Differential Revision: https://phab.mercurial-scm.org/D1739
Wed, 20 Dec 2017 16:44:35 -0800 journal: use pager
Jun Wu <quark@fb.com> [Wed, 20 Dec 2017 16:44:35 -0800] rev 35466
journal: use pager journal output is long and should use a pager. Differential Revision: https://phab.mercurial-scm.org/D1740
Wed, 20 Dec 2017 11:35:38 -0800 commandserver: unblock SIGCHLD
Jun Wu <quark@fb.com> [Wed, 20 Dec 2017 11:35:38 -0800] rev 35465
commandserver: unblock SIGCHLD This enables the SIGCHLD handler to work properly if some buggy program started chg server with SIGCHLD blocked. A test of this probably requires C code, but we don't have such kind of tests already. Since this is a simple and clear fix, I'm leaving it as "untested" but I did a manual test and there were no longer zombie workers. Differential Revision: https://phab.mercurial-scm.org/D1737
Wed, 20 Dec 2017 02:13:35 -0800 osutil: add a function to unblock signals
Jun Wu <quark@fb.com> [Wed, 20 Dec 2017 02:13:35 -0800] rev 35464
osutil: add a function to unblock signals Signals could be blocked by something like: #include <unistd.h> #include <signal.h> int main(int argc, char * const argv[]) { sigset_t set; sigfillset(&set); sigprocmask(SIG_BLOCK, &set, NULL); execv("/bin/hg", argv); return 0; } One of the problems is if SIGCHLD is blocked, chgserver would not reap zombie workers since it depends on SIGCHLD handler entirely. While it's the parent process to blame but it seems a good idea to just unblock the signal from hg. FWIW git does that for SIGPIPE already [1]. Unfortunately Python 2 does not reset or provide APIs to change signal masks. Therefore let's add one in osutil. Note: Python 3.3 introduced `signal.pthread_sigmask` which solves the problem. `sigprocmask` is part of POSIX [2] so there is no feature testing in `setup.py`. [1]: https://github.com/git/git/commit/7559a1be8a0afb10df41d25e4cf4c5285a5faef1 [2]: http://pubs.opengroup.org/onlinepubs/7908799/xsh/sigprocmask.html Differential Revision: https://phab.mercurial-scm.org/D1736
Mon, 18 Dec 2017 21:15:53 +0900 sshpeer: move docstring to top
Yuya Nishihara <yuya@tcha.org> [Mon, 18 Dec 2017 21:15:53 +0900] rev 35463
sshpeer: move docstring to top Also makes it use double quotes consistently.
Tue, 19 Dec 2017 21:41:39 +0900 log: make "slowpath" condition slightly more readable
Yuya Nishihara <yuya@tcha.org> [Tue, 19 Dec 2017 21:41:39 +0900] rev 35462
log: make "slowpath" condition slightly more readable Before 8e0e334bad42 and 6c76c42a5893, the condition was "anypats() or (files() and --removed)". This can be read as "<match is actually slow> or <walk files including removed revs>". So "not always()" (i.e. walk file revs) seems more appropriate here. The logic should be unchanged: not anypats() => always() or isexact() or prefix() isexact() => not always() prefix() => not always()
Mon, 18 Dec 2017 11:23:51 -0800 completion: add support for new "amend" command
Martin von Zweigbergk <martinvonz@google.com> [Mon, 18 Dec 2017 11:23:51 -0800] rev 35461
completion: add support for new "amend" command The command is now shipped with Mercurial, but completion should be helpful (and accurate) for users of the amend command shipped with the evolve extension too. Differential Revision: https://phab.mercurial-scm.org/D1716
Mon, 18 Dec 2017 09:58:04 -0800 completion: don't suggest clean files to revert
Martin von Zweigbergk <martinvonz@google.com> [Mon, 18 Dec 2017 09:58:04 -0800] rev 35460
completion: don't suggest clean files to revert It looks like we used to suggest only modified, added, removed and deleted files to revert until a821ec835223 (completion: selectively use debugpathcomplete in bash_completion, 2013-03-21). The reasoning in that commit was that getting the status was too slow and the replacement (debugpathcomplete) seems to make sense for the other two commands (remove and forget), but I'm not sure it was intentional to change the behavior of completion for revert. Note that "add" and "diff" already use status-based completion. Differential Revision: https://phab.mercurial-scm.org/D1715
Sat, 24 Jun 2017 23:03:41 -0700 split: new extension to split changesets
Jun Wu <quark@fb.com> [Sat, 24 Jun 2017 23:03:41 -0700] rev 35459
split: new extension to split changesets This diff introduces an experimental split extension to split changesets. The implementation is largely inspired by Laurent Charignon's implementation for mutable-history (changeset 9603aa1ecdfd54b0d86e262318a72e0a2ffeb6cc [1]) This version contains various improvements: - Rebase by default. This is more friendly for new users. Split won't lead to merge conflicts so a rebase won't give the user more trouble. This has been on by default at Facebook for months now and seems to be a good UX improvement. The rebase skips obsoleted or orphaned changesets, which can avoid issues like allowdivergence, merge conflicts, etc. This is more flexible because the user can decide what to do next (see the last test case in test-split.t) - Remove "Done split? [y/n]" prompt. That could be detected by checking `repo.status()` instead. - Works with obsstore disabled. Without obsstore, split uses strip to clean up old nodes, and it can even handle split a non-head changeset with "allowunstable" disabled, since it runs a rebase to solve the "unstable" issue in a same transaction. - More friendly editor text. Put what has been already split into the editor text so users won't lost track about where they are. [1]: https://bitbucket.org/marmoute/mutable-history/commits/9603aa1ecdfd54b Differential Revision: https://phab.mercurial-scm.org/D1082
Tue, 19 Dec 2017 16:27:24 -0500 merge with stable
Augie Fackler <augie@google.com> [Tue, 19 Dec 2017 16:27:24 -0500] rev 35458
merge with stable
Mon, 18 Dec 2017 15:18:37 -0800 worker: handle interrupt on windows
Wojciech Lis <wlis@fb.com> [Mon, 18 Dec 2017 15:18:37 -0800] rev 35457
worker: handle interrupt on windows After applying suggestions from https://phab.mercurial-scm.org/D1564 to catch all exceptions in the same way I actually broke the handling of KeyboardInterrupt on windows. The reason is that KeyboardInterrupt doesn't dervie from Exception, but BaseException: https://docs.python.org/2/library/exceptions.html starting from python 2.5 Test Plan: Run hg on windows and ctrl-c during a large update. No random exceptions from threads surface in the shell. Previously we'd nearly always get stack traces from some of threads Run tests ./run-tests.py [...] Failed test-convert-svn-encoding.t: output changed # Ran 622 tests, 41 skipped, 1 failed. python hash seed: 2962682116 The test failing seems to have nothing to do with the change and fails on base revision as well Differential Revision: https://phab.mercurial-scm.org/D1718
Mon, 18 Dec 2017 14:37:00 -0800 lfs: fix committing deleted files caused by e0a1b9ee93cd
Jun Wu <quark@fb.com> [Mon, 18 Dec 2017 14:37:00 -0800] rev 35456
lfs: fix committing deleted files caused by e0a1b9ee93cd e0a1b9ee93cd (lfs: add a repo requirement for this extension once an lfs file is committed) introduced a regression that prevents committing file deletion. This patch fixes that. Differential Revision: https://phab.mercurial-scm.org/D1717
Mon, 18 Dec 2017 13:15:10 -0500 tests: update expected output of svn encoding test
Augie Fackler <augie@google.com> [Mon, 18 Dec 2017 13:15:10 -0500] rev 35455
tests: update expected output of svn encoding test The changes I see on the buildbot match the ones I see on my laptop, and all look reasonable. Differential Revision: https://phab.mercurial-scm.org/D1713
Sun, 17 Dec 2017 14:06:49 -0500 run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com> [Sun, 17 Dec 2017 14:06:49 -0500] rev 35454
run-tests: use context managers for file descriptors I've seen the following error a few times recently when running the tests with `yes | ./run-tests.py --local -j9 -i`: Errored test-add.t: Traceback (most recent call last): File "./run-tests.py", line 821, in run self.runTest() File "./run-tests.py", line 910, in runTest if self._result.addOutputMismatch(self, ret, out, self._refout): File "./run-tests.py", line 1774, in addOutputMismatch rename(test.errpath, test.path) File "./run-tests.py", line 571, in rename os.remove(src) WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'c:\\Users\\Matt\\projects\\hg\\tests\\test-add.t.err' This change doesn't fix the problem, but it seems like a simple enough improvement.
Tue, 12 Dec 2017 20:11:13 -0500 run-tests: add substitution patterns for common '\' path output on Windows
Matt Harbison <matt_harbison@yahoo.com> [Tue, 12 Dec 2017 20:11:13 -0500] rev 35453
run-tests: add substitution patterns for common '\' path output on Windows The goal is to reduce the amount of hand tuning of new/changed tests that is required on Windows. Since the OS prints the proper paths everywhere else, this is limited to Windows. These are based on the check-code rules that were dropped in 5feb782c7a95. There are some minor tweaks, because those were trying to detect '/' paths without a '(glob)' at the end, whereas these detect '\' paths. Also, it looks like the 'no changes made to subrepo' one was broke, because the path to the subrepo has been getting output but was not in the pattern. End anchors are dropped because '(glob)' is no longer required, but '(feature !)' annotations are a possibility. The 'saved backup bundle' pattern dropped from run-tests.py was simply carrying over the first capture group. The replace() method runs prior to evaluating '\1', but it wasn't doing anything because of the 'r' prefix on '\\'. The 'not recording move' entry is new, because I stumbled upon it searching for some of these patterns. There are probably others.
Mon, 27 Nov 2017 18:48:36 -0500 debuginstall: add a line about re2 availability
Boris Feld <boris.feld@octobus.net> [Mon, 27 Nov 2017 18:48:36 -0500] rev 35452
debuginstall: add a line about re2 availability Using re2 engine can massively speed up regexp. We make it simpler to check if it is available in a given install.
Sat, 16 Dec 2017 12:34:40 -0500 tests: fix the check-code rule for testing non-existent files
Matt Harbison <matt_harbison@yahoo.com> [Sat, 16 Dec 2017 12:34:40 -0500] rev 35451
tests: fix the check-code rule for testing non-existent files I missed this in feecfefeba25.
Sat, 16 Dec 2017 11:32:10 -0500 tests: convert the 'file://\$TESTTMP' rule to an automatic substitution
Matt Harbison <matt_harbison@yahoo.com> [Sat, 16 Dec 2017 11:32:10 -0500] rev 35450
tests: convert the 'file://\$TESTTMP' rule to an automatic substitution The rule only triggered on non Windows platforms, even though Windows also required an adjustment. Automatic seems better. The aggressive globbing in test-subrepo-svn.t was found and rewritten by the substitution.
Sat, 21 Oct 2017 17:27:14 +0900 help: deprecate ui.slash in favor of slashpath template filter (issue5572)
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Oct 2017 17:27:14 +0900] rev 35449
help: deprecate ui.slash in favor of slashpath template filter (issue5572) > For some reason, I thought someone (Mads?) said we had basically given > up on ui.slash, and some commands didn't support it. (from https://bz.mercurial-scm.org/show_bug.cgi?id=5572#c1) So the ui.slash option doesn't always work and is somewhat confusing. Let's make it clearer we won't improve the situation.
Sat, 21 Oct 2017 17:19:02 +0900 templatefilters: add slashpath() to convert path separator to slash
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Oct 2017 17:19:02 +0900] rev 35448
templatefilters: add slashpath() to convert path separator to slash Prepares for deprecating the ui.slash option, which isn't always respected.
Thu, 14 Dec 2017 22:26:46 +0900 check-code: remove unused variable 'winglobmsg'
Yuya Nishihara <yuya@tcha.org> [Thu, 14 Dec 2017 22:26:46 +0900] rev 35447
check-code: remove unused variable 'winglobmsg' Follows up 5feb782c7a95.
Thu, 14 Dec 2017 22:37:10 +0900 phases: initialize number of loaded revisions to 0
Yuya Nishihara <yuya@tcha.org> [Thu, 14 Dec 2017 22:37:10 +0900] rev 35446
phases: initialize number of loaded revisions to 0 As it isn't a revision number, an empty value should be 0, not -1.
Thu, 14 Dec 2017 22:35:37 +0900 phases: rename _phasemaxrev to _loadedrevslen to clarify it isn't max value
Yuya Nishihara <yuya@tcha.org> [Thu, 14 Dec 2017 22:35:37 +0900] rev 35445
phases: rename _phasemaxrev to _loadedrevslen to clarify it isn't max value "maxrev" sounds like max(0:tip), but it is actually len(0:tip).
Tue, 12 Dec 2017 15:16:02 -0500 lfs: add an experimental config to override User-Agent for the blob transfer
Matt Harbison <matt_harbison@yahoo.com> [Tue, 12 Dec 2017 15:16:02 -0500] rev 35444
lfs: add an experimental config to override User-Agent for the blob transfer This will allow developers to test against various server implementations. I didn't put it under [devel] because it's possible that some user needs to use it in the field.
Thu, 14 Dec 2017 13:04:08 -0500 lfs: add git to the User-Agent header for blob transfers
Matt Harbison <matt_harbison@yahoo.com> [Thu, 14 Dec 2017 13:04:08 -0500] rev 35443
lfs: add git to the User-Agent header for blob transfers As we were trying to transition off of the non production lfs-test-server for further experimenting, one of the problems we ran into was interoperability. A coworker setup gitbucket[1] to act as the blob server, tested with git, and passed it off to me. But push failed with a message saying "abort: LFS server returns invalid JSON:", and then proceeded to dump a huge HTML page to the screen. It turns out that it is assuming that git is the only thing that wants to do a blob transfer, and everything else is a web browser wanting HTML. It's only a single data point, but I suspect other things may be doing this too. RFC7231 gives an example [2] of listing multiple products in decreasing order of significance. Since the standard provides for this, and since it works with the one problematic server I found, I'm just enabling this by default for a better UX. There's nothing significant about the version of git chosen, other than it is the current version. [1] https://github.com/gitbucket/gitbucket/ [2] https://tools.ietf.org/html/rfc7231#page-46
Thu, 14 Dec 2017 15:03:55 -0800 outgoing: respect ":pushurl" paths (issue5365)
Hollis Blanchard <hollis_blanchard@mentor.com> [Thu, 14 Dec 2017 15:03:55 -0800] rev 35442
outgoing: respect ":pushurl" paths (issue5365) Make 'hg outgoing' respect "paths.default:pushurl" in addition to "paths.default-push". 'hg outgoing' has always meant "what will happen if I run 'hg push'?" and it's still documented that way: Show changesets not found in the specified destination repository or the default push location. These are the changesets that would be pushed if a push was requested. If the user uses the now-deprecated "paths.default-push" path, it continues to work that way. However, as described at https://bz.mercurial-scm.org/show_bug.cgi?id=5365, it doesn't behave the same with "paths.default:pushurl". Why does it matter? Similar to the bugzilla reporter, I have a read-only mirror of a non-Mercurial repository: upstream -> imported mirror -> user clone ^-----------------------/ Users push directly to upstream, and that content is then imported into the mirror. However, those repositories are not the same; it's possible that the mirroring has either broken completely, or an import process is running and not yet complete. In those cases, 'hg outgoing' will list changesets that have already been pushed. Mozilla's desired behavior described in bug 5365 can be accomplished through other means (e.g. 'hg outgoing default'), preserving the consistency and meaning of 'hg outgoing'.
Fri, 15 Dec 2017 17:52:38 -0500 tests: test-pathconflicts-merge.t requires symlinks
Augie Fackler <augie@google.com> [Fri, 15 Dec 2017 17:52:38 -0500] rev 35441
tests: test-pathconflicts-merge.t requires symlinks Once we're ready to turn this functionality on more widely, we might want to write a symlink-free version of the test that can run on Windows, but for now we'll just leave it disabled there. Differential Revision: https://phab.mercurial-scm.org/D1710
Thu, 14 Dec 2017 14:31:57 +0000 sshpeer: allow for additional environment passing to ssh exe
Kostia Balytskyi <ikostia@fb.com> [Thu, 14 Dec 2017 14:31:57 +0000] rev 35440
sshpeer: allow for additional environment passing to ssh exe We already have the ability to customize the ssh command line arguments, let's add the ability to customize its environment as well. Example use-case is ssh.exe from Git on Windows. If `HOME` enviroment variable is present and has some non-empty value, ssh.exe will try to access that location for some stuff (for example, it seems for resolving `~` in `.ssh/config`). Git for Windows seems to sometimess set this variable to the value of `/home/username` which probably works under Git Bash, but does not work in a native `cmd.exe` or `powershell`. Whatever the root cause, setting `HOME` to be an empty string heals things. Therefore, some distributors might want to set `sshenv.HOME=` in the configuration (seems less intrusive that forcing everyone to tweak their env). Test Plan: - rt Differential Revision: https://phab.mercurial-scm.org/D1683
Wed, 13 Dec 2017 17:03:39 -0800 unamend: allow unamending if allowunstable is set
Martin von Zweigbergk <martinvonz@google.com> [Wed, 13 Dec 2017 17:03:39 -0800] rev 35439
unamend: allow unamending if allowunstable is set I don't see why unamend should be disallowed when allowunstable is set. By switching to rewriteutil.precheck() we fix that and get more consistent error messages (and some additional ones). Differential Revision: https://phab.mercurial-scm.org/D1682
Wed, 13 Dec 2017 10:29:22 -0800 rebase: add ui.log calls for whether IMM used, whether rebasing WCP
Phil Cohen <phillco@fb.com> [Wed, 13 Dec 2017 10:29:22 -0800] rev 35438
rebase: add ui.log calls for whether IMM used, whether rebasing WCP Make it a bit easy to get metrics from these. Differential Revision: https://phab.mercurial-scm.org/D1681
Mon, 11 Dec 2017 17:02:02 -0800 lfs: using workers in lfs prefetch
Wojciech Lis <wlis@fb.com> [Mon, 11 Dec 2017 17:02:02 -0800] rev 35437
lfs: using workers in lfs prefetch This significantly speeds up lfs prefetch. With fast network we are seeing ~50% improvement of overall prefetch times Because of worker's API in posix we do lose finegrained progress update and only see progress when a file finished downloading. Test Plan: Run tests: ./run-tests.py -l test-lfs* .... # Ran 4 tests, 0 skipped, 0 failed. Run commands resulting in lfs prefetch e.g. hg sparse --enable-profile Differential Revision: https://phab.mercurial-scm.org/D1568
Thu, 30 Nov 2017 16:01:53 -0800 worker: make windows workers daemons
Wojciech Lis <wlis@fb.com> [Thu, 30 Nov 2017 16:01:53 -0800] rev 35436
worker: make windows workers daemons The windows workers weren't daemons and were not correctly killed when ctrl-c'd from the terminal. Withi this change when the main thread is killed, all daemons get killed as well. I also reduced the time we give to workers to cleanup nicely to not have people ctrl-c'ing when they get inpatient. The output when threads clened up nicely: PS C:\<dir>> hg.exe sparse --disable-profile SparseProfiles/<profile>.sparse interrupted! The output when threads don't clenup in 1 sec: PS C:\<dir> hg.exe sparse --enable-profile SparseProfiles/<profile>.sparse failed to kill worker threads while handling an exception interrupted! Exception in thread Thread-4 (most likely raised during interpreter shutdown): PS C:\<dir>> Test Plan: Run hg command on windows (pull/update/sparse). Ctrl-C'd sparse --enable-profile command that was using threads and observed in proces explorer that all threads got killed. ran tests on CentOS Differential Revision: https://phab.mercurial-scm.org/D1564
Sun, 17 Dec 2017 11:26:25 -0800 workers: add config to enable/diable workers
Wojciech Lis <wlis@fb.com> [Sun, 17 Dec 2017 11:26:25 -0800] rev 35435
workers: add config to enable/diable workers This adds config to disable/enable workers with default being enabled. Test Plan: enabled profile without updaing .hg/hgrc (the default should be to use workers) and ran hg sprase --enable-profile <profile>.sparse Watched in the proces explorer that hg started 12 new threads for materializing files (this is my worker.numcpus) value Added [worker] enabled = False to the .hg/hgrc and re ran the command. This time hg didn't spawn any new threads for matreializing of files Differential Revision: https://phab.mercurial-scm.org/D1460
Mon, 20 Nov 2017 10:27:41 -0800 workers: handling exceptions in windows workers
Wojciech Lis <wlis@fb.com> [Mon, 20 Nov 2017 10:27:41 -0800] rev 35434
workers: handling exceptions in windows workers This adds handling of exceptions from worker threads and resurfaces them as if the function ran without workers. If any of the threads throws, the main thread kills all running threads giving them 5 sec to handle the interruption and raises the first exception received. We don't have to join threads if is_alive() is false Test Plan: Ran multiple updates/enable/disable sparse profile and things worked well Ran test on CentOS- all tests passing on @ passed here Added a forged exception into the worker code and got it properly resurfaced and the rest of workers killed: P58642088 PS C:\open\<repo>> ..\facebook-hg-rpms\build\hg\hg.exe --config extensions.fsmonitor=! sparse --enable-profile <profile> updating [==> ] 1300/39166 1m57sException in thread Thread-3: Traceback (most recent call last): File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\threading.py", line 801, in __bootstrap_inner self.run() File "C:\open\facebook-hg-rpms\build\hg\mercurial\worker.py", line 244, in run raise e Exception: Forged exception Exception in thread Thread-2: Traceback (most recent call last): File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\threading.py", line 801, in __bootstrap_inner self.run() File "C:\open\facebook-hg-rpms\build\hg\mercurial\worker.py", line 244, in run raise e Exception: Forged exception <...> Traceback (most recent call last): File "C:\open\facebook-hg-rpms\build\hg\hgexe.py", line 41, in <module> dispatch.run() File "C:\open\facebook-hg-rpms\build\hg\mercurial\dispatch.py", line 85, in run status = (dispatch(req) or 0) & 255 File "C:\open\facebook-hg-rpms\build\hg\mercurial\dispatch.py", line 173, in dispatch ret = _runcatch(req) File "C:\open\facebook-hg-rpms\build\hg\mercurial\dispatch.py", line 324, in _runcatch return _callcatch(ui, _runcatchfunc) File "C:\open\facebook-hg-rpms\build\hg\mercurial\dispatch.py", line 332, in _callcatch return scmutil.callcatch(ui, func) File "C:\open\facebook-hg-rpms\build\hg\mercurial\scmutil.py", line 154, in callcatch return func() File "C:\open\facebook-hg-rpms\build\hg\mercurial\dispatch.py", line 314, in _runcatchfunc return _dispatch(req) File "C:\open\facebook-hg-rpms\build\hg\mercurial\dispatch.py", line 951, in _dispatch cmdpats, cmdoptions) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\remotefilelog\__init__.py", line 415, in runcommand return orig(lui, repo, *args, **kwargs) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\hgext3rd\undo.py", line 118, in _runcommandwrapper result = orig(lui, repo, cmd, fullargs, *args) File "C:\open\facebook-hg-rpms\build\hg\hgext\journal.py", line 84, in runcommand return orig(lui, repo, cmd, fullargs, *args) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\hgext3rd\perftweaks.py", line 268, in _tracksparseprofiles res = runcommand(lui, repo, *args) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\hgext3rd\perftweaks.py", line 256, in _trackdirstatesizes res = runcommand(lui, repo, *args) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\hgext3rd\copytrace.py", line 144, in _runcommand return orig(lui, repo, cmd, fullargs, ui, *args, **kwargs) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\hgext3rd\fbamend\hiddenoverride.py", line 119, in runcommand result = orig(lui, repo, cmd, fullargs, *args) File "C:\open\facebook-hg-rpms\build\hg\mercurial\dispatch.py", line 712, in runcommand ret = _runcommand(ui, options, cmd, d) File "C:\open\facebook-hg-rpms\build\hg\mercurial\dispatch.py", line 959, in _runcommand return cmdfunc() File "C:\open\facebook-hg-rpms\build\hg\mercurial\dispatch.py", line 948, in <lambda> d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) File "C:\open\facebook-hg-rpms\build\hg\mercurial\util.py", line 1183, in check return func(*args, **kwargs) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\hgext3rd\fbsparse.py", line 860, in sparse disableprofile=disableprofile, force=force) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\hgext3rd\fbsparse.py", line 949, in _config len, _refresh(ui, repo, oldstatus, oldsparsematch, force)) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\hgext3rd\fbsparse.py", line 1116, in _refresh mergemod.applyupdates(repo, typeactions, repo[None], repo['.'], False) File "C:\open\facebook-hg-rpms\build\hg\hg-python\lib\site-packages\remotefilelog\__init__.py", line 311, in applyupdates return orig(repo, actions, wctx, mctx, overwrite, labels=labels) File "C:\open\facebook-hg-rpms\build\hg\mercurial\merge.py", line 1464, in applyupdates for i, item in prog: File "C:\open\facebook-hg-rpms\build\hg\mercurial\worker.py", line 286, in _windowsworker raise t.exception Exception: Forged exception PS C:\open\ovrsource> Differential Revision: https://phab.mercurial-scm.org/D1459
Mon, 20 Nov 2017 10:25:29 -0800 workers: implemented worker on windows
Wojciech Lis <wlis@fb.com> [Mon, 20 Nov 2017 10:25:29 -0800] rev 35433
workers: implemented worker on windows This change implements thread based worker on windows. The handling of exception from within threads will happen in separate diff. The worker is for now used in mercurial/merge.py and in lfs extension After multiple tests and milions of files materiealized, thousands lfs fetched it seems that neither merge.py nor lfs/blobstore.py is thread unsafe. I also looked through the code and besides the backgroundfilecloser (handled in base of this) things look good. The performance boost of this on windows is ~50% for sparse --enable-profile * Speedup of hg up/rebase - not exactly measured Test Plan: Ran 10s of hg sparse --enable-profile and --disable-profile operations on large profiles and verified that workers are running. Used sysinternals suite to see that all threads are spawned and run as they should Run various other operations on the repo including update and rebase Ran tests on CentOS and all tests that pass on @ pass here Differential Revision: https://phab.mercurial-scm.org/D1458
Mon, 11 Dec 2017 16:51:13 -0800 workers: don't use backgroundfilecloser in threads
Wojciech Lis <wlis@fb.com> [Mon, 11 Dec 2017 16:51:13 -0800] rev 35432
workers: don't use backgroundfilecloser in threads This disables background file closing when in not in main thread Test Plan: Ran pull, update, sparse commands and watched the closer threads created and destroyed in procexp.exe ran test on CentOS. No tests broken compared to the base Differential Revision: https://phab.mercurial-scm.org/D1457
Fri, 15 Dec 2017 08:47:28 -0800 debugdiscovery: correct and clean up command synopsis
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Dec 2017 08:47:28 -0800] rev 35431
debugdiscovery: correct and clean up command synopsis This does a few things: * Changes "-r" to "--rev", since "-r" is not a valid short form * Removes non-existent "-l" and "-b" options * Removes "..." after options, since we don't usually have that Differential Revision: https://phab.mercurial-scm.org/D1706
Thu, 14 Dec 2017 00:25:03 -0800 copies: group wdir-handling in one place
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Dec 2017 00:25:03 -0800] rev 35430
copies: group wdir-handling in one place I think this makes it both easier to follow and shorter. Differential Revision: https://phab.mercurial-scm.org/D1698
Thu, 14 Dec 2017 00:18:38 -0800 copies: extract method for getting non-wdir forward copies
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Dec 2017 00:18:38 -0800] rev 35429
copies: extract method for getting non-wdir forward copies I may add an alternative way of getting copy metadata (from changelog, not filelog) but the chaining with the dirstate copy metadata will be the same, so it will probably help to have this extracted. Even if that doesn't happen, the next patch will show that we can simplify this a bit after this refactoring, so it seems worth it regardless. Differential Revision: https://phab.mercurial-scm.org/D1697
Thu, 14 Dec 2017 08:27:22 -0800 copies: consistently use """ for docstrings
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Dec 2017 08:27:22 -0800] rev 35428
copies: consistently use """ for docstrings Differential Revision: https://phab.mercurial-scm.org/D1696
Mon, 11 Dec 2017 10:24:38 -0800 copies: always respect matcher arg to _forwardcopies()
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Dec 2017 10:24:38 -0800] rev 35427
copies: always respect matcher arg to _forwardcopies() The function would ignore the matcher if the dirstate copies were requested. It doesn't matter in practice because all callers used the returned map only for looking up specific files from and those files had already been filtered by the matcher (AFACT). Still, it's a little confusing, so let's make it clearer by respecting the matcher in this case too. Differential Revision: https://phab.mercurial-scm.org/D1695
Wed, 13 Dec 2017 11:21:25 -0800 debugdiscovery: drop reference to non-existent --remote-head option
Martin von Zweigbergk <martinvonz@google.com> [Wed, 13 Dec 2017 11:21:25 -0800] rev 35426
debugdiscovery: drop reference to non-existent --remote-head option It seems like it didn't even exist when debugdiscovery was introduced in cb98fed52495 (discovery: add new set-based discovery, 2011-05-02). Differential Revision: https://phab.mercurial-scm.org/D1693
Wed, 13 Dec 2017 11:20:52 -0800 debugdiscovery: drop reference to non-existent --serverlog option
Martin von Zweigbergk <martinvonz@google.com> [Wed, 13 Dec 2017 11:20:52 -0800] rev 35425
debugdiscovery: drop reference to non-existent --serverlog option It seems like it didn't even exist when debugdiscovery was introduced in cb98fed52495 (discovery: add new set-based discovery, 2011-05-02). Differential Revision: https://phab.mercurial-scm.org/D1692
Wed, 13 Dec 2017 11:19:24 -0800 debugdiscovery: drop reference to invalid --branch option
Martin von Zweigbergk <martinvonz@google.com> [Wed, 13 Dec 2017 11:19:24 -0800] rev 35424
debugdiscovery: drop reference to invalid --branch option It seems like it didn't even exist when debugdiscovery was introduced in cb98fed52495 (discovery: add new set-based discovery, 2011-05-02). Differential Revision: https://phab.mercurial-scm.org/D1691
Thu, 14 Dec 2017 22:30:03 -0800 tests: avoid echo with backslash escapes
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Dec 2017 22:30:03 -0800] rev 35423
tests: avoid echo with backslash escapes Some shells' echo (e.g. Bash's) do not interpret backslash escapes by default, while others shells' do (e.g. Dash's). This led to a failure in test-run-tests.t. We could switch to the more compatible printf, but using a heredoc seems simpler, so that's what this patch does. For anyone who wants to test this for themselves, remove the "unset HGTEST_SHELL" line in helper-runtests.sh and pass e.g. "--shell=/bin/dash" to the test runner. Differential Revision: https://phab.mercurial-scm.org/D1699
Fri, 15 Dec 2017 12:15:58 +0800 hgweb: stop using HTML comments in <script>
Anton Shestakov <av6@dwimlabs.net> [Fri, 15 Dec 2017 12:15:58 +0800] rev 35422
hgweb: stop using HTML comments in <script> Once upon a time, in 1995, there were browsers that didn't understand <script> tags and they would simply show the code inside as text. This started a tradition of wrapping everything inside <script> in <!-- HTML comments -->. Nowadays, it's not only not needed, but can be considered harmful[1]: - within XHTML documents, the source will actually be hidden from all browsers and rendered useless - `--` is not allowed within HTML comments, so any decrement operations in script are invalid [1]: http://www.javascripttoolbox.com/bestpractices/#comments
Thu, 14 Dec 2017 16:01:28 -0500 merge with stable
Augie Fackler <augie@google.com> [Thu, 14 Dec 2017 16:01:28 -0500] rev 35421
merge with stable
Thu, 14 Dec 2017 20:18:15 +0000 statprof: remove a line of deadcode
Alex Gaynor <agaynor@mozilla.com> [Thu, 14 Dec 2017 20:18:15 +0000] rev 35420
statprof: remove a line of deadcode Differential Revision: https://phab.mercurial-scm.org/D1689
Sun, 01 Oct 2017 12:21:50 +0100 extdata: abort if external command exits with non-zero status (BC)
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Oct 2017 12:21:50 +0100] rev 35419
extdata: abort if external command exits with non-zero status (BC) Per the last discussion, this is more reliable and consistent way than suppressing an error. For grep, erroring out might be inconvenient, but for curl, non-zero exit status should be detected. The latter wouldn't be possible if non-zero status is ignored. https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-October/105727.html
Thu, 14 Dec 2017 21:30:00 +0800 hgweb: update graph function docstring
Anton Shestakov <av6@dwimlabs.net> [Thu, 14 Dec 2017 21:30:00 +0800] rev 35418
hgweb: update graph function docstring
Tue, 12 Dec 2017 22:05:21 -0800 rebase: fix for hgsubversion
Phil Cohen <phillco@fb.com> [Tue, 12 Dec 2017 22:05:21 -0800] rev 35417
rebase: fix for hgsubversion 5c25fe7fb1e broke something in the hgsubversion test path, causing it raise an abort (Abort: nothing to merge) during a perfectly good rebase. I tracked it down to this change. It's probably not hgsubversion related. I suspect that using the same `wctx` from before the initial update causes problems with the wctx's cached manifest property. I noticed we also sometimes stick random gunk on the wctx object in other places (like in `copies.py`) so it's probably best to reset it for now. The line I added before was actually useless since we don't pass wctx to the initial `merge.update`, so it defaults to `repo[None]`. So I just removed it. Differential Revision: https://phab.mercurial-scm.org/D1679
Mon, 11 Dec 2017 15:43:56 +0800 hgweb: render next pages on /graph incrementally
Anton Shestakov <av6@dwimlabs.net> [Mon, 11 Dec 2017 15:43:56 +0800] rev 35416
hgweb: render next pages on /graph incrementally Previously, when user scrolled down to see the next page on /graph, all hgweb did was re-render everything that would be visible (by simply incrementing revcount). It was not efficient at all, and this patch makes /graph page behave similarly to the regular /log: every new page only consists of new changesets, no duplication, and only jsdata is based on the full set of changesets required to build accurate graph. This is achieved by adding "?graphtop=<node>" to the next page URL template, effectively remembering where the graph started, and using that value to create the new `tree` that covers the whole visible graph. That variable is then used to produce jsdata for redrawing graph client-side. nextentry is used for the same purpose as on /log page (to format the next page URL), but it's not a part of the graph.
Mon, 11 Dec 2017 13:47:58 +0800 hgweb: split graphdata() into jsdata() and nodes()
Anton Shestakov <av6@dwimlabs.net> [Mon, 11 Dec 2017 13:47:58 +0800] rev 35415
hgweb: split graphdata() into jsdata() and nodes() nodes keyword passed to the template can be any iterator, but jsdata needs to be a list because it gets JSONified.
Sun, 10 Dec 2017 15:56:22 +0800 hgweb: calculate <canvas> width and height client-side
Anton Shestakov <av6@dwimlabs.net> [Sun, 10 Dec 2017 15:56:22 +0800] rev 35414
hgweb: calculate <canvas> width and height client-side hgweb determines and passes to templates some variables related to graph appearance, like bg_height, canvaswidth and canvasheight. bg_height was and still is used for graph.scale() call in graph.tmpl, and the two latter variables were used in <canvas> element as width and height properties, and they were set before JS code got to run. Setting these properties server-side doesn't make a lot of sense, because a graph that has been scaled should calculate things like width and height on its own when being rendered. Let's move (re)sizing <canvas> to JavaScript (to Graph.render function) and stop parsing HTML with regular expressions just to know new width and height. That extra loop that only counts cols is required because <canvas> can't be resized after or in the process of rendering (or it gets cleared). Incidentally, SVG doesn't have this problem and I'm hoping to switch graph to using it in future. There also was truecanvasheight, but according to hg grep --all it was never used, see d490edc71146.
Fri, 08 Dec 2017 21:50:11 +0800 hgweb: filter graphmod.colored() output before iterating over it
Anton Shestakov <av6@dwimlabs.net> [Fri, 08 Dec 2017 21:50:11 +0800] rev 35413
hgweb: filter graphmod.colored() output before iterating over it Consumers in this function use output of graphmod.colored(), but only want items with type == CHANGESET, so let's filter it early. This is primarily just a refactoring, but it also fixes a potential small bug with `rows = len(tree)` (this variable is used for "Rows shown" line in raw-graph) if there are items of other types.
Mon, 11 Dec 2017 05:56:35 +0530 py3: introduce pycompat.ziplist as zip is a generator on Python 3
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 11 Dec 2017 05:56:35 +0530] rev 35412
py3: introduce pycompat.ziplist as zip is a generator on Python 3 Similar to map, the return value of zip was also turned into a generator on Python 3. We have multiple occurences in our codebase where we retrieve the values of zip multiple times, so let's introduce pycompat.ziplist similar to pycompat.maplist. Differential Revision: https://phab.mercurial-scm.org/D1675
Mon, 11 Dec 2017 05:26:46 +0530 py3: pass bytes from extension to ui.write() in test-revlog-mmapindex.t
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 11 Dec 2017 05:26:46 +0530] rev 35411
py3: pass bytes from extension to ui.write() in test-revlog-mmapindex.t This makes the test pass on Python 3. Differential Revision: https://phab.mercurial-scm.org/D1674
Sun, 10 Dec 2017 06:36:48 +0530 py3: handle keyword arguments correctly in hgext/record.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 06:36:48 +0530] rev 35410
py3: handle keyword arguments correctly in hgext/record.py Differential Revision: https://phab.mercurial-scm.org/D1673
Sun, 10 Dec 2017 06:36:35 +0530 py3: handle keyword arguments correctly in bundlerepo.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 06:36:35 +0530] rev 35409
py3: handle keyword arguments correctly in bundlerepo.py Differential Revision: https://phab.mercurial-scm.org/D1672
Sun, 10 Dec 2017 06:36:20 +0530 py3: handle keyword arguments correctly in debugcommands.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 06:36:20 +0530] rev 35408
py3: handle keyword arguments correctly in debugcommands.py Differential Revision: https://phab.mercurial-scm.org/D1671
Mon, 11 Dec 2017 09:27:40 -0800 memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Dec 2017 09:27:40 -0800] rev 35407
memfilectx: make changectx argument mandatory in constructor (API) committablefilectx has three subclasses: workingfilectx, memfilectx, and overlayfilectx. committablefilectx takes an optional (change) ctx instance to its constructor. If it's provided, it's set on the instance as self._changectx. If not, that property is supposed to be defined by the class. However, only workingfilectx does that. The other two will have the property undefined if it's not passed in the constructor. That seems bad to me. This patch makes the changectx argument to the memfilectx constructor mandatory because that fixes the failure I ran into. It seems like we should also fix the overlayfilectx case. Differential Revision: https://phab.mercurial-scm.org/D1658
Sat, 09 Dec 2017 14:22:12 -0800 debugbuilddag: create filectx instance in 'filectxfn' callback
Martin von Zweigbergk <martinvonz@google.com> [Sat, 09 Dec 2017 14:22:12 -0800] rev 35406
debugbuilddag: create filectx instance in 'filectxfn' callback Same motivation is previous patch. Differential Revision: https://phab.mercurial-scm.org/D1670
Sat, 09 Dec 2017 14:15:30 -0800 synthrepo: create filectx instance in 'filectxfn' callback
Martin von Zweigbergk <martinvonz@google.com> [Sat, 09 Dec 2017 14:15:30 -0800] rev 35405
synthrepo: create filectx instance in 'filectxfn' callback I would like to pass the memctx to the memfilectx constructor, but it's not available where we currently create the memfilectx. It is available in the 'filectxfn' callback, so let's create the memfilectx there instead. A later patch will start actually passing the memctx. Differential Revision: https://phab.mercurial-scm.org/D1669
Tue, 12 Dec 2017 20:28:38 -0500 lfs: use 'ui' provided to `upgrade` for output, instead of stealing srcrepo's
Matt Harbison <matt_harbison@yahoo.com> [Tue, 12 Dec 2017 20:28:38 -0500] rev 35404
lfs: use 'ui' provided to `upgrade` for output, instead of stealing srcrepo's Also spotted by Yuya.
Tue, 12 Dec 2017 20:22:38 -0500 lfs: correct the directory list value returned by lfsvfs.walk()
Matt Harbison <matt_harbison@yahoo.com> [Tue, 12 Dec 2017 20:22:38 -0500] rev 35403
lfs: correct the directory list value returned by lfsvfs.walk() Spotted by Yuya.
Sun, 12 Nov 2017 15:34:46 +0100 debuglocks: allow setting a lock
Paul Morelle <paul.morelle@octobus.net> [Sun, 12 Nov 2017 15:34:46 +0100] rev 35402
debuglocks: allow setting a lock
Sun, 12 Nov 2017 15:34:19 +0100 debuglocks: add tests (and fix typo in early return)
Paul Morelle <paul.morelle@octobus.net> [Sun, 12 Nov 2017 15:34:19 +0100] rev 35401
debuglocks: add tests (and fix typo in early return)
Sun, 10 Dec 2017 22:50:57 -0500 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com> [Sun, 10 Dec 2017 22:50:57 -0500] rev 35400
tests: remove (glob) annotations that were only for '\' matches # skip-blame because this was mechanically rewritten the following script. I ran it on both *.t and *.py, but none of the *.py changes were proper. All *.t ones appear to be, and they run without addition failures on both Windows and Linux. import argparse import os import re ap = argparse.ArgumentParser() ap.add_argument('path', nargs='+') opts = ap.parse_args() globre = re.compile(r'^(.*) \(glob\)(.*)$') for p in opts.path: tmp = p + '.tmp' with open(p, 'rb') as src, open(tmp, 'wb') as dst: for line in src: m = globre.match(line) if not m or '$LOCALIP' in line or '*' in line: dst.write(line) continue if '?' in line[:-3] or ('?' in line[:-3] and line[-3:] != '(?)'): dst.write(line) continue dst.write(m.group(1) + m.group(2) + '\n') os.unlink(p) os.rename(tmp, p)
Sun, 10 Dec 2017 22:45:35 -0500 check-code: drop the rules for adding (glob) for Windows paths
Matt Harbison <matt_harbison@yahoo.com> [Sun, 10 Dec 2017 22:45:35 -0500] rev 35399
check-code: drop the rules for adding (glob) for Windows paths I'll probably resurrect at least some of these as replacement patterns to switch '\' to '/' when creating tests at some point. But since this subset of globs isn't needed anymore after dfae14354660, and the rules are blocking the glob removal, just drop them for now. It probably isn't worth turning them into checks for unnecessary globs being present.
Sun, 10 Dec 2017 19:21:48 -0500 run-tests: stop automatically adding a (glob) for bundle backup lines
Matt Harbison <matt_harbison@yahoo.com> [Sun, 10 Dec 2017 19:21:48 -0500] rev 35398
run-tests: stop automatically adding a (glob) for bundle backup lines This is the first step to dropping the existing globs for '\' matches, now that it is handled automatically. Instead of just dropping it, this pattern is now used to convert to '/' paths, to reduce the amount of manual cleanup required when creating tests on Windows.
Thu, 07 Dec 2017 17:18:29 +0800 hgweb: implement json-graph
Anton Shestakov <av6@dwimlabs.net> [Thu, 07 Dec 2017 17:18:29 +0800] rev 35397
hgweb: implement json-graph It's essentially a copy of json-log with graph-related things added (col, row, color, edges).
Mon, 11 Dec 2017 22:16:13 -0800 rebase: replace --inmemory flag with rebase.experimental.inmemory config
Phil Cohen <phillco@fb.com> [Mon, 11 Dec 2017 22:16:13 -0800] rev 35396
rebase: replace --inmemory flag with rebase.experimental.inmemory config Differential Revision: https://phab.mercurial-scm.org/D1666
Mon, 11 Dec 2017 09:37:11 -0500 tests: add some commentary and diagnostics to test-run-tests.t
Augie Fackler <augie@google.com> [Mon, 11 Dec 2017 09:37:11 -0500] rev 35395
tests: add some commentary and diagnostics to test-run-tests.t Hopefully this will give us a shot at fixing it on the Windows builder. Differential Revision: https://phab.mercurial-scm.org/D1653
Sun, 10 Dec 2017 21:57:37 -0800 tests: add commit hashes to log commands in rebase tests
Phil Cohen <phillco@fb.com> [Sun, 10 Dec 2017 21:57:37 -0800] rev 35394
tests: add commit hashes to log commands in rebase tests Commit hashes are a useful way to ensure the content of commits made in the tests are not changing, even if we don't query every aspect of every commit. (And some properties, like extras, are rarely printed at all.) Many of the rebase log -G calls didn't show hashes; by adding hashes to places that weren't showing them we can help protect those tests from unwanted changes. Differential Revision: https://phab.mercurial-scm.org/D1650
Sun, 10 Dec 2017 22:39:46 -0800 tests: add a simple test for in-memory rebase
Phil Cohen <phillco@fb.com> [Sun, 10 Dec 2017 22:39:46 -0800] rev 35393
tests: add a simple test for in-memory rebase This is just a very simple start, but verifies some of the basic cases of an in-memory rebase. Differential Revision: https://phab.mercurial-scm.org/D1652
Mon, 11 Dec 2017 22:38:31 +0900 patch: do not break up multibyte character when highlighting word
Yuya Nishihara <yuya@tcha.org> [Mon, 11 Dec 2017 22:38:31 +0900] rev 35392
patch: do not break up multibyte character when highlighting word This changes {\W} to {\W - any 8bit characters} so that multibyte sequences are taken as words. Since we don't know the encoding of user content, this is the most sensible definition of a non-word.
Sun, 10 Dec 2017 00:16:11 -0500 run-tests: accept '\' vs '/' path differences without '(glob)'
Matt Harbison <matt_harbison@yahoo.com> [Sun, 10 Dec 2017 00:16:11 -0500] rev 35391
run-tests: accept '\' vs '/' path differences without '(glob)' Having to constantly adjust these is a hassle. It's easy for this to slip by when not testing on Windows, and then when it happens on stable, the tests fail for the next 3 months if we follow the rules for stable. This works the same way the EOL differences are ignored, namely to adjust on the fly and recheck on Windows. I can't think of any situation where there would be a '\' on Windows, a '/' elsewhere, and the '/' should be considered a failure on Windows. This fixes the obvious output problems where (glob) is missing. Without this, test-alias.t, test-remotenames.t and test-largefiles-misc.t are failing. The flip side (not handled by this) is the case where an unnecessary glob is present. There seems to be two separate behaviors. cf300c1ad7bf is an example of where the test has been autocorrecting (with output differences), and d4ec69ff652a is an example where the test fails and reports 'no result code from test'. Hopefully those cases will become even more rare if people don't need to guess at when a glob is needed for a Windows path. It's probably unreasonable to submit a single patch that wipes out all of the (glob) instances that were only used to hide path differences, given the churn from other contributors. Since their presence isn't harming the tests, these can be removed through attrition.
Sun, 10 Dec 2017 00:00:36 -0500 run-tests: suggest a (glob) for os.path.sep mismatches with '\r\n' EOL too
Matt Harbison <matt_harbison@yahoo.com> [Sun, 10 Dec 2017 00:00:36 -0500] rev 35390
run-tests: suggest a (glob) for os.path.sep mismatches with '\r\n' EOL too We already do this for lines ending in '\n', such that the test only needs to be run with --interactive and the changes accepted at the end. But that wasn't working with list-tree.py output for example, and required manual fixup.
Sat, 09 Dec 2017 23:46:44 -0500 tests: stabilize the sorted output of list-tree.py on Windows
Matt Harbison <matt_harbison@yahoo.com> [Sat, 09 Dec 2017 23:46:44 -0500] rev 35389
tests: stabilize the sorted output of list-tree.py on Windows The test-largefiles-misc.t test was moving 'dir2\' before 'dir\' because while '/' precedes most of the printable ASCII characters, '\' comes after numbers and capital letters, among other symbols.
Sun, 10 Dec 2017 19:43:35 +0900 upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Dec 2017 19:43:35 +0900] rev 35388
upgrade: simplify workaround for repo.ui.copy() Copied from commandserver.py.
Sun, 10 Dec 2017 19:41:49 +0900 debugformat: embed raw values in JSON and template output
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Dec 2017 19:41:49 +0900] rev 35387
debugformat: embed raw values in JSON and template output
Sun, 10 Dec 2017 19:39:39 +0900 debugformat: flush formatter output per item
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Dec 2017 19:39:39 +0900] rev 35386
debugformat: flush formatter output per item
Sat, 09 Dec 2017 19:42:51 -0600 tests: use Python to write binary data in lfs test instead of shell
Augie Fackler <raf@durin42.com> [Sat, 09 Dec 2017 19:42:51 -0600] rev 35385
tests: use Python to write binary data in lfs test instead of shell The shell construct here appears to be unevenly supported: it works in /bin/sh on FreeBSD, but it doesn't seem to work when /bin/sh is dash. Using a Python inline directive works fine, so let's just do that instead. Differential Revision: https://phab.mercurial-scm.org/D1636
Sun, 10 Dec 2017 05:41:05 +0530 py3: add 32 new tests passing to the whitelist
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 05:41:05 +0530] rev 35384
py3: add 32 new tests passing to the whitelist Yay, we have crossed 100 in number of tests passing on Python 3. There are 662 tests in our test suite, so there is a lot more which is need to be done. Differential Revision: https://phab.mercurial-scm.org/D1648
Sun, 10 Dec 2017 04:50:16 +0530 py3: handle keyword arguments correctly in wireproto.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:50:16 +0530] rev 35383
py3: handle keyword arguments correctly in wireproto.py Differential Revision: https://phab.mercurial-scm.org/D1647
Sun, 10 Dec 2017 04:50:03 +0530 py3: handle keyword arguments correctly in ui.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:50:03 +0530] rev 35382
py3: handle keyword arguments correctly in ui.py Differential Revision: https://phab.mercurial-scm.org/D1646
Sun, 10 Dec 2017 04:49:53 +0530 py3: handle keyword arguments correctly in templater.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:49:53 +0530] rev 35381
py3: handle keyword arguments correctly in templater.py Differential Revision: https://phab.mercurial-scm.org/D1645
Sun, 10 Dec 2017 04:49:40 +0530 py3: handle keyword arguments correctly in subrepo.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:49:40 +0530] rev 35380
py3: handle keyword arguments correctly in subrepo.py Differential Revision: https://phab.mercurial-scm.org/D1644
Sun, 10 Dec 2017 04:49:29 +0530 py3: handle keyword arguments correctly in statprof.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:49:29 +0530] rev 35379
py3: handle keyword arguments correctly in statprof.py Differential Revision: https://phab.mercurial-scm.org/D1643
Sun, 10 Dec 2017 04:48:59 +0530 py3: handle keyword arguments correctly in sslutil.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:48:59 +0530] rev 35378
py3: handle keyword arguments correctly in sslutil.py Differential Revision: https://phab.mercurial-scm.org/D1642
Sun, 10 Dec 2017 04:48:24 +0530 py3: handle keyword arguments correctly in simplemerge.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:48:24 +0530] rev 35377
py3: handle keyword arguments correctly in simplemerge.py Differential Revision: https://phab.mercurial-scm.org/D1641
Sun, 10 Dec 2017 04:48:12 +0530 py3: handle keyword arguments correctly in revset.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:48:12 +0530] rev 35376
py3: handle keyword arguments correctly in revset.py Differential Revision: https://phab.mercurial-scm.org/D1640
Sun, 10 Dec 2017 04:48:00 +0530 py3: handle keyword arguments correctly in patch.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:48:00 +0530] rev 35375
py3: handle keyword arguments correctly in patch.py Differential Revision: https://phab.mercurial-scm.org/D1639
Sun, 10 Dec 2017 04:47:49 +0530 py3: handle keyword arguments correctly in obsolete.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:47:49 +0530] rev 35374
py3: handle keyword arguments correctly in obsolete.py Differential Revision: https://phab.mercurial-scm.org/D1638
Sun, 10 Dec 2017 04:47:34 +0530 py3: handle keyword arguments correctly in keepalive.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 10 Dec 2017 04:47:34 +0530] rev 35373
py3: handle keyword arguments correctly in keepalive.py Differential Revision: https://phab.mercurial-scm.org/D1637
(0) -30000 -10000 -3000 -1000 -240 +240 +1000 +3000 +10000 tip