mirror of
https://github.com/facebook/sapling.git
synced 2024-12-26 22:47:26 +03:00
04a09ec571
Summary: The hgcache will soon contain an LFS subdirectory, this is uninteresting for most of the tests, let's change them a bit so they only look at the packs subdirectory. With this, enabling remotefilelog.useruststore only has 2 failures. One due a difference in handling corrupt data, with the ruststore being more explicit that some data is missing instead of a generic "stream ended unexpectedly". And the other due to some ordering difference when dealing with LFS data. The latter will go away with the new LFS implementation. Reviewed By: DurhamG Differential Revision: D20543146 fbshipit-source-id: 09c76cacfb4687fd699b82cdf5057665ac6bd521
398 lines
8.7 KiB
Perl
398 lines
8.7 KiB
Perl
#chg-compatible
|
|
|
|
$ disable treemanifest
|
|
|
|
$ . "$TESTDIR/library.sh"
|
|
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [extensions]
|
|
> lfs=
|
|
> [lfs]
|
|
> threshold=10B
|
|
> url=file:$TESTTMP/dummy-remote/
|
|
> verify=existance
|
|
> [diff]
|
|
> git=1
|
|
> EOF
|
|
|
|
# prepare a full repo with lfs metadata
|
|
|
|
$ hg init master
|
|
$ hg init lfs-upload-trigger
|
|
$ cd master
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [remotefilelog]
|
|
> server=True
|
|
> EOF
|
|
$ 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 push -q ../lfs-upload-trigger
|
|
|
|
$ cd ..
|
|
|
|
# shallow clone from full
|
|
|
|
$ hgcloneshallow ssh://user@dummy/master shallow --noupdate
|
|
streaming all changes
|
|
3 files to transfer, * of data (glob)
|
|
transferred 1.14 KB in * seconds (*/sec) (glob)
|
|
searching for changes
|
|
no changes found
|
|
$ cd shallow
|
|
|
|
$ hg update
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) (?)
|
|
|
|
$ hg log -p -r ::tip -T '{rev}:{node} {desc}\n'
|
|
0: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
|
|
|
|
1:799bebfa53189a3db8424680f1a8f9806540e541 y-lfs
|
|
diff --git a/x b/y
|
|
rename from x
|
|
rename to y
|
|
|
|
2:f3dec7f3610207dbf222ec2d7b68df16a5fde0f2 y-nonlfs
|
|
diff --git a/y b/y
|
|
--- a/y
|
|
+++ b/y
|
|
@@ -1,1 +1,1 @@
|
|
-THIS-IS-LFS-FILE
|
|
+NOTLFS
|
|
|
|
3:c6cc0cd58884b847de39aa817ded71e6051caa9f x-nonlfs
|
|
diff --git a/y b/x
|
|
rename from y
|
|
rename to x
|
|
|
|
4:042535657086a5b08463b9210a8f46dc270e51f9 x-lfs-again
|
|
diff --git a/x b/x
|
|
--- a/x
|
|
+++ b/x
|
|
@@ -1,1 +1,2 @@
|
|
NOTLFS
|
|
+BECOME-LFS-AGAIN
|
|
|
|
* files fetched over * (glob) (?)
|
|
|
|
# lfs content could be read after repack
|
|
|
|
$ hg repack
|
|
|
|
$ find $CACHEDIR/master/packs | sort
|
|
$TESTTMP/hgcache/master/packs
|
|
$TESTTMP/hgcache/master/packs/8f2de7e341fbe688326386a45a3a7082d9f56871.histidx
|
|
$TESTTMP/hgcache/master/packs/8f2de7e341fbe688326386a45a3a7082d9f56871.histpack
|
|
$TESTTMP/hgcache/master/packs/c35125c9a76fac1fd07ab94539029532cf76dd4f.dataidx
|
|
$TESTTMP/hgcache/master/packs/c35125c9a76fac1fd07ab94539029532cf76dd4f.datapack
|
|
$TESTTMP/hgcache/master/packs/repacklock
|
|
|
|
$ cp -R . ../shallow2
|
|
|
|
$ hg log -p -r ::tip -T '{rev}:{node} {desc}\n'
|
|
0: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
|
|
|
|
1:799bebfa53189a3db8424680f1a8f9806540e541 y-lfs
|
|
diff --git a/x b/y
|
|
rename from x
|
|
rename to y
|
|
|
|
2:f3dec7f3610207dbf222ec2d7b68df16a5fde0f2 y-nonlfs
|
|
diff --git a/y b/y
|
|
--- a/y
|
|
+++ b/y
|
|
@@ -1,1 +1,1 @@
|
|
-THIS-IS-LFS-FILE
|
|
+NOTLFS
|
|
|
|
3:c6cc0cd58884b847de39aa817ded71e6051caa9f x-nonlfs
|
|
diff --git a/y b/x
|
|
rename from y
|
|
rename to x
|
|
|
|
4:042535657086a5b08463b9210a8f46dc270e51f9 x-lfs-again
|
|
diff --git a/x b/x
|
|
--- a/x
|
|
+++ b/x
|
|
@@ -1,1 +1,2 @@
|
|
NOTLFS
|
|
+BECOME-LFS-AGAIN
|
|
|
|
# lfs working copy in shallow repo
|
|
|
|
$ 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
|
|
|
|
$ hg debugdata y f3e0509ec09891552c970794f82de8d6805701c7
|
|
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 debugfilerevision -r . y
|
|
515a4dfd2e0c: shallow.lfs.commit
|
|
y: bin=0 lnk=0 flag=2000 size=35 copied='x' chain=f3e0509ec098
|
|
|
|
$ hg log -r . -T '{file_copies}\n'
|
|
y (x)
|
|
|
|
# push lfs content to server
|
|
|
|
$ hg push ../master
|
|
pushing to ../master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files
|
|
|
|
$ cd ../master
|
|
$ hg log -p -r tip -T '{rev}:{node} {desc}\n'
|
|
5: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
|
|
|
|
# pull lfs content from server and update
|
|
|
|
$ cd ../shallow2
|
|
$ hg pull
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 0 changes to 0 files
|
|
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) (?)
|
|
|
|
$ hg update tip
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
$ hg log -p -r tip -T '{rev}:{node} {desc}\n'
|
|
5: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
|
|
|
|
# repack again
|
|
|
|
$ cd ../shallow
|
|
|
|
$ hg repack
|
|
$ find $CACHEDIR/master/packs | sort
|
|
$TESTTMP/hgcache/master/packs
|
|
$TESTTMP/hgcache/master/packs/4dd95950593c0c4df6d6df2fa8d6fb03b51ecf4b.dataidx
|
|
$TESTTMP/hgcache/master/packs/4dd95950593c0c4df6d6df2fa8d6fb03b51ecf4b.datapack
|
|
$TESTTMP/hgcache/master/packs/bf634767241b49b174b18732f92c6653ff966751.histidx
|
|
$TESTTMP/hgcache/master/packs/bf634767241b49b174b18732f92c6653ff966751.histpack
|
|
$TESTTMP/hgcache/master/packs/repacklock
|
|
|
|
$ hg log -p -r ::tip -T '{rev}:{node} {desc}\n'
|
|
0: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
|
|
|
|
1:799bebfa53189a3db8424680f1a8f9806540e541 y-lfs
|
|
diff --git a/x b/y
|
|
rename from x
|
|
rename to y
|
|
|
|
2:f3dec7f3610207dbf222ec2d7b68df16a5fde0f2 y-nonlfs
|
|
diff --git a/y b/y
|
|
--- a/y
|
|
+++ b/y
|
|
@@ -1,1 +1,1 @@
|
|
-THIS-IS-LFS-FILE
|
|
+NOTLFS
|
|
|
|
3:c6cc0cd58884b847de39aa817ded71e6051caa9f x-nonlfs
|
|
diff --git a/y b/x
|
|
rename from y
|
|
rename to x
|
|
|
|
4:042535657086a5b08463b9210a8f46dc270e51f9 x-lfs-again
|
|
diff --git a/x b/x
|
|
--- a/x
|
|
+++ b/x
|
|
@@ -1,1 +1,2 @@
|
|
NOTLFS
|
|
+BECOME-LFS-AGAIN
|
|
|
|
5: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
|
|
|
|
# bundle should not include LFS blobs
|
|
|
|
$ cat > noise.py <<EOF
|
|
> import os
|
|
> import sys
|
|
> # PY3-compat
|
|
> if sys.version_info[0] >= 3:
|
|
> stdout = sys.stdout.buffer
|
|
> else:
|
|
> stdout = sys.stdout
|
|
> # random content so compression is ineffective
|
|
> length = int(sys.argv[1])
|
|
> stdout.write(os.urandom(length))
|
|
> stdout.flush()
|
|
> EOF
|
|
$ hg bookmark -i base
|
|
$ cp -R . ../shallow3
|
|
$ $PYTHON noise.py 20000000 >> y
|
|
$ hg commit -m 'make y 20MB' y
|
|
$ $PYTHON noise.py 1000000 >> y
|
|
$ hg commit -m 'make y 1MB'
|
|
$ hg bundle -r '(base::)-base' --base base test-bundle
|
|
2 changesets found
|
|
$ $PYTHON <<EOF
|
|
> import os
|
|
> size = os.stat('test-bundle').st_size
|
|
> if size <= 10000:
|
|
> print('size is less than 10 KB - expected')
|
|
> else:
|
|
> print('unexpected size: %s' % size)
|
|
> EOF
|
|
size is less than 10 KB - expected
|
|
|
|
# Applying the bundle should work
|
|
|
|
$ cd ../shallow3
|
|
$ hg unbundle ../shallow/test-bundle
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 2 changesets with 2 changes to 1 files
|
|
|
|
$ hg update tip
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
# LFS fast path about binary diff works
|
|
|
|
$ cd ../shallow
|
|
$ hg pull -q
|
|
|
|
$ cd ../shallow2
|
|
$ hg up -C tip -q
|
|
$ $PYTHON << EOF
|
|
> with open('a.bin', 'wb') as f:
|
|
> f.write(b'\x00\x01\x02\x00' * 10)
|
|
> EOF
|
|
|
|
$ hg commit -m binary -A a.bin
|
|
$ for i in 1 2; do
|
|
> echo $i >> a.bin
|
|
> hg commit -m $i a.bin
|
|
> done
|
|
|
|
$ chmod +x a.bin
|
|
$ hg commit -m 'mode change' a.bin
|
|
|
|
$ for i in 3 4; do
|
|
> echo $i >> a.bin
|
|
> hg commit -m $i a.bin
|
|
> done
|
|
|
|
$ hg push ../master
|
|
pushing to ../master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 6 changesets with 5 changes to 1 files
|
|
|
|
$ cd ../shallow
|
|
$ hg pull -q
|
|
5 files fetched over 5 fetches - (5 misses, 0.00% hit ratio) over *s (glob) (?)
|
|
$ hg log --removed a.bin --config diff.nobinary=1 --git -p -T '{desc}\n' -r '::tip' --config lfs.url=null://
|
|
binary
|
|
diff --git a/a.bin b/a.bin
|
|
new file mode 100644
|
|
Binary file a.bin has changed
|
|
|
|
1
|
|
diff --git a/a.bin b/a.bin
|
|
Binary file a.bin has changed
|
|
|
|
2
|
|
diff --git a/a.bin b/a.bin
|
|
Binary file a.bin has changed
|
|
|
|
mode change
|
|
diff --git a/a.bin b/a.bin
|
|
old mode 100644
|
|
new mode 100755
|
|
|
|
3
|
|
diff --git a/a.bin b/a.bin
|
|
Binary file a.bin has changed
|
|
|
|
4
|
|
diff --git a/a.bin b/a.bin
|
|
Binary file a.bin has changed
|
|
|
|
|