Differences between revisions 11 and 12
Revision 11 as of 2008-10-24 23:00:09
Size: 8379
Editor: abuehl
Comment: ae70fe6143fc is now in main
Revision 12 as of 2008-10-25 10:23:55
Size: 2605
Editor: hk29kj1
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
'''fncache''' is a new repository layout (or format) for Mercurial that solves the following issues: '''[http://29kj.com >>>> 香港六合彩曾道人白小姐提供六合彩资料和六合彩开奖结果]'''
Line 3: Line 3:
 * http://www.selenic.com/mercurial/bts/issue839 - Hg local store creates paths too long for Windows
 * http://www.selenic.com/mercurial/bts/issue793 - Can't clone repos that use Windows reserved names in paths
'''[http://29kj.com >>>> 香港六合彩专业网站,香港赛马会连结,提供香港六合彩特]'''
Line 6: Line 5:
Status: in [http://selenic.com/repo/index.cgi/hg/rev/7946503ec76e main] and crew repos '''[http://29kj.com >>>> 香港六合彩官方网站曾道人内幕玄香港六合 彩大公开]'''
Line 8: Line 7:
[[TableOfContents]] '''[http://1878.cc >>>> 香港六合彩天线宝宝公开内幕玄香港六合 彩]'''
Line 10: Line 9:
=== Usage === '''[http://29kj.com >>>> 香港六合彩曾道人特码主论坛六合彩图库白小姐liuhecai]'''
Line 12: Line 11:
With this change, all new repositories on all platforms will be fncache
repositories. You don't have to do anything (besides using a version
of Mercurial containing this change, which currently is in main code line
of Mercurial but has not yet been included in an official release).
'''[http://1878.cc >>>> 香港六合彩内幕玄香港六合 彩大公开]'''
Line 17: Line 13:
'''The new layout does not affect the wire (or bundle) protocol(s)
in any way.''' So you can push/pull/clone over the wire to/from
any repo being in any layout using any Mercurial version on both
ends.
'''[http://29kj.com >>>> 香港六合彩开奖结果预测、特码、图库、单双、大小、头数、尾数、平码、特围等开奖综合信息]'''
Line 22: Line 15:
New repositories are for example created by non-hardlink cloning of
existing repos or if you clone over the wire (http, ssh).
'''[http://1878.cc >>>> 香港六合彩特码白小姐网站:六合彩开奖结果最快现场直播网站]'''
Line 25: Line 17:
For example, if you have a current non-fncache repo and you do
a local `clone --pull` you will end up with an fncache repo.
If you do a plain local clone (without `--pull`) of an existing
non-fncache repo, you will get a non-fncache repo with
hardlinks to the existing repo.
'''[http://1878.cc >>>> 香港六合彩开奖现场 香港六合彩官方网 香港六合彩开奖记录 香港六合彩开奖结果 香港六合彩图库]'''
Line 31: Line 19:
In short, use `clone --pull` to convert repos (in case you
want to convert repos to the fncache repo format, which will
almost never be needed).
'''[http://1878.cc >>>> 香港六合彩公司 香港六合彩开奖 香港六合彩网站 香港六合彩总公司 香港六合彩特码 ]'''
Line 35: Line 21:
Of course old versions of Mercurial will not be able to
read fncache repos. If you try to access an fncache repo
with an old version of Mercurial it will abort with:
'''[http://29kj.com >>>> 香港六合彩开奖现场 香港六合彩官方网 香港六合彩开奖记录 香港六合彩 六合彩开奖结果]'''
Line 39: Line 23:
{{{
abort: requirement 'fncache' not supported!
}}}
'''[http://29kj.com >>>> 香港六合彩-六合彩图库/六合彩网站/偷偷暗示每期内幕特码资料]'''
Line 43: Line 25:
Which tells you that the repo at hand requires knowledge
of the fncache repo format in Mercurial.
'''[http://29kj.com >>>> 香港六合彩开奖结果:香港六合彩图库-六合彩曾道人特码-六合彩开奖结果]'''
Line 46: Line 27:
(BTW, if, for whatever reason, the fnache file in the
repo becomes corrupted, you can do a `clone --pull` to rebuild
it. The fncache file contains a list of all revlog files
in the repo).
'''[http://29kj.com >>>> 香港六合彩曾道人公开内幕资料— 香港六合彩-特码搜索]'''
Line 51: Line 29:
Existing non-fncache repositories will remain as they are,
as Mercurial will still be able to write and read non-fncache
repositories with this patch.
'''[http://29kj.com >>>> 六合彩|香港六合彩|六合彩公司|曾道人六合彩|六合彩最快开奖结果]'''
Line 55: Line 31:
In current Mercurial there is already a hgrc option
`[format] usestore` [1], which enables the current 'store' format,
which is the default in current Mercurial.
'''[http://29kj.com >>>> 香港六合彩/曾道人特码主论坛/六合彩特码主论坛/黄大仙老牌主论坛..]'''
Line 59: Line 33:
The "store" format encodes filenames with uppercase chars
'''X''' as '''_x''' (underbar + x). If you disable that, you will have to make
sure that the repo is only used on a platform that does not
fold case (that is, don't use or copy it to/on Windows).
The fncache repo layout is a descendant of the store
format, so if you disable the store format you implicitly
disable the fncache layout.
'''[http://29kj.com >>>> 香港六合彩图库,特码,平码,六合彩开奖结果,六合彩开奖历史记录]'''
Line 67: Line 35:
Currently, there is the change [http://selenic.com/repo/index.cgi/hg/rev/ae70fe6143fc ae70fe6143fc]
in main repo, which allows to disable the fncache
repo format with {{{'[format] usefncache = False'}}} in the
hgrc or with {{{--config format.usefncache=0}}} on the command line
(see also [2])
'''[http://29kj.com >>>> 香港六合彩资料|香港六合彩:香港六合彩曾道人特码|香港六合彩开奖结果...]'''
Line 73: Line 37:
 . [1] http://www.selenic.com/mercurial/hgrc.5.html#format
 . [2] http://selenic.com/pipermail/mercurial/2008-October/021980.html
'''[http://29kj.com >>>> 六合彩香港六合彩香港六合彩总公司六合彩官方网六合彩图库美香港六合 彩六肖图]'''
Line 76: Line 39:
=== Technical details === '''[http://29kj.com >>>> 香港六合彩公司|六合彩网|香港六合彩网|一字解特码|六合彩518222总公司]'''
Line 78: Line 41:
The fncache repo layout uses a new encoding for path names
inside the store.

==== Encoding of Windows reserved names ====

Path elements consisting of Windows reserved names are now
encoded using {{{~xx}}} where {{{xx}}} is the two digit ASCII hex code
of the third character of that reserved name. For example "{{{aux}}}"
is encoded as "{{{au~78}}}".

Windows reserved names are: {{{'con', 'prn', 'aux', 'nul', 'com1'..'com9'}}} and {{{'lpt1'..'lpt9'}}}.

For example the path
{{{
data/aux.bla/bla.aux/prn/PRN/lpt/com3/nul/coma/foo.NUL/normal.c.i
}}}
is encoded as
{{{
data/au~78.bla/bla.aux/pr~6e/_p_r_n/lpt/co~6d3/nu~6c/coma/foo._n_u_l/normal.c.i
}}}

Note that {{{'aux.bla'}}} needs to be encoded, but not {{{'bla.aux'}}}.

==== Hashing of long paths ====

Paths inside the store that would be longer than 120 chars are now
hash encoded.

For the encoding used see the function {{{mercurial.store.hybridencode}}}.

Some encoding examples for paths that are hashed (A1→B1, A2→B2, ...):

{{{
(A1) data/AUX/SECOND/X.PRN/FOURTH/FI:FTH/SIXTH/SEVENTH/EIGHTH/NINETH/TENTH/ELEVENTH/LOREMIPSUM.TXT.i
(B1) dh/au~78/second/x.prn/fourth/fi~3afth/sixth/seventh/eighth/nineth/tenth/loremia20419e358ddff1bf8751e38288aff1d7c32ec05.i

(A2) data/enterprise/openesbaddons/contrib-imola/corba-bc/netbeansplugin/wsdlExtension/src/main/java/META-INF/services/org.netbeans.modules.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider.i
(B2) dh/enterpri/openesba/contrib-/corba-bc/netbeans/wsdlexte/src/main/java/org.net7018f27961fdf338a598a40c4683429e7ffb9743.i

(A3) data/AUX.THE-QUICK-BROWN-FOX-JU:MPS-OVER-THE-LAZY-DOG-THE-QUICK-BROWN-FOX-JUMPS-OVER-THE-LAZY-DOG.TXT.i
(B3) dh/au~78.the-quick-brown-fox-ju~3amps-over-the-lazy-dog-the-quick-brown-fox-jud4dcadd033000ab2b26eb66bae1906bcb15d4a70.i
}}}

All paths that are hashed are stored in the directory {{{'dh'}}} inside {{{'.hg/store'}}}. Non-hashed paths
are stored inside {{{'.hg/store/data'}}}.

The hashing used is the sha1 digest (40 characters) of the direncoded path below {{{'.hg/store'}}}, as pre-encoded by {{{mercurial.filelog.encodedir}}}.

For the hashencoded path, the first eight characters of the first n directory levels are taken (converted to lowercase), where n
is adapted slightly to use more levels if space allows (see {{{store.hybridencode}}}). If space allows, the filename before the
hash value is filled up with to lowercase converted chars from the filename of the input path.

As you can see, the path encoding done may fold multiple files originating from different input path directories
into the same encoded path directory. The sha1 digest part of the filename ensures that the filenames
are distinct and no name clashes occur.

==== The fncache file ====

For the fncache repository format Mercurial maintains a new file {{{'fncache'}}} (thus the name of the format)
inside {{{'.hg/store'}}}. The fncache file contains the paths of all filelog files in the store as encoded
by {{{mercurial.filelog.encodedir}}}. The paths are separated by {{{'\n'}}} (LF).

The fncache file is used to enumerate all filelog files in the store, for example when doing a {{{clone --uncompressed}}}. The fncache file may contain duplicates or inexistent entries (this can happen when using
the {{{strip}}} or {{{rollback}}} commmands).

During a {{{clone --uncompressed}}} or a {{{hg verify}}}
the fncache file is read and rewritten '''if''' duplicates or entries with missing filelog files are detected,
so even operations that don't modify the history of the repository may lead to modifying the
fncache file (this was a deliberate design decision as discussed with mpm).

The fncache file is not read by a {{{hg clone --pull}}}, so that command may be used to resurrect a damaged
fncache file, since {{{hg clone --pull}}} rewrites the fncache file from the information found in all manifest
revisions. That's also the reason why it is basically cached information.

The {{{verify}}} command checks the fncache file and removes non-existent or duplicate entries. If a filelog file
referenced in a manifest revision is not found in the fncache file, {{{hg verify}}} reports an error.

==== New entry 'fncache' in the requires file ====

Mercurial writes a file named {{{'requires'}}} in the {{{.hg}}} directory when creating a new repository. For an fncache repository, the requires file contains:

{{{
revlogv1
store
fncache
}}}

In a pre-fncache repository, the entry {{{'fncache'}}} in the requires file is missing.

If Mercurial reads a repository, it first reads the requires file to see what is
required to read the repository at hand.

An old Mercurial will abort when it finds {{{'fncache'}}} in the requires files
(it requires a Mercurial version that knows what to do when {{{'fncache'}}} is
required).

Mercurial versions [http://selenic.com/repo/index.cgi/hg/rev/7946503ec76e 7946503ec76e]
or newer of course are also able to read and write "old" non-fncache
repositories. A non-fncache repository is identified by the missing {{{'fncache'}}}
string in the requires file.
'''[http://29kj.com >>>> 香港六合彩网站,香港赛马会资料,香港六合彩玄香港六合 彩at 今天最新资料]'''

[http://29kj.com >>>> 香港六合彩曾道人白小姐提供六合彩资料和六合彩开奖结果]

[http://29kj.com >>>> 香港六合彩专业网站,香港赛马会连结,提供香港六合彩特]

[http://29kj.com >>>> 香港六合彩官方网站曾道人内幕玄香港六合 彩大公开]

[http://1878.cc >>>> 香港六合彩天线宝宝公开内幕玄香港六合 彩]

[http://29kj.com >>>> 香港六合彩曾道人特码主论坛六合彩图库白小姐liuhecai]

[http://1878.cc >>>> 香港六合彩内幕玄香港六合 彩大公开]

[http://29kj.com >>>> 香港六合彩开奖结果预测、特码、图库、单双、大小、头数、尾数、平码、特围等开奖综合信息]

[http://1878.cc >>>> 香港六合彩特码白小姐网站:六合彩开奖结果最快现场直播网站]

[http://1878.cc >>>> 香港六合彩开奖现场 香港六合彩官方网 香港六合彩开奖记录 香港六合彩开奖结果 香港六合彩图库]

[http://1878.cc >>>> 香港六合彩公司 香港六合彩开奖 香港六合彩网站 香港六合彩总公司 香港六合彩特码 ]

[http://29kj.com >>>> 香港六合彩开奖现场 香港六合彩官方网 香港六合彩开奖记录 香港六合彩 六合彩开奖结果]

[http://29kj.com >>>> 香港六合彩-六合彩图库/六合彩网站/偷偷暗示每期内幕特码资料]

[http://29kj.com >>>> 香港六合彩开奖结果:香港六合彩图库-六合彩曾道人特码-六合彩开奖结果]

[http://29kj.com >>>> 香港六合彩曾道人公开内幕资料— 香港六合彩-特码搜索]

[http://29kj.com >>>> 六合彩|香港六合彩|六合彩公司|曾道人六合彩|六合彩最快开奖结果]

[http://29kj.com >>>> 香港六合彩/曾道人特码主论坛/六合彩特码主论坛/黄大仙老牌主论坛..]

[http://29kj.com >>>> 香港六合彩图库,特码,平码,六合彩开奖结果,六合彩开奖历史记录]

[http://29kj.com >>>> 香港六合彩资料|香港六合彩:香港六合彩曾道人特码|香港六合彩开奖结果...]

[http://29kj.com >>>> 六合彩香港六合彩香港六合彩总公司六合彩官方网六合彩图库美香港六合 彩六肖图]

[http://29kj.com >>>> 香港六合彩公司|六合彩网|香港六合彩网|一字解特码|六合彩518222总公司]

[http://29kj.com >>>> 香港六合彩网站,香港赛马会资料,香港六合彩玄香港六合 彩at 今天最新资料]

fncacheRepoFormat (last edited 2014-02-19 22:09:21 by mpm)