#chg-compatible $ disable treemanifest $ . "$TESTDIR/library.sh" $ enable lfs pushrebase $ setconfig diff.git=1 pushrebase.rewritedates=false $ readconfig < [lfs] > threshold=10B > url=file:$TESTTMP/dummy-remote/ > verify=existance > EOF # prepare a full repo with lfs metadata $ hg init master $ hg init lfs-upload-trigger $ cd master $ echo THIS-IS-LFS-FILE > x $ hg commit -qAm x-lfs $ hg mv x y $ hg commit -m y-lfs $ echo NOTLFS > y $ hg commit -m y-nonlfs $ hg mv y x $ hg commit -m x-nonlfs $ echo BECOME-LFS-AGAIN >> x $ hg commit -m x-lfs-again $ hg book master $ hg push -q ../lfs-upload-trigger $ cd .. # clone a client $ hg clone ssh://user@dummy/master client --noupdate streaming all changes 5 files to transfer, * of data (glob) transferred 2.01 KB in 0.0 seconds (1.97 MB/sec) searching for changes no changes found $ cd client $ hg update 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg log -p -r ::tip -T '{node} {desc}\n' -G @ 042535657086a5b08463b9210a8f46dc270e51f9 x-lfs-again │ diff --git a/x b/x │ --- a/x │ +++ b/x │ @@ -1,1 +1,2 @@ │ NOTLFS │ +BECOME-LFS-AGAIN │ o c6cc0cd58884b847de39aa817ded71e6051caa9f x-nonlfs │ diff --git a/y b/x │ rename from y │ rename to x │ o f3dec7f3610207dbf222ec2d7b68df16a5fde0f2 y-nonlfs │ diff --git a/y b/y │ --- a/y │ +++ b/y │ @@ -1,1 +1,1 @@ │ -THIS-IS-LFS-FILE │ +NOTLFS │ o 799bebfa53189a3db8424680f1a8f9806540e541 y-lfs │ diff --git a/x b/y │ rename from x │ rename to y │ o 0d2948821b2b3b6e58505696145f2215cea2b2cd x-lfs diff --git a/x b/x new file mode 100644 --- /dev/null +++ b/x @@ -0,0 +1,1 @@ +THIS-IS-LFS-FILE # Clone a second client $ cp -R . ../client2 # Edit the working copy $ echo ADD-A-LINE >> x $ hg mv x y $ hg diff diff --git a/x b/y rename from x rename to y --- a/x +++ b/y @@ -1,2 +1,3 @@ NOTLFS BECOME-LFS-AGAIN +ADD-A-LINE $ hg status -C A y x R x $ hg commit -m shallow.lfs.commit # Push lfs content to server: expect failure, lfs blobs not in server #if lfs-test-server no-windows $ LFS_LISTEN="tcp://:$HGPORT" $ LFS_HOST="localhost:$HGPORT" $ LFS_PUBLIC=1 $ export LFS_LISTEN LFS_HOST LFS_PUBLIC $ lfs-test-server &> lfs-server.log & $ echo $! >> $DAEMON_PIDS $ cat >> $TESTTMP/master/.hg/hgrc << EOF > [lfs] > url=http://test:something@$LFS_HOST/ > EOF $ hg push --to master ../master pushing to ../master searching for changes abort: LFS server error. Remote object for file unknown not found: *'oid': 'a2fcdb080e9838f6e1476a494c1d553e6ffefb68b0d146a06f34b535b5198442'* (glob) [255] # But push can succeed if the server is configured to skip verifying blobs. $ cp -R $TESTTMP/master $TESTTMP/master-no-verify $ cp -R $TESTTMP/client $TESTTMP/client-clone $ cd $TESTTMP/client-clone $ cat >> $TESTTMP/master-no-verify/.hg/hgrc < [lfs] > verify=none > EOF $ hg push --to master $TESTTMP/master-no-verify pushing to $TESTTMP/master-no-verify searching for changes pushing 1 changeset: 515a4dfd2e0c shallow.lfs.commit $ cd $TESTTMP/client # Reset lfs url $ cat >> $TESTTMP/master/.hg/hgrc << EOF > [lfs] > url=file:$TESTTMP/dummy-remote/ > EOF # Push lfs content to server: succeed $ hg push --to master ../master pushing to ../master searching for changes pushing 1 changeset: 515a4dfd2e0c shallow.lfs.commit # Check content $ cd ../master $ hg log -p -r tip -T '{node} {desc}\n' 515a4dfd2e0c4c963dcbf4bc48587b9747143598 shallow.lfs.commit diff --git a/x b/y rename from x rename to y --- a/x +++ b/y @@ -1,2 +1,3 @@ NOTLFS BECOME-LFS-AGAIN +ADD-A-LINE $ hg log -T '{node} {bookmarks} {desc}\n' -G o 515a4dfd2e0c4c963dcbf4bc48587b9747143598 shallow.lfs.commit │ @ 042535657086a5b08463b9210a8f46dc270e51f9 master x-lfs-again │ o c6cc0cd58884b847de39aa817ded71e6051caa9f x-nonlfs │ o f3dec7f3610207dbf222ec2d7b68df16a5fde0f2 y-nonlfs │ o 799bebfa53189a3db8424680f1a8f9806540e541 y-lfs │ o 0d2948821b2b3b6e58505696145f2215cea2b2cd x-lfs # Verify the server has lfs content after the pushrebase $ hg debugindex y rev offset length delta linkrev nodeid p1 p2 0 0 * -1 1 4ce3392f9979 000000000000 000000000000 (glob) 1 * * -1 2 139f72f7ca98 4ce3392f9979 000000000000 (glob) 2 * * -1 5 f3e0509ec098 000000000000 000000000000 (glob) $ hg debugdata y 0 version https://git-lfs.github.com/spec/v1 oid sha256:802935f5411aa569948cd326115b3521107250019b5dbadf0f6ab2aa2d1e4639 size 17 x-hg-copy x x-hg-copyrev 1ff4e6c9b2764057ea0c52f7b4a5a9be2e79c8e0 x-is-binary 0 $ hg debugdata y 1 NOTLFS $ hg debugdata y 2 version https://git-lfs.github.com/spec/v1 oid sha256:a2fcdb080e9838f6e1476a494c1d553e6ffefb68b0d146a06f34b535b5198442 size 35 x-hg-copy x x-hg-copyrev d33b2f7888d4f6f9112256d0f1c625af6d188fde x-is-binary 0 $ hg cat -r 799bebfa53189a3db8424680f1a8f9806540e541 y THIS-IS-LFS-FILE $ hg cat -r f3dec7f3610207dbf222ec2d7b68df16a5fde0f2 y NOTLFS $ hg cat -r 'desc(shallow.lfs.commit)' y NOTLFS BECOME-LFS-AGAIN ADD-A-LINE $ hg debugindex x rev offset length delta linkrev nodeid p1 p2 0 0 * -1 0 1ff4e6c9b276 000000000000 000000000000 (glob) 1 * * -1 3 68b9378cf5a1 000000000000 000000000000 (glob) 2 * * -1 4 d33b2f7888d4 68b9378cf5a1 000000000000 (glob) $ hg debugdata x 0 version https://git-lfs.github.com/spec/v1 oid sha256:802935f5411aa569948cd326115b3521107250019b5dbadf0f6ab2aa2d1e4639 size 17 x-is-binary 0 $ hg debugdata x 1 \x01 (esc) copy: y copyrev: 139f72f7ca9816bd6b5fdd8b67331458ba11cc0e \x01 (esc) NOTLFS $ hg debugdata x 2 version https://git-lfs.github.com/spec/v1 oid sha256:080f1dba758e4406ab1e722e16fc18965ab2b183979432957418173bf983427f size 24 x-is-binary 0 # pull lfs content from server and update $ cd ../client2 $ hg pull pulling from ssh://user@dummy/master searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files $ hg update tip 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg log -p -r tip -T '{node} {desc}\n' 515a4dfd2e0c4c963dcbf4bc48587b9747143598 shallow.lfs.commit diff --git a/x b/y rename from x rename to y --- a/x +++ b/y @@ -1,2 +1,3 @@ NOTLFS BECOME-LFS-AGAIN +ADD-A-LINE $ hg log -T '{node} {bookmarks} {desc}\n' -G @ 515a4dfd2e0c4c963dcbf4bc48587b9747143598 shallow.lfs.commit │ o 042535657086a5b08463b9210a8f46dc270e51f9 master x-lfs-again │ o c6cc0cd58884b847de39aa817ded71e6051caa9f x-nonlfs │ o f3dec7f3610207dbf222ec2d7b68df16a5fde0f2 y-nonlfs │ o 799bebfa53189a3db8424680f1a8f9806540e541 y-lfs │ o 0d2948821b2b3b6e58505696145f2215cea2b2cd x-lfs #endif