Mon, 18 Dec 2017 21:09:08 -0800 githelp: improve help for "reset"
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 21:09:08 -0800] rev 35720
githelp: improve help for "reset" The previous help referenced a `hg reset`, which is a Facebook-ism. We convert that to `hg update`. We also recognize --soft. Differential Revision: https://phab.mercurial-scm.org/D1728
Mon, 18 Dec 2017 21:02:49 -0800 githelp: clean up reflog help
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 21:02:49 -0800] rev 35719
githelp: clean up reflog help This referenced commands that don't exist in core. The new help isn't great since it references an experimental extension. But it is better than nothing. While we're here, also add test coverage. Differential Revision: https://phab.mercurial-scm.org/D1727
Mon, 18 Dec 2017 20:58:00 -0800 githelp: replace suggestion of `hg record`
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 20:58:00 -0800] rev 35718
githelp: replace suggestion of `hg record` `hg record` is deprecated in favor of `hg commit --interactive`. Differential Revision: https://phab.mercurial-scm.org/D1726
Mon, 18 Dec 2017 20:56:01 -0800 githelp: remove reference to tweakdefaults
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 20:56:01 -0800] rev 35717
githelp: remove reference to tweakdefaults This is a Facebook-ism. Differential Revision: https://phab.mercurial-scm.org/D1725
Fri, 22 Dec 2017 18:38:29 -0700 githelp: recommend `hg import` for `git am`
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 22 Dec 2017 18:38:29 -0700] rev 35716
githelp: recommend `hg import` for `git am` This referenced a third party extension. It doesn't feel appropriate to do that from a core extension. Reference `hg import` instead. Differential Revision: https://phab.mercurial-scm.org/D1724
Mon, 18 Dec 2017 20:51:20 -0800 githelp: improve help for `git add`
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 20:51:20 -0800] rev 35715
githelp: improve help for `git add` The old code was referencing record and crecord, which are deprecated. `hg commit --interactive` is the preferred mechanism to use. In addition, there was duplicate code in this function. It has been removed. Tests have been added to cover this function. Differential Revision: https://phab.mercurial-scm.org/D1723
Mon, 18 Dec 2017 20:44:59 -0800 githelp: vendor Facebook authored extension
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 20:44:59 -0800] rev 35714
githelp: vendor Facebook authored extension This commit vendors the Facebook-authored "githelp" extension. This extension provides a "githelp" command that can be used to try to convert a `git` command to its Mercurial equivalent. This functionality is useful for Git users learning Mercurial. The extension was copied from the repository at revision 32ceeccb832c433b36e9af8196814b8e5a526775. The following modifications were made: * The "testedwith" value has been changed to match core's conventions. * Support for a custom footer has been removed, as it is Facebook specific. The feature is useful. But the implementation wasn't appropriate for core. * A test referencing "tweakdefaults" has been removed. * Imports changed to match Mercurial's style convention. * Double newlines in test removed. * Pager activation changed to ui.pager(). * Initial line of githelp.py changed to add description of file. The removal of the custom footer code was the only significant source change. The rest were mostly cosmetic. There are still some Facebook-isms in the extension. I'll address these as follow-ups. .. feature:: githelp extension The "githelp" extension provides the ``hg githelp`` command. This command attempts to convert a ``git`` command to its Mercurial equivalent. The extension can be useful to Git users new to Mercurial. Differential Revision: https://phab.mercurial-scm.org/D1722
Thu, 18 Jan 2018 19:40:17 +0530 merge: use public interface ms.localctx instead of ms._local
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 18 Jan 2018 19:40:17 +0530] rev 35713
merge: use public interface ms.localctx instead of ms._local
Tue, 16 Jan 2018 14:28:57 +0100 bookmarks: display the obsfate of hidden revision we create a bookmark on
Boris Feld <boris.feld@octobus.net> [Tue, 16 Jan 2018 14:28:57 +0100] rev 35712
bookmarks: display the obsfate of hidden revision we create a bookmark on Display the same message we added recently to the filtered error message create a bookmark on an hidden revision. Differential Revision: https://phab.mercurial-scm.org/D1870
Tue, 16 Jan 2018 14:08:54 +0100 update: display the obsfate of hidden revision we update to
Boris Feld <boris.feld@octobus.net> [Tue, 16 Jan 2018 14:08:54 +0100] rev 35711
update: display the obsfate of hidden revision we update to Display the same message we added recently to the filtered error message when updating to a hidden obsolete changeset. Differential Revision: https://phab.mercurial-scm.org/D1869
Sun, 14 Jan 2018 00:02:40 -0800 evolution: make reporting of new unstable changesets optional
Martin von Zweigbergk <martinvonz@google.com> [Sun, 14 Jan 2018 00:02:40 -0800] rev 35710
evolution: make reporting of new unstable changesets optional This makes it possible to turn off the reporting of unstable changesets (e.g. "1 new orphan changesets"), just in case it's too slow for some users. Anyone who's been using the evolve extension has already been accepting the cost of the reporting, so this is just for the few users who have turned on obsmarkers but not been using the evolve extension (as I believe Facebook has). Differential Revision: https://phab.mercurial-scm.org/D1868
Sun, 14 Jan 2018 23:59:17 -0800 evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com> [Sun, 14 Jan 2018 23:59:17 -0800] rev 35709
evolution: report new unstable changesets This adds a transaction summary callback that reports the number of new orphan, content-divergent and phase-divergent changesets. The code for reporting it is based on the code from the evolve extension, but simplified a bit. It simply counts the numbers for each kind of instability before and after the transaction. That's obviously not very efficient, but it's easy to reason about, so I'm doing this as a first step that can make us quite confident about the test case changes. We can optimize it later and make sure that the tests are not affected. The code has been used in the evolve extension for a long time and has apparently been sufficiently fast, so it doesn't seem like a pressing issue. Unlike the evolve extension's version of this report, this version applies to all commands (or all transactions run as part of any command, to be exact). Differential Revision: https://phab.mercurial-scm.org/D1867
Wed, 10 Jan 2018 14:00:23 -0800 transaction: register summary callbacks only at start of transaction (BC)
Martin von Zweigbergk <martinvonz@google.com> [Wed, 10 Jan 2018 14:00:23 -0800] rev 35708
transaction: register summary callbacks only at start of transaction (BC) We currently register summary callbacks every time localrepo.transaction() is called, so both when the transaction is started and when a nested transaction is created. That seems a little weirdly asymmetric, because the summary callbacks are thus not necessarily registred at the beginning of the outermost transaction, but they are only called when the outermost transaction closes (not when a nested transaction closes). I want to add another summary callback that records the repo state at the beginning of the transaction and compares to that when the transaction closes. However, because of the registration that happens when a nested transaction is created, that would need to go through extra trouble to not overwrite the callback and report the difference from the start time of the innermost transaction to the close of the outermost transaction. Also, the callbacks are registered with a name based on the order they are defined in the registersummarycallback(). For example, if both the "new changesets %s" and the "obsoleted %i changesets" hooks are registered, the first would be called 00-txnreport and the second would be called 01-txnreport. That gets really weird if registersummarycallback() gets called multiple times, because the last one wins, and a depending on which of the two callbacks get registered, we might hypothetically even overwrite on type of callback with another. For example, if when the outer transaction was started, we registered the "new changesets %s" callback first, and when the inner transaction was started, we registered only the "obsoleted %i changesets" callback, then only the latter message would get printed. What makes it hypothetical is that what gets registered depends on the transaction name, and the set of transaction names that we match on for the former latter message is a subset of the set of names we match on for the former. Still, that seems like a bug waiting to happen. That second issue could be solved independently, but the first issue seems enough for me to consider it a bug (affecting developers, not users), so this patch simply drops that extra registration. Note that this affects "hg transplant" in a user-visible way. When "hg transplant" is asked to transplant from a remote repo so it involves a pull, then the outermost transaction name is "transplant" and an inner transaction is created for "pull". That inner transaction is what led us to sometimes report "new changesets %s" from "hg transplant". After this patch, that no longer happens. That seems fine to me. We can make it instead print the message for all "hg transplant" invocations if we want (not just those involving a remote), but I'll leave that for someone else to do if they think it's important. Differential Revision: https://phab.mercurial-scm.org/D1866
Sun, 14 Jan 2018 14:39:17 -0800 repair: filter out unknown revisions from phasecache within transaction
Martin von Zweigbergk <martinvonz@google.com> [Sun, 14 Jan 2018 14:39:17 -0800] rev 35707
repair: filter out unknown revisions from phasecache within transaction I'm about to add another summary report callback that needs to access phase information. These callbacks run at the end of the transaction and some of them failed because they tried to get the phase for stripped commits. The solution is to filter out unknown revisions before the transaction is closed. Differential Revision: https://phab.mercurial-scm.org/D1865
Sun, 14 Jan 2018 23:37:06 -0800 repair: drop unnecessary phase cache invalidation
Martin von Zweigbergk <martinvonz@google.com> [Sun, 14 Jan 2018 23:37:06 -0800] rev 35706
repair: drop unnecessary phase cache invalidation After stripping the revlogs, we have been invalidating the phase cache since bf7b8157c483. Later, in 8e3021fd1a44, I added a call to phasecache.filterunknown(). I apparently didn't realize it then, but I now think that that call made the existing phasecache.invalidate() call unnecessary, so this patch drops it. Both the test added in bf7b8157c483 and the entire evolve extension test suite indeed still pass. Differential Revision: https://phab.mercurial-scm.org/D1864
Mon, 15 Jan 2018 15:20:02 -0800 wireproto: drop support for reader interface from streamres (API)
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 15 Jan 2018 15:20:02 -0800] rev 35705
wireproto: drop support for reader interface from streamres (API) 2add671bf55b and later commits overhauled support for compression and output handling in the wire protocol. Fast forward 14 months and all wire protocol commands except the legacy "changegroup" and "changegroupsubset" commands feed a generator to streamres. I no longer think it is worth maintaining support for the old "reader" API (which allows you to specify an object having a read() method to obtain data). This commit refactors the legacy wire protocol commands to feed a generator to the streamres. We also drop support for the "reader" argument and the code that was using it. As part of the change, chunks over the SSH protocol have increased in size for these commands. But these commands are really ancient, so I doubt anyone will notice. .. api:: wireproto.streamres.__init__ no longer accepts a "reader" argument. Use the "gen" argument instead. Differential Revision: https://phab.mercurial-scm.org/D1861
Mon, 08 Jan 2018 19:41:47 +0530 merge: add `--abort` flag which can abort the merge
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 08 Jan 2018 19:41:47 +0530] rev 35704
merge: add `--abort` flag which can abort the merge Currently we don't have a good functionality to abort the merge and tell user to do `hg update -C .` which can leads to different results if user missed the '.' and moreover does not align with other abort functionalities like rebase, shelve etc. This patch adds `hg merge --abort` which will abort the ongoing merge and take us back to the chagneset where we started from. Works in both cases when merge resulted in conflicts and when there were no conflicts. .. feature:: A `--abort` flag to merge command to abort the ongoing merge. Differential Revision: https://phab.mercurial-scm.org/D1829
Thu, 04 Jan 2018 21:37:03 -0800 filemerge: only write in-memory backup during premerge
Phil Cohen <phillco@fb.com> [Thu, 04 Jan 2018 21:37:03 -0800] rev 35703
filemerge: only write in-memory backup during premerge This wasn't broken, but should mirror the non-in memory case to save an extra write. Differential Revision: https://phab.mercurial-scm.org/D1807
Thu, 04 Jan 2018 21:36:58 -0800 filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com> [Thu, 04 Jan 2018 21:36:58 -0800] rev 35702
filemerge: fix backing up an in-memory file to a custom location If the user specifies a ui.origbackuppath, we used to always copy the file there, but if the source file is in memory we must write it instead of copying. Differential Revision: https://phab.mercurial-scm.org/D1806
Wed, 27 Dec 2017 17:38:28 -0600 rebase: don't run IMM if running rebase in a transaction
Phil Cohen <phillco@fb.com> [Wed, 27 Dec 2017 17:38:28 -0600] rev 35701
rebase: don't run IMM if running rebase in a transaction Some callers to rebase.rebase(), like `_moverelative` in `fbamend/movement.py`, wrap the entire rebase call in a transaction. This raises havoc when IMM tries to retry the rebase when it hits merge conflicts, because the abort will fail the whole transaction, not the subset. It also fails at the end, losing any conflict resolution, as @sid0 noticed. The right long-term fix that @quark and I have discussed is to change the restarting logic such that it doesn't abort at all, but simply switches between IMM and non-IMM fluidly for each commit, which has other nice properties. In the meantime this will do for now. Differential Revision: https://phab.mercurial-scm.org/D1782
Wed, 17 Jan 2018 17:59:12 -0500 python3: whitelist two more passing tests
Augie Fackler <augie@google.com> [Wed, 17 Jan 2018 17:59:12 -0500] rev 35700
python3: whitelist two more passing tests Differential Revision: https://phab.mercurial-scm.org/D1879
Fri, 12 Jan 2018 11:52:57 +0000 sshpeer: add support for request tracing
Boris Feld <boris.feld@octobus.net> [Fri, 12 Jan 2018 11:52:57 +0000] rev 35699
sshpeer: add support for request tracing The new 'devel.debug.peer-request' option now also display some information about request going through ssh peer.
Fri, 12 Jan 2018 10:41:03 +0000 httppeer: add support for tracing all http request made by the peer
Boris Feld <boris.feld@octobus.net> [Fri, 12 Jan 2018 10:41:03 +0000] rev 35698
httppeer: add support for tracing all http request made by the peer This changeset introduces a new 'devel.debug.peer-request' config. When set to True, debug message about request made by peer will be issued. This help to understand what actually happens during an exchange and tracks source of performance loss. This changeset implement support for http peer only.
Fri, 12 Jan 2018 10:14:20 +0000 httppeer: move url opening in its own method
Boris Feld <boris.feld@octobus.net> [Fri, 12 Jan 2018 10:14:20 +0000] rev 35697
httppeer: move url opening in its own method This will help adding debugging logic to request opening when investigating Mercurial performance.
Fri, 12 Jan 2018 10:57:29 +0000 http: add a debug version of the push test
Boris Feld <boris.feld@octobus.net> [Fri, 12 Jan 2018 10:57:29 +0000] rev 35696
http: add a debug version of the push test This will be useful to test further debugging capabilities in coming changesets.
Wed, 17 Jan 2018 21:44:32 -0500 lfs: raise an error if the server sends an unsolicited oid
Matt Harbison <matt_harbison@yahoo.com> [Wed, 17 Jan 2018 21:44:32 -0500] rev 35695
lfs: raise an error if the server sends an unsolicited oid This shouldn't happen. But we shouldn't ignore it if it does, because something else is likely to go wrong.
Wed, 17 Jan 2018 20:54:05 -0500 lfs: correct documentation typo
Matt Harbison <matt_harbison@yahoo.com> [Wed, 17 Jan 2018 20:54:05 -0500] rev 35694
lfs: correct documentation typo
Wed, 17 Jan 2018 22:12:10 -0500 test-convert-svn-move: sort svn checkout output
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Wed, 17 Jan 2018 22:12:10 -0500] rev 35693
test-convert-svn-move: sort svn checkout output It turns out that there's no guarantee in which order svn will traverse a directory while performing a checkout. Sorting the output will make these tests stable.
Sat, 13 Jan 2018 15:13:29 +0900 fileset: do not crash by unary negate operation
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Jan 2018 15:13:29 +0900] rev 35692
fileset: do not crash by unary negate operation Backported from minifileset.py.
Sat, 13 Jan 2018 15:07:37 +0900 fileset: make it robust for bad function calls
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Jan 2018 15:07:37 +0900] rev 35691
fileset: make it robust for bad function calls Before, it could crash or show cryptic message.
Thu, 04 Jan 2018 14:20:58 +0900 log: build follow-log filematcher at once
Yuya Nishihara <yuya@tcha.org> [Thu, 04 Jan 2018 14:20:58 +0900] rev 35690
log: build follow-log filematcher at once We no longer need to replay copy tracing to build filematcher as we can walk (rev, fctxs) pairs.
Thu, 04 Jan 2018 15:20:46 +0900 log: allow matchfn to be non-null even if both --patch/--stat are off
Yuya Nishihara <yuya@tcha.org> [Thu, 04 Jan 2018 15:20:46 +0900] rev 35689
log: allow matchfn to be non-null even if both --patch/--stat are off This makes the next patch slightly simpler.
Thu, 04 Jan 2018 14:37:15 +0900 log: replace "not pats" with matcher attribute for consistency
Yuya Nishihara <yuya@tcha.org> [Thu, 04 Jan 2018 14:37:15 +0900] rev 35688
log: replace "not pats" with matcher attribute for consistency We use match.always() in _makelogrevset(). match.always() is identical to "not pats" here since scmutil.matchandpats() empties pats in that case.
Wed, 03 Jan 2018 15:58:59 +0900 log: follow file history across copies even with -rREV (BC) (issue4959)
Yuya Nishihara <yuya@tcha.org> [Wed, 03 Jan 2018 15:58:59 +0900] rev 35687
log: follow file history across copies even with -rREV (BC) (issue4959) Still it falls back to changelog path if glob patterns or missing paths are specified. This will be changed later. .. bc:: ``log --follow -rREV FILE..`` now follows file history across copies and renames.
Wed, 03 Jan 2018 15:46:15 +0900 log: resolve --follow thoroughly in getlogrevs()
Yuya Nishihara <yuya@tcha.org> [Wed, 03 Jan 2018 15:46:15 +0900] rev 35686
log: resolve --follow thoroughly in getlogrevs() This makes sense because --follow isn't really an option to filter revisions, but an option to extend revisions to be filtered. _fileancestors() is a minimal copy of revset._follow(). They are slightly different in that which revision the matcher sees. _fileancestors() also uses ctx.walk() instead of ctx.manifest().walk() to show a better warning on bad match, which will be tested later.
Wed, 03 Jan 2018 15:13:22 +0900 log: extract function that processes log file patterns
Yuya Nishihara <yuya@tcha.org> [Wed, 03 Jan 2018 15:13:22 +0900] rev 35685
log: extract function that processes log file patterns We'll need a matcher to compute revs followed from the given patterns.
Sun, 10 Dec 2017 17:28:44 +0900 log: resolve --follow with -rREV in cmdutil.getlogrevs()
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Dec 2017 17:28:44 +0900] rev 35684
log: resolve --follow with -rREV in cmdutil.getlogrevs() This also fixes alias expansion. Before, reverse() could be overridden by user alias. This isn't processed at _logrevs() as we'll need starting revisions to parse file patterns. See the subsequent patches for details.
Sun, 10 Dec 2017 18:22:06 +0900 log: remove dead code to follow descendants if ascending revisions specified
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Dec 2017 18:22:06 +0900] rev 35683
log: remove dead code to follow descendants if ascending revisions specified It's been disabled since 8b4b9ee6001a "log: make -fr show complete history from the given revs" 2015-02-06, and we've got no bug report regarding this exact behavior. For details what the heck "followdescendants" is, please see the issue comment: https://bz.mercurial-scm.org/show_bug.cgi?id=4959#c72 "'rev(%d)' % startrev" can be replaced with '.' since revs are 'reversed(:.)'.
Sun, 10 Dec 2017 16:59:54 +0900 log: duplicate _logrevs() dedicated for walkchangerevs()
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Dec 2017 16:59:54 +0900] rev 35682
log: duplicate _logrevs() dedicated for walkchangerevs() Prepares for refactoring getlogrevs() to fix the "log -frREV PATH" issue. I initially thought I could get rid of walkchangerevs(), but it turned out requiring non-trivial work because of a "prepare" callback and a scanning window. This patch makes sure that walkchangerevs() will be unaffected by subsequent changes.
Tue, 16 Jan 2018 21:51:27 +0900 update: fix crash on bare update when directaccess is enabled
Yuya Nishihara <yuya@tcha.org> [Tue, 16 Jan 2018 21:51:27 +0900] rev 35681
update: fix crash on bare update when directaccess is enabled 'rev' may be None. An empty 'rev' string shouldn't also be passed to unhidehashlikerevs().
Tue, 16 Jan 2018 21:42:42 +0900 templater: make sure expression is terminated by '}'
Yuya Nishihara <yuya@tcha.org> [Tue, 16 Jan 2018 21:42:42 +0900] rev 35680
templater: make sure expression is terminated by '}' This can't be ensured by the tokenize() generator since the parser stop consuming tokens once it reached an end of an operation. Spotted by Matt Harbison.
Fri, 14 Jul 2017 19:59:10 +0200 bookmark: deprecate direct update of a bookmark value
Boris Feld <boris.feld@octobus.net> [Fri, 14 Jul 2017 19:59:10 +0200] rev 35679
bookmark: deprecate direct update of a bookmark value This changeset was part of an older series preventing direct update of the bookmarks store without the change being tracked by a transaction. For some unclear reason, this was not sent to the list. So we are sending it now. Initial series: 3325c7dcabaa+08bf0ebc6c8e+712a85b3677f. We want to channel all bookmarks update through 'applychanges' so let's remove more way to work around this function.
Mon, 16 Oct 2017 14:32:06 +0200 debugdeltachain: display how many chunks would be read in sparse-read mode
Paul Morelle <paul.morelle@octobus.net> [Mon, 16 Oct 2017 14:32:06 +0200] rev 35678
debugdeltachain: display how many chunks would be read in sparse-read mode
Wed, 17 Jan 2018 21:36:18 +0000 bdiff: handle the possibility of an integer overflow when allocating
Alex Gaynor <agaynor@mozilla.com> [Wed, 17 Jan 2018 21:36:18 +0000] rev 35677
bdiff: handle the possibility of an integer overflow when allocating Differential Revision: https://phab.mercurial-scm.org/D1877
Tue, 16 Jan 2018 08:40:14 -0500 svnsubrepo: check if subrepo is missing when checking dirty state (issue5657)
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 16 Jan 2018 08:40:14 -0500] rev 35676
svnsubrepo: check if subrepo is missing when checking dirty state (issue5657) During an hg convert command, subrepos are not checked out. However, a manifestmerge may occur during an hg convert if there is a merge commit, which in particular will check the dirty state of subrepos. Before this change, the lack of a checked out subrepo would error out. This check for svn subrepos is modelled after 2fdea636f254 for git subrepos.
Wed, 17 Jan 2018 13:02:42 +0100 win32text: use 'tiprev' when appropriate
Boris Feld <boris.feld@octobus.net> [Wed, 17 Jan 2018 13:02:42 +0100] rev 35675
win32text: use 'tiprev' when appropriate This is cleaner than the current 'len(repo) - 1' form.
Wed, 17 Jan 2018 13:01:38 +0100 patchbomb: use 'tiprev' when appropriate
Boris Feld <boris.feld@octobus.net> [Wed, 17 Jan 2018 13:01:38 +0100] rev 35674
patchbomb: use 'tiprev' when appropriate This is cleaner than the current 'len(repo) - 1' form.
Thu, 04 May 2017 02:28:19 +0200 revset: use 'tiprev' when appropriate
Boris Feld <boris.feld@octobus.net> [Thu, 04 May 2017 02:28:19 +0200] rev 35673
revset: use 'tiprev' when appropriate This is cleaner than the current 'len(repo) - 1' forms
Thu, 04 May 2017 02:24:04 +0200 changelog: use 'tiprev()' in 'tip()'
Boris Feld <boris.feld@octobus.net> [Thu, 04 May 2017 02:24:04 +0200] rev 35672
changelog: use 'tiprev()' in 'tip()' Since 'tip()' is just a node version of 'tiprev()' we should reuse the code.
Thu, 04 May 2017 02:23:21 +0200 changelog: introduce a 'tiprev' method
Boris Feld <boris.feld@octobus.net> [Thu, 04 May 2017 02:23:21 +0200] rev 35671
changelog: introduce a 'tiprev' method Accessing tiprev is a common need through the code base. It is usually done using "len(changelog) -1". That form is tedious and error-prone. For example, it will give wrong results on filtered changelog (if the unfiltered tip is filtered). As a result, we introduce a simple 'tiprev()' method to provide this exact information in a nice way.
Wed, 17 Jan 2018 15:47:38 -0500 contrib: add some basic scaffolding for some fuzz test targets
Augie Fackler <augie@google.com> [Wed, 17 Jan 2018 15:47:38 -0500] rev 35670
contrib: add some basic scaffolding for some fuzz test targets I'd like to get the majority of our C code covered by automated fuzz testing. I've started with bdiff because it was already decoupled from libpython and therefore was fairly quick to produce a working fuzzer. The code here is a little odd because I've been having trouble convincing libfuzzer to define a main and I threw in the towel. This code will also work with github.com/google/oss-fuzz, and once it lands in our main repo I intend to enable automated fuzzing in oss-fuzz with reports going to our security alias. Differential Revision: https://phab.mercurial-scm.org/D1875
Wed, 17 Jan 2018 15:56:12 -0500 formatting: enforce clang-format on all .cc files as well as .c files
Augie Fackler <augie@google.com> [Wed, 17 Jan 2018 15:56:12 -0500] rev 35669
formatting: enforce clang-format on all .cc files as well as .c files As part of my upcoming fuzzer patch we're going to grow some .cc files. They're not part of the release build (they're only used for fuzzing, which requires clang 6 which in turn implies a working C++ compiler), so I'm not terribly worried about growing some C++ files. Differential Revision: https://phab.mercurial-scm.org/D1874
Wed, 17 Jan 2018 15:28:38 -0500 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com> [Wed, 17 Jan 2018 15:28:38 -0500] rev 35668
hghave: add test for clang 6 and later clang 6 includes integrated libfuzzer support, which makes fuzzer stuff a little easier to work with. Differential Revision: https://phab.mercurial-scm.org/D1873
Sun, 14 Jan 2018 12:06:27 -0800 py3: cast error message to localstr in blackbox.py
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 14 Jan 2018 12:06:27 -0800] rev 35667
py3: cast error message to localstr in blackbox.py According to the exceptions reporting mechanism, this is the #1 crasher in the test harness for Python 3. Since this exception is in an except block, we'll likely get a new #1 crasher after this change. But at least we won't die during error handling! Differential Revision: https://phab.mercurial-scm.org/D1478
Wed, 10 Jan 2018 21:27:05 -0800 lfs: remove internal url in test
Jun Wu <quark@fb.com> [Wed, 10 Jan 2018 21:27:05 -0800] rev 35666
lfs: remove internal url in test `test-lfs-test-server.t` refers to a FB internal domain and requires certain implementation (ex. set error code to 404) at that endpoint. Without any workaround, It should in theory error out like "Domain cannot be resolved". I don't know how Matt Harbison ran the test. This patch changes the test to only depend on `lfs-test-server`. Unfortunately the logic has to be changed since `lfs-test-server` does not set error code to 404 but just removes "download" from "actions". Differential Revision: https://phab.mercurial-scm.org/D1849
Sun, 14 Jan 2018 18:12:51 -0500 lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com> [Sun, 14 Jan 2018 18:12:51 -0500] rev 35665
lfs: control tracked file selection via a tracked file Since the lfs tracking policy can dramatically affect the repository, it makes more sense to have the policy file checked in, than to rely on all developers configuring their .hgrc properly. The inspiration for this is the .hgeol file. The configuration lives under '[track]', so that other things can be added in the future. Eventually, the config option should be limited to `convert` only. If the file can't be parsed for any reason (including unrecognized elements of the minifileset language), the commit will abort until the problem is corrected. This seems more useful than the warning that hgeol emits, and has no effect on reading the data, so there's no compatibility concerns. My initial thought was to read the file and change each "key = value" line into "((key) & (value))", so that each line could be ORed together, and make a single pass at compiling. Unfortunately, that prevents exclusions if there's a catchall rule. Consider what happens to a large *.c file here: [track] **.c = none() ** = size('>1MB') # ((**.c) & (none())) | ((**) & (size('>1MB'))) => anything > 1MB I also thought about having separate [include] and [exclude] sections. But that just seems to open things up to user mistakes. Consider: [include] **.zip = all() **.php = size('>10MB') [exclude] **.zip = all() # Who wins? **.php = none() # Effectively 'all()' (i.e. nothing excluded), or >10MB ? Therefore, it just compiles each key and value separately, and walks until the key matches something. I'm not sure how to enforce just file patterns on LHS without leaking knowledge about the minifileset here. That means this will allow odd looking lines like this: [track] **.c | **.txt = none() But that's also fewer lines to compile, so slightly more efficient? Some things like 'none()' won't work as expected on LHS though, because that won't match, so that line is skipped. For now, these quirks are not mentioned in the documentation. Jun previously expressed concern about efficiency when scaling to large repos, so I tried avoiding 'repo[None]'. (localrepo.commit() gets repo[None] already, but doesn't tie it to the workingcommitctx used here.) Therefore, I looked at the passed context for 'AMR' status. But that doesn't help with the normal case where the policy file is tracked, but clean. That requires looking up p1() to read the file. I don't see any way to get the content of one file without first creating the full parent context.
(0) -30000 -10000 -3000 -1000 -300 -100 -56 +56 +100 +300 +1000 +3000 +10000 tip