Analysis of issue 1327
greg-hg at gerg.ca
Fri Nov 6 10:38:21 CST 2009
On Fri, Nov 6, 2009 at 11:07 AM, Sune Foldager <cryo at cyanite.org> wrote:
> This mail describes the issue of file revlogs not being a subgraph of
> the changelog, as well as it explores several solutions for rectifying,
> or mitigating, the problem. (The problem has been reported as issue1327
> in terms of merge being wrong, but this mail describes the root cause
> for it).
Thank you! That was very illuminating. I'm pretty sure this is the
root cause of issue1839 ("annotate ignores topology of changelog graph
> 2. SOLUTIONS
> In general, there are two ways to address this: Fix the filelogs to be
> correct, or fix all the uses of the filelog.
Strong +1 on fixing the filelog, because that should fix other bugs
(e.g. 1839) for free.
> 2.1.2. INTRODUCING A NEW REVLOG SUB-FORMAT SUPPORTING METADATA AND SALT
> A better (with respect to design, prettyness and performance) approach
> is to change the revlog format slightly to support metadata in a native
> way. This can be done in the following way:
This sounds preferable to me. Mercurial has made format changes in
the past to fix bugs, and adding generic metadata support to filelogs
sounds very sensible.
> 2.1.2. THE FUTURE: OTHER FORMATS
> This is a topic of much debate, I am sure, but I personally think that
> we should, on the long term, move towards a solution a bit like this:
> - A revlog containing the changelog and possibly manifest. No real
> reason for the two levels, as I see it.
Interesting idea, but it shouldn't be done until we have parent
deltas. Rationale: currently, lack of parent deltas can be worked
around by reordering the manifest file. (In our case,
shrink-revlog.py shrinks the manifest from ~3 GB to ~50 MB, which
frankly makes the difference between choosing Mercurial or choosing
something else.) But you can't reorder the changelog. So merging
manifest + changelog means giant manifests can only be fixed by
implementing parent deltas.
More information about the Mercurial-devel