Yuya Nishihara <yuya@tcha.org> [Sun, 10 Jun 2018 15:52:27 +0900] rev 38580
match: resolve 'set:' patterns first in _buildmatch()
This just makes the next patch less complicated. The order of 'set:' and
'subinclude:' expansion doesn't matter.
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Jun 2018 15:47:58 +0900] rev 38579
match: explode if unsupported pattern passed down to _regex() builder
Yuya Nishihara <yuya@tcha.org> [Sat, 09 Jun 2018 21:13:24 +0900] rev 38578
match: add basic wrapper for boolean function
This serves as a generic wrapper for fileset predicates. In future patches,
a fileset expression will be mapped to a tree of matchers for a better support
of match attributes such as visitdir(). For example,
$ hg debugwalk -v 'set:contrib/** and binary()'
* matcher:
<intersectionmatcher
m1=<patternmatcher patterns='(?:contrib/.*$)'>,
m2=<predicatematcher pred=binary>>
...
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Jun 2018 17:19:31 +0900] rev 38577
stringutil: move _formatsetrepr() from smartset
I'll add a matcher subclass wrapping a boolean function, which will use
buildrepr() to provide debugging information in a similar way to
smartset.filteredset.
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Jun 2018 17:07:29 +0900] rev 38576
pycompat: move rapply() from util
I want to use rapply() in utils.* modules, but that would introduce a
reference cycle util -> utils.* -> util. Moving rapply() to pycompat
should be okay since it mostly serves as a compatibility helper.
Sushil khanchi <sushilkhanchi97@gmail.com> [Thu, 05 Jul 2018 09:53:00 +0530] rev 38575
strip: improve help text for --no-backup option
Help text is modified to clearly define the meaning of
--no-backup option.
Differential Revision: https://phab.mercurial-scm.org/D3886
Matt Harbison <matt_harbison@yahoo.com> [Thu, 05 Jul 2018 15:07:29 -0400] rev 38574
test-convert: demonstrate an unstable hash issue for bzr -> hg -> hg
It looks like the manifest value changing is the only difference, but I'm not
sure why it's happening. I've got a similar divergence in a production repo
that was also converted from bzr and has an octopus merge[1]. Unlike here, the
manifest values for the destination merge commits reflect the initial merge
only, instead of all four merges agreeing like this test.
$ hg -R src_repo manifest -r 310 --debug | grep file # octopus fixup merge
2d8775bc2481bd28ac87038ecdf33e1dbddc80e9 644 file1
6adb9353a55bb8be76e71382efc724ec3ccf7ed5 644 file2
$ hg -R src_repo manifest -r 309 --debug | grep file # first merge
362e7cb5163153c4989daad1a834871ae849f205 644 file1
2c65d947191938c3ea616b7ceb7648ff3843261f 644 file2
$ hg -R dst_repo manifest -r 273 --debug | grep file # octopus fixup merge
362e7cb5163153c4989daad1a834871ae849f205 644 file1
2c65d947191938c3ea616b7ceb7648ff3843261f 644 file2
$ hg -R dst_repo manifest -r 272 --debug | grep file # first merge
362e7cb5163153c4989daad1a834871ae849f205 644 file1
2c65d947191938c3ea616b7ceb7648ff3843261f 644 file2
This divergence is espcially annoying because unlike changelog differences, I
haven't figured out a way to fix this in code. The only way I found to work
around it is to convert up to the point of divergence, `hg bundle` the bad
revision in the source, apply it to the destination, add a line to the shamap,
and fire off the conversion again.
But I suspect that there's more to it than just the octopus merge because
I also have a commit in the same repo, done in Mercurial (well after the
conversion) that is exhibiting a similar issue (and it's not a merge commit).
I'm almost positive that it was created with 4.4 or later. Any ideas?
[1] https://www.mercurial-scm.org/pipermail/mercurial/2018-June/050924.html
Matt Harbison <matt_harbison@yahoo.com> [Thu, 05 Jul 2018 15:07:29 -0400] rev 38573
convert: add a config knob for not saving the bzr revision
Now that the timestamp is fixed, the log of the Mercurial repo is still
unstable with --debug, because the bzr commit ID keeps changing. Both hg and
git implement `convert.*.saverev`, so do the same here.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 05 Jul 2018 15:07:29 -0400] rev 38572
test-bzr: use a fixed commit time
This will help stabilize the hashes when converting to a Mercurial repo.
Boris Feld <boris.feld@octobus.net> [Wed, 23 May 2018 15:31:44 +0200] rev 38571
diff: use `context.diff` to produce diff
We want to make sure `context.diff` if full featured. Using it in the main
diff code path is a good way to do so.
The end goal is to be able to easily compute diff between in-memory context.
Boris Feld <boris.feld@octobus.net> [Sat, 23 Jun 2018 15:03:05 +0200] rev 38570
context: no longer accept diff options as dictionnary
Since we already broke the API earlier in this stack, there are no point to
introducing a new deprecation warning.
Boris Feld <boris.feld@octobus.net> [Sat, 23 Jun 2018 15:00:16 +0200] rev 38569
obsutil: pass a diffopts object to context.diff
Boris Feld <boris.feld@octobus.net> [Sat, 23 Jun 2018 14:46:28 +0200] rev 38568
synthrepo: pass a diffopts object to context.diff
Boris Feld <boris.feld@octobus.net> [Sat, 23 Jun 2018 14:42:58 +0200] rev 38567
webutil: pass a diffopts object to context.diff
Boris Feld <boris.feld@octobus.net> [Sat, 23 Jun 2018 14:37:10 +0200] rev 38566
revset: pass an explicit `diffopts` objet to context.diff
Boris Feld <boris.feld@octobus.net> [Sat, 23 Jun 2018 14:30:31 +0200] rev 38565
template: directly instantiate diff options for diffstat
Boris Feld <boris.feld@octobus.net> [Sat, 23 Jun 2018 13:26:23 +0100] rev 38564
tests: update test-context.py to use diffopts as diff argument
Boris Feld <boris.feld@octobus.net> [Thu, 28 Jun 2018 16:11:13 +0200] rev 38563
diffutil: extract diff options code into a dedicated util-module
We want to be able to create and use diffoptions in more places. Currently the
official function to instantiate diffoptions live into `mercurial.patch`. A
module too high level to be easily imported in some places.
So we extract the diff options related function in their own utility module.
Augie Fackler <augie@google.com> [Thu, 05 Jul 2018 01:04:32 -0400] rev 38562
packaging: add fedora 28
Differential Revision: https://phab.mercurial-scm.org/D3892
Augie Fackler <augie@google.com> [Thu, 05 Jul 2018 02:11:06 -0400] rev 38561
packaging: add missing path segments in cp statements in fedora build
Differential Revision: https://phab.mercurial-scm.org/D3891
Augie Fackler <augie@google.com> [Thu, 05 Jul 2018 01:07:00 -0400] rev 38560
packaging: fix misplaced ( in docker-fedora rule definition
Differential Revision: https://phab.mercurial-scm.org/D3890
Augie Fackler <augie@google.com> [Thu, 05 Jul 2018 01:04:22 -0400] rev 38559
packaging: make help output correct for fedora and centos targets
Differential Revision: https://phab.mercurial-scm.org/D3889
Augie Fackler <augie@google.com> [Thu, 05 Jul 2018 01:02:59 -0400] rev 38558
packaging: remove stray = that confuses make(1) on my Mac
Differential Revision: https://phab.mercurial-scm.org/D3888
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 01 Jul 2018 14:25:44 -0700] rev 38557
manifest: define and implement addgroup() on manifestlog
Changegroup code was bypassing our manifest interface and calling a
method on the private revlog attribute.
This commit formalizes the interface for adding a group of
revisions from deltas and changes the changegroup code to use it.
This enables alternate manifest storage to work with changegroup
application operations (like `hg unbundle` and `hg pull`).
Differential Revision: https://phab.mercurial-scm.org/D3883
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 04 Jul 2018 12:12:49 -0700] rev 38556
manifest: define and implement rev() on manifestlog
Various code is accessing repo.manifestlog._revlog - a private
attribute. This bypasses our interface and makes it difficult to
implement non-revlog manifest storage.
This commit adds a rev() method to the manifestlog interface and
class and teaches callers to use it.
Ideally this method wouldn't exist, as very few consumers should
need to resolve the revision number of a manifest. Again, the
primary goal of interface work is to establish and use interfaces
first and to improve them later.
Differential Revision: https://phab.mercurial-scm.org/D3882
Martin von Zweigbergk <martinvonz@google.com> [Mon, 02 Jul 2018 11:14:13 -0700] rev 38555
tests: don't allow reodering of glob/re lines across non-glob/re lines
As shown in the test case added in the previous patch, it can be
really hard to interpret diffs from the test runner if there are
multiple lines that would match a given glob or regular expression. It
looks like this has been the case since 1ad0ddf8cccc (run-tests: teach
_processoutput to handle multiple lines of churn, 2016-03-17). It
seems like the point of that was to preserve the "(glob)" annotation
on lines even if they got moved. This patch tries to preserve that but
only allows the lines to be moved past other glob/re lines.
Differential Revision: https://phab.mercurial-scm.org/D3881
Martin von Zweigbergk <martinvonz@google.com> [Fri, 29 Jun 2018 11:29:03 -0700] rev 38554
tests: add test showing puzzling test output with (glob) lines
When using multiple (glob) lines, the test runner often moves the
lines around in the output on failure. I have run into this problem
many times. The added test shows one example of this. Note that it
doesn't show the mismatching lines and instead shows diff hunks that
appear to replace a literal by a glob, and other hunks that should
clearly match.
Differential Revision: https://phab.mercurial-scm.org/D3880
Martin von Zweigbergk <martinvonz@google.com> [Tue, 03 Jul 2018 15:30:22 -0700] rev 38553
tests: move handling of None "el" out of linematch()
It just seems odd for linematch() to know what None means.
Differential Revision: https://phab.mercurial-scm.org/D3879
Martin von Zweigbergk <martinvonz@google.com> [Mon, 02 Jul 2018 00:05:54 -0700] rev 38552
tests: remove some redundant code in run-tests
These two lines also happen below if "r" is truthy, which it is in
this case since it's equal to "retry".
Differential Revision: https://phab.mercurial-scm.org/D3878
Martin von Zweigbergk <martinvonz@google.com> [Mon, 02 Jul 2018 00:02:31 -0700] rev 38551
tests: don't reimplement enumerate() in run-tests
Differential Revision: https://phab.mercurial-scm.org/D3877
Sushil khanchi <sushilkhanchi97@gmail.com> [Thu, 05 Jul 2018 09:47:11 +0530] rev 38550
histedit: improve help text for --no-backup option
Improved help text for --no-backup option to clearly
define it's meaning.
Differential Revision: https://phab.mercurial-scm.org/D3885
Sushil khanchi <sushilkhanchi97@gmail.com> [Fri, 22 Jun 2018 23:53:43 +0530] rev 38549
histedit: add --no-backup option (issue5825)
This option provides a functionality to not store a backup
while aborting histedit in between. Also added tests for the
same.
Differential Revision: https://phab.mercurial-scm.org/D3872
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Jun 2018 18:55:04 -0700] rev 38548
tests: use interfaceutil in simplestorerepo
Without it, we crash at module import time.
This has likely been busted since 856f381ad74b.
Differential Revision: https://phab.mercurial-scm.org/D3884
Sushil khanchi <sushilkhanchi97@gmail.com> [Fri, 29 Jun 2018 01:35:09 +0530] rev 38547
rebase: improve output of --dry-run
Improved output when in dryrun, for user to make sure that
no change will be written to repository.
Differential Revision: https://phab.mercurial-scm.org/D3764
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 22:18:46 +0900] rev 38546
status: add support for log-like template keywords and functions
It's bound to ctx2 since "hg status" can be considered to show the status
of the files at ctx2 given ctx1 as the base.
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 22:11:23 +0900] rev 38545
resolve: add support for log-like template keywords and functions
It uses wctx as the associated revision since "hg resolve" is the command
to manipulate the working directory files.
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 22:06:53 +0900] rev 38544
manifest: add support for log-like template keywords and functions
"hg manifest --all" isn't supported since it has no single associated
revision.
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 22:01:20 +0900] rev 38543
files: add support for log-like template keywords and functions
Note that the ctx does not point to the revision where the file was
last changed, but the revision specified by -rREV option.
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 21:55:37 +0900] rev 38542
files: automatically populate fields referenced from template
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 22:02:53 +0900] rev 38541
grep: add support for log-like template keywords and functions
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 21:47:43 +0900] rev 38540
cat: add support for log-like template keywords and functions
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 22:22:07 +0900] rev 38539
bookmarks: add support for log-like template keywords and functions
This is basically the same as 5d9b765dbe15 "tags: unblock log-like template
keywords and functions."
Danny Hooper <hooper@google.com> [Tue, 26 Jun 2018 16:29:55 -0700] rev 38538
fix: add progress bar for number of file revisions processed
This ensures responsiveness when the configured tools are slow or numerous.
Differential Revision: https://phab.mercurial-scm.org/D3848
Danny Hooper <hooper@google.com> [Tue, 26 Jun 2018 15:30:49 -0700] rev 38537
fix: use a worker pool to parallelize running tools
This is important for usability when tools are slow or numerous.
Differential Revision: https://phab.mercurial-scm.org/D3846
Danny Hooper <hooper@google.com> [Tue, 26 Jun 2018 15:27:29 -0700] rev 38536
worker: support more return types in posix worker
This allows us to return things that aren't tuple(int, str) from worker
functions. I wanted to use marshal instead of pickle, but it seems to read from
the pipe in non-blocking mode, which means it stops before it sees the results.
The windows worker already supports arbitrary return values without
serialization, because it uses threads instead of subprocesses.
Differential Revision: https://phab.mercurial-scm.org/D3845
Boris Feld <boris.feld@octobus.net> [Tue, 19 Jun 2018 19:18:31 +0100] rev 38535
debug: process --debug flag earlier
This allow the verbosity level to be set correctly during extension
initialization.
Boris Feld <boris.feld@octobus.net> [Tue, 19 Jun 2018 19:10:31 +0100] rev 38534
test: stop passing --quiet in a run dedicated to debug output
The goal of the run is to display some debug output. Passing --quiet in this
case is strange.
Sandu Turcan <idlsoft@gmail.com> [Fri, 15 Jun 2018 14:07:13 -0400] rev 38533
acl: add bookmarks support
Originally submitted at
https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-March/080650.html
as an RFC by timeless.
.. feature::
The `acl` extension now has support for bookmarks as well as branches.
Differential Revision: https://phab.mercurial-scm.org/D3750
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Jun 2018 18:34:33 -0700] rev 38532
repository: define manifest interfaces
The long march towards declaring interfaces for repository
primitives continues.
This commit essentially defines interfaces based on the following
types:
* manifest.manifestdict -> imanifestdict
* manifest.manifestlog -> imanifestlog
* manifest.memmanifestctx -> imanifestrevisionwritable
* manifest.manifestctx -> imanifestrevisionstored
* manifest.memtreemanifestctx -> imanifestrevisionwritable
* manifest.treemanifestctx -> imanifestrevisionstored
* util.dirs -> idirs
The interfaces are thoroughly documented. Their documentation is
now better than the documentation in manifest.py in many cases.
With the exception of util.dirs, classes have been annotated with
their interfaces. (I didn't feel like util.dirs needed the
proper interface treatment.)
Tests have been added demonstrating that all classes and instances
conform to their interfaces.
This work was much easier than filelogs. That's because Durham
did an excellent job formalizing the manifest API a while back.
There are still some minor kludges with the interfaces that should
probably be addressed. But the primary goal with interface
declarations is getting something established. Once we have an
interface, we can modify it later easily enough.
Differential Revision: https://phab.mercurial-scm.org/D3869
Augie Fackler <augie@google.com> [Tue, 12 Jun 2018 11:31:20 -0400] rev 38531
narrowbundle2: when we handle a widen, mark the operation as unsafe
We have to manually drive the context manager here since the logic is
awkwardly split between a couple of places.
Differential Revision: https://phab.mercurial-scm.org/D3719
Augie Fackler <augie@google.com> [Mon, 11 Jun 2018 17:06:29 -0400] rev 38530
narrow: mark the critical chunks of narrowing/widening as unsafe
I'm _mostly_ sure these are the only unsafe chunks here.
Differential Revision: https://phab.mercurial-scm.org/D3718
Augie Fackler <augie@google.com> [Mon, 11 Jun 2018 17:03:29 -0400] rev 38529
repair: mark the critical section of strip() as unsafe
When our experimental nointerrupt feature is enabled, this will
help prevent users from corrupting their repo during a strip.
Differential Revision: https://phab.mercurial-scm.org/D3717
Augie Fackler <augie@google.com> [Wed, 27 Jun 2018 10:47:14 -0400] rev 38528
ui: add an uninterruptable context manager that can block SIGINT
The blocking of SIGINT is not done by default, but my hope is that we
will one day. This was inspired by Facebook's "nointerrupt" extension,
which is a bit more heavy-handed than this (whole commands are treated
as unsafe to interrupt). A future patch will enable this for varying
bits of Mercurial that are performing unsafe operations.
It's intentional that the KeyboardInterrupt is raised as the context
manager exits: during the span of the context manager interrupting
Mercurial could lead to data loss, but typically those spans are
fairly narrow, so we can let the unsafe block complete and then
terminate hg (which will leave the repo in a consistent state, even if
it's not the user's desired state).
.. api::
New context manager ``ui.uninterruptable()`` to mark portions of a command
as potentially unsafe places to interrupt Mercurial with Control-C or
similar.
Differential Revision: https://phab.mercurial-scm.org/D3716
Augie Fackler <augie@google.com> [Tue, 03 Jul 2018 12:22:37 -0400] rev 38527
merge with stable
Yuya Nishihara <yuya@tcha.org> [Fri, 29 Jun 2018 23:13:23 +0900] rev 38526
revset: add partial support for ancestor(wdir())
It's easy, so let's make it happen. I'm not certain if 'wdir() &' should
be required. ancestors(wdir()) works without it, but ancestor(wdir()) doesn't
as of now. That's the issue of fullreposet.__contains__() vs __and__().
Boris Feld <boris.feld@octobus.net> [Sat, 23 Jun 2018 13:19:03 +0100] rev 38525
context: also accept diff option directly
For now we accept both diff option and dictionary. This will let us upgrade
internal users gradually before we drop the old API at the end of this series.
Boris Feld <boris.feld@octobus.net> [Wed, 23 May 2018 15:31:40 +0200] rev 38524
context: also take all other arguments than `patch.diff` accept
This is needed to use `context.diff` as a full replacement of `patch.diff`
Boris Feld <boris.feld@octobus.net> [Tue, 22 May 2018 15:02:52 +0200] rev 38523
context: explicitly take diffopts in `context.diff` (API)
To provide a proper replacement for the `patch.diff(…)` function, the
`context.diff(…)` method needs to be able to take more parameters. To
distinguish the diff options from the new other arguments, we upgrade the diff
options to its own explicit argument.
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 01 Jul 2018 01:00:39 +0530] rev 38522
rebase: check whether the rebasestate exists or not a bit early
Converted the else part into `if True` because that part will soon be under a
except part.
Differential Revision: https://phab.mercurial-scm.org/D3876
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 01 Jul 2018 00:52:25 +0530] rev 38521
rebase: use staeobj to check whether interrupted rebase exists
This cleans up the code a bit.
Differential Revision: https://phab.mercurial-scm.org/D3875
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 01 Jul 2018 00:46:59 +0530] rev 38520
rebase: add a stateobj variable to rebaseruntime class
The stateobj variable is an object of state.cmdstate() and will be used in
upcoming patches to clean up the logic a bit and also use cbor format to write
data to rebasestate class.
Differential Revision: https://phab.mercurial-scm.org/D3874
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 01 Jul 2018 00:31:57 +0530] rev 38519
rebase: refactor logic to read rebasestate in a separate function
This will help us in plugging the use of state.cmdstate() to read rebasestate.
Differential Revision: https://phab.mercurial-scm.org/D3873
Boris Feld <boris.feld@octobus.net> [Fri, 22 Jun 2018 00:07:22 +0100] rev 38518
revlog: reuse 'descendant' implemention in 'isancestor'
The two functions do the same thing, but one takes nodes while the other takes
revs. Using one to implement the other make sense.
We should probably cleanup the API at some point to avoid having so many similar
functions. However, we focus on an efficient implementation for now.
Boris Feld <boris.feld@octobus.net> [Fri, 22 Jun 2018 00:05:20 +0100] rev 38517
revlog: efficient implementation of 'descendant'
Iterating over descendants is costly, because there are no "parent -> children"
pointers. Walking the other way around is much more efficient, especially on
large repositories, where descendant walks can cost seconds. And the other hand,
common ancestors code follows links in the right direction and has a compiled
implementation.
In real life usage, this saved up to 80s during some pull operations, where
descendant test happens in extension code.
Boris Feld <boris.feld@octobus.net> [Thu, 21 Jun 2018 23:56:51 +0100] rev 38516
revlog: refactor out the rev-oriented part of commonancestorheads
We plan to use this in a function taking revs as argument. Round trips to nodes
seem silly.
Boris Feld <boris.feld@octobus.net> [Thu, 21 Jun 2018 23:53:43 +0100] rev 38515
revlog: do inclusive descendant testing (API)
In many other places, a revision is considered a descendant of itself. We
update the behavior of `revlog.descendant()` to match this. (for example.
`revlog.isancestor` does inclusive testing).
No tests break, so it seems safe to do so.
This will make it easier to use a more efficient implementation in a later
changeset.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Jun 2018 16:06:05 -0700] rev 38514
manifest: make cachesize a private attribute
AFAICT this isn't accessed outside the class. It is a private
attribute and its naming should reflect that.
Differential Revision: https://phab.mercurial-scm.org/D3868
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Jun 2018 15:51:04 -0700] rev 38513
repository: document that file() return value conforms to interface
Differential Revision: https://phab.mercurial-scm.org/D3867
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 21:40:55 +0900] rev 38512
cleanup: pass in overwrite flag to hg.updaterepo() as named argument
For clarity.
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Jun 2018 07:23:02 +0530] rev 38511
histedit: use self.stateobj to check whether interrupted histedit exists
self.stateobj is an instance of state.cmdstate() class which has an .exists()
function which is used to check whether there exists an interrupted statefile or
not.
Differential Revision: https://phab.mercurial-scm.org/D3865
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Jun 2018 07:21:21 +0530] rev 38510
histedit: add a stateobj variable to histeditstate class
The stateobj variable will be an instance of state.cmdstate() class. The
stateobj variable will be used in upcoming patches to simplify the code a bit
and start using cbor to write state files.
Differential Revision: https://phab.mercurial-scm.org/D3864
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Jun 2018 07:10:49 +0530] rev 38509
histedit: factor out logic of processing state data in separate fn
The new function will serve as the point from where we always get a dictionary
of data stored in the statefile and will be helpful in integrating
state.cmdstate.read() to write statefile in cbor.
Differential Revision: https://phab.mercurial-scm.org/D3863
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Jun 2018 07:05:36 +0530] rev 38508
histedit: use hg.updaterepo() to avoid ui.{push|pop}buffer() hack
In some parts of code, we call hg.update() and surround that with
ui.pushbuffer() and ui.popbuffer() to suppress the output returned by
hg.update().
We have hg.updaterepo() which does not writes to UI and can be used instead.
Differential Revision: https://phab.mercurial-scm.org/D3862
Danny Hooper <hooper@google.com> [Fri, 29 Jun 2018 14:43:41 -0700] rev 38507
scmutil: fix __enter__ in progress context manager
Differential Revision: https://phab.mercurial-scm.org/D3861
Martin von Zweigbergk <martinvonz@google.com> [Fri, 29 Jun 2018 14:14:35 -0700] rev 38506
httppeer: fix use of uninitialized variable with devel logging
If the request fails, "res" was uninitialized.
Differential Revision: https://phab.mercurial-scm.org/D3860
Yuya Nishihara <yuya@tcha.org> [Sat, 30 Jun 2018 11:33:05 +0900] rev 38505
rebase: convert opts dict to bytes at once
Yuya Nishihara <yuya@tcha.org> [Sat, 30 Jun 2018 11:29:48 +0900] rev 38504
rebase: isolate command options from internal flags
I want to get rid of per-function byteskwargs(opts).
Sushil khanchi <sushilkhanchi97@gmail.com> [Fri, 29 Jun 2018 01:05:08 +0530] rev 38503
rebase: suppress warning thrown when aborting rebase in case of dryrun
Before this patch dryrun output contained "rebase aborted" every
time we run rebase in dryrun mode and this warning does not sound
safe from a user prespective.
Differential Revision: https://phab.mercurial-scm.org/D3857
Sushil khanchi <sushilkhanchi97@gmail.com> [Fri, 29 Jun 2018 00:47:33 +0530] rev 38502
rebase: no need to store backup in case of dryrun
While aborting an unfinished rebase in case of dryrun
there is no need to store backup for those rebased csets.
Differential Revision: https://phab.mercurial-scm.org/D3827
Sushil khanchi <sushilkhanchi97@gmail.com> [Fri, 29 Jun 2018 00:22:50 +0530] rev 38501
rebase: split _origrebase() for conveniece in dryrun
This patch split _origrebase() method by extracting rbsrt part
from that to make it easy to implement dryrun in more elegant way
than before.
Differential Revision: https://phab.mercurial-scm.org/D3856
Sushil khanchi <sushilkhanchi97@gmail.com> [Thu, 28 Jun 2018 23:57:15 +0530] rev 38500
rebase: extract dryrun as a function
To avoid more number of indented blocks and make it easier to add
additional functionality in dryrun, extracted as a function.
Differential Revision: https://phab.mercurial-scm.org/D3855
Sushil khanchi <sushilkhanchi97@gmail.com> [Thu, 28 Jun 2018 23:36:45 +0530] rev 38499
rebase: add lock to cover whole dryrun process
Before this patch it is easy for another hg to interrupt
the dryrun. This patch make sure that dryrun will complete
without any interruption.
Differential Revision: https://phab.mercurial-scm.org/D3854
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 00:26:20 +0200] rev 38498
merge: add a 'keepconflictparent' argument to graft
Before this change, `merge.graft` was always dropping the "grafted" changeset
from the parent. This is impractical in case of conflict as the second parent
can be useful to help with conflict resolution.
We add a new boolean parameter to control this behavior. This will make using
`merge.graft` directly in shelve practicable.
Differential Revision: https://phab.mercurial-scm.org/D3692
Kyle Lippincott <spectral@google.com> [Thu, 28 Jun 2018 18:07:22 -0700] rev 38497
unlinkpath: make empty directory removal optional (issue5901) (issue5826)
There are known cases where performing operations such as rebase from a
directory that is newly created can fail or at least lead to being in a
directory handle that no longer exists.
This is even reproducible by just doing something as simple as:
cd foo; hg rm *
The behavior is different if you use `hg addremove`, the directory is not
removed until we attempt to go back to the node after committing it:
cd foo; rm *; hg addremove; hg ci -m'bye foo'; hg co .^; hg co tip
Differential Revision: https://phab.mercurial-scm.org/D3859
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 28 Jun 2018 21:24:47 +0530] rev 38496
py3: convert opts keys to bytes using pycompat.byteskwargs()
This fixes the py3 build broken due to
56b2074114b19e12abd9cd4c378d58b702232705.
Differential Revision: https://phab.mercurial-scm.org/D3853
Matt Harbison <matt_harbison@yahoo.com> [Thu, 28 Jun 2018 22:23:08 -0400] rev 38495
procutil: add a shim for translating shell commands to native commands
Yuya Nishihara <yuya@tcha.org> [Sat, 16 Jun 2018 23:26:40 +0900] rev 38494
revset: move lookup of first ancestor() candidate out of the loop
Yuya Nishihara <yuya@tcha.org> [Sat, 16 Jun 2018 23:21:47 +0900] rev 38493
revset: leverage orset() to flatten ancestor() arguments
This also makes orset() accept an empty argument because nullary ancestor()
call is valid. That's not the case for orset(), but should be okay.
Yuya Nishihara <yuya@tcha.org> [Sat, 16 Jun 2018 23:12:41 +0900] rev 38492
revset: remove orphan i18n comment from ancestor()
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com> [Thu, 28 Jun 2018 23:21:55 +0530] rev 38491
grep: deprecates `--all` flag
As the name "all" is a misnomer for an option that searches on diffs of revisions,
we are moving to diff flag from all, deprecating it in the process.
Differential Revision: https://phab.mercurial-scm.org/D3825
Martin von Zweigbergk <martinvonz@google.com> [Tue, 26 Jun 2018 10:02:01 -0700] rev 38490
namespaces: let namespaces override singlenode() definition
Some namespaces have multiple nodes per name (meaning that their
namemap() returns multiple nodes). One such namespace is the "topics"
namespace (from the evolve repo). We also have our own internal
namespace at Google (for review units) that has multiple nodes per
name. These namespaces may not want to use the default "pick highest
revnum" resolution that we currently use when resolving a name to a
single node. As an example, they may decide that `hg co <name>` should
check out a commit that's last in some sense even if an earlier commit
had just been amended and thus had a higher revnum [1]. This patch
gives the namespace the option to continue to return multiple nodes
and to override how the best node is picked. Allowing namespaces to
override that may also be useful as an optimization (it may be cheaper
for the namespace to find just that node).
I have been arguing (in D3715) for using all the nodes returned from
namemap() when resolving the symbol to a revset, so e.g. `hg log -r
stable` would resolve to *all* nodes on stable, not just the one with
the highest revnum (except that I don't actually think we should
change it for the branch namespace because of BC). Most people seem
opposed to that. If we decide not to do it, I think we can deprecate
the namemap() function in favor of the new singlenode() (I find it
weird to have namespaces, like the branch namespace, where namemap()
isn't nodemap()'s inverse). I therefore think this patch makes sense
regardless of what we decide on that issue.
[1] Actually, even the branch namespace would have wanted to override
singlenode() if it had supported multiple nodes. That's because
closes branch heads are mostly ignored, so "hg co default" will
not check out the highest-revnum node if that's a closed head.
Differential Revision: https://phab.mercurial-scm.org/D3852
Sushil khanchi <sushilkhanchi97@gmail.com> [Wed, 27 Jun 2018 12:24:21 +0530] rev 38489
rebase: refactor dryrun implementation
This patch refactor dry-run code to make it easy to add additional
functionality in dryrun. Otherwise we had to add every functionality
through _origrebase() which does not seem a good implementation.
Differential Revision: https://phab.mercurial-scm.org/D3849
Matt Harbison <matt_harbison@yahoo.com> [Sun, 02 Jul 2017 00:32:09 -0400] rev 38488
hooks: allow Unix style environment variables on external Windows hooks
This will help making common hooks between Windows and non-Windows platforms.
Having to build the shellenviron dict here and in procutil.system() is a bit
unfortunate, but the only other option is to fix up the command inside
procutil.system(). It seems more important that the note about the hook being
run reflects what is actually run.
The patch from last summer added the hooks on the command line, but it looks
like HG_ARGS has since learned about --config args, and the output was just
confusing. Therefore, it's now loaded from a file in the histedit test for
clarity.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 24 Jun 2018 01:13:09 -0400] rev 38487
windows: add a method to convert Unix style command lines to Windows style
This started as a copy/paste of `os.path.expandvars()`, but limited to a given
dictionary of variables, converting `foo = foo + bar` to `foo += bar`, and
adding 'b' string prefixes. Then code was added to make sure that a value being
substituted in wouldn't itself be expanded by cmd.exe. But that left
inconsistent results between `$var1` and `%var1%` when its value was '%foo%'-
since neither were touched, `$var1` wouldn't expand but `%var1%` would. So
instead, this just converts the Unix style to Windows style (if the variable
exists, because Windows will leave `%missing%` as-is), and lets cmd.exe do its
thing.
I then dropped the %% -> % conversion (because Windows doesn't do this), and
added the ability to escape the '$' with '\'. The escape character is dropped,
for consistency with shell handling.
After everything seemed stable and working, running the whole test suite flagged
a problem near the end of test-bookmarks.t:1069. The problem is cmd.exe won't
pass empty variables to its child, so defined but empty variables are now
skipped. I can't think of anything better, and it seems like a pre-existing
violation of the documentation, which calls out that HG_OLDNODE is empty on
bookmark creation.
Future additions could potentially be replacing strong quotes with double quotes
(cmd.exe doesn't know what to do with the former), escaping a double quote, and
some tilde expansion via os.path.expanduser(). I've got some doubts about
replacing the strong quotes in case sh.exe is run, but it seems like the right
thing to do the vast majority of the time. The original form of this was
discussed about a year ago[1].
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-July/100735.html
Anton Shestakov <av6@dwimlabs.net> [Thu, 28 Jun 2018 10:50:53 +0800] rev 38486
hgweb: add archive entries to graph page
Changelog page has them, so it makes sense to add them to graph page too.
Anton Shestakov <av6@dwimlabs.net> [Thu, 28 Jun 2018 07:41:08 +0800] rev 38485
hgweb: add z-index for search field tooltip
On graph page, search field tooltip sometimes goes down to the graph area,
where it used to be covered by foreground element of graph entries (.fg)
because they have z-index: 10.
To prevent the tooltip from being covered, z-index: 15 is enough.
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 Jun 2018 07:19:30 -0700] rev 38484
tests: pass "rev" argument to commands.update() as string
commands.update() normally gets its "rev" argument as a string, but
test-basic.t was passing an integer. That happened to work, but we
shouldn't rely on it.
Differential Revision: https://phab.mercurial-scm.org/D3851
Yuya Nishihara <yuya@tcha.org> [Wed, 27 Jun 2018 23:39:41 +0900] rev 38483
revset: fix heads() order to always follow the input set (BC)
An argument expression should never affect the order of the result set.
That's the rule of the revset predicates.
Yuya Nishihara <yuya@tcha.org> [Wed, 27 Jun 2018 23:33:57 +0900] rev 38482
test-revset: show that order of heads() can be wrong
Augie Fackler <augie@google.com> [Wed, 27 Jun 2018 10:21:07 -0400] rev 38481
stringutil: update list of re-special characters to include &~
I missed this because I was looking at the change that refactored
re.escape, and these characters were added in
https://github.com/python/cpython/commit/05cb728d68a278d11466f9a6c8258d914135c96c.
Differential Revision: https://phab.mercurial-scm.org/D3850
Augie Fackler <augie@google.com> [Tue, 26 Jun 2018 11:38:58 -0400] rev 38480
tests: fix up some lax escaping in test-template-basic.t
These misfired escapes turn into hard errors in Python 3.7, and I'd
really rather we not work around it. We should *probably* try and find
a way to proactively warn users about invalid escape sequences.
There's one more failure of this type in this file on Python 3.7, but
I can't figure out the issue. It'll need to be corrected in a
follow-up.
Differential Revision: https://phab.mercurial-scm.org/D3843
Augie Fackler <augie@google.com> [Tue, 26 Jun 2018 10:36:23 -0400] rev 38479
cleanup: migrate from re.escape to stringutil.reescape
This has consistent behavior on Python 2.7, 3.6, and 3.7 and has the
benefit of probably being a little faster. Test output changes are
largely because / used to be pointlessly escaped.
Differential Revision: https://phab.mercurial-scm.org/D3842
Augie Fackler <augie@google.com> [Tue, 26 Jun 2018 10:33:52 -0400] rev 38478
stringutil: add a new function to do minimal regex escaping
Per https://bugs.python.org/issue29995, re.escape() used to
over-escape regular expression strings, but in Python 3.7 that's been
fixed, which also improved the performance of re.escape(). Since it's
both an output change for us *and* a perfomance win, let's just
effectively backport the new behavior to hg on all Python versions.
Differential Revision: https://phab.mercurial-scm.org/D3841
Sushil khanchi <sushilkhanchi97@gmail.com> [Tue, 26 Jun 2018 16:14:02 +0530] rev 38477
graft: add no-commit mode (issue5631)
This patch adds a new flag --no-commit in graft command. This feature
grafts the changes but do not create commits for those changes, grafted
changes will be added in the working directory. Also added tests to reflect
the expected behavior.
Differential Revision: https://phab.mercurial-scm.org/D2409
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Jun 2018 02:05:11 +0530] rev 38476
patchbomb: use email.mime.base instead of email.MIMEBase
The later was removed on Python 3.
On python 2:
>>> email.MIMEBase.MIMEBase is email.mime.base.MIMEBase
True
Differential Revision: https://phab.mercurial-scm.org/D3836
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Jun 2018 02:04:17 +0530] rev 38475
patchbomb: use email.mime.multipart instead of email.MIMEMultipart
The later was removed in Python 3.
On python 2:
>>> email.MIMEMultipart.MIMEMultipart is email.mime.multipart.MIMEMultipart
True
Differential Revision: https://phab.mercurial-scm.org/D3835
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Jun 2018 01:08:47 +0530] rev 38474
py3: add b'' prefixes in tests/test-bundle2-pushback.t
This makes the test run on Python 3.
# skip-blame because just b'' prefixes.
Differential Revision: https://phab.mercurial-scm.org/D3834
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Jun 2018 00:37:02 +0530] rev 38473
py3: make tests/test-diff-antipatience.t work with python 3
On python3, if we do list(b'abcd'), we get [97, 98, 99, 100]. So this patch does
the list() operation on unicodes and then convert things to bytes.
This also adds `and None` to suppress return values of .write() calls.
Differential Revision: https://phab.mercurial-scm.org/D3833
Martin von Zweigbergk <martinvonz@google.com> [Mon, 25 Jun 2018 11:04:17 -0700] rev 38472
terse: pass "clean" and "unknown" booleans by name for clarity
Differential Revision: https://phab.mercurial-scm.org/D3838
Martin von Zweigbergk <martinvonz@google.com> [Mon, 25 Jun 2018 11:01:11 -0700] rev 38471
terse: add tests of running from subdirectory
I also included comments explaining what I think the output should be
(discussion started on D3628).
Differential Revision: https://phab.mercurial-scm.org/D3837
Yuya Nishihara <yuya@tcha.org> [Sat, 23 Jun 2018 19:23:53 +0900] rev 38470
convert: don't pass --no-files to "darcs show repo" command
The test fails with darcs 2.14.0 because --no-files is no longer supported.
It was removed at the patch 97973a52bf496657558412562d6fad2ee651b1e0, which
says "show repo: removed --files option, removed manual flags parsing."
As far as I can tell, --no-files was specified just for optimization, so old
darcs should work without it.
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 00:15:44 +0200] rev 38469
shelve: stop testing missing rebase state file
We no longer use the file. Neither during rebase not during continue.
Differential Revision: https://phab.mercurial-scm.org/D3691
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 00:12:35 +0200] rev 38468
shelve: actually test corrupted shelve state
The test was previous moving the corrupted shelve state file as an histedit
state file.
Differential Revision: https://phab.mercurial-scm.org/D3690
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 00:13:48 +0200] rev 38467
shelve: directly handle `--continue`
Shelve is currently sub-contracting some of its work to the rebase extension.
In order to make shelve more independent and flexible we would like shelve to
handle the parent alignment directly.
This changeset takes on the next step, handling the abort process. Same as for
--abort. It turns out we have all the necessary bits in the `shelvestate`
file. So we do not need anything from the interrupted rebase.
Differential Revision: https://phab.mercurial-scm.org/D3689
Boris Feld <boris.feld@octobus.net> [Mon, 28 May 2018 18:15:21 +0200] rev 38466
shelve: directly handle the abort process
Shelve is currently sub-contracting some of its work to the rebase extension.
In order to make shelve more independent and flexible we would like shelve to
handle the parent alignment directly.
This change starts with the simplest bits, handling the abort process. It
turns out we have all the necessary bits in the `shelvestate` file. So we do
not need anything from the interrupted rebase.
As a nice side effect, a test about missing `shelverebasestate` state file now
behave better.
Differential Revision: https://phab.mercurial-scm.org/D3688
Boris Feld <boris.feld@octobus.net> [Mon, 28 May 2018 20:51:20 +0200] rev 38465
shelve: check the actual shelvestate in morestatus
The rebasestate is a lower level implementation details that we are trying to
remove.
Differential Revision: https://phab.mercurial-scm.org/D3687
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 May 2018 18:44:03 -0700] rev 38464
packaging: dynamically define make targets
We currently have make boilerplate for each instance of a distro's
release. This is redundant, annoying to maintain, and prone to errors.
This commit defines variables holding available releases for
various distros. We then iterate through the list and dynamically
define make targets.
Differential Revision: https://phab.mercurial-scm.org/D3761
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 May 2018 14:41:48 -0700] rev 38463
packaging: don't write files for templatized Dockerfiles
Now that Docker image building is implemented in Python and we
can perform template substitution in memory, we don't need to
write out produced Dockerfiles to disk.
Differential Revision: https://phab.mercurial-scm.org/D3760
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 May 2018 17:03:47 -0700] rev 38462
packaging: replace dockerlib.sh with a Python script
I want to do some more advanced things with Docker in upcoming
commits. Trying to do that with shell scripts will be a bit too
painful for my liking. Implementing things in Python will be
vastly simpler in the long run.
This commit essentially ports dockerlib.sh to a Python script.
dockerdeb and dockerrpm have been ported to use the new hg-docker
script.
hg-docker requires Python 3. I've only tested on Python 3.5.
Unlike the local packaging scripts which may need to run on old
distros, the Docker packaging scripts don't have these constraints.
So I think it is acceptable to require Python 3.5.
As part of the transition, the Docker image tags changed slightly.
I don't think that's a big deal: the Docker image names are
effectively arbitrary and are a means to an end to achieve
running commands in Docker containers.
The code for resolving the Dockerfile content allows substituting
values passed as arguments. This will be used in a subsequent commit.
Differential Revision: https://phab.mercurial-scm.org/D3759
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 May 2018 15:51:37 -0700] rev 38461
packaging: consistently create build user in Dockerfiles
Previously, dockerlib.sh appended some commands to create a
"build" user in each Docker image. The resulting Docker images
could be inconsistent depending on the execution environment
and base image.
With this change, we explicitly create our custom user and
group as the first action in each Dockerfile. The user always
has user:group 1000:1000 and all built images are consistent.
We also create a home directory for the user under /build.
This directory is currently ignored.
As part of this, we stop setting the DBUILDUSER variable in
dockerlib.sh and instead set it in the respective scripts that
call it. This is in preparation for further refactoring of
dockerlib.sh.
Differential Revision: https://phab.mercurial-scm.org/D3758
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 15 Jun 2018 00:50:48 +0530] rev 38460
scmutil: move construction of instability count message to separate fn
When the commad we are running, introduces new instabilities, we show a message
like `5 new orphan changesets`, `2 new content-divergent changesets`, `1 new
phase-divergent changesets` etc which is very nice.
Now taking a step ahead, we want users to show how to fix them too. Something
like:
`5 new orphan changesets (run 'hg evolve' to resolve/stabilize them)`
`2 new content-divergent changesets (run 'hg evolve --content-divergent' to
resolve them)`
and maybe telling user a way to understand more about those new instabilities
like `hg evolve --list` or `hg log -r 'orphan()'` something like that.
The idea came from issue5855 which I want to fix because fixing that will result
in a nice UI.
Taking the construction logic out will allow extensions like evolve (maybe
rebase too) to wrap that and add information about how to resolve and how to
understand the instability more.
Differential Revision: https://phab.mercurial-scm.org/D3734
Sune Foldager <cryo@cyanite.org> [Mon, 25 Jun 2018 16:36:14 +0200] rev 38459
procutil: use unbuffered stdout on Windows
Windows doesn't support line buffering, treating it as fully buffered. This
causes output of slow commands to stutter. We use unbuffered instead.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 25 May 2018 18:16:38 +0530] rev 38458
graft: introduce --abort flag to abort interrupted graft
This patch introduces a new --abort flag to `hg graft` command which aborts an
interrupted graft and rollbacks to the state before graft.
The behavior when some of grafted changeset get's published while interrupted
graft or we have new descendants on grafted changesets is same as that of rebase
which is warn the user, don't strip and abort the abort the graft.
Tests are added for the new flag.
.. feature::
`hg graft` now has a `--abort` flag which aborts the interrupted graft and
rollbacks to state before the graft.
Differential Revision: https://phab.mercurial-scm.org/D3754
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 15 Jun 2018 02:46:34 +0530] rev 38457
graft: move `if continue` to elif and add new line
This will make upcoming patch where we introduce a new elif for the abort case
more readable. Also added a new line before the if-else starts.
Differential Revision: https://phab.mercurial-scm.org/D3752
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 15 Jun 2018 02:34:27 +0530] rev 38456
graft: start storing new nodes formed in graftstate
This patch starts storing the new nodes formed during the ongoing graft
operation in the graftstate. We need the list of new nodes formed while
implmenting `graft --abort` which will strip out the new nodes.
Differential Revision: https://phab.mercurial-scm.org/D3751
Yuya Nishihara <yuya@tcha.org> [Thu, 14 Jun 2018 23:22:51 +0900] rev 38455
show: use filter() function to strip "tip" tag
Before, an empty tag "" was inserted in place of "tip", resulting in double
spaces.
Yuya Nishihara <yuya@tcha.org> [Thu, 14 Jun 2018 23:10:14 +0900] rev 38454
templater: extend filter() to accept template expression for emptiness test
This utilizes the pass-by-name nature of template arguments.
Yuya Nishihara <yuya@tcha.org> [Thu, 14 Jun 2018 22:33:26 +0900] rev 38453
templater: introduce filter() function to remove empty items from list
The primary use case is to filter out "tip" from a list of tags.