largefiles: handle commit -A properly, after a --large commit (issue3542)

Previous to this, 'commit -A' would add as normal files, files that were already
committed as largefiles, resulting in files being listed twice by 'status -A'.
It also missed when (only) a largefile was deleted, even though status reported
it as '!'.  This also has the side effect of properly reporting the state of the
affected largefiles in the post commit hook after a remove that also affected a
normal file (the largefiles used to be 'R', now are properly absent).

Since scmutil.addremove() is called both by the ui command (after some trivial
argument validation) and during the commit process when -A is specified, it
seems like a more appropriate method to wrap than the addremove command.

Currently, a repo is only enabled to use largefiles after an add that explicitly
identifies some file as large, and a subsequent commit.  Therefore, this patch
only changes behavior after such a largefile enabling commit.

Note that in the test, if the final commit had a '-v', 'removing large8' would
be printed twice.  Both of these originate in removelargefiles().  The first
print is in verbose mode after traversing remove + forget, the second is because
the '_isaddremove' attr is set and 'after' is not.

--HG--
branch : stable
extra : rebase_source : 16cc43f93585acd27f3a1d641539ffa875586b29
largefiles: enable islfilesrepo() prior to a commit (issue3541)

Previously, even if a file was added with --large, 'hg addremove' or 'hg ci -A'
would add all files (including the previously added large files) as normal
files.  Only after a commit where a file was added with --large would subsequent
adds or 'ci -A' take into account the minsize or the pattern configuration.
This change more closely follows the help for largefiles, which mentions that
'add --large' is required to enable the configuration, but doesn't mention the
previously required commit.

Also, if 'hg add --large' was performed and then 'hg forget <file>' (both before
a largefile enabling commit), the forget command would error out saying
'.hglf/<file> not tracked'.  This is also fixed.

This reports that a repo is largefiles enabled as soon as a file is added with
--large, which enables 'add', 'addremove' and 'ci -A' to honor the config
settings before the first commit.  Note that prior to the next commit, if all
largefiles are forgotten, the repository goes back to reporting the repo as not
largefiles enabled.

It makes no sense to handle this by adding a --large option to 'addremove',
because then it would also be needed for 'commit', but only when '-A' is
specified.  While this gets around the awkwardness of having to add a largefile,
then commit it, and then addremove the other files when importing an existing
codebase (and preserving that extra commit in permanent history), it does still
require finding and manually adding one of the files as --large.  Therefore it
is probably desirable to have a --large option for init as well.

--HG--
branch : stable
extra : rebase_source : 99912d76c20eec72188bc23a1e5f0d674f03b921
histedit: documents the between function
histedit document the makedest function
histedit: move `between function` outside the action logic

Having this function in the middle of action and patching logic did not make
sense
histedit: move makedesc function near other rules related function

Having it in the middle of action logic is confusing
histedit: fold in memory

Update the folding code to works in memory instead of applying patches on the
working directory. This is cleaner, faster and prepare the removal of the whole
patching logic.

This new collapse function will probably move into core sooner or later. A lot
of other rewriting operation may benefit from it.
histedit: display action being processed in debug mode

This is very useful when debugging histedit.
histedit-test: ensure that non commute test will never commute

The previous version would commute if using merge algorithm (to be accurate,
merge will cleanly prompt the user during the merge).

The new version create and initial commit with some content for all involved
files en ensure all changes are a content changes of the first lines. This lead
to guaranteed conflict when commuted.
histedit: replaces patching logic by merges

The old and fragile patching logic is replaced by smart merges (as rebase and
graft do). This should prevents some conflicts and smoother human resolution.

For this purpose the "foldchanges" function is renamed to "applychanges" and
handle a single revision only.
doc: add the tool to check section marks in help documents

This patch adds "doc/check-seclevel.py" which checks below in help
documents:

  - whether unknown or unavailable section marks are used or not
  - whether appropriate section mark is used at sub-sectioning

It should be invoked in "doc" directory.

It checks all help documents of Mercurial (topics, commands,
extensions), if no file is specified by --file option.

With --file option, it checks contents of the specified file as help
document, for self testing purpose: -t/-c/-e/-C are used to specify
what kind of help document contents of the specified file is.

This checking is related to changeset 979b107eaea2.
scmutil: rename classes from "opener" to "vfs"

For backwards compatibility, aliases for the old names are added,
except for "abstractopener", "statichttpopener" and "_fncacheopener",
because these are not used in Mercurial core implementation after this
patch.

"_fncacheopener" was only referred in "fncachestore" constructor, so
this patch also renames from "_fncacheopener" to "_fncachevfs" there.
localrepo: use "vfs" constructor instead of "opener" one

This patch also changes initialization order of "*opener" and "*vfs"
fields: first, "*vfs" fields are initialized , and then, "*opener"
ones are initialized.
store: rename "openertype" argument to "vfstype"
store: rename "op" variables to "vfs"
store: initialize "vfs" fields by "vfs" constructors

For backwards compatibility, "opener" fields are still left as aliases
for "vfs" ones.
localrepo: use "vfs" constructor/field for initialization around "store"
i18n-ru: fix spelling of "unrecognized response" translation

--HG--
branch : stable
merge with i18n

--HG--
branch : stable
i18n-ru: synchronized with 6e2ab601be3f

--HG--
branch : stable