diff -r 9aeb9e2d28a7 -r 3a333a582d7b tests/test-remotefilelog-linknodes.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-remotefilelog-linknodes.t Thu Sep 27 13:03:19 2018 -0400 @@ -0,0 +1,195 @@ + $ PYTHONPATH=$TESTDIR/..:$PYTHONPATH + $ export PYTHONPATH + +# Tests for the complicated linknode logic in remotefilelog.py::ancestormap() + + $ . "$TESTDIR/remotefilelog-library.sh" + + $ hginit master + $ cd master + $ cat >> .hg/hgrc < [remotefilelog] + > server=True + > serverexpiration=-1 + > EOF + $ echo x > x + $ hg commit -qAm x + $ cd .. + + $ hgcloneshallow ssh://user@dummy/master shallow -q + 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) + +# Rebase produces correct log -f linknodes + + $ cd shallow + $ echo y > y + $ hg commit -qAm y + $ hg up 0 + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo x >> x + $ hg commit -qAm xx + $ hg log -f x --template "{node|short}\n" + 0632994590a8 + b292c1e3311f + + $ hg rebase -d 1 + rebasing 2:0632994590a8 "xx" (tip) + saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/0632994590a8-0bc786d8-rebase.hg (glob) + $ hg log -f x --template "{node|short}\n" + 81deab2073bc + b292c1e3311f + +# Rebase back, log -f still works + + $ hg rebase -d 0 -r 2 + rebasing 2:81deab2073bc "xx" (tip) + saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/81deab2073bc-80cb4fda-rebase.hg (glob) + $ hg log -f x --template "{node|short}\n" + b3fca10fb42d + b292c1e3311f + + $ hg rebase -d 1 -r 2 + rebasing 2:b3fca10fb42d "xx" (tip) + saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/b3fca10fb42d-da73a0c7-rebase.hg (glob) + + $ cd .. + +# Reset repos + $ clearcache + + $ rm -rf master + $ rm -rf shallow + $ hginit master + $ cd master + $ cat >> .hg/hgrc < [remotefilelog] + > server=True + > serverexpiration=-1 + > EOF + $ echo x > x + $ hg commit -qAm x + $ cd .. + + $ hgcloneshallow ssh://user@dummy/master shallow -q + 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) + +# Rebase stack onto landed commit + + $ cd master + $ echo x >> x + $ hg commit -Aqm xx + + $ cd ../shallow + $ echo x >> x + $ hg commit -Aqm xx2 + $ echo y >> x + $ hg commit -Aqm xxy + + $ hg pull -q + $ hg rebase -d tip + rebasing 1:4549721d828f "xx2" + note: rebase of 1:4549721d828f created no changes to commit + rebasing 2:5ef6d97e851c "xxy" + saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/4549721d828f-b084e33c-rebase.hg (glob) + $ hg log -f x --template '{node|short}\n' + 4ae8e31c85ef + 0632994590a8 + b292c1e3311f + + $ cd .. + +# system cache has invalid linknode, but .hg/store/data has valid + + $ cd shallow + $ hg strip -r 1 -q + $ rm -rf .hg/store/data/* + $ echo x >> x + $ hg commit -Aqm xx_local + $ hg log -f x --template '{rev}:{node|short}\n' + 1:21847713771d + 0:b292c1e3311f + + $ cd .. + $ rm -rf shallow + +/* Local linknode is invalid; remote linknode is valid (formerly slow case) */ + + $ hgcloneshallow ssh://user@dummy/master shallow -q + 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) + $ cd shallow + $ echo x >> x + $ hg commit -Aqm xx2 + $ cd ../master + $ echo y >> y + $ hg commit -Aqm yy2 + $ echo x >> x + $ hg commit -Aqm xx2-fake-rebased + $ echo y >> y + $ hg commit -Aqm yy3 + $ cd ../shallow + $ hg pull --config remotefilelog.debug=True + pulling from ssh://user@dummy/master + searching for changes + adding changesets + adding manifests + adding file changes + added 3 changesets with 0 changes to 0 files (+1 heads) + new changesets 01979f9404f8:7200df4e0aca + (run 'hg heads' to see heads, 'hg merge' to merge) + $ hg update tip -q + 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) + $ echo x > x + $ hg commit -qAm xx3 + +# At this point, the linknode points to c1254e70bad1 instead of 32e6611f6149 + $ hg log -G -T '{node|short} {desc} {phase} {files}\n' + @ a5957b6bf0bd xx3 draft x + | + o 7200df4e0aca yy3 public y + | + o 32e6611f6149 xx2-fake-rebased public x + | + o 01979f9404f8 yy2 public y + | + | o c1254e70bad1 xx2 draft x + |/ + o 0632994590a8 xx public x + | + o b292c1e3311f x public x + +# Check the contents of the local blob for incorrect linknode + $ hg debugremotefilelog .hg/store/data/11f6ad8ec52a2984abaafd7c3b516503785c2072/d4a3ed9310e5bd9887e3bf779da5077efab28216 + size: 6 bytes + path: .hg/store/data/11f6ad8ec52a2984abaafd7c3b516503785c2072/d4a3ed9310e5bd9887e3bf779da5077efab28216 + key: d4a3ed9310e5 + + node => p1 p2 linknode copyfrom + d4a3ed9310e5 => aee31534993a 000000000000 c1254e70bad1 + aee31534993a => 1406e7411862 000000000000 0632994590a8 + 1406e7411862 => 000000000000 000000000000 b292c1e3311f + +# Verify that we do a fetch on the first log (remote blob fetch for linkrev fix) + $ hg log -f x -T '{node|short} {desc} {phase} {files}\n' + a5957b6bf0bd xx3 draft x + 32e6611f6149 xx2-fake-rebased public x + 0632994590a8 xx public x + b292c1e3311f x public x + 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) + +# But not after that + $ hg log -f x -T '{node|short} {desc} {phase} {files}\n' + a5957b6bf0bd xx3 draft x + 32e6611f6149 xx2-fake-rebased public x + 0632994590a8 xx public x + b292c1e3311f x public x + +# Check the contents of the remote blob for correct linknode + $ hg debugremotefilelog $CACHEDIR/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/d4a3ed9310e5bd9887e3bf779da5077efab28216 + size: 6 bytes + path: $TESTTMP/hgcache/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/d4a3ed9310e5bd9887e3bf779da5077efab28216 + key: d4a3ed9310e5 + + node => p1 p2 linknode copyfrom + d4a3ed9310e5 => aee31534993a 000000000000 32e6611f6149 + aee31534993a => 1406e7411862 000000000000 0632994590a8 + 1406e7411862 => 000000000000 000000000000 b292c1e3311f