.hg folder contains no store folder.
Steve Gardner
mercurial at pictureoriginals.co.uk
Mon Sep 3 08:33:33 UTC 2012
On 2012-08-31 13:03, Adrian Buehlmann wrote:
> On 2012-08-31 11:58, Steve Gardner wrote:
>> We have a strange situation with one of our Mercurial repositories,
>> and
>> I'd like to confirm if its likely to cause us any problems in
>> future.
>>
>> The repository is being updated using push over hgweb.cgi and in the
>> past there were a number of problems with permissions errors, so I
>> think
>> at some point all of the files under the hg folder were deleted and
>> then
>> recreated via a push from a copy of the repository.
>>
>>
>> Most of our repositories contain a cache folder and a store folder
>> within the .hg folder, but now in this one there is a data folder
>> instead of the store folder.
>> Everything else seems to work as it should (the history is still
>> correct etc), but I would like to be certain that nothing will be
>> broken
>> by this.
>
> This story seems to match with a repository having Mercurial's very
> first repository format.
>
> Just creating an empty ".hg" directory (instead of using 'hg init' or
> 'hg clone') leaves a valid Mercurial repository.
>
> I just tried this on my Windows 7 box:
>
> $ hg version -q
> Mercurial Distributed SCM (version 2.2.2+12-d1a0ac9b6b8a)
> $ mkdir b
> $ cd b
> $ mkdir .hg
> $ hg verify
> repository uses revlog format 0
> checking changesets
> checking manifests
> crosschecking files in changesets and manifests
> checking files
> 0 files, 0 changesets, 0 total revisions
>
> As you can see, an empty .hg directory is a valid repository. But
> it's
> in an ancient format. Continuing the experiment:
>
> $ echo foo > bla.txt
> $ hg add
> adding bla.txt
> $ hg ci -m1
> $ cd .hg
> $ dir
> Volume in drive C has no label.
> Volume Serial Number is F80E-0A52
>
> Directory of C:\Users\adi\hgrepos\tests\b\.hg
>
> 31.08.2012 13:42 <DIR> .
> 31.08.2012 13:42 <DIR> ..
> 31.08.2012 13:42 104 00changelog.d
> 31.08.2012 13:42 76 00changelog.i
> 31.08.2012 13:42 50 00manifest.d
> 31.08.2012 13:42 76 00manifest.i
> 31.08.2012 13:42 <DIR> cache
> 31.08.2012 13:42 <DIR> data
> 31.08.2012 13:42 64 dirstate
> 31.08.2012 13:42 1 last-message.txt
> 31.08.2012 13:42 43 phaseroots
> 31.08.2012 13:42 2 thgstatus
> 31.08.2012 13:42 102 undo
> 31.08.2012 13:42 0 undo.bookmarks
> 31.08.2012 13:42 7 undo.branch
> 31.08.2012 13:42 9 undo.desc
> 31.08.2012 13:42 64 undo.dirstate
> 31.08.2012 13:42 0 undo.phaseroots
> 14 File(s) 598 bytes
> 4 Dir(s) 374'871'592'960 bytes free
>
> You will notice that there is no file named "requires" in the .hg
> directory. And thus no "store" subdirectory. Because that format [aka
> "layout"] didn't use a "store" subdirectory.
>
> See also http://mercurial.selenic.com/wiki/RequiresFile
>
> The "requires" file was introduced later. It is used to denote in
> what
> format a repository is.
>
> Current Mercurial versions can read and write all repository formats
> ever released (up to that version you are using).
>
> If your repo passes "hg verify", then your data should be fine.
>
> If you want to profit from a newer repo format (which is
> recommended),
> then you can clone it using the pull protocol.
>
> $ hg clone --pull repoA repoB
>
> repoB will then be in the format that is "most recent" (for the
> version
> of "hg" you are using). repoA can be in any old format (which
> includes
> the very first one).
Adrian,
Thanks very much for a clear and detailed epxlanation. That helps a
lot.
Steve
More information about the Mercurial
mailing list