Status: Draft

Shallow Clone Plan

This is the new plan for adding shallow clones (clones containing only newer history) to Mercurial. It is based on the older plan in ShallowClone, and discussions at the Paris sprint in early 2010.


Merge Safety

One goal of supporting only single-rooted shallow clones is to ensure that merges in shallow clones cannot silently yield different results than in full clones. Since we keep the entire changelog, and common ancestor resolution is now based on the changelog only, there is only one problematic area: copy (and thus rename) tracking.

A copy is used by merge if it is an ancestor in the file graph of exactly one of the merged file revs (see [@mpm, is this correct?] So we should prove that in a single-rooted shallow clone with filelog truncation as shown above, we cannot have a situation where a merge in a shallow clone would differ in its treatment of copies from a full clone.