Yuya Nishihara <yuya@tcha.org> [Sat, 31 Mar 2018 10:28:18 +0900] rev 37213
py3: fix fix doctests to be bytes-safe
Matt Harbison <matt_harbison@yahoo.com> [Wed, 28 Mar 2018 00:11:09 -0400] rev 37212
server: add an error feedback mechanism for when the daemon fails to launch
There's a recurring problem on Windows where `hg serve -d` will randomly fail to
spawn a detached process. The reason for the failure is completely hidden, and
it takes hours to get a single failure on my laptop. All this does is redirect
stdout/stderr of the child to a file until the lock file is freed, and then the
parent dumps it out if it fails to spawn.
I chose to put the output into the lock file because that is always cleaned up.
There's no way to report errors after that anyway. On Windows, killdaemons.py
is roughly `kill -9`, so this ensures that junk won't pile up.
This may end up being a case of EADDRINUSE. At least that's what I saw spit out
a few times (among other odd errors and missing output on Windows). But I also
managed to get the same thing on Fedora 26 by running test-hgwebdir.t with
--loop -j10 for several hours. Running `netstat` immediately after killing that
run printed a wall of sockets in the TIME_WAIT state, which were gone a couple
seconds later. I couldn't match up ports that failed, because --loop doesn't
print out the message about the port that was used. So maybe the fix is to
rotate the use of HGPORT[12] in the tests. But, let's collect some more data
first.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 30 Mar 2018 20:53:36 -0400] rev 37211
tests: conditionalize test-stream-bundle-v2 for Windows
Connor Sheehan <sheehan@mozilla.com> [Mon, 19 Mar 2018 11:16:21 -0400] rev 37210
templatefuncs: add mailmap template function
This commit adds a template function to support the .mailmap file
in Mercurial repositories. The .mailmap file comes from git, and
can be used to map new emails and names for old commits. The general
use case is that someone may change their name or author commits
under different emails and aliases, which would make these
commits appear as though they came from different persons. The
file allows you to specify the correct name that should be used
in place of the author field specified in the commit.
The mailmap file has 4 possible formats used to map old "commit"
names to new "proper" names:
1. <proper@email.com> <commit@email.com>
2. Proper Name <commit@email.com>
3. Proper Name <proper@email.com> <commit@email.com>
4. Proper Name <proper@email.com> Commit Name <commit@email.com>
Essentially there is a commit email present in each mailmap entry,
that maps to either an updated name, email, or both. The final
possible format allows commits authored by a person who used
both an old name and an old email to map to a new name and email.
To parse the file, we split by spaces and build a name out
of every element that does not start with "<". Once we find an element
that does start with "<" we concatenate all the name elements that preceded
and add that as a parsed name. We then add the email as the first
parsed email. We repeat the process until the end of the line, or
a comment is found. We will be left with all parsed names in a list,
and all parsed emails in a list, with the 0 index being the proper
values and the 1 index being the commit values (if they were specified
in the entry).
The commit values are added as the keys to a dict, and with the proper
fields as the values. The mapname function takes the mapping object and
the commit author field and attempts to look for a corresponding entry.
To do so we try (commit name, commit email) first, and if no results are
returned then (None, commit email) is also looked up. This is due to
format 4 from above, where someone may have a mailmap entry with both
name and email, and if they don't it is possible they have an entry that
uses only the commit email.
Differential Revision: https://phab.mercurial-scm.org/D2904
Kyle Lippincott <spectral@google.com> [Fri, 30 Mar 2018 12:16:46 -0700] rev 37209
extdiff: document that it copies modified files back to working directory
Differential Revision: https://phab.mercurial-scm.org/D2976
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 30 Mar 2018 13:39:06 -0700] rev 37208
zope: force module import by importing symbols
Previously, we tried to import a module and handle the ImportError.
Our lazy module importer doesn't verify the module exists and returns
a dummy object representing the module. Only once we attempt to load
a symbol in the module does the ImportError get raises.
This means that simple imports inside `try..except ImportError` don't
detect missing modules.
This commit changes imports in zope.interface to access symbols, thus
forcing module load and triggering ImportError.
This fixes zope.interface for pure builds.
Differential Revision: https://phab.mercurial-scm.org/D2980
Danny Hooper <hooper@google.com> [Fri, 30 Mar 2018 13:17:20 -0700] rev 37207
fix: remove unused imports
Differential Revision: https://phab.mercurial-scm.org/D2977
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Mar 2018 17:26:43 +0530] rev 37206
infinitepush: introduce server option to route every push to bundlestore
This patch introduces a new config option for server
`infinitepush.pushtobundlestore` which if sets to True, the server will route
each incoming push to the bundlestore and store all the parts i.e. changegroups,
phases, obsmarkers in the bundlestore and won't be applied to the revlog.
This config option does not need any client side wrapping and does not need any
custom bundle2 part or stream level parameter to decide where the push should
go.
This is very useful for Mozilla CI use case where they have a central server
that recieves pushes to trigger code-reviews, trigger a test run of CI, run
static analysis etc. The server using the new config option can stash standalone
bundles to the bundlestore and server can get access to individual revisions on
demand.
A new test file which has related tests are added for the config option.
Differential Revision: https://phab.mercurial-scm.org/D2958
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Mar 2018 17:19:02 +0530] rev 37205
infinitepush: don't wrap bundle2.processparts while calling `hg unbundle`
This patch adds dirty logic to check whether we are processing `hg unbundle`
instead of an `hg incoming` to prevent the wrapping of bundle2.processparts
function.
Differential Revision: https://phab.mercurial-scm.org/D2957
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Mar 2018 14:15:42 +0530] rev 37204
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Recently in core, util.py is splitted into various modules in mercurial/utils/.
Differential Revision: https://phab.mercurial-scm.org/D2956
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 30 Mar 2018 12:50:06 -0700] rev 37203
infinitepush: delete the non-forward-move flag for hg push
Differential Revision: https://phab.mercurial-scm.org/D2955
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 21 Mar 2018 19:23:10 +0530] rev 37202
infinitepush: drop the wrapping of update command on client side
The extension wraps update command to client side to add functionality to pull
and checkout to a revision if it does not present locally. There is a twist to
that, only changesets which can resolve to remotenames can be pulled using this.
Differential Revision: https://phab.mercurial-scm.org/D2954
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 30 Mar 2018 12:49:50 -0700] rev 37201
infinitepush: delete infinitepushcommands.py and related tests
This patch drops infinitepushcommands.py and the tests which were related to the
command `debugfillinfinitepushmetadata` introduced in the commit.
The patch also drops a config option which was related to
debuginfinitepushmetadata command.
Differential Revision: https://phab.mercurial-scm.org/D2953
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Mar 2018 18:04:05 +0530] rev 37200
infinitepush: delete infinitepush.fillmetadatabranchpattern config option
This patch deletes the config option infinitepush.fillmetadatabranchpattern
which if set to true sets a background process which will save metadata in
infinitepush index.
This series is meant to have a state where we can use it for CI purposes.
Differential Revision: https://phab.mercurial-scm.org/D2952
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 09 Feb 2018 15:49:46 +0530] rev 37199
infinitepush: drop the `--to` flag to push and use `-B` instead
The extension added a `--to` flag to specify the bookmark to which revs should
be pushed. This patch deletes that flag and instead uses the `-B` flag. After
this patch, bookmark passed as `-B` is parsed and if it matches the infinitepush
bookmark pattern, we consider that push as infinitepush.
This is still not the best of what we can do. Later patches in the series will
drop the use of `-B` flag and will instead handle things at bookmark bundle2
part. Plugging these logic to bookmark bundle2 part will also get rid of the
scratchbranchparttype bundle2 part.
Differential Revision: https://phab.mercurial-scm.org/D2108
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 09 Feb 2018 14:16:03 +0530] rev 37198
infinitepush: drop the `--create` flag to push command
The extension added a `--create` flag for creating a new bookmark on the
bundlestore. This patch changes the bahviour to create a bookmark if it does not
exists and removes the requirement of the `--create` and then drop the logic
around the `--create` flag.
Tests are changed to drop the usage of `--create` flag.
Differential Revision: https://phab.mercurial-scm.org/D2107
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 09 Feb 2018 14:02:03 +0530] rev 37197
infinitepush: drop logic related to treemanifest extension
treemanifest is another facebook's extension which is not in core. Let's drop
the logic related to infinitepush extension which is now ported to core.
Differential Revision: https://phab.mercurial-scm.org/D2106
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 09 Feb 2018 13:56:09 +0530] rev 37196
infinitepush: drop hack related to --to, --create flags of remotenames-ext
The remotenames extension has --to, --create. --allow-anon flags which won't be
ported to core. This patch drops the hack which fixes the interaction with
remotenames-ext during push.
In upcoming patches, --to and --create extensions will be removed from
infinitepush also.
Differential Revision: https://phab.mercurial-scm.org/D2105
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 09 Feb 2018 13:50:16 +0530] rev 37195
infinitepush: drop error handling while pushing to svn server
This is something which is internal to Facebook and we don't want in core.
Differential Revision: https://phab.mercurial-scm.org/D2104
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 09 Feb 2018 13:36:50 +0530] rev 37194
infinitepush: drop `--list-remote`, `--remote-path` flags to bookmark cmd
The extension adds these two flags to list remote bookmarks using the `hg
bookmark` command. These are not required in core currently and needs some
discussion before getting them in, so let's drop them for now. This makes us
deleting the wrapping of `hg bookmark` command on client side.
The end goal here is to have minimal or no wrapping at client side.
Differential Revision: https://phab.mercurial-scm.org/D2103
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 08 Feb 2018 17:27:47 +0530] rev 37193
infinitepush: drop the scratchbookmarksparttype bundle2 part
The scratchbookmarksparttype bundle2 part was used in backupcommands.py which we
deleted in an earlier changeset. We don't need this part anymore. Moreover we
now have bookmarks bundle2 part in core which we can use. This patch also drops
the related encoding and decoding functions.
Differential Revision: https://phab.mercurial-scm.org/D2102
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 08 Feb 2018 17:18:28 +0530] rev 37192
infinitepush: remove wrapping around bundle2._addpartsfromopts()
This wrapping around bundle2._addpartsfromopts() was added by me while hacking
on an alternate way to mark a push as infinitepush or not. However the wrapping
is wrong as the push command does not go through the code path which was wrapped
on the client side.
Differential Revision: https://phab.mercurial-scm.org/D2101
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 08 Feb 2018 17:12:53 +0530] rev 37191
infinitepush: delete the bundle2 part ordering related to pushrebase
pushrebase is another Facebook extension which does not live in core yet. So
let's remove the logic which make sures infinitepush part is moved before the
pushrebase one.
Differential Revision: https://phab.mercurial-scm.org/D2100
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 08 Feb 2018 17:09:24 +0530] rev 37190
infinitepush: delete the hack to load the extension after remotenames
The remotenames extension which circumvents the default push implementation
lives outside the core, so let's delete logic related to loading of extension on
the basis of remotenames ext.
Differential Revision: https://phab.mercurial-scm.org/D2099