Yuya Nishihara <yuya@tcha.org> [Tue, 16 Jan 2018 22:14:33 +0900] rev 35659
match: do not weirdly include explicit files excluded by -X option
Actually, this was the original behavior. Before
a83a7d27911e, "log" and
"files" showed nothing if "FILE -X FILE" was specified, whereas "debugwalk"
got confused by an explicit FILE pattern. Under the hood, "log" and "files"
use m() and ctx.matches(m) respectively, and "debugwalk" uses ctx.walk(m).
I suspect dirstate.walk() goes wrong in _walkexplicit(), which seems to
blindly trust m.files().
I reckon the original "log"/"files" behavior is correct, and drop the hack
from the differencematcher.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 14 Jan 2018 15:56:22 -0500] rev 35658
lfs: add the '{oid}' template keyword to '{lfs_files}'
The 'sha256:' prefix is skipped because this seems like the most convenient way
to consume it. Maybe we should also add a '{oid_type}' keyword? Then again,
that can be added in the future if a different algorithm is supported.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 14 Jan 2018 15:39:10 -0500] rev 35657
lfs: convert '{lfs_files}' keyword to a hybrid list
This will allow more attributes about the file to be queried.
Boris Feld <boris.feld@octobus.net> [Sun, 10 Dec 2017 21:42:33 +0100] rev 35656
showstack: add an extension docstring
Now, running `hg help showstack` will give details on how to use the extension.
Boris Feld <boris.feld@octobus.net> [Mon, 15 Jan 2018 10:44:49 +0000] rev 35655
bookmark: run 'pushkey' hooks after bookmark move, not 'prepushkey'
This was a silly copy paste mistake.
Spotted by Mitchell Plamann from Jane Street.
Anton Shestakov <av6@dwimlabs.net> [Mon, 15 Jan 2018 19:44:18 +0800] rev 35654
hgweb: remove unused second argument of nextPageVarGet()
nextPageVarGet is a function that's used in ajaxScrollInit() to produce URL of
the next page. Before
f84b01257e06, its second argument previousVal was a
number on /graph pages, and the code was simply adding 60 to it and returning
the resulting value. Now previousVal can only be a string containing changeset
hash, which can't be used the same way (and in fact isn't used in any way).
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 14 Jan 2018 20:06:56 -0800] rev 35653
dispatch: handle IOError when writing to stderr
Previously, attempts to write to stderr in dispatch.run() may lead to
an exception being thrown. This would likely be handled by Python's
default exception handler, which would print the exception and exit
1.
Code in this function is already catching IOError for stdout failures
and converting to exit code 255 (-1 & 255 == 255). Why we weren't
doing the same for stderr for the sake of consistency, I don't know.
I do know that chg and hg diverged in behavior here (as the changed
test-basic.t shows).
After this commit, we catch I/O failure on stderr and change the
exit code to 255. chg and hg now behave consistently. As a bonus,
Rust hg also now passes this test.
I'm skeptical at changing the exit code due to failures this late
in the process. I think we should consider preserving the current
exit code - assuming it is non-0. And, we may want to preserve the
exit code completely if the I/O error is EPIPE (and potentially
other special error classes). There's definitely room to tweak
behavior. But for now, let's at least prevent the uncaught exception.
Differential Revision: https://phab.mercurial-scm.org/D1860
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 14 Jan 2018 19:30:48 -0800] rev 35652
commandserver: restore cwd in case of exception
The order of the statements was also changed a bit. But it shouldn't
matter.
Differential Revision: https://phab.mercurial-scm.org/D1859
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 10 Jan 2018 20:02:35 -0800] rev 35651
tests: make hg frame optional
When `hg` is a Rust binary, the `hg` frame doesn't exist because an
`hg` Python script doesn't exist.
This commit updates expected test output to make the `hg` frame
optional.
There /might/ be a way to do this more accurately with the
"(feature !)" syntax in .t files. However, I poked at it for a
few minutes and couldn't get it to work. Worst case with using
(?) is we drop the frame from output for Python `hg`. The `hg`
frame isn't terribly important. So the worst case doesn't feel that
bad. If someone wants to enlighten me on how to use "(feature !)"
for optional output based on hghave features, I'd be more than
willing to update this.
Differential Revision: https://phab.mercurial-scm.org/D1858
Matt Harbison <matt_harbison@yahoo.com> [Sat, 13 Jan 2018 22:40:33 -0500] rev 35650
test-lfs: add tests to show that hashes remain unchanged by conversions
This is a very cool feature that we should document, but I'll punt that to the
freeze. From what I can tell, git doesn't have this capability.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 13 Jan 2018 22:29:18 -0500] rev 35649
test-lfs: drop an unresolved issue note, now that lfs.track=none() is a thing
Matt Harbison <matt_harbison@yahoo.com> [Sat, 13 Jan 2018 20:07:14 -0500] rev 35648
lfs: always exclude '.hg*' text files
I can't think of any problematic scenarios (though things might get interesting
with .hgtags, since every head is consulted). The eol extension explicitly
disables handling these files, and that seems reasonable here too.
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 15 Jan 2018 00:16:11 +0530] rev 35647
bookmarks: calculate visibility exceptions only once
In the loop "for mark in names", the rev is same in each iteration, so it does
not makes sense to call unhidehashlikerevs multiple times. Thanks to Yuya for
spotting this.
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Dec 2017 18:25:33 +0900] rev 35646
log: rewrite --follow-first -rREV like --follow for consistency (BC)
This helps fixing the "--follow -rREV PATH" issue.
.. bc::
``log --follow-first -rREV``, which is deprecated, now follows the first
parent of merge revisions from the specified ``REV`` just like
``log --follow -rREV``.
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Jan 2018 17:37:01 +0900] rev 35645
log: use revsetlang.formatspec() thoroughly
This patch replaces %(val)s and %(val)r with %r (expression) and %s (string)
respectively. _matchfiles() is the exception as it takes a list of string
parameters.
"--prune REV" could take a revset expression if it were "ancestors(%(val)s)",
but this patch doesn't change the existing behavior.
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Jan 2018 17:13:18 +0900] rev 35644
log: use revsetlang.formatspec() to concatenate list expression
This rewrites 'not ancestors(x) and not ...' as 'not (ancestors(x) or ...)'
so we can use '%lr'. 'isinstance(val, list)' is replaced with 'listop' to
make sure 'listop' is applied.
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Jan 2018 17:00:48 +0900] rev 35643
log: simplify 'x or ancestors(x)' expression
'ancestors(x)' includes 'x'.
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Jan 2018 16:58:37 +0900] rev 35642
log: make opt2revset table a module constant
Just makes it clear that the table isn't updated in _makelogrevset().
Paul Morelle <paul.morelle@octobus.net> [Sun, 14 Jan 2018 13:04:26 -0800] rev 35641
revlog: group revision info into a dedicated structure
Paul Morelle <paul.morelle@octobus.net> [Sun, 14 Jan 2018 13:01:35 -0800] rev 35640
revlog: rename 'rev' to 'base', as it is the base revision
Paul Morelle <paul.morelle@octobus.net> [Sun, 14 Jan 2018 12:59:46 -0800] rev 35639
revlog: separate diff computation from the collection of other info
Paul Morelle <paul.morelle@octobus.net> [Fri, 12 Jan 2018 18:58:44 +0100] rev 35638
revlog: introduce 'deltainfo' to distinguish from 'delta'
A 'delta' is a binary diff between two revisions, as returned by revdiff.
A 'deltainfo' is an object storing information about a delta, including
the 'delta' itself.
Formerly, it was stored in a 7-position tuple, which was less readable.
Paul Morelle <paul.morelle@octobus.net> [Fri, 12 Jan 2018 18:10:03 +0100] rev 35637
revlog: extract 'builddelta' closure function from _addrevision
Paul Morelle <paul.morelle@octobus.net> [Fri, 12 Jan 2018 15:55:25 +0100] rev 35636
revlog: extract 'buildtext' closure function from _addrevision
Paul Morelle <paul.morelle@octobus.net> [Sun, 14 Jan 2018 12:49:24 -0800] rev 35635
revlog: choose between ifh and dfh once for all
Paul Morelle <paul.morelle@octobus.net> [Sun, 14 Jan 2018 12:46:03 -0800] rev 35634
revlog: refactor out the selection of candidate revisions
The new function will be useful to retrieve all the revisions which will be
needed to determine the best delta, and parallelize the computation of the
necessary diffs.
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Dec 2017 00:13:56 +0530] rev 35633
py3: use email.parser module to parse email messages
Before this patch we use email.Parser.Parser() from the email module which is
not available on Python 3.
On Python 2:
>>> import email
>>> import email.parser as emailparser
>>> email.Parser.Parser is emailparser.Parser
True
Yuya Nishihara <yuya@tcha.org> [Fri, 12 Jan 2018 22:18:42 +0900] rev 35632
rust: convert Unix path to CString transparently
On Unix, path is just a sequence of bytes. We shouldn't convert it to UTF-8
string.
Yuya Nishihara <yuya@tcha.org> [Fri, 12 Jan 2018 22:09:34 +0900] rev 35631
rust: extract function to convert Path to platform CString
It can be better on Unix.
Boris Feld <boris.feld@octobus.net> [Mon, 09 Oct 2017 11:46:27 +0200] rev 35630
pylint: add a check for multiple statement on a single line
Now that they are all cleaned up, we can install a check so that no new
occurrence appears.
Differential Revision: https://phab.mercurial-scm.org/D1834
Boris Feld <boris.feld@octobus.net> [Mon, 09 Oct 2017 11:45:21 +0200] rev 35629
style: remove multiple statement on a single line in zeroconf
Differential Revision: https://phab.mercurial-scm.org/D1833
Boris Feld <boris.feld@octobus.net> [Mon, 09 Oct 2017 11:44:02 +0200] rev 35628
style: remove multiple statement on a single line
This is similar to the change made in
5326e4ef1dab.
Differential Revision: https://phab.mercurial-scm.org/D1832
Boris Feld <boris.feld@octobus.net> [Mon, 09 Oct 2017 11:40:15 +0200] rev 35627
pylint: split command line argument on multiple lines
This clarify the important line in that configuration.
Differential Revision: https://phab.mercurial-scm.org/D1831
Tom Prince <mozilla@hocat.ca> [Sun, 14 Jan 2018 11:24:43 -0800] rev 35626
phabricator: use named group for parsing differential reviews lines
Differential Revision: https://phab.mercurial-scm.org/D1801
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Jan 2018 13:47:10 +0900] rev 35625
vfs: drop text mode flag (API)
It's useless on Python 3.
.. api::
``text=False|True`` option is dropped from the vfs interface because of
Python 3 compatibility issue. Use ``util.tonativeeol/fromnativeeol()`` to
convert EOL manually.
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Jan 2018 13:41:11 +0900] rev 35624
lfs: convert EOL of hgrc before appending to bytes IO
Text IO is useless on Python 3 as it must be a unicode stream.
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Jan 2018 13:33:55 +0900] rev 35623
largefiles: convert EOL of hgrc before appending to bytes IO
Text IO is useless on Python 3 as it must be a unicode stream.
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Jan 2018 13:31:27 +0900] rev 35622
share: convert EOL of hgrc before writing to bytes IO
Text IO is useless on Python 3 as it must be a unicode stream.
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Jan 2018 13:28:12 +0900] rev 35621
subrepo: convert EOL of hgrc before writing to bytes IO
Follows up
f2f0a777b2e2. Text IO is useless on Python 3 as it must be a
unicode stream.
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Jan 2018 13:24:17 +0900] rev 35620
clone: use utility function to write hgrc
Yuya Nishihara <yuya@tcha.org> [Sat, 13 Jan 2018 13:23:16 +0900] rev 35619
share: use context manager or utility function to write file
Matt Harbison <matt_harbison@yahoo.com> [Sun, 31 Dec 2017 02:54:49 -0500] rev 35618
lfs: migrate most file filtering from threshold to custom filter
Migrate `lfs.threshold` to more powerful `lfs.filter` added by
D4990618 so
people can specify what files to be stored in LFS with more flexibility.
This patch was authored by Jun Wu for the fb-experimental repo, to avoid using
matcher for efficiency[1]. All I've changed here is to register the new
'lfs.track' default so that the tests run cleanly, and adapt the subsequent
language changes. Migrating the remaining uses of 'lfs.threshold' can be done
separately since there's a fallback in place.
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-December/109388.html
Matt Harbison <matt_harbison@yahoo.com> [Sun, 31 Dec 2017 12:47:36 -0500] rev 35617
test-lfs: bump the number on test repo11 and higher
This will allow a Facebook patch that creates 'repo11' to be imported without
breaking a bunch of tests, or requiring edits on the fly.
Matt Harbison <matt_harbison@yahoo.com> [Wed, 10 Jan 2018 22:23:34 -0500] rev 35616
fileset: add a lightweight file filtering language
This patch was inspired by one that Jun Wu authored for the fb-experimental
repo, to avoid using matcher for efficiency[1]. We want a way to specify what
files will be converted to LFS at commit time. And per discussion, we also want
to specify what files to skip, text diff, or merge in another config option.
The current `lfs.threshold` config option could not satisfy complex needs. I'm
putting it in a core package because Augie floated the idea of also using it for
narrow and sparse.
Yuya suggested farming out to fileset.parse(), which added support for more
symbols. The only fileset element not supported here is 'negate'. (List isn't
supported by filesets either.) I also changed the 'always' token to the 'all()'
predicate for consistency, and introduced 'none()' to improve readability in a
future tracked file based config. The extension operator was changed from '.'
to '**', to match how recursive path globs are specified. Finally, I changed
the path matcher from '/' to 'path:' at Yuya's suggestion, for consistency with
matcher. Unfortunately, ':' is currently reserved in filesets, so this has to
be quoted to be processed as a string instead of a symbol[2]. We should
probably revisit that, because it's seriously ugly. But it's only used by an
experimental extension, and I think using a file based config for LFS may drive
some more tweaks, so I'm settling for this for now.
I reserved all of the glob characters in fileset except '.' and '_' for the
extension test because those are likely valid extension characters.
Sample filter settings:
all() # everything
size(">20MB") # larger than 20MB
!**.txt # except for .txt files
**.zip | **.tar.gz | **.7z # some types of compressed files
"path:bin" # files under "bin" in the project root
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-December/109387.html
[2] https://www.mercurial-scm.org/pipermail/mercurial-devel/2018-January/109729.html
Matt Harbison <matt_harbison@yahoo.com> [Wed, 10 Jan 2018 22:35:08 -0500] rev 35615
fileset: split the logic for matching a size expression to a separate method
This will be used in the next patch to build a simple filtering language, but
where we won't have an mctx.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 12 Jan 2018 23:13:38 -0500] rev 35614
lfs: drop deprecated remote store config options
The last of these were removed from fb-experimental in
86884a51e9aa, and we
might as well clean this up before the freeze.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 12 Jan 2018 18:11:05 +0530] rev 35613
py3: use bytes instead of pycompat.bytestr
Follow up for
35fb3367f72d.
Differential Revision: https://phab.mercurial-scm.org/D1854
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