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 35486
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 35485
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 35484
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 35483
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 35482
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 35481
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 35480
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 35479
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 35478
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 35477
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 35476
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 35475
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 35474
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 35473
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 35472
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 35471
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 35470
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 35469
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 35468
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 35467
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 35466
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 35465
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 35464
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 35463
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 35462
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 35461
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 35460
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 35459
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 35458
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 35457
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
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip