sapling/eden/hg-server/tests/test-fb-hgext-snapshot-backup.t
Durham Goode 98d9269874 server: copy hg to a new hg-server directory
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
2021-04-09 10:09:06 -07:00

154 lines
4.6 KiB
Perl

#require py2
#chg-compatible
# Initial setup
$ enable rebase snapshot remotenames
$ setconfig visibility.enabled=true
$ . "$TESTDIR/library.sh"
$ . "$TESTDIR/infinitepush/library.sh"
$ setupcommon
$ setconfig infinitepushbackup.logdir="$TESTTMP/logs" infinitepushbackup.hostname=testhost
$ setconfig snapshot.enable-sync-bundle=true
# Setup server
$ hg init server
$ cd server
$ setupserver
$ setconfig treemanifest.server=True
$ hg bookmark master
$ cd ..
# Setup clients
$ hg clone -q ssh://user@dummy/server client
$ hg clone -q ssh://user@dummy/server restored
$ cd client
$ hg debugvisibility start
# Add a file to the store
$ echo "foo" > foofile
$ mkdir bar
$ echo "bar" > bar/file
$ hg add foofile bar/file
$ hg commit -m "add some files"
$ hg push --to master -r .
pushing rev 3490593cf53c to destination ssh://user@dummy/server bookmark master
searching for changes
updating bookmark master
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 2 changes to 2 files
# Call this state a base revision
$ BASEREV="$(hg id -i)"
$ echo "$BASEREV"
3490593cf53c
# Snapshot backup test plan:
# 1) Create a snapshot, back it up + restore on another client
# 1) Create a snapshot, back it up + restore on another client
# Setup the environment
$ echo "a" > mergefile
$ hg add mergefile
$ hg commit -m "merge #1"
$ MERGEREV="$(hg id -i)"
$ hg checkout "$BASEREV"
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo "b" > mergefile
$ hg add mergefile
$ hg commit -m "merge #2"
$ hg merge "$MERGEREV"
merging mergefile
warning: 1 conflicts while merging mergefile! (edit, then use 'hg resolve --mark')
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
[1]
$ hg rm bar/file
$ rm foofile
$ echo "another" > bazfile
$ hg add bazfile
$ echo "fizz" > untrackedfile
$ BEFORESTATUS="$(hg status --verbose)"
$ echo "$BEFORESTATUS"
M mergefile
A bazfile
R bar/file
! foofile
? mergefile.orig
? untrackedfile
# The repository is in an unfinished *merge* state.
# Unresolved merge conflicts:
#
# mergefile
#
# To mark files as resolved: hg resolve --mark FILE
# To continue: hg commit
# To abort: hg update --clean . (warning: this will discard uncommitted changes)
$ BEFOREDIFF="$(hg diff)"
$ echo "$BEFOREDIFF"
diff -r 6eb2552aed20 bar/file
--- a/bar/file Thu Jan 01 00:00:00 1970 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-bar
diff -r 6eb2552aed20 bazfile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bazfile Thu Jan 01 00:00:00 1970 +0000
@@ -0,0 +1,1 @@
+another
diff -r 6eb2552aed20 mergefile
--- a/mergefile Thu Jan 01 00:00:00 1970 +0000
+++ b/mergefile Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,5 @@
+<<<<<<< working copy: 6eb2552aed20 - test: merge #2
b
+=======
+a
+>>>>>>> merge rev: f473d4d5a1c0 - test: merge #1
# Make a snapshot
$ OID="$(hg snapshot create | cut -f2 -d' ')"
$ echo "$OID"
751f5ef10bc73a8f549197b380773d4f680daa8c
# Do it one more time to trigger rebundling on the server side
$ hg snapshot create -m "second snapshot"
snapshot ccf23db4d8f395e020a2b8bed6a19bfc2309b5ab created
# Back it up
$ hg cloud backup
backing up stack rooted at f473d4d5a1c0
backing up stack rooted at 6eb2552aed20
commitcloud: backed up 4 commits
remote: pushing 4 commits:
remote: f473d4d5a1c0 merge #1
remote: 6eb2552aed20 merge #2
remote: 751f5ef10bc7 snapshot
remote: ccf23db4d8f3 second snapshot
remote: pushing 4 commits:
remote: f473d4d5a1c0 merge #1
remote: 6eb2552aed20 merge #2
remote: 751f5ef10bc7 snapshot
remote: ccf23db4d8f3 second snapshot
# Restore it on another client
$ cd ../restored
$ hg checkout "$OID"
pulling '751f5ef10bc73a8f549197b380773d4f680daa8c' from 'ssh://user@dummy/server'
fetching tree '' 5acaace5875a90ee839764a9d8a6ba846f243f3a, found via 751f5ef10bc7
2 trees fetched over 0.00s
abort: 751f5ef10bc7 is a snapshot, set ui.allow-checkout-snapshot config to True to checkout on it
[255]
$ hg snapshot checkout $OID
will checkout on 751f5ef10bc73a8f549197b380773d4f680daa8c
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
checkout complete
# hg status/diff are unchanged
$ test "$BEFORESTATUS" = "$(hg status --verbose)"
$ test "$BEFOREDIFF" = "$(hg diff)"