mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +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
856 lines
19 KiB
Perl
856 lines
19 KiB
Perl
#chg-compatible
|
|
|
|
$ enable dirsync
|
|
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ setconfig ui.verbose=true
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> sync1.1=dir1/
|
|
> sync1.2=dir2/subdir/
|
|
> EOF
|
|
|
|
Test mirroring a simple add
|
|
|
|
$ mkdir dir1/
|
|
$ echo a > dir1/a
|
|
$ hg add dir1/a
|
|
adding dir1/a
|
|
$ hg commit --traceback -m "add in dir1"
|
|
mirrored adding 'dir1/a' to 'dir2/subdir/a'
|
|
committing files:
|
|
dir1/a
|
|
dir2/subdir/a
|
|
committing manifest
|
|
committing changelog
|
|
committed c1796664bada
|
|
$ hg diff --git -r null -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/dir1/a
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
diff --git a/dir2/subdir/a b/dir2/subdir/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/dir2/subdir/a
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
|
|
Test mirroring a simple modification
|
|
$ echo a >> dir2/subdir/a
|
|
$ hg commit -m "modify in dir2"
|
|
mirrored changes in 'dir2/subdir/a' to 'dir1/a'
|
|
committing files:
|
|
dir1/a
|
|
dir2/subdir/a
|
|
committing manifest
|
|
committing changelog
|
|
committed c84f345b5796
|
|
$ hg diff --git -r ".^" -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
--- a/dir1/a
|
|
+++ b/dir1/a
|
|
@@ -1,1 +1,2 @@
|
|
a
|
|
+a
|
|
diff --git a/dir2/subdir/a b/dir2/subdir/a
|
|
--- a/dir2/subdir/a
|
|
+++ b/dir2/subdir/a
|
|
@@ -1,1 +1,2 @@
|
|
a
|
|
+a
|
|
|
|
Test mirroring a simple delete
|
|
$ hg rm dir1/a
|
|
removing dir1/a
|
|
$ hg commit -m "remove in dir1"
|
|
mirrored remove of 'dir1/a' to 'dir2/subdir/a'
|
|
committing files:
|
|
committing manifest
|
|
committing changelog
|
|
committed 3cc3197052c1
|
|
$ hg diff --git -r ".^" -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
deleted file mode 100644
|
|
--- a/dir1/a
|
|
+++ /dev/null
|
|
@@ -1,2 +0,0 @@
|
|
-a
|
|
-a
|
|
diff --git a/dir2/subdir/a b/dir2/subdir/a
|
|
deleted file mode 100644
|
|
--- a/dir2/subdir/a
|
|
+++ /dev/null
|
|
@@ -1,2 +0,0 @@
|
|
-a
|
|
-a
|
|
|
|
Test conflicting edits
|
|
$ mkdir dir1/
|
|
$ mkdir -p dir2/subdir/
|
|
$ echo a > dir1/a
|
|
$ echo b > dir2/subdir/a
|
|
$ hg commit -Am "add conflicting changes"
|
|
adding dir1/a
|
|
adding dir2/subdir/a
|
|
abort: path 'dir1/a' needs to be mirrored to 'dir2/subdir/a', but the target already has pending changes
|
|
[255]
|
|
|
|
Test non-conflicting edits
|
|
$ echo a > dir2/subdir/a
|
|
$ hg commit -Am "add non-conflicting changes"
|
|
adding dir1/a
|
|
adding dir2/subdir/a
|
|
not mirroring 'dir1/a' to 'dir2/subdir/a'; it already matches
|
|
not mirroring 'dir2/subdir/a' to 'dir1/a'; it already matches
|
|
committing files:
|
|
dir1/a
|
|
dir2/subdir/a
|
|
committing manifest
|
|
committing changelog
|
|
committed 787a1ee839ea
|
|
$ hg diff --git -r ".^" -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/dir1/a
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
diff --git a/dir2/subdir/a b/dir2/subdir/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/dir2/subdir/a
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
|
|
Test non-conflicting deletes
|
|
$ hg rm dir1/a dir2/subdir/a
|
|
removing dir1/a
|
|
removing dir2/subdir/a
|
|
$ hg commit -Am "non-conflicting removes"
|
|
not mirroring remove of 'dir1/a' to 'dir2/subdir/a'; it is already removed
|
|
not mirroring remove of 'dir2/subdir/a' to 'dir1/a'; it is already removed
|
|
committing files:
|
|
committing manifest
|
|
committing changelog
|
|
committed 20868a046ae1
|
|
$ hg diff --git -r ".^" -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
deleted file mode 100644
|
|
--- a/dir1/a
|
|
+++ /dev/null
|
|
@@ -1,1 +0,0 @@
|
|
-a
|
|
diff --git a/dir2/subdir/a b/dir2/subdir/a
|
|
deleted file mode 100644
|
|
--- a/dir2/subdir/a
|
|
+++ /dev/null
|
|
@@ -1,1 +0,0 @@
|
|
-a
|
|
|
|
- Add it back for the next test
|
|
$ mkdir dir1
|
|
$ echo a > dir1/a
|
|
$ hg commit -Am "add a back"
|
|
adding dir1/a
|
|
mirrored adding 'dir1/a' to 'dir2/subdir/a'
|
|
committing files:
|
|
dir1/a
|
|
dir2/subdir/a
|
|
committing manifest
|
|
committing changelog
|
|
committed 4cc69952853e
|
|
|
|
Test syncing a edit + rename
|
|
$ echo b > dir1/a
|
|
$ hg mv dir1/a dir1/b
|
|
moving dir1/a to dir1/b (glob)
|
|
$ hg commit -m "edit and move a to b in dir1"
|
|
mirrored copy 'dir1/a -> dir1/b' to 'dir2/subdir/a -> dir2/subdir/b'
|
|
mirrored remove of 'dir1/a' to 'dir2/subdir/a'
|
|
committing files:
|
|
dir1/b
|
|
dir2/subdir/b
|
|
committing manifest
|
|
committing changelog
|
|
committed a6e4f018e982
|
|
$ hg diff --git -r ".^" -r .
|
|
diff --git a/dir1/a b/dir1/b
|
|
rename from dir1/a
|
|
rename to dir1/b
|
|
--- a/dir1/a
|
|
+++ b/dir1/b
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+b
|
|
diff --git a/dir2/subdir/a b/dir2/subdir/b
|
|
rename from dir2/subdir/a
|
|
rename to dir2/subdir/b
|
|
--- a/dir2/subdir/a
|
|
+++ b/dir2/subdir/b
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+b
|
|
|
|
Test amending a change where there has already been a sync before
|
|
$ echo c > dir1/b
|
|
$ hg commit --amend -m "amend b in dir1"
|
|
amending changeset a6e4f018e982
|
|
mirrored changes in 'dir1/b' to 'dir2/subdir/b'
|
|
committing files:
|
|
dir1/b
|
|
dir2/subdir/b
|
|
committing manifest
|
|
committing changelog
|
|
committed a9fa97a5457f
|
|
$ hg diff --git -r ".^" -r .
|
|
diff --git a/dir1/a b/dir1/b
|
|
rename from dir1/a
|
|
rename to dir1/b
|
|
--- a/dir1/a
|
|
+++ b/dir1/b
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+c
|
|
diff --git a/dir2/subdir/a b/dir2/subdir/b
|
|
rename from dir2/subdir/a
|
|
rename to dir2/subdir/b
|
|
--- a/dir2/subdir/a
|
|
+++ b/dir2/subdir/b
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+c
|
|
|
|
$ cd ..
|
|
|
|
Test syncing multiple mirror groups across more than 2 directories
|
|
$ rm -rf repo
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> group1.dir1 = dir1/
|
|
> group1.dir2 = dir2/
|
|
> group1.dir3 = other/dir3
|
|
> group2.dir1 = foo/dir1
|
|
> group2.dir2 = foo/dir2
|
|
> EOF
|
|
$ mkdir -p dir1 foo/dir1
|
|
$ echo a > dir1/a
|
|
$ echo b > foo/dir1/a
|
|
$ hg commit -Am "add stuff to two mirror groups"
|
|
adding dir1/a
|
|
adding foo/dir1/a
|
|
mirrored adding 'dir1/a' to 'dir2/a'
|
|
mirrored adding 'dir1/a' to 'other/dir3/a'
|
|
mirrored adding 'foo/dir1/a' to 'foo/dir2/a'
|
|
$ hg diff --git -r null -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/dir1/a
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
diff --git a/dir2/a b/dir2/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/dir2/a
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
diff --git a/foo/dir1/a b/foo/dir1/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/foo/dir1/a
|
|
@@ -0,0 +1,1 @@
|
|
+b
|
|
diff --git a/foo/dir2/a b/foo/dir2/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/foo/dir2/a
|
|
@@ -0,0 +1,1 @@
|
|
+b
|
|
diff --git a/other/dir3/a b/other/dir3/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/other/dir3/a
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
|
|
$ cd ..
|
|
|
|
Test that rebasing applies the same change to both
|
|
$ rm -rf repo
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> group1.dir1 = dir1/
|
|
> group1.dir2 = dir2/
|
|
> EOF
|
|
$ mkdir dir1 dir2
|
|
$ echo a > dir1/a
|
|
$ hg commit -Am "add dir1/a"
|
|
adding dir1/a
|
|
mirrored adding 'dir1/a' to 'dir2/a'
|
|
$ echo x > unrelated
|
|
$ hg commit -Am "add unrelated"
|
|
adding unrelated
|
|
$ hg up 9eb46ceb8af3f2dc30310f918cfd0f963439f382
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
$ echo b > dir1/a
|
|
$ hg commit --config extensions.dirsync=! -m "edit dir1/a with sync on"
|
|
$ cp -R . ../repo1
|
|
$ hg rebase --config extensions.rebase= -d 'max(desc(add))'
|
|
rebasing 70b4edc7f658 "edit dir1/a with sync on"
|
|
mirrored changes in 'dir1/a' to 'dir2/a'
|
|
$ hg diff --git -r ".^" -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
--- a/dir1/a
|
|
+++ b/dir1/a
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+b
|
|
diff --git a/dir2/a b/dir2/a
|
|
--- a/dir2/a
|
|
+++ b/dir2/a
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+b
|
|
|
|
$ cd ..
|
|
|
|
The same test as the above. But uses in-memory rebase
|
|
$ cd repo1
|
|
$ setconfig rebase.experimental.inmemory=True
|
|
$ hg rebase --config extensions.rebase= -d 'max(desc(add))'
|
|
rebasing 70b4edc7f658 "edit dir1/a with sync on"
|
|
mirrored changes in 'dir1/a' to 'dir2/a'
|
|
$ hg diff --git -r ".^" -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
--- a/dir1/a
|
|
+++ b/dir1/a
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+b
|
|
diff --git a/dir2/a b/dir2/a
|
|
--- a/dir2/a
|
|
+++ b/dir2/a
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+b
|
|
|
|
$ cd ..
|
|
|
|
Test committing part of the working copy
|
|
$ rm -rf repo
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> group1.dir1 = dir1/
|
|
> group1.dir2 = dir2/
|
|
> EOF
|
|
$ mkdir dir1 dir2
|
|
$ echo a > dir1/a
|
|
$ echo b > dir1/b
|
|
$ hg add dir1
|
|
adding dir1/a
|
|
adding dir1/b
|
|
$ hg commit -Am "add dir1/a" "re:dir1/a"
|
|
mirrored adding 'dir1/a' to 'dir2/a'
|
|
$ hg status
|
|
A dir1/b
|
|
$ hg log -r . --stat
|
|
commit: 9eb46ceb8af3
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add dir1/a
|
|
|
|
dir1/a | 1 +
|
|
dir2/a | 1 +
|
|
2 files changed, 2 insertions(+), 0 deletions(-)
|
|
|
|
|
|
$ echo a >> dir2/a
|
|
$ hg commit --amend -m "add dir1/a" dir2/a
|
|
mirrored changes in 'dir2/a' to 'dir1/a'
|
|
$ hg status
|
|
A dir1/b
|
|
$ hg log -r . --stat
|
|
commit: 50bf2325c501
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add dir1/a
|
|
|
|
dir1/a | 2 ++
|
|
dir2/a | 2 ++
|
|
2 files changed, 4 insertions(+), 0 deletions(-)
|
|
|
|
|
|
$ echo a >> dir1/a
|
|
$ hg commit --amend -m "add dir1/a" dir2/a
|
|
nothing changed
|
|
[1]
|
|
|
|
$ hg commit --amend -m "add dir1/a"
|
|
mirrored adding 'dir1/b' to 'dir2/b'
|
|
mirrored changes in 'dir1/a' to 'dir2/a'
|
|
$ hg status
|
|
$ hg log -r . --stat
|
|
commit: 5245011388b8
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: add dir1/a
|
|
|
|
dir1/a | 3 +++
|
|
dir1/b | 1 +
|
|
dir2/a | 3 +++
|
|
dir2/b | 1 +
|
|
4 files changed, 8 insertions(+), 0 deletions(-)
|
|
|
|
|
|
- Add it back for the next test
|
|
$ echo a > dir1/a
|
|
$ hg commit -m "add a back" --config ui.verbose=False
|
|
mirrored changes in 'dir1/a' to 'dir2/a'
|
|
|
|
Test quiet non-conflicting edits
|
|
$ echo aa > dir1/a
|
|
$ echo aa > dir2/a
|
|
$ hg commit -m "add non-conflicting changes" --config ui.verbose=True
|
|
not mirroring 'dir1/a' to 'dir2/a'; it already matches
|
|
not mirroring 'dir2/a' to 'dir1/a'; it already matches
|
|
committing files:
|
|
dir1/a
|
|
dir2/a
|
|
committing manifest
|
|
committing changelog
|
|
committed 10f8197f7e02
|
|
$ echo aaa > dir1/a
|
|
$ echo aaa > dir2/a
|
|
$ hg commit -m "add non-conflicting changes" --config ui.verbose=False
|
|
$ hg diff --git -r ".^" -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
--- a/dir1/a
|
|
+++ b/dir1/a
|
|
@@ -1,1 +1,1 @@
|
|
-aa
|
|
+aaa
|
|
diff --git a/dir2/a b/dir2/a
|
|
--- a/dir2/a
|
|
+++ b/dir2/a
|
|
@@ -1,1 +1,1 @@
|
|
-aa
|
|
+aaa
|
|
|
|
$ cd ..
|
|
|
|
Test deleting file with missing mirror
|
|
$ rm -rf repo
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ mkdir dir1
|
|
$ echo a > dir1/a
|
|
$ hg add dir1
|
|
adding dir1/a
|
|
$ hg commit -m 'add dir1/a'
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> group1.dir1 = dir1/
|
|
> group1.dir2 = dir2/
|
|
> EOF
|
|
$ hg rm dir1/a
|
|
$ hg status
|
|
R dir1/a
|
|
$ hg commit -m 'rm dir1/a'
|
|
mirrored remove of 'dir1/a' to 'dir2/a'
|
|
$ hg diff --git -r '.^' -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
deleted file mode 100644
|
|
--- a/dir1/a
|
|
+++ /dev/null
|
|
@@ -1,1 +0,0 @@
|
|
-a
|
|
|
|
$ cd ..
|
|
|
|
Test modifying file with missing mirror
|
|
$ rm -rf repo
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ mkdir dir1
|
|
$ echo a > dir1/a
|
|
$ hg add dir1
|
|
adding dir1/a
|
|
$ hg commit -m 'add dir1/a'
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> group1.dir1 = dir1/
|
|
> group1.dir2 = dir2/
|
|
> EOF
|
|
$ echo a2 > dir1/a
|
|
$ hg status
|
|
M dir1/a
|
|
$ hg commit -m 'modify dir1/a'
|
|
mirrored changes in 'dir1/a' to 'dir2/a'
|
|
$ cat dir2/a
|
|
a2
|
|
$ hg diff --git -r '.^' -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
--- a/dir1/a
|
|
+++ b/dir1/a
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+a2
|
|
diff --git a/dir2/a b/dir2/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/dir2/a
|
|
@@ -0,0 +1,1 @@
|
|
+a2
|
|
|
|
$ cd ..
|
|
|
|
Test updating missing mirror
|
|
$ rm -rf repo
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ mkdir dir1
|
|
$ echo a > dir1/a
|
|
$ hg add dir1
|
|
adding dir1/a
|
|
$ hg commit -m 'add dir1/a'
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> group1.dir1 = dir1/
|
|
> group1.dir2 = dir2/
|
|
> EOF
|
|
$ mkdir dir2
|
|
$ echo a2 > dir2/a
|
|
$ hg add dir2
|
|
adding dir2/a
|
|
$ hg status
|
|
A dir2/a
|
|
$ hg commit -m 'add dir2/a'
|
|
mirrored adding 'dir2/a' to 'dir1/a'
|
|
$ hg diff --git -r '.^' -r .
|
|
diff --git a/dir1/a b/dir1/a
|
|
--- a/dir1/a
|
|
+++ b/dir1/a
|
|
@@ -1,1 +1,1 @@
|
|
-a
|
|
+a2
|
|
diff --git a/dir2/a b/dir2/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/dir2/a
|
|
@@ -0,0 +1,1 @@
|
|
+a2
|
|
|
|
$ cd ..
|
|
|
|
Dont mirror during shelve
|
|
$ rm -rf repo
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ enable shelve
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> group1.dir1 = dir1/
|
|
> group1.dir2 = dir2/
|
|
> EOF
|
|
$ mkdir dir1
|
|
$ echo a > dir1/a
|
|
$ hg add dir1
|
|
adding dir1/a
|
|
$ hg commit -m 'add dir1/a'
|
|
mirrored adding 'dir1/a' to 'dir2/a'
|
|
$ echo a >> dir1/a
|
|
$ hg shelve
|
|
shelved as default
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg status
|
|
$ hg unshelve
|
|
unshelving change 'default'
|
|
$ hg status
|
|
M dir1/a
|
|
|
|
$ cd ..
|
|
|
|
Test .hgdirsync in the working copy
|
|
|
|
$ rm -rf repo
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> group1.dir1 = dir1/
|
|
> group1.dir2 = dir2/
|
|
> EOF
|
|
$ cat >> .hgdirsync <<EOF
|
|
> group1.dir3 = dir3/
|
|
> group2.dir1 = dir4/
|
|
> group2.dir2 = dir5/
|
|
> EOF
|
|
$ mkdir dir2 dir5
|
|
$ echo a > dir2/a
|
|
$ echo b > dir5/b
|
|
$ hg commit -m init -A dir2/a dir5/b
|
|
mirrored adding 'dir2/a' to 'dir1/a'
|
|
mirrored adding 'dir2/a' to 'dir3/a'
|
|
mirrored adding 'dir5/b' to 'dir4/b'
|
|
$ hg log -p -r .
|
|
commit: 1cde422b6101
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: init
|
|
|
|
diff -r 000000000000 -r 1cde422b6101 dir1/a
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
+++ b/dir1/a Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
diff -r 000000000000 -r 1cde422b6101 dir2/a
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
+++ b/dir2/a Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
diff -r 000000000000 -r 1cde422b6101 dir3/a
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
+++ b/dir3/a Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
diff -r 000000000000 -r 1cde422b6101 dir4/b
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
+++ b/dir4/b Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -0,0 +1,1 @@
|
|
+b
|
|
diff -r 000000000000 -r 1cde422b6101 dir5/b
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
+++ b/dir5/b Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -0,0 +1,1 @@
|
|
+b
|
|
|
|
|
|
Change .hgdirsync in the working copy affects what will be synced
|
|
|
|
$ rm .hgdirsync
|
|
|
|
$ echo c > dir2/c
|
|
$ echo d > dir4/d
|
|
$ hg commit -m subdir -A dir2/c dir4/d
|
|
mirrored adding 'dir2/c' to 'dir1/c'
|
|
|
|
$ cat >> .hgdirsync <<EOF
|
|
> group1.dir6 = dir6/
|
|
> group1.dir7 = dir7/
|
|
> EOF
|
|
|
|
$ echo c >> dir2/c
|
|
$ hg commit -m 'modify group1'
|
|
mirrored changes in 'dir2/c' to 'dir1/c'
|
|
mirrored changes in 'dir2/c' to 'dir6/c'
|
|
mirrored changes in 'dir2/c' to 'dir7/c'
|
|
|
|
Only the ".hgdirsync" at the top of the repo is effective
|
|
|
|
$ cd dir1
|
|
$ cat >> .hgdirsync <<'EOF'
|
|
> group1.dir8 = dir8/
|
|
> group1.dir9 = dir9/
|
|
> EOF
|
|
$ echo c >> c
|
|
$ hg commit -m 'modify group1 again'
|
|
mirrored changes in 'dir1/c' to 'dir2/c'
|
|
mirrored changes in 'dir1/c' to 'dir6/c'
|
|
mirrored changes in 'dir1/c' to 'dir7/c'
|
|
|
|
$ cd ../..
|
|
|
|
Rule order matters. Only the first one gets executed.
|
|
|
|
$ hg init $TESTTMP/repo-order1
|
|
$ cd $TESTTMP/repo-order1
|
|
$ cat >> .hgdirsync <<'EOF'
|
|
> a.dir1 = a/
|
|
> a.dir2 = b/
|
|
> c.dir1 = a/c/
|
|
> c.dir2 = c/
|
|
> EOF
|
|
$ mkdir -p a/c
|
|
$ echo 1 > a/c/1
|
|
$ hg commit -m 'order test' -A a
|
|
adding a/c/1
|
|
mirrored adding 'a/c/1' to 'b/c/1'
|
|
|
|
$ hg init $TESTTMP/repo-order2
|
|
$ cd $TESTTMP/repo-order2
|
|
$ cat >> .hgdirsync <<'EOF'
|
|
> c.dir1 = a/c/
|
|
> c.dir2 = c/
|
|
> a.dir1 = a/
|
|
> a.dir2 = b/
|
|
> EOF
|
|
$ mkdir -p a/c
|
|
$ echo 1 > a/c/1
|
|
$ hg commit -m 'order test' -A a
|
|
adding a/c/1
|
|
mirrored adding 'a/c/1' to 'c/1'
|
|
|
|
Test excluding a subdirectory from dirsync
|
|
$ hg init $TESTTMP/exclusion
|
|
$ cd $TESTTMP/exclusion
|
|
$ cat >> .hgdirsync <<'EOF'
|
|
> a.dir1 = a/
|
|
> exclude.a.dir1 = a/excl
|
|
> a.dir2 = b/
|
|
> exclude.a.dir2 = b/excl
|
|
> EOF
|
|
$ mkdir -p a/c
|
|
$ mkdir -p a/excl
|
|
$ echo 1 > a/c/1
|
|
$ echo 2 > a/excl/2
|
|
$ hg commit -m 'exclusion test' -A a
|
|
adding a/c/1
|
|
adding a/excl/2
|
|
mirrored adding 'a/c/1' to 'b/c/1'
|
|
|
|
Test that excludes override all other rules
|
|
$ hg init $TESTTMP/exclusion-override
|
|
$ cd $TESTTMP/exclusion-override
|
|
$ cat >> .hgdirsync <<'EOF'
|
|
> a.dir1 = a/
|
|
> exclude.a.dir1 = a/excl
|
|
> a.dir2 = b/
|
|
> exclude.a.dir2 = b/excl
|
|
> b.dir1 = a/
|
|
> b.dir2 = b/
|
|
> c.dir1 = a/excl/foo
|
|
> c.dir2 = b/excl/foo
|
|
> EOF
|
|
$ mkdir -p a/c
|
|
$ mkdir -p a/excl/foo
|
|
$ echo 1 > a/c/1
|
|
$ echo 2 > a/excl/foo/2
|
|
$ hg commit -m 'exclusion test' -A a
|
|
adding a/c/1
|
|
adding a/excl/foo/2
|
|
mirrored adding 'a/c/1' to 'b/c/1'
|
|
|
|
Test that excludes only work when specified for every destination
|
|
$ hg init $TESTTMP/exclusion-total
|
|
$ cd $TESTTMP/exclusion-total
|
|
$ cat >> .hgdirsync <<'EOF'
|
|
> a.dir1 = a/
|
|
> a.dir2 = b/
|
|
> exclude.a.dir2 = b/excl
|
|
> EOF
|
|
$ mkdir -p a/c
|
|
$ mkdir -p a/excl
|
|
$ echo 1 > a/c/1
|
|
$ echo 2 > a/excl/2
|
|
$ hg commit -m 'exclusion test' -A a
|
|
adding a/c/1
|
|
adding a/excl/2
|
|
mirrored adding 'a/c/1' to 'b/c/1'
|
|
mirrored adding 'a/excl/2' to 'b/excl/2'
|
|
|
|
Match and exclude rules can match individual files
|
|
$ newrepo sync-individual-files
|
|
$ readconfig <<EOF
|
|
> [dirsync]
|
|
> group1.dir1 = somedir/
|
|
> group1.dir2 = elsewhere/
|
|
> singlefile.dir1 = a/myfile.txt
|
|
> singlefile.dir2 = b/foo.txt
|
|
> rootfile.dir1 = toplevel.txt
|
|
> rootfile.dir2 = x/y/z/foo.txt
|
|
> toroot.dir1 = a/root.txt
|
|
> toroot.dir2 = root.txt
|
|
> exclude.group1_path = somedir/readme.txt
|
|
> EOF
|
|
$ mkdir somedir
|
|
$ echo a > somedir/a
|
|
$ echo b > somedir/readme.txt
|
|
$ mkdir a
|
|
$ echo c > a/myfile.txt
|
|
$ echo d > toplevel.txt
|
|
$ echo e > a/root.txt
|
|
$ echo f > toplevel.txt
|
|
$ echo g > other.txt
|
|
$ hg add somedir a other.txt toplevel.txt
|
|
adding a/myfile.txt
|
|
adding a/root.txt
|
|
adding somedir/a
|
|
adding somedir/readme.txt
|
|
$ hg commit -m 'test commit' --traceback
|
|
mirrored adding 'a/myfile.txt' to 'b/foo.txt'
|
|
mirrored adding 'a/root.txt' to 'root.txt'
|
|
mirrored adding 'somedir/a' to 'elsewhere/a'
|
|
mirrored adding 'toplevel.txt' to 'x/y/z/foo.txt'
|
|
$ hg diff --git -r null -r .
|
|
diff --git a/a/myfile.txt b/a/myfile.txt
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/a/myfile.txt
|
|
@@ -0,0 +1,1 @@
|
|
+c
|
|
diff --git a/a/root.txt b/a/root.txt
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/a/root.txt
|
|
@@ -0,0 +1,1 @@
|
|
+e
|
|
diff --git a/b/foo.txt b/b/foo.txt
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/b/foo.txt
|
|
@@ -0,0 +1,1 @@
|
|
+c
|
|
diff --git a/elsewhere/a b/elsewhere/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/elsewhere/a
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
diff --git a/other.txt b/other.txt
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/other.txt
|
|
@@ -0,0 +1,1 @@
|
|
+g
|
|
diff --git a/root.txt b/root.txt
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/root.txt
|
|
@@ -0,0 +1,1 @@
|
|
+e
|
|
diff --git a/somedir/a b/somedir/a
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/somedir/a
|
|
@@ -0,0 +1,1 @@
|
|
+a
|
|
diff --git a/somedir/readme.txt b/somedir/readme.txt
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/somedir/readme.txt
|
|
@@ -0,0 +1,1 @@
|
|
+b
|
|
diff --git a/toplevel.txt b/toplevel.txt
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/toplevel.txt
|
|
@@ -0,0 +1,1 @@
|
|
+f
|
|
diff --git a/x/y/z/foo.txt b/x/y/z/foo.txt
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/x/y/z/foo.txt
|
|
@@ -0,0 +1,1 @@
|
|
+f
|
|
|