test-fncache: test reserved / long paths

testing the store path encoding with real files
check-code: replace heredocs in unified tests

Heredocs are usually fed to other commands and
shouldn't follow the standard conventions of shell
commands.

This restores the old behaviour of how heredocs
were handled in old-style test files.
fancyopts: don't show a traceback on invalid integer values
Merge
clfilter: do not use branchmap cache if there are filtered changesets

If there are filtered changesets the cache is not valid. We'll have to cache
branchmap for filtered state too, but for now recomputing the branchmap is
enough.

--HG--
extra : rebase_source : 46fbaa6478850783343fe99a4ab92f7d1ea61504
clfilter: do not use tags cache if there are filtered changesets

If there are filtered changesets the cache is not valid. We'll have to cache
tags for filtered state too, but for now recomputing the tags is enough.

--HG--
extra : rebase_source : a2da7e1616d531eae94261f7651d09e256f8b4f4
hidden: remove tags use in hidden computation

Tags initially prevented revision to be hidden. It seemed a bad idea to have
tags refer to revisions that one can't see. But proper filtering of hidden
revisions excludes them from tag computation. Coming changelog filtering will do
that. Anyway, tags that really matter will likely be public and therefore not
hidden.

The current working directory parent and bookmarked revision are still not
hidden. Bookmarks were likely automatically moved at rewrite time, bookmarks
that remain on obsolete revisions were probably moved there on purpose.

--HG--
extra : rebase_source : 712bbb47af38e6cc5ddff9bec4467d82547965ff
help: add information about recovery from corruption to help of "verify"

Before this patch, there is no information about what users should (or
can) do for recovery from corruption of repositories.

This patch adds URL of the Mercurial Wiki page explaining about
recovery from corruption.
verify: use appropriate node information to show verification error

Before this patch, verify module shows verification error message
below:

    unknown parent 2 <HASH_OF_P2> of <HASH_OF_P1>

even though it should show:

    unknown parent 2 <HASH_OF_P2> of <HASH_OF_TARGET>

This patch uses appropriate node information.
verify: use appropriate local variable in "checkentry()"

Before this patch, "checkentry()" internal function uses both
"node"(argument of itself) and "n"(defined in outer of it) variables.

Because all callers of "checkentry()" use "n" to refer the object
which is passed to "checkentry()" as "node", both can refer same
object in "checkentry()". So, "checkentry()" works correctly.

But such usage is not good for independence of "checkentry()".

This patch replaces "n" in "checkentry()" with "node".
verify: rename "hasmanifest" variable for source code readability

Before this patch, there are two ambiguous variables: "havemf" and
"hasmanifest".

"havemf" means whether there are any "manifest" entries.

"hasmanifest" means whether there are any "changelog" entries
referring to "manifest" entry.

This patch renames from "hasmanifest" to "refersmf" to clear
difference from "havemf".
store: rename argument name from "op"(ener) to "vfs"
store: rename field name from "opener" to "vfs" in internal classes for fncache

These fields are used only in store module, so keeping "self.opener"
for backward compatibility like as "localrepository" class is not
needed.
scmutil: reorder newly added functions for vfs support in dictionary order

Definition functions for vfs support in dictionary order increases
readability/maintainability, because there are functions which invoke
file API:

  - with same name: "os.listdir" and "osutil.listdir", for example
  - with ambiguous names: "os.mkdir" and "util.makedirs", for example
store: initialize vfs field first to use it for initialization of others

This patch initializes "vfs" field in the constructor of each store
classes to use it for initialization of others.

In this patch, "self.vfs.base" is used to initialize "self.path",
because redo join of path components for "self.path" is redundant.
vfs: define "join()" in each classes derived from "abstractvfs"

This patch defines "join()" in each classes derived from "abstractvfs"
except "vfs", which already defines it.

This allows all vfs instances to be used for indirect file API
invocation.
store: invoke "os.stat()" for "createmode" initialization via vfs

This just replaces "os.stat()" invocation: refactoring around
"self.createmode" and "vfs.createmode" initialization is omitted.

This patch also newly adds "stat()" function to "abstractvfs".
store: replace invocation of "getsize()" by "vfs.stat()"

This patch replaces invocation of "getsize()", which calls "os.stat()"
internally, by "vfs.stat()".

The object referred by "self.rawvfs" is used internally by
"_fncachevfs" and doesn't encode filename for each file API invocation.

This patch invokes "os.stat()" via "self.rawvfs" to avoid redundant
filename encoding: invocation of "os.stat()" via "self.vfs" hides
filename encoding and encoding result from caller, so it is not
appropriate, when both encoded and non-encoded filenames should be
yield.

Even though changeset b42b0729744d improved stream_out performance by
"self.pathsep + path", this patch replaces it by
"os.path.join(self.base, path)" of vfs. So, this may increase cost to
join path components.

But this shouldn't have large impact, because:

  - such cost is much less than cost of "os.stat()" which causes
    system call invocation

  - "datafiles()" of store object is invoked only for "hg manifest
    --all" or "hg verify" which are both heavy functions
store: invoke "os.path.isdir()" via vfs

This patch invokes "os.path.isdir()" via "rawvfs" object to avoid
filename encoding, because the path passed to "os.path.isdir()"
shouldn't be encoded.

This patch newly adds "self.rawvfs" field only to "basicstore" and
"encodedstore", because "fncachestore" has "self.rawvfs" already.