Phil Cohen <phillco@fb.com> [Tue, 17 Oct 2017 12:41:24 -0700] rev 34835
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
`filecmp` follows symlinks by default, which a `filectx.cmp()` call should not
be doing as it should only compare the requested entry. After this patch, only
the contexts' data are compared, which is the correct contract.
This is a corrected version of D1122.
Differential Revision: https://phab.mercurial-scm.org/D1165
Augie Fackler <augie@google.com> [Mon, 14 Sep 2015 14:17:27 -0400] rev 34834
test-clang-format: new test to verify that files stay clang-formatted
For now all .c and .h files are blacklisted. As they become
clang-formatted, we'll remove them from the blacklist,and then this
test will produce output if there are diffs.
Differential Revision: https://phab.mercurial-scm.org/D1133
Mark Thomas <mbthomas@fb.com> [Tue, 17 Oct 2017 08:11:13 -0700] rev 34833
context: audit paths before clearing unknown files and dirs
Fix regression introduced in D785.
In some circumstances, context.clearunknown can be called before the path is
audited. Audit the path before deleting any conflicting files.
Differential Revision: https://phab.mercurial-scm.org/D1157
Mark Thomas <mbthomas@fb.com> [Tue, 17 Oct 2017 08:07:43 -0700] rev 34832
tests: add test demonstrating regression in path audit
D785 regressed behavior in path auditing: files can be deleted if they have a
path that conflicts with a filename from a malicious remote or bundle.
This test demonstrates the problem - the file should not have been deleted.
Differential Revision: https://phab.mercurial-scm.org/D1156
Boris Feld <boris.feld@octobus.net> [Fri, 13 Oct 2017 23:00:31 +0200] rev 34831
configitems: move rebase config into core
The shelve extensions import and call rebase content without loading the
extension. This is problematic as the config items rebase uses are not
declared and the default value are not set, etc...
The shelve extension should be using core utilities only and the necessary bit
should be moved from rebase into core. In the meantime, I'm taking a small
step to get config registration completed with minimal overhead. The rebase
extension is shipped with core so registering its config option within core is
not a big issue.
This is the last step needed before we can install a warning that enforces all
config to be registered.
Boris Feld <boris.feld@octobus.net> [Sat, 14 Oct 2017 01:09:46 +0200] rev 34830
eol: ensure the eol extensions is loaded when hooks run
Similar to the change we did to the 'acl' extensions, we want to make sure the
config items are registered before we run the hooks.
Boris Feld <boris.feld@octobus.net> [Sat, 14 Oct 2017 01:16:03 +0200] rev 34829
acl: make sure the extensions is enabled when the acl-hooks run
The acl extension is usually setup through hooks and never directly activated.
This means the config item declared in the extension are not loaded.
We add the necessary logic to make sure the extensions are loaded before the hook
run.
Boris Feld <boris.feld@octobus.net> [Mon, 16 Oct 2017 18:16:29 +0200] rev 34828
configitems: register the 'web.archivesubrepos' config
Boris Feld <boris.feld@octobus.net> [Sun, 08 Oct 2017 22:22:27 +0200] rev 34827
configitems: register the 'experimental.effect-flags' config
Boris Feld <boris.feld@octobus.net> [Sun, 08 Oct 2017 20:37:13 +0200] rev 34826
configitems: register the full 'merge-tools' config and sub-options
We register the merge-tools config section (which has an arbitrary base config
value) and the possible sub-attribute. The sub-attribute has to be registered
first or at the same time otherwise the '.*' item would shadow them.
Merge tools could include "." in their name so we can't constrain any more
than just ".*".
Paul Morelle <paul.morelle@octobus.net> [Sat, 14 Oct 2017 17:05:41 +0200] rev 34825
revlog-sparse-read: add a lower-threshold for read block size
The option experimental.sparse-read.min-block-size specifies the minimal size
of a deltachain span, under which it won't be split by _slicechunk.
Paul Morelle <paul.morelle@octobus.net> [Tue, 10 Oct 2017 17:50:27 +0200] rev 34824
revlog: introduce an experimental flag to slice chunks reads when too sparse
Delta chains can become quite sparse if there is a lot of unrelated data between
relevant pieces. Right now, revlog always reads all the necessary data for the
delta chain in one single read. This can lead to a lot of unrelated data to be
read (see
issue5482 for more details).
One can use the `experimental.maxdeltachainspan` option with a large value
(or -1) to easily produce a very sparse delta chain.
This change introduces the ability to slice the chunks retrieval into multiple
reads, skipping large sections of unrelated data. Preliminary testing shows
interesting results. For example the peak memory consumption to read a manifest
on a large repository is reduced from 600MB to 250MB (200MB without
maxdeltachainspan). However, the slicing itself and the multiple reads can have
an negative impact on performance. This is why the new feature is hidden behind
an experimental flag.
Future changesets will add various parameters to control the slicing heuristics.
We hope to experiment a wide variety of repositories during 4.4 and hopefully
turn the feature on by default in 4.5.
As a first try, the algorithm itself is prone to deep changes. However, we wish
to define APIs and have a baseline to work on.
Paul Morelle <paul.morelle@octobus.net> [Mon, 09 Oct 2017 15:13:41 +0200] rev 34823
revlog: ignore empty trailing chunks when reading segments
When a merge commit creates an empty diff in the revlog, its offset may still
be quite far from the end of the previous chunk.
Skipping these empty chunks may reduce read size significantly.
In most cases, there is no gain, and in some cases, little gain.
On my clone of pypy, `hg manifest` reads 65% less bytes (96140 i/o 275943) for
revision 4260 by ignoring the only empty trailing diff.
For revision 2229, 35% (34557 i/o 53435)
Sadly, this is difficult to reproduce, as hg clone can make its own different
structure every time.
Boris Feld <boris.feld@octobus.net> [Wed, 20 Sep 2017 19:17:37 +0200] rev 34822
phase: isolate logic to update remote phrase through bundle2 pushkey
Move the logic to build bundle2 pushkey part into its dedicated function. It
will help to keep the logic clear when adding support for sending phases change
using 'phase-heads' part.
Boris Feld <boris.feld@octobus.net> [Wed, 11 Oct 2017 07:40:00 +0200] rev 34821
phase: generate a push-race detection part on push
We are about to switch phase pushing from using pushkey to using a the new
dedicated binary part. We introduce the push race detection on its own to help
detect potential impact.
Boris Feld <boris.feld@octobus.net> [Wed, 11 Oct 2017 07:13:02 +0200] rev 34820
phase: introduce a new 'check:phases' part
This part checks if revisions are still in the same phase as when the
bundle was generated. This is similar to what 'check:heads' or
'check:updated-heads' bundle2 part achieves for changesets.
We needs seems before we can move away from pushkey usage from phase since
pushkey has it own built-in push-race detection.
Boris Feld <boris.feld@octobus.net> [Wed, 11 Oct 2017 18:39:04 +0200] rev 34819
phase: gather remote phase information in a summary object
We keep useful phase information around. The data will be reused with detecting
push-race in later changesets.
Boris Feld <boris.feld@octobus.net> [Wed, 11 Oct 2017 18:39:34 +0200] rev 34818
phase: simplify the check for
issue3781 shortcut in discovery
We'll rework the code around this check. Limiting the entanglement will help
with later changesets
Boris Feld <boris.feld@octobus.net> [Mon, 16 Oct 2017 12:36:42 +0200] rev 34817
exchange: fix
issue3781 reference in the comment
This comment is about:
issue3781: Courtesy Phases synchronisation to publishing server prevent
subrepo push
Not about:
issue3871: Slow hg log when template contains {file_adds}, {file_mods} and
{file_dels}
Boris Feld <boris.feld@octobus.net> [Wed, 11 Oct 2017 20:08:02 +0200] rev 34816
phase: filter out non-draft item in "draft root"
The on-disk file can contain draft root that are descendants of secret root.
The resulting phase computation is correct, but the phases root content is
not. I will send another series to introduce code that remove some of the
cases where this can happens, but we first need to damage control the existing
case.
After this changeset, we can no longer advertise secret changeset as draft
root.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 15 Oct 2017 22:48:02 -0400] rev 34815
subrepo: share instead of clone if the parent repo is shared (
issue5675) (BC)
Previously, only the top level repo was shared, and then any subrepos were
cloned on demand. This is problematic because commits to the parent repo would
write an updated .hgsubstate to the share source, but the corresponding subrepo
commit would be stuck in the local subrepo. That would prevent an update in the
source repo. We already go to great lengths to avoid having inconsistent repos
(e.g., `hg push -r rev` will push _everything_ in a subrepo, even if it isn't
referenced in one of the parent's outgoing commits). Therefore, this seems like
a bug fix, and there's no option to get the old behavior. I can't imagine the
previous behavior was useful to anybody.
There shouldn't be an issue with svn, since it is centralized. Maybe --git-dir
can be used for git subrepos, but I'll leave that to someone more familiar with
git.
An integer was previously being implicitly returned from commands.share(), which
caused dispatch() to start crashing when changing over to returning the shared
repo. All error paths appear to raise, so this can be hardcoded to success.
The clone command checks for 'is None' in a similar pattern, but since
hg.clone() always returns a tuple, that seems wrong?
.. fix:: Issue 5675
Creating a share of a repository with a Mercurial subrepository will now
share the subrepository.
and
.. bc::
Mercurial subrepositories are now shared instead of cloned when the parent
repository is shared. This prevents dangling subrepository references in the
share source. Previously shared repositories with cloned subrepositories
will continue to function unchanged.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 15 Oct 2017 16:57:34 -0400] rev 34814
tests: update output for no-symlink platforms
This goes with
eb586ed5d8ce.
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 16 Oct 2017 22:46:37 +0530] rev 34813
releasenotes: show a warning if fuzzywuzzy is not present
Differential Revision: https://phab.mercurial-scm.org/D1121
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 16 Oct 2017 22:46:11 +0530] rev 34812
releasenotes: move import of fuzzywuzzy to import level
This will help us in determining easily that whether fuzzywuzzy is loaded or not
loaded in any of the function.
Differential Revision: https://phab.mercurial-scm.org/D1120
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 15 Oct 2017 20:31:44 +0530] rev 34811
releasenotes: don't abort is there is a bad formatted entry for releasenotes
While producing releasenotes for (4.3::), releasenotes aborts with error because
of some bad formatting of releasenotes in some commits. Instead of aborting,
this adds warning message which will help us in skipping them and telling user
about it.
Differential Revision: https://phab.mercurial-scm.org/D1097
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 15 Oct 2017 20:29:16 +0530] rev 34810
releasenotes: make the import of fuzzywuzzy optional
If fuzzywuzzy is note present, we will not be having the capability to merge
existing releasenotes with the new releasenotes on the similarity basis.
The merging will still work good for exact same releasenotes entries.
Differential Revision: https://phab.mercurial-scm.org/D1096
Augie Fackler <augie@google.com> [Mon, 16 Oct 2017 22:51:58 -0400] rev 34809
webcommands: replace str(ctx) etc with pycompat.bytestr(ctx) etc
hgweb can now serve the graph view in Python 3.
Differential Revision: https://phab.mercurial-scm.org/D1138
Augie Fackler <augie@google.com> [Mon, 16 Oct 2017 22:50:39 -0400] rev 34808
templater: don't blow up when trying to build an abort message
__name__ is unicode, but we need bytes. For now, we'll make the
(mostly-safe) assumption that template filter names will be ascii.
Differential Revision: https://phab.mercurial-scm.org/D1137
Augie Fackler <augie@google.com> [Mon, 16 Oct 2017 22:44:06 -0400] rev 34807
webutil: use pycompat.bytestr() instead of str()
Stops us from choking the templater on Python 3. With this patch
applied, much of hgweb works correctly in Python 3. The notable
exception is the graph page, which chokes because it gets node IDs as
str instead of bytes.
Differential Revision: https://phab.mercurial-scm.org/D1135
Augie Fackler <augie@google.com> [Mon, 16 Oct 2017 22:43:19 -0400] rev 34806
hgweb: correct an earlier error of mine - `start` should be bytes
Gets hgweb very close to working with Python 3.
Differential Revision: https://phab.mercurial-scm.org/D1134
Boris Feld <boris.feld@octobus.net> [Mon, 16 Oct 2017 18:58:16 +0200] rev 34805
config: simplify aliasing commands.update.check
experimental.updatecheck was renamed into commands.update.check, use the
config system to provides the fallback on the old config name instead of
adding more code.
Differential Revision: https://phab.mercurial-scm.org/D1117
Jun Wu <quark@fb.com> [Wed, 04 Oct 2017 18:51:21 -0700] rev 34804
run-tests: set HGPLAIN=1 when bisecting
Otherwise a customized template may break the regex matching the bisect
output.
Differential Revision: https://phab.mercurial-scm.org/D949
Jun Wu <quark@fb.com> [Wed, 04 Oct 2017 18:50:18 -0700] rev 34803
run-tests: extract Popen logic to a single method
This removes 3 lines in total LOC and makes the upcoming changes easier.
Differential Revision: https://phab.mercurial-scm.org/D948
Jun Wu <quark@fb.com> [Wed, 04 Oct 2017 18:42:24 -0700] rev 34802
run-tests: move bisect logic to a separate method
This removes 8 space indentation and makes upcoming changes easier.
Differential Revision: https://phab.mercurial-scm.org/D947
Augie Fackler <augie@google.com> [Wed, 04 Oct 2017 11:00:04 -0400] rev 34801
mpatch: switch alignment of wrapped line from tab to spaces with clang-format
I may be a weird person for liking this style, but our C style is
historically nominally the Linux Kernel style, and when you configure
clang-format to be kernel-ish, this is what you get. If we want to
change it, we can do so by tweaking the formatter rules in the future.
Differential Revision: https://phab.mercurial-scm.org/D1132
Augie Fackler <augie@google.com> [Wed, 04 Oct 2017 10:56:33 -0400] rev 34800
mpatch: reformat function prototypes with clang-format
Differential Revision: https://phab.mercurial-scm.org/D1131
Augie Fackler <augie@google.com> [Mon, 16 Oct 2017 11:43:41 -0400] rev 34799
contrib: remove check-code rule about indentation
We're moving towards a clang-format world, and clang-format is able to
wrap argument lists with spaces reliably, while still enforcing tabs
globally. Let's let clang-format do its job, and not do as much
C-style enforcement with regular expressions.
Differential Revision: https://phab.mercurial-scm.org/D1130
Augie Fackler <raf@durin42.com> [Sat, 24 Jan 2015 17:04:25 -0500] rev 34798
clang-format: configuration for the clang-format source formatter
Differential Revision: https://phab.mercurial-scm.org/D1129
Ryan McElroy <rmcelroy@fb.com> [Fri, 06 Oct 2017 06:48:43 -0700] rev 34797
merge: allow user to halt merge on merge-tool failures
Depends on D932.
Call the new _onfilemergefailure function when a merge tool reports failure
via a return code.
Differential Revision: https://phab.mercurial-scm.org/D951
Ryan McElroy <rmcelroy@fb.com> [Fri, 06 Oct 2017 06:48:43 -0700] rev 34796
filemerge: introduce functions to halt merge flow
Depends on D931.
This patch introduces functions and a config option that will allow a user
to halt the merge if there are failures during a file merge. These functions
will be used in the next patch.
Differential Revision: https://phab.mercurial-scm.org/D932
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 15 Oct 2017 19:29:56 +0530] rev 34795
amend: add a flag `-n/--note` to store note with amend
This patch utilises the functionality added in previous patches and adds a flag
to amend command in hgext/amend to add a note to the amend. Since the note is
stored in the obsmarker metadata, this will only be useful when obsmarker
creation is enabled, otherwise this is no-op.
Not adding releasenotes part as we yet don't have a functionality in core to
show the note.
Differential Revision: https://phab.mercurial-scm.org/D1095
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 15 Oct 2017 15:32:03 +0530] rev 34794
cmdutil: pass metadata from amend() to cleanupnodes
`commit --amend` and amend command in core and extensions rely on
cmdutil.amend() for amending a commit. So the logic to add a note to amend must
reside here. This patch assumes that note will be passed in opts dictionary to
the function and it will be passed to cleanupnodes and then createmarkers to
store the note in the obsmarker metadata.
After this patch, note can be stored on an amend changeset by passing notes as a
part of opts to cmdutil.amend().
Differential Revision: https://phab.mercurial-scm.org/D1094
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 15 Oct 2017 14:34:24 +0530] rev 34793
scmutil: add capability to cleanupnodes to take obsmarker metadata
This patch adds a metadata argument to cleanupnodes() which will be dict and can
be passed to obsmarker.createmarkers() and can be stored on the obsmarker.
In cases when obsolescence is not enabled, the metadata argument is useless.
This is a step towards storing a note in amend.
Differential Revision: https://phab.mercurial-scm.org/D1093
Saurabh Singh <singhsrb@fb.com> [Mon, 16 Oct 2017 13:06:33 -0700] rev 34792
test-hgweb-annotate-whitespace: make test compatible with chg
D946 fixed a bunch of tests which had the same root cause. Please see
that for details. This seems to be one of the newer tests which fails because
of the same reason.
Test Plan:
Ran the test 'test-hgweb-annotate-whitespace.t' with and without the
'--chg' option.
Differential Revision: https://phab.mercurial-scm.org/D1124
Saurabh Singh <singhsrb@fb.com> [Mon, 16 Oct 2017 17:41:37 -0700] rev 34791
test-pager: make the test compatible with chg
D911 tried to make this test compatible with chg but instead resulted
in the test being flaky for chg. For now, disabling this test for chg because
it seems difficult to fix the test. This will allow for the continuous build
setup for chg.
Test Plan:
Ran the test 'test-pager.t' with and without the '--chg' option.
Differential Revision: https://phab.mercurial-scm.org/D1128
Saurabh Singh <singhsrb@fb.com> [Mon, 16 Oct 2017 17:06:32 -0700] rev 34790
test-obsolete-bounds-checking: make the test compatible with chg
This test fails when run with chg because the error message starts
with "ProgrammingError" instead of "mercurial.error.ProgrammingError".
Therefore, globing the "mercurial.error." to ensure that the test is compatible
with chg.
Test Plan:
Ran the test 'test-obsolete-bounds-checking.t' with and without the
'--chg' option.
Differential Revision: https://phab.mercurial-scm.org/D1127
Saurabh Singh <singhsrb@fb.com> [Mon, 16 Oct 2017 17:14:21 -0700] rev 34789
test-dispatch: make the test compatible with chg
The test is broken when run with chg because it prints a different
error message when chg is running. This commit fixes the test by special casing
for chg.
Test Plan:
Ran the test 'test-dispatch.t' with and without '--chg' option.
Differential Revision: https://phab.mercurial-scm.org/D1126
Saurabh Singh <singhsrb@fb.com> [Mon, 16 Oct 2017 12:15:00 -0700] rev 34788
histedit: remove the nonexistant config 'histeditng'
D942 removed the experimental config 'histeditng'. This is a leftover
which should have been removed in that commit. Therefore, this commit completes
the cleanup.
Test Plan:
Ran all the tests.
Differential Revision: https://phab.mercurial-scm.org/D1123