mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
98d9269874
Summary: Create a fork of the Mercurial code that we can use to build server rpms. The hg servers will continue to exist for a few more months while we move the darkstorm and ediscovery use cases off them. In the mean time, we want to start making breaking changes to the client, so let's create a stable copy of the hg code to produce rpms for the hg servers. The fork is based off c7770c78d, the latest hg release. This copies the files as is, then adds some minor tweaks to get it to build: - Disables some lint checks that appear to be bypassed by path - sed replace eden/scm with eden/hg-server - Removed a dependency on scm/telemetry from the edenfs-client tests since scm/telemetry pulls in the original eden/scm/lib/configparser which conflicts with the hg-server conflict parser. allow-large-files Reviewed By: quark-zju Differential Revision: D27632557 fbshipit-source-id: b2f442f4ec000ea08e4d62de068750832198e1f4
194 lines
5.7 KiB
Perl
194 lines
5.7 KiB
Perl
XXX: This test is currently broken if lfs-test-server is installed.
|
|
|
|
#require false lfs-test-server
|
|
|
|
$ setconfig lfs.usercache=$TESTTMP/lfs-cache
|
|
$ LFS_LISTEN="tcp://:$HGPORT"
|
|
$ LFS_HOST="localhost:$HGPORT"
|
|
$ LFS_PUBLIC=1
|
|
$ export LFS_LISTEN LFS_HOST LFS_PUBLIC
|
|
#if no-windows
|
|
$ lfs-test-server &> lfs-server.log &
|
|
$ echo $! >> $DAEMON_PIDS
|
|
$ disown %+
|
|
#else
|
|
$ cat >> $TESTTMP/spawn.py <<EOF
|
|
> import os
|
|
> import subprocess
|
|
> import sys
|
|
>
|
|
> for path in os.environ["PATH"].split(os.pathsep):
|
|
> exe = os.path.join(path, 'lfs-test-server.exe')
|
|
> if os.path.exists(exe):
|
|
> with open('lfs-server.log', 'wb') as out:
|
|
> p = subprocess.Popen(exe, stdout=out, stderr=out)
|
|
> sys.stdout.write('%s\n' % p.pid)
|
|
> sys.exit(0)
|
|
> sys.exit(1)
|
|
> EOF
|
|
$ $PYTHON $TESTTMP/spawn.py >> $DAEMON_PIDS
|
|
#endif
|
|
|
|
$ cat >> $HGRCPATH <<EOF
|
|
> [extensions]
|
|
> lfs=
|
|
> [lfs]
|
|
> url=http://foo:bar@$LFS_HOST/
|
|
> threshold=1
|
|
> verify=existance
|
|
> EOF
|
|
|
|
$ hg init repo1
|
|
$ cd repo1
|
|
$ echo THIS-IS-LFS > a
|
|
$ hg commit -m a -A a
|
|
|
|
$ hg init ../repo2
|
|
$ hg push ../repo2 -v
|
|
pushing to ../repo2
|
|
searching for changes
|
|
lfs: uploading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
|
|
lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
|
|
1 changesets found
|
|
uncompressed size of bundle content:
|
|
* (changelog) (glob)
|
|
* (manifests) (glob)
|
|
* a (glob)
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files
|
|
|
|
Clear the cache to force a download
|
|
$ rm -rf `hg config lfs.usercache`
|
|
$ cd ../repo2
|
|
$ hg update tip -v
|
|
resolving manifests
|
|
getting a
|
|
lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes)
|
|
lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
When the server has some blobs already
|
|
|
|
$ hg mv a b
|
|
$ echo ANOTHER-LARGE-FILE > c
|
|
$ echo ANOTHER-LARGE-FILE2 > d
|
|
$ hg commit -m b-and-c -A b c d
|
|
$ hg push ../repo1 -v | grep -v '^ '
|
|
pushing to ../repo1
|
|
searching for changes
|
|
lfs: need to transfer 2 objects (39 bytes)
|
|
lfs: uploading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
|
|
lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
|
|
lfs: uploading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
|
|
lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
|
|
1 changesets found
|
|
uncompressed size of bundle content:
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 3 changes to 3 files
|
|
|
|
Fail to push if LFS blob is not uploaded to the server
|
|
$ echo "[extensions]" >> .hg/hgrc
|
|
$ echo "lfs=" >> .hg/hgrc
|
|
$ echo "[lfs]" >> .hg/hgrc
|
|
$ echo "url=file://$TESTTMP/unused-dummystore" >> .hg/hgrc
|
|
|
|
$ echo ANOTHER-LFS > f
|
|
$ hg commit -m f -A f
|
|
$ hg push ../repo1
|
|
pushing to ../repo1
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files
|
|
transaction abort!
|
|
rollback completed
|
|
abort: LFS server error. Remote object for file unknown not found: *u'oid': u'384d99297e974dab7d66361be0276032f5045185d6ce42601f43973e721f1dd9'* (glob)
|
|
[255]
|
|
|
|
$ rm .hg/hgrc
|
|
|
|
Clear the cache to force a download
|
|
$ rm -rf `hg config lfs.usercache`
|
|
$ hg --repo ../repo1 update tip -v
|
|
resolving manifests
|
|
getting b
|
|
getting c
|
|
lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes)
|
|
lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998
|
|
getting d
|
|
lfs: downloading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes)
|
|
lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19
|
|
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
Check error message when the remote missed a blob:
|
|
|
|
$ echo FFFFF > b
|
|
$ hg commit -m b -A b
|
|
$ echo FFFFF >> b
|
|
$ hg commit -m b b
|
|
$ rm -rf .hg/store/lfs
|
|
$ rm -rf `hg config lfs.usercache`
|
|
$ hg update -C '.^'
|
|
abort: LFS server error. Remote object for file data/b.i not found: * (glob)
|
|
[255]
|
|
|
|
Check error message when object does not exist:
|
|
|
|
$ cd $TESTTMP
|
|
$ hg init test && cd test
|
|
$ echo "[extensions]" >> .hg/hgrc
|
|
$ echo "lfs=" >> .hg/hgrc
|
|
$ echo "[lfs]" >> .hg/hgrc
|
|
$ echo "threshold=1" >> .hg/hgrc
|
|
$ echo a > a
|
|
$ hg add a
|
|
$ hg commit -m 'test'
|
|
$ echo aaaaa > a
|
|
$ hg commit -m 'largefile'
|
|
$ hg debugdata .hg/store/data/a.i 1 # verify this is no the file content but includes "oid", the LFS "pointer".
|
|
version https://git-lfs.github.com/spec/v1
|
|
oid sha256:bdc26931acfb734b142a8d675f205becf27560dc461f501822de13274fe6fc8a
|
|
size 6
|
|
x-is-binary 0
|
|
$ cd ..
|
|
$ rm -rf `hg config lfs.usercache`
|
|
|
|
(Restart the server in a different location so it no longer has the content)
|
|
|
|
$ $PYTHON $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
|
|
$ rm $DAEMON_PIDS
|
|
$ mkdir $TESTTMP/lfs-server2
|
|
$ cd $TESTTMP/lfs-server2
|
|
#if no-windows
|
|
$ lfs-test-server &> lfs-server.log &
|
|
$ echo $! >> $DAEMON_PIDS
|
|
$ disown %+
|
|
#else
|
|
$ $PYTHON $TESTTMP/spawn.py >> $DAEMON_PIDS
|
|
#endif
|
|
|
|
$ cd $TESTTMP
|
|
$ hg clone test test2
|
|
updating to branch default
|
|
abort: LFS server error. Remote object for file data/a.i not found:(.*)! (re)
|
|
[255]
|
|
|
|
Adhoc upload and download:
|
|
|
|
$ mkdir $TESTTMP/adhoc
|
|
$ cd $TESTTMP/adhoc
|
|
$ echo FOOBAR | hg debuglfssend
|
|
091321a885bbb5bc4c711cfefdeb7697002f83f953e211a87d4e26c6bfcc1825 7
|
|
|
|
$ hg debuglfsrecv 091321a885bbb5bc4c711cfefdeb7697002f83f953e211a87d4e26c6bfcc1825 7
|
|
FOOBAR
|
|
|
|
Clean up:
|
|
|
|
$ $PYTHON $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
|