mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +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
326 lines
9.3 KiB
Perl
326 lines
9.3 KiB
Perl
#chg-compatible
|
|
|
|
$ . "$TESTDIR/library.sh"
|
|
$ . "$TESTDIR/infinitepush/library.sh"
|
|
$ setconfig treemanifest.flatcompat=False
|
|
$ setconfig remotefilelog.write-hgcache-to-indexedlog=False remotefilelog.write-local-to-indexedlog=False
|
|
|
|
$ setupcommon
|
|
|
|
$ enable remotenames
|
|
$ hginit master
|
|
$ cd master
|
|
$ setupserver
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> pushrebase=
|
|
> [remotefilelog]
|
|
> server=True
|
|
> shallowtrees=True
|
|
> [treemanifest]
|
|
> server=True
|
|
> EOF
|
|
$ echo x > x
|
|
$ hg commit -qAm 'add x'
|
|
$ hg bookmark master
|
|
$ cd ..
|
|
|
|
Push a non-tree scratch branch from one client
|
|
|
|
$ hgcloneshallow ssh://user@dummy/master normal-client -q
|
|
fetching tree '' bc0c2c938b929f98b1c31a8c5994396ebb096bf0, found via 085784c01c08
|
|
1 trees fetched over * (glob)
|
|
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) (?)
|
|
$ cd normal-client
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [treemanifest]
|
|
> sendtrees=True
|
|
> EOF
|
|
$ mkdir bar
|
|
$ echo >> bar/car
|
|
$ hg commit -qAm 'add bar/car'
|
|
$ echo >> bar/car
|
|
$ hg commit -qm 'edit bar/car'
|
|
$ hg push --to scratch/nontree --create
|
|
pushing to ssh://user@dummy/master
|
|
searching for changes
|
|
remote: pushing 2 commits:
|
|
remote: 3ef288300b64 add bar/car
|
|
remote: ebde88dba372 edit bar/car
|
|
$ clearcache
|
|
$ cd ..
|
|
|
|
Push a tree-only scratch branch from another client
|
|
$ hgcloneshallow ssh://user@dummy/master client1 -q
|
|
fetching tree '' bc0c2c938b929f98b1c31a8c5994396ebb096bf0, found via 085784c01c08
|
|
1 trees fetched over * (glob)
|
|
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) (?)
|
|
$ cd client1
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [treemanifest]
|
|
> sendtrees=True
|
|
> EOF
|
|
|
|
$ mkdir subdir
|
|
$ echo "my change" >> subdir/a
|
|
$ hg commit -qAm 'add subdir/a'
|
|
$ echo "my other change" >> subdir/a
|
|
$ hg commit -qAm 'edit subdir/a'
|
|
$ hg push --to scratch/foo --create
|
|
pushing to ssh://user@dummy/master
|
|
searching for changes
|
|
remote: pushing 2 commits:
|
|
remote: 02c12aef64ff add subdir/a
|
|
remote: 5a7a7de8a420 edit subdir/a
|
|
$ cd ..
|
|
|
|
Pull a non-tree scratch branch into a normal client
|
|
|
|
$ hgcloneshallow ssh://user@dummy/master normal-client2 -q
|
|
$ cd normal-client2
|
|
$ hg pull -r scratch/nontree
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 2 changesets with 2 changes to 1 files
|
|
$ hg log -r tip -vp
|
|
commit: ebde88dba372
|
|
bookmark: default/scratch/nontree
|
|
hoistedname: scratch/nontree
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files: bar/car
|
|
description:
|
|
edit bar/car
|
|
|
|
|
|
diff -r 3ef288300b64 -r ebde88dba372 bar/car
|
|
--- a/bar/car Thu Jan 01 00:00:00 1970 +0000
|
|
+++ b/bar/car Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -1,1 +1,2 @@
|
|
|
|
+
|
|
|
|
Pull a treeonly scratch branch into a normal client
|
|
$ hg pull -r scratch/foo
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 2 changesets with 2 changes to 1 files
|
|
- Verify no new manifest revlog entry was written
|
|
- ...but we can still read the manifest
|
|
$ hg log -r 02c12aef64ff --stat -T '{node}\n'
|
|
02c12aef64ffa8bfcb6fe0054cb75084416dd43d
|
|
subdir/a | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
$ cd ..
|
|
|
|
Set up another treeonly client
|
|
|
|
$ hgcloneshallow ssh://user@dummy/master client2 -q
|
|
$ cd client2
|
|
|
|
Pull just part of a treeonly scratch branch (this causes rebundling on the server)
|
|
|
|
$ hg pull -r 02c12aef64ff
|
|
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 log -r 02c12aef64ff --stat
|
|
commit: 02c12aef64ff
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add subdir/a
|
|
|
|
subdir/a | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
|
|
Pull a treeonly scratch branch into a treeonly client (non-rebundling)
|
|
|
|
$ hg pull -r scratch/foo
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 2 changes to 1 files
|
|
$ hg log -G
|
|
o commit: 5a7a7de8a420
|
|
│ bookmark: default/scratch/foo
|
|
│ hoistedname: scratch/foo
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: edit subdir/a
|
|
│
|
|
o commit: 02c12aef64ff
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: add subdir/a
|
|
│
|
|
@ commit: 085784c01c08
|
|
bookmark: default/master
|
|
hoistedname: master
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add x
|
|
|
|
$ hg cat -r tip subdir/a
|
|
my change
|
|
my other change
|
|
|
|
Pull just part of a normal scratch branch (this causes rebundling on the server)
|
|
|
|
$ hg pull -r 3ef288300b64
|
|
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 log -r 3ef288300b64 --stat
|
|
commit: 3ef288300b64
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add bar/car
|
|
|
|
bar/car | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
Pull a normal scratch branch into a treeonly client
|
|
$ hg pull -r scratch/nontree
|
|
pulling from ssh://user@dummy/master
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 2 changes to 1 files
|
|
$ hg log -r 3ef288300b64 -T ' ' --stat
|
|
bar/car | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
$ hg log -r 3ef288300b64 -T ' ' --stat
|
|
bar/car | 1 +
|
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
|
|
$ cd ..
|
|
|
|
Verify hg cloud backup in a treeonly client will convert old flat manifests into
|
|
trees
|
|
$ hgcloneshallow ssh://user@dummy/master ondemandconvertclient -q
|
|
$ cd ondemandconvertclient
|
|
$ echo >> foo
|
|
$ hg commit -Aqm 'add foo'
|
|
$ hg up -q '.^'
|
|
$ hg cloud backup
|
|
backing up stack rooted at 7e75be1136c3
|
|
commitcloud: backed up 1 commit
|
|
remote: pushing 1 commit:
|
|
remote: 7e75be1136c3 add foo
|
|
$ cd ..
|
|
|
|
Verify its not on the server
|
|
$ cd master
|
|
$ hg log -G
|
|
@ commit: 085784c01c08
|
|
bookmark: master
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add x
|
|
|
|
Test delivering public and draft commits to the client. Verify we don't deliver
|
|
treemanifest data for the public commits.
|
|
$ cd ../client1
|
|
$ hg log -G -T '{node|short} {phase} {desc}'
|
|
@ 5a7a7de8a420 draft edit subdir/a
|
|
│
|
|
o 02c12aef64ff draft add subdir/a
|
|
│
|
|
o 085784c01c08 public add x
|
|
|
|
# Strip all the commits so we can pull them again.
|
|
$ hg debugstrip -q -r 'all()' --no-backup
|
|
|
|
# Clear out all the tree data, so we can see exactly what is downloaded in the
|
|
# upcoming pull.
|
|
$ rm -rf .hg/store/packs/*
|
|
$ clearcache
|
|
|
|
# Pull one infinitepush commit and one normal commit
|
|
$ hg pull -r 02c12aef64ffa8bfc
|
|
pulling from ssh://user@dummy/master
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 0 changes to 0 files
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files
|
|
|
|
$ hg log -G -T '{node|short} {phase} {desc}'
|
|
o 02c12aef64ff draft add subdir/a
|
|
│
|
|
o 085784c01c08 public add x
|
|
|
|
# Verify only the infinitepush commit tree data was downloaded
|
|
$ hg debugdatapack .hg/store/packs/manifests/*datapack
|
|
.hg/store/packs/manifests/a9b899bcf54bca96b39e9e135ca0625126487ceb:
|
|
subdir:
|
|
Node Delta Base Delta Length Blob Size
|
|
9eee655b90d1 000000000000 43 (missing)
|
|
|
|
(empty name):
|
|
Node Delta Base Delta Length Blob Size
|
|
604088751312 000000000000 92 (missing)
|
|
|
|
|
|
# Create a new commit on master with a noticeable number of trees
|
|
$ cd ../master
|
|
$ mkdir -p deep/dir/for/many/trees
|
|
$ echo x > deep/dir/for/many/trees/x
|
|
$ hg commit -Aqm "add deep x"
|
|
$ cd ../client1
|
|
$ hg pull -q
|
|
|
|
# Create a new root with just one tree
|
|
$ hg up -q null
|
|
$ echo z > z
|
|
$ hg commit -Aqm "add z"
|
|
|
|
# Merge the root into master and push the merge as a backup
|
|
$ hg up -q f027ebc7ba78
|
|
2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over * (glob) (?)
|
|
fetching tree '' 92ea8e774335a78205d4837583cf4224b5fc5c33, found via f027ebc7ba78
|
|
6 trees fetched over * (glob)
|
|
$ hg merge d32fd17cb041
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
(branch merge, don't forget to commit)
|
|
$ hg commit -qm "merge"
|
|
$ hg cloud backup
|
|
backing up stack rooted at d32fd17cb041
|
|
commitcloud: backed up 2 commits
|
|
remote: pushing 2 commits:
|
|
remote: d32fd17cb041 add z
|
|
remote: 8b1db7b72253 merge
|
|
|
|
# Check the bundle. It should only have 2 trees (one from z and one for the merged
|
|
# root directory)
|
|
$ hg debugbundle $TESTTMP/master/.hg/scratchbranches/filebundlestore/95/ac/95ac1702067611e314fd8e7d61ed1ff6d2485228
|
|
Stream params: {}
|
|
changegroup -- {version: 02}
|
|
d32fd17cb041b810cad28724776c6d51faad59dc
|
|
8b1db7b722533971a8133917e17a356a729cc281
|
|
b2x:treegroup2 -- {cache: False, category: manifests, version: 1}
|
|
2 data items, 2 history items
|
|
03e96018741b6da273fcfabe5defa390ba0da1ae
|
|
ddb35f099a648a43a997aef53123bce309c794fd
|