Ryan McElroy <rm@fb.com> [Mon, 09 Feb 2015 11:02:45 -0800] rev 24124
extensions: allow extending command synopsis and docstring
Mercurial uses a synopsis string and the docstring of a command for the
command's help output. Today there is no way for an extension that adds
functionality to a command to extend either of these help strings.
This patch enables appending to both the doctring and the synopsis, and adds
a test for this functionality. Example usage is shown in the test and is also
described in the docstring of extensions.wrapcommand().
Mike Edgar <adgar@google.com> [Wed, 21 Jan 2015 17:11:37 -0500] rev 24123
revlog: _addrevision creates full-replace deltas based on censored revisions
A delta against a censored revision is either received through exchange and
written blindly to a revlog, or it is created by the revlog itself. This
change ensures the latter process creates deltas which fully replace all
data in a censored base using a single patch operation.
Recipients of a delta against a censored base will verify that the delta is in
this full-replace format. Other recipients will use the delta as normal.
For background and broader design of the censorship feature, see:
http://mercurial.selenic.com/wiki/CensorPlan
Mike Edgar <adgar@google.com> [Fri, 06 Feb 2015 01:38:16 +0000] rev 24122
revlog: special case expanding full-replacement deltas received by exchange
When a delta received through exchange is added to a revlog, it will very
often be expanded to a full text by applying the delta to its base. If
that delta is of a particular form, we can avoid decoding the base revision.
This avoids an exception if the base revision is censored.
For background and broader design of the censorship feature, see:
http://mercurial.selenic.com/wiki/CensorPlan
Martin von Zweigbergk <martinvonz@google.com> [Tue, 10 Feb 2015 16:17:15 -0800] rev 24121
test-merge-tools: fix flaky test by avoiding debugsetparents
debugsetparents is a debug command and does not provide the same
guarantees as non-debug commands do. In particular, when the user sets
a different parent, any clean files will remain clean in the dirstate
even though the new parent might have a different version of the file
(so it should appear modified compared to the new parent). Let's
instead achieve the same effect by updating to the new parent and
reverting the contents back to what they were.
This fix can be tested by passing '--config
debug.dirstate.delaywrite=2' to the 'hg update' command in the
beforemerge().
Mike Edgar <adgar@google.com> [Fri, 06 Feb 2015 00:55:29 +0000] rev 24120
revlog: in addgroup, reject ill-formed deltas based on censored nodes
To ensure interoperability when clones disagree about which file nodes are
censored, a restriction is made on deltas based on censored nodes. Any such
delta must replace the full text of the base in a single patch.
If the recipient of a delta considers the base to be censored and the delta
is not in the expected form, the recipient must reject it, as it can't know
if the source has also censored the base.
For background and broader design of the censorship feature, see:
http://mercurial.selenic.com/wiki/CensorPlan
Mike Edgar <adgar@google.com> [Wed, 21 Jan 2015 16:35:09 -0500] rev 24119
mdiff: add helper for making deltas which replace the full text of a revision
This helper will be used initially for censor-aware delta generation. Deltas
which replace the full contents of the base revision are guaranteed to apply
correctly regardless of whether the delta recipient has censored the base.
For background and broader design of the censorship feature, see:
http://mercurial.selenic.com/wiki/CensorPlan
Mike Edgar <adgar@google.com> [Fri, 23 Jan 2015 17:01:39 -0500] rev 24118
revlog: add "iscensored()" to revlog public API
The iscensored method will be used by the exchange layer to reject
nonconforming deltas involving censored revisions (and to produce
conforming deltas).
For background and broader design of the censorship feature, see:
http://mercurial.selenic.com/wiki/CensorPlan
Mike Edgar <adgar@google.com> [Fri, 06 Feb 2015 01:44:24 +0000] rev 24117
filelog: allow censored files to contain padding data
To ensure delta compatibility, when a revision is censored, it is
padded to match the original data in size. The previous check does
not allow for padding because it was added before padding was found
to be a requirement.
For more background and design of the censorship feature, see:
mercurial.selenic.com/wiki/CensorPlan
Yuya Nishihara <yuya@tcha.org> [Thu, 08 Jan 2015 23:43:15 +0900] rev 24116
revset: drop factory that promotes spanset to fullreposet
All callers use fullreposet where appropriate.
Backed out changeset
fbae659543cf
Yuya Nishihara <yuya@tcha.org> [Thu, 08 Jan 2015 23:46:54 +0900] rev 24115
revset: specify fullreposet without using spanset factory
The factory function will be removed because the subsequent patches will
make fullreposet(repo) not fully compatible with spanset(repo).
Yuya Nishihara <yuya@tcha.org> [Mon, 02 Feb 2015 22:21:07 +0900] rev 24114
revset: make match function initiate query from full set by default
This change is intended to avoid exposing the implementation detail to
callers. I'm going to extend fullreposet to support "null" revision, so
these mfunc calls will have to use fullreposet() instead of spanset().
Matt Harbison <matt_harbison@yahoo.com> [Wed, 01 Oct 2014 20:26:33 -0400] rev 24113
localrepo: don't reintroduce pruned tag entries when tagging
If a commit and a followup tag commit are pruned, there are no references to it
in any non obsolete version of .hgtags. Without this change however, the next
time a tag is added to another branch, the obsolete references are appended in
.hgtags before the new entries for the current tag command.
The annotation to unfilter localrepo._tag() has been around since
b3af182a1944.
The log message for it mentions computing the tag cache though, so I'm not sure
if this was misplaced? It looks like branchmap was aware of filtering then, and
now tracks a cache per view.
Mateusz Kwapich <mitrandir@fb.com> [Thu, 05 Feb 2015 13:10:07 -0800] rev 24112
histedit: switch state to store node instead of ctx
Currently, if the node no longer exists, the state object fails to load
and pukes with an exception. Changing the state object to only store the
node allows callers to handle these cases. For instance, in
bootstrapcontinue we can now detect that the node doesn't exist and exit
gracefully.
The alternative is to have the state object store something like None
when the node doesn't exist, but then outside callers won't be able to
access the old node for recovery (unless we store both the node and the
ctx, but why bother).
More importantly it allows us to detect this case when doing hg histedit
--abort. Currently this situation results in both --continue and
--abort being broken and the user has to rm .hg/histedit-state to unwedge
their repo.
(description by Durham Goode)
Mateusz Kwapich <mitrandir@fb.com> [Fri, 30 Jan 2015 16:47:35 -0800] rev 24111
histedit: don't allow to strip nodes which are necessary to continue histedit
During histedit we don't want user to do any operation resulting in
stripping nodes needed to continue history editing. This patch
wraps the strip function to detect such situations.
Martin von Zweigbergk <martinvonz@google.com> [Tue, 17 Feb 2015 23:20:55 -0800] rev 24110
subrepo: add tests for change/remove conflicts
There are currently no tests for change/remove conflicts of subrepos,
and it's pretty broken. Add some tests demonstrating some of the
breakages and fix the most obvious one (a KeyError when trying to look
up a subrepo in the wrong context).
Anton Shestakov <engored@ya.ru> [Thu, 12 Feb 2015 10:38:33 +0800] rev 24109
hgweb: recreate old DOM structure for css in monoblue style
There's a "p.changeset-age span" css block in style-monoblue.css with quite a
bit of rules, including position. They were all unused, since there weren't
matching span element inside the p.changeset-age.
The span was removed in
b24e5a708fad (as it seemed meaningless at the time?)
and since then relative changeset age text looked weird and broken.
"age" class is used for calculating relative changeset age in javascript: all
content of such element is replaced with human-friendly text (e.g.
"yesterday"). So the new span gets the age class.
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Feb 2015 19:57:07 +0900] rev 24108
shellquote: fix missing quotes for empty string
"hg kdiff3 -rREV" did not work because
1642eb429536 and
5edb387158a1 failed
to handle empty argument.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Feb 2015 16:09:43 -0800] rev 24107
trydiff: transpose 'if opts.git or losedatafn' with 'if f[12]'
Perhaps it's more readable this way...
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 23:29:00 -0800] rev 24106
trydiff: extract function that generates filename pairs
The code that identifies copies/renames, as well as the filenames
before and after, is now isolated and we can extract it to a function
so it can be overridden by extensions (in particular the narrow clone
extension).
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 23:18:43 -0800] rev 24105
trydiff: read file data in only one place
This moves getfilectx() out of the initial block in the loop, leaving
that block to be only about finding pairs of filenames in ctx1 and
ctx2 to diff.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 23:13:48 -0800] rev 24104
trydiff: set filename variables to None even when not opts.git or losedatafn
There is not much left of the first block "if opts.git or losedatafn"
block now. The next patch will move the call to getfilectx() out of
that block. We will then be using the defined-ness of 'f1' to tell
whether the file existed in ctx1 (and under what name). We will need
this information whether or not opts.git or losedatafn was set, so
just remove that guard. The only operation in the block that is not
cheap is the call to getfilectx(), but that has an extra 'if opts.git'
guard already.
--ignore-space-change proves that only 'if opts.git or losedatafn:'
was removed.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 23:01:00 -0800] rev 24103
trydiff: read flags in one place
Now that we can trust f1/f2 to indicate whether that side of the diff
exists, we can move the calls to ctx.flag() to a single place.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Feb 2015 15:21:56 -0800] rev 24102
trydiff: break 'if opts.git or losedatafn' into two
This moves the initialization 'binary' closer to its other assignment,
but exists mostly to simplify future patches.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 22:42:35 -0800] rev 24101
trydiff: make filenames None when they don't exist
f1 and f2 are currently set always set to some filename, even for
added or deleted files. Let's instead set them to None to indicate
that one side of the diff doesn't exist. This lets us use the filename
variables instead of the content variables and simplify a bit since
the empty string is not a valid filename. More importantly, it paves
the way for further simplifications.
Augie Fackler <augie@google.com> [Tue, 10 Feb 2015 10:57:58 -0500] rev 24100
test-help: add test to demonstrate that 'hg help merge-tools' is sane
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 09 Feb 2015 23:07:39 -0800] rev 24099
help.merge-tools: do not double document merge tools
Merge tools were being double documented in help system output due
to functions being defined under multiple names in the merge tools
dictionary.
Establish a new dictionary for just the tools to document and
use it from the help system so we don't get double output.
Double documentation likely plagues other auto-documented items
as well. It might be a good idea to eventually compare function
instances to filter out duplicate entries from dictionaries
passed to ``makeitemsdoc``. However, without an easy way to break
ties, this may result in some functions being advertised over
their modern equivalents. This would be a noble patch series.
But it isn't one this author is willing to tackle at this time.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 09 Feb 2015 14:59:04 -0800] rev 24098
help: teach topic symbols how to dedent
When using docstrings for documenting symbols such as revsets,
templates, or hgweb commands, documentation likely has leading
whitespace corresponding to the indentation from the Python source
file.
Up until this point, the help system stripped all leading and
trailing whitespace and replaced it with 2 spaces of leading
whitespace. There were a few bad side-effects. First, sections
could not be used in docstrings because they would be indented
and the rst parser would fail to parse them as sections. Also,
any rst elements that required indentation would lose their
indentation, again causing them to be parsed and rendered
incorrectly.
In this patch, we teach the topic symbols system how to dedent
text properly. I argue this mode should be enabled by default.
However, I stopped short of changing that because it would cause
a lot of documentation reformatting to occur. I'm not sure if
people are relying on or wanting indentation. So, dedenting has
only been turned on for hgweb symbols. This decision should be
scrutinized.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:25:40 -0800] rev 24097
webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:19:59 -0800] rev 24096
webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:11:54 -0800] rev 24095
webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:08:30 -0800] rev 24094
webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:06:44 -0800] rev 24093
webcommands: document "comparison" web command