Mercurial > hg
view tests/test-origbackup-conflict.t @ 39641:aa7e312375cf
wireprotov2: let clients drive delta behavior
Previously, the "manifestdata" and "filedata" commands assumed the
receiver had all parent revisions for requested nodes. Unless the
revision had no parents, they emitted a delta instead of a fulltext.
This strategy isn't appropriate for shallow clones and for clients
that only want to access fulltext revision data for a single node
without fetching their parent revisions.
This commit adds an "haveparents" argument to the "manifestdata"
and "filedata" commands that controls delta generation behavior.
Unless "haveparents" is set, the server assumes that the client
doesn't have parent revisions unless they were previously sent
as part of the current group of revisions.
This change allows the fulltext revision data of any individual
revision to be obtained. This will facilitate shallow clones
and other data retrieval strategies that don't require all previous
revisions of an entity to be fetched.
Differential Revision: https://phab.mercurial-scm.org/D4492
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 30 Aug 2018 14:55:34 -0700 |
parents | 4441705b7111 |
children | 0b46e1aa7760 |
line wrap: on
line source
Set up repo $ cat << EOF >> $HGRCPATH > [ui] > origbackuppath=.hg/origbackups > [merge] > checkunknown=warn > EOF $ hg init repo $ cd repo $ echo base > base $ hg add base $ hg commit -m "base" Make a dir named b that contains a file, and a file named d $ mkdir -p b $ echo c1 > b/c $ echo d1 > d $ hg add b/c d $ hg commit -m "c1" $ hg bookmark c1 Peform an update that causes b/c to be backed up $ hg up -q 0 $ mkdir -p b $ echo c2 > b/c $ hg up --verbose c1 resolving manifests b/c: replacing untracked file getting b/c creating directory: $TESTTMP/repo/.hg/origbackups/b getting d 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark c1) $ test -f .hg/origbackups/b/c Make files named b and d $ hg up -q 0 $ echo b1 > b $ echo d2 > d $ hg add b d $ hg commit -m b1 created new head $ hg bookmark b1 Perform an update that causes b to be backed up - it should replace the backup b dir $ hg up -q 0 $ echo b2 > b $ hg up --verbose b1 resolving manifests b: replacing untracked file getting b removing conflicting directory: $TESTTMP/repo/.hg/origbackups/b getting d 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark b1) $ test -f .hg/origbackups/b Perform an update the causes b/c to be backed up again - it should replace the backup b file $ hg up -q 0 $ mkdir b $ echo c3 > b/c $ hg up --verbose c1 resolving manifests b/c: replacing untracked file getting b/c creating directory: $TESTTMP/repo/.hg/origbackups/b removing conflicting file: $TESTTMP/repo/.hg/origbackups/b getting d 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark c1) $ test -d .hg/origbackups/b Cause two symlinks to be backed up that points to a valid location from the backup dir $ hg up -q 0 $ mkdir ../sym-link-target #if symlink $ ln -s ../../../sym-link-target b $ ln -s ../../../sym-link-target d #else $ touch b d #endif $ hg up b1 b: replacing untracked file d: replacing untracked file 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark b1) #if symlink $ readlink.py .hg/origbackups/b .hg/origbackups/b -> ../../../sym-link-target #endif Perform an update that causes b/c and d to be backed up again - b/c should not go into the target dir $ hg up -q 0 $ mkdir b $ echo c4 > b/c $ echo d3 > d $ hg up --verbose c1 resolving manifests b/c: replacing untracked file d: replacing untracked file getting b/c creating directory: $TESTTMP/repo/.hg/origbackups/b removing conflicting file: $TESTTMP/repo/.hg/origbackups/b getting d 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark c1) $ cat .hg/origbackups/b/c c4 $ cat .hg/origbackups/d d3 $ ls ../sym-link-target Incorrectly configure origbackuppath to be under a file $ echo data > .hg/badorigbackups $ hg up -q 0 $ mkdir b $ echo c5 > b/c $ hg up --verbose c1 --config ui.origbackuppath=.hg/badorigbackups resolving manifests b/c: replacing untracked file getting b/c creating directory: $TESTTMP/repo/.hg/badorigbackups/b abort: $ENOTDIR$: '$TESTTMP/repo/.hg/badorigbackups/b' [255] $ cat .hg/badorigbackups data