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
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
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.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 14 Jan 2018 01:04:45 -0500] rev 35664
lfs: move the tracked file function creation to a method
Once a commitable file format for tracked config is agreed upon, I can't see any
reason to have a config based way to control this. (Other than convert. That
will be necessary to override the file when converting to normal files. Also,
converting to lfs needs this if not splicing the file in at the beginning. So
maybe the existing config option should be `convert` specific.) Looking to
hgeol for precedent, it looks like policy that affects how items are stored are
handled only by the tracked file, while policy that affects the checkout can be
handled by either a user config or the tracked file (but the latter takes
precedence).
We probably need a transition period, so this transition policy can be
controlled by the function. Additionally, it provides a place for convert to
wrap to override the file based config.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 16 Jan 2018 20:15:07 -0500] rev 35663
lfs: allow the pointer file to be viewed with `hg cat -T '{rawdata}'`
The only other interface to this data is `hg debugdata`, which requires
knowledge of the filelog revision that corresponds to the changeset. Since the
data is uninterpreted, this is an important debugging capability, and needs to
be simpler to use than that.
For non-LFS files, this displays the regular data.
Alternately, we could forego the messy function extraction in the last patch if
this template keyword can just be added unconditionally.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 16 Jan 2018 19:56:00 -0500] rev 35662
cat: factor out a function that populates the formatter
This will allow extensions to add data to the templater.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Sun, 14 Jan 2018 12:07:06 -0500] rev 35661
svnsubrepo: add new method _svnmissing
This is modelled after _gitmissing from
dea6efdd7ec4 and also
necessary for svn. I'm not sure exactly how this hasn't been more of a
problem for svn until now, actually.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Sun, 14 Jan 2018 12:05:28 -0500] rev 35660
svnsubrepo: decorate dirty method with annotatesubrepoerror
This function invokes svn commands which can error out in any number
of ways, so it's helpful to know in which subrepo this error happens.
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.