Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 06 Mar 2017 09:44:39 +0100] rev 31275
hgweb: start enumerate at 1 in webutil.diffs's inner function prettyprintlines
Denis Laxalde <denis.laxalde@logilab.fr> [Fri, 03 Mar 2017 17:20:11 +0100] rev 31274
patch: add a diffhunks function yielding (diffheaders, hunks)
trydiff function now yield (header, hunks) tuple that are processed by
diffhunks(). Then diff() is a wrapper around diffhunks().
Denis Laxalde <denis.laxalde@logilab.fr> [Fri, 03 Mar 2017 17:46:40 +0100] rev 31273
mdiff: let unidiff return (diffheader, hunks)
This will be used to make it possible to filter diff hunks based on this range
information.
Now unidiff returns a 'hunks' generator that yield tuple (hunkrange,
hunklines) coming from _unidiff() with 'newline at end of file' processing.
Denis Laxalde <denis.laxalde@logilab.fr> [Fri, 03 Mar 2017 17:46:28 +0100] rev 31272
mdiff: extract a checknonewline inner function in unidiff()
Denis Laxalde <denis.laxalde@logilab.fr> [Fri, 03 Mar 2017 13:51:22 +0100] rev 31271
mdiff: distinguish diff headers from hunks in unidiff()
Let unidiff return the list of headers it produces (lines '--- <original>' and
'+++ <new>') apart from diff hunks. In patch.diff(), we combine headers
generated there (not specific to unified format) with those from unidiff().
By returning a list of header lines, we do not append new lines in datetag
inner function of unidiff() so that all header lines are '\n'.join-ed in a
similar way.
Denis Laxalde <denis.laxalde@logilab.fr> [Fri, 03 Mar 2017 16:17:17 +0100] rev 31270
test: end printed diff "hunks" with an empty string in test-context.py
So that the resulting diff is correct and does not include a spurious empty
line between lines "diff --git a/foo b/foo" and "--- a/foo".
Denis Laxalde <denis.laxalde@logilab.fr> [Thu, 02 Mar 2017 17:22:46 +0100] rev 31269
mdiff: let _unidiff yield hunks as (<range information>, <hunk lines>)
Now _unidiff yields each hunk lines packed into a tuple with the "range
information" `(s1, l1, s2, l2)` that is used to build the typical hunk header
'@@ -s1,l1 +s2,l2 @@'.
This will be used to make it possible to filter diff hunks based on this range
information.
The new "range information" is ignored in unidiff() (only caller of _unidiff)
for now.
Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 09 Jan 2017 09:34:39 +0100] rev 31268
mdiff: turn the comment above _unidiff into a docstring
Denis Laxalde <denis.laxalde@logilab.fr> [Tue, 27 Sep 2016 20:27:35 +0200] rev 31267
mdiff: compute newlines-splitted texts within _unidiff
There is no reason to compute splitted texts l1, l2 in unidiff() before
calling _unidiff as they are only used with the latter function.
Augie Fackler <augie@google.com> [Wed, 08 Mar 2017 18:32:42 -0500] rev 31266
dispatch: add pagination of two more help cases
I missed these in the last round anf Yuya spotted them in
review. Thanks!
Augie Fackler <augie@google.com> [Wed, 08 Mar 2017 18:31:33 -0500] rev 31265
help: avoid mutating passed-in `keep` list in `formattedhelp`
Augie Fackler <raf@durin42.com> [Fri, 03 Mar 2017 13:32:10 -0500] rev 31264
extensions: use [0:1] slice on config path instead of [0]
This behaves the same in Python 2 and Python 3, even though the path
is a bytes.
Augie Fackler <raf@durin42.com> [Fri, 03 Mar 2017 13:27:21 -0500] rev 31263
extensions: use inspect module instead of func_code.co_argcount
Fixes the extsetup argspec check on Python 3.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 18:29:58 -0800] rev 31262
treemanifest: add tests covering hg diff of partial trees
Previously the hg files tests also covered the logic (i.e.
treemanifest.matches) that governed how hg diff limited its diff. In a future
patch we will be switching treemanifest.diff() to have a custom implementation,
so let's go ahead and add equivalent test coverage for hg diff.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 17:52:45 -0800] rev 31261
context: remove uses of manifest.matches
This removes the uses of manifest.matches in context.py in favor of the new
manifest.diff(match) api. This is part of removing manifest.matches since it is
O(manifest).
To drop the dependency on ctx._manifestmatches(s) we transfer responsibilty for
creating status oriented manifests over to ctx._buildstatusmanifest(s). This
already existed for workingctx, we just need to implement a simple version for
basectx. The old _manifestmatches functionality is basically identical to the
_buildstatusmanifest functionality (minus the matching part), so no behavior
should be lost.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 17:49:50 -0800] rev 31260
context: remove assumptions about manifest creation during _buildstatus
Previously we called self.manifest() in some cases to preload the
first manifest. This relied on the assumption that the later
_manifestmatches() call did not duplicate any work the original
self.manifest() call did. Let's remove that assumption, since it bit
me during my refactors of this area and is easy to remove.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 17:56:30 -0800] rev 31259
context: move _manifest from committablectx to workingctx
committablectx had a _manifest implementation that was only used by the derived
workingctx class. The other derived versions, like memctx and metadataonlyctx,
define their own _manifest functions.
Let's move the function down to workingctx, and let's break it into two parts,
the _manifest part that reads from self._status, and the part that actually
builds the new manifest. This separation will let us reuse the builder code in a
future patch to answer _buildstatus with varying status inputs, since workingctx
has special behavior for _buildstatus that the other ctx's don't have.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 09:56:11 -0800] rev 31258
status: handle more node indicators in buildstatus
There are several different node markers that indicate different working copy
states. The context._buildstatus function was only handling one of them, and
this patch makes it handle all of them (falling back to file content comparisons
when in one of these states).
This affects a future patch where we get rid of context._manifestmatches as part
of getting rid of manifest.matches(). context._manifestmatches is currently
hacky in that it uses the newnodeid for all added and modified files, which is
why the current newnodeid check is sufficient. When we get rid of this function
and use the normal manifest.diff function, we start to see the other indicators
in the nodes, so they need to be handled or else the tests fail.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 18:38:20 -0800] rev 31257
merge: remove uses of manifest.matches
This gets rid of the manifest.matches calls in merge.py in favor of the new api.
This is part of getting rid of manifest.matches since it is O(manifest).
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 09:56:11 -0800] rev 31256
copies: remove use of manifest.matches
Convert the existing use of manifest.matches to use the new api. This is part
of getting rid of manifest.matches, since it is O(manifest).
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 09:56:11 -0800] rev 31255
manifest: add match argument to diff and filesnotin
As part of removing manifest.matches (since it is O(manifest)), let's start by
adding match arguments to diff and filesnotin. As we'll see in later patches,
these are the only flows that actually use matchers, so by moving the matching
into the actual functions, other manifest implementations can make more efficient
algorithsm.
For instance, this will allow treemanifest diff's to only iterate over the files
that are different AND meet the match criteria.
No consumers are changed in this patches, but the code is fairly easy to verify
visually. Future patches will convert consumers to use it.
One test was affected because it did not use the kwargs version of the clean
parameter.
Yuya Nishihara <yuya@tcha.org> [Thu, 09 Mar 2017 00:07:13 +0900] rev 31254
fileset: drop false function signatures from revs() and status() docs
They should be inserted by @predicate helper.
Yuya Nishihara <yuya@tcha.org> [Wed, 08 Mar 2017 22:30:12 +0900] rev 31253
py3: factor out bytechr() function
I also changed xrange(127) to range(127) as the number is relatively small.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:34:01 +0100] rev 31252
vfs: use 'vfs' module directly in 'test-clone-uncompressed'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:33:28 +0100] rev 31251
vfs: use 'vfs' module directly in 'test-filecache'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:33:16 +0100] rev 31250
vfs: use 'vfs' module directly in 'test-parseindex'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:33:02 +0100] rev 31249
vfs: use 'vfs' module directly in 'test-lock'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:32:49 +0100] rev 31248
vfs: use 'vfs' module directly in 'contrib/undumprevlog'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:32:27 +0100] rev 31247
vfs: use 'vfs' module directly in 'hgext.largefile'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:32:14 +0100] rev 31246
vfs: use 'vfs' module directly in 'hgext.convert'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:31:39 +0100] rev 31245
vfs: use 'vfs' module directly in 'hgext.transplant'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:31:32 +0100] rev 31244
vfs: use 'vfs' module directly in 'hgext.shelve'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:31:23 +0100] rev 31243
vfs: use 'vfs' module directly in 'hgext.mq'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 14:49:50 +0100] rev 31242
vfs: use 'vfs' module directly in 'mercurial.unionrepo'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 14:49:01 +0100] rev 31241
vfs: use 'vfs' module directly in 'mercurial.statichttprepo'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 14:47:03 +0100] rev 31240
vfs: use 'vfs' module directly in 'mercurial.bundlerepo'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:31:07 +0100] rev 31239
vfs: use 'vfs' module directly in 'mercurial.debugcommand'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:30:58 +0100] rev 31238
vfs: use 'vfs' module directly in 'mercurial.simplemerge'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:30:47 +0100] rev 31237
vfs: use 'vfs' module directly in 'mercurial.cmdutil'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:30:38 +0100] rev 31236
vfs: use 'vfs' module directly in 'mercurial.subrepo'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:30:28 +0100] rev 31235
vfs: use 'vfs' module directly in 'mercurial.archival'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:30:10 +0100] rev 31234
vfs: use 'vfs' module directly in 'mercurial.store'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:29:59 +0100] rev 31233
vfs: use 'vfs' module directly in 'mercurial.patch'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:29:43 +0100] rev 31232
vfs: use 'vfs' module directly in 'mercurial.repair'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:28:17 +0100] rev 31231
vfs: use 'vfs' module directly in 'mercurial.localrepo'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Jun Wu <quark@fb.com> [Wed, 08 Mar 2017 13:46:26 -0800] rev 31230
chg: forward user-defined signals
SIGUSR1 and SIGUSR2 are reserved for user-defined behaviors. They may be
redefined by an hg extension [1], but cannot be easily redefined for chg.
Since the default behavior (kill) is not that useful for chg, let's forward
them to hg, hoping it got redefined there and could be more useful.
[1] https://bitbucket.org/facebook/hg-experimental/commits/
e7c883a465
Jun Wu <quark@fb.com> [Wed, 08 Mar 2017 13:34:25 -0800] rev 31229
chg: document why we send SIGHUP and SIGINT to process group
This makes the code more consistent - other signals are documented.
Martin von Zweigbergk <martinvonz@google.com> [Wed, 08 Mar 2017 14:29:25 -0800] rev 31228
tests: make test-shelve.t timing-independent
It was sometimes taking 2s for me (not the "1s" the test expected).
Yuya Nishihara <yuya@tcha.org> [Wed, 08 Mar 2017 22:12:49 +0900] rev 31227
tests: make run-tests.py run on Python 3 again
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 16:27:32 -0800] rev 31226
rebase: move actual rebase into a single transaction
Previously, rebasing would open several transaction over the course of rebasing
several commits. Opening a transaction can have notable overhead (like copying
the dirstate) which can add up when rebasing many commits.
This patch adds a single large transaction around the actual commit rebase
operation, with a catch for intervention which serializes the current state if
we need to drop back to the terminal for user intervention. Amazingly, almost
all the tests seem to pass.
On large repos with large working copies, this can speed up rebasing 7 commits
by 25%. I'd expect the percentage to be a bit larger for rebasing even more
commits.
There are minor test changes because we're rolling back the entire transaction
during unexpected exceptions instead of just stopping mid-rebase, so there's no
more backup bundle. It also leave an unknown file in the working copy, since our
clean up 'hg update' doesn't delete unknown files.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 16:30:31 -0800] rev 31225
rebase: allow aborting if last-message.txt is missing
Previously, if .hg/rebasestate existed but .hg/last-message.txt was missing, 'hg
rebase --abort' would say there's no rebase in progress but 'hg checkout foo'
would say 'abort: rebase in progress'. It turns out loading the collapse message
will throw a "no rebase in progress" error if the file doesn't exist, even
though .hg/rebasestate obviously indicates a rebase is in progress.
The fix is to only throw an exception if we're trying to --continue, and to just
eat the issues if we're doing --abort.
This issue is exposed by us writing the rebase state earlier in the process.
This will be used by later patches to ensure the user can appropriately 'hg
rebase --abort' if there's a crash before the first the first commit has
finished rebasing. Tests cover all of this. The only negative affect is we now
require a hg rebase --abort in a very specific exception case, as shown in the
test.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 14:04:29 -0800] rev 31224
rebase: add storestatus support for transactions
This let's the status writing logic support transactions. This will be useful in
a later patch where we add a transaction around the entire rebase.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 14:11:44 -0800] rev 31223
rebase: move storestatus onto rebaseruntime
The rebaseruntime class already has the restorestatus function, so let's make it
own the store status function too. This get's rid of a lot of unnecessary
argument passing and will make a future patch cleaner that refactors storestatus
to support transactions.
Durham Goode <durham@fb.com> [Tue, 07 Mar 2017 14:19:08 -0800] rev 31222
rebase: clear updatestate during rebase --abort in more cases
Previously, rebase --abort would only call update if you were on a node that had
already been rebased. This meant that if the rebase failed during the rebase of
the first commit, the working copy would be left dirty (with a .hg/updatestate
file) and rebase --abort would not have update to clean it up.
The fix is to also perform an update if you're still on the target node or on
the original working copy node (since the working copy may be dirty, we still
need to do the update). We don't want to perform an update in all cases though
because of
issue4009.
A subsequent patch makes this case much more common, since it causes the entire
rebase transaction to rollback during unexpected exceptions. This causes the
existing test-rebase-abort.t to cover this case.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 08 Mar 2017 00:49:15 +0530] rev 31221
repoview: convert attribute names to unicodes on Python 3
In Python 3, the attribute names must be strings i.e. unicodes.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 08 Mar 2017 00:45:19 +0530] rev 31220
parsers: alias long to int on Python 3
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 08 Mar 2017 00:40:15 +0530] rev 31219
store: slice over a bytestring to get characters instead of ascii values
On Python 2,
>>> a = b'abc'
>>> a[1]
'b'
Whereas on python 3,
>>> a = b'abc'
>>> a[1]
98
>>> a[1:2]
b'b'
This does not change behaviour on python 2.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 13:27:42 +0100] rev 31218
vfs: use 'vfs' module directly in 'mercurial.hg'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 01 Mar 2017 11:00:12 +0100] rev 31217
vfs: extract 'vfs' class and related code to a new 'vfs' module (API)
The 'scmutil' is growing large (1500+ lines) and 2/5 of it is related to vfs.
We extract the 'vfs' related code in its own module get both module back to a
better scale and clearer contents.
We keep all the references available in 'scmutil' for now as many reference
needs to be updated.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 02 Mar 2017 03:52:36 +0100] rev 31216
vfs: replace 'scmutil.opener' usage with 'scmutil.vfs'
The 'vfs' class is the first class citizen for years. We remove all usages of
the older API. This will let us remove the old API eventually.