2015-10-31 01:37:17 +03:00
|
|
|
$ cat >> $HGRCPATH << EOF
|
|
|
|
> [extensions]
|
2018-01-09 14:06:09 +03:00
|
|
|
> dirsync=
|
2015-10-31 01:37:17 +03:00
|
|
|
> EOF
|
|
|
|
|
|
|
|
$ hg init repo
|
|
|
|
$ cd repo
|
|
|
|
$ cat >> .hg/hgrc <<EOF
|
2016-01-06 00:52:13 +03:00
|
|
|
> [ui]
|
|
|
|
> verbose=true
|
2015-10-31 01:37:17 +03:00
|
|
|
> [dirsync]
|
|
|
|
> sync1.1=dir1/
|
|
|
|
> sync1.2=dir2/subdir/
|
|
|
|
> EOF
|
|
|
|
|
|
|
|
Test mirroring a simple add
|
|
|
|
|
|
|
|
$ mkdir dir1/
|
|
|
|
$ echo a > dir1/a
|
|
|
|
$ hg add dir1/a
|
2016-01-06 00:52:13 +03:00
|
|
|
adding dir1/a
|
2015-10-31 01:37:17 +03:00
|
|
|
$ hg commit --traceback -m "add in dir1"
|
|
|
|
mirrored adding 'dir1/a' to 'dir2/subdir/a'
|
2016-01-06 00:52:13 +03:00
|
|
|
committing files:
|
|
|
|
dir1/a
|
|
|
|
dir2/subdir/a
|
|
|
|
committing manifest
|
|
|
|
committing changelog
|
|
|
|
committed changeset 0:c1796664bada
|
2015-10-31 01:37:17 +03:00
|
|
|
$ 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'
|
2016-01-06 00:52:13 +03:00
|
|
|
committing files:
|
|
|
|
dir1/a
|
|
|
|
dir2/subdir/a
|
|
|
|
committing manifest
|
|
|
|
committing changelog
|
|
|
|
committed changeset 1:c84f345b5796
|
2016-01-08 05:30:24 +03:00
|
|
|
$ hg diff --git -r ".^" -r .
|
2015-10-31 01:37:17 +03:00
|
|
|
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
|
2016-01-06 00:52:13 +03:00
|
|
|
removing dir1/a
|
2015-10-31 01:37:17 +03:00
|
|
|
$ hg commit -m "remove in dir1"
|
|
|
|
mirrored remove of 'dir1/a' to 'dir2/subdir/a'
|
2016-01-06 00:52:13 +03:00
|
|
|
committing files:
|
|
|
|
committing manifest
|
|
|
|
committing changelog
|
|
|
|
committed changeset 2:3cc3197052c1
|
2016-01-08 05:30:24 +03:00
|
|
|
$ hg diff --git -r ".^" -r .
|
2015-10-31 01:37:17 +03:00
|
|
|
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"
|
2017-08-18 13:11:29 +03:00
|
|
|
adding dir1/a
|
|
|
|
adding dir2/subdir/a
|
2015-10-31 01:37:17 +03:00
|
|
|
not mirroring 'dir1/a' to 'dir2/subdir/a'; it already matches
|
|
|
|
not mirroring 'dir2/subdir/a' to 'dir1/a'; it already matches
|
2016-01-06 00:52:13 +03:00
|
|
|
committing files:
|
|
|
|
dir1/a
|
|
|
|
dir2/subdir/a
|
|
|
|
committing manifest
|
|
|
|
committing changelog
|
|
|
|
committed changeset 3:787a1ee839ea
|
2016-01-08 05:30:24 +03:00
|
|
|
$ hg diff --git -r ".^" -r .
|
2015-10-31 01:37:17 +03:00
|
|
|
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
|
2016-01-06 00:52:13 +03:00
|
|
|
removing dir1/a
|
|
|
|
removing dir2/subdir/a
|
2015-10-31 01:37:17 +03:00
|
|
|
$ 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
|
2016-01-06 00:52:13 +03:00
|
|
|
committing files:
|
|
|
|
committing manifest
|
|
|
|
committing changelog
|
|
|
|
committed changeset 4:20868a046ae1
|
2016-01-08 05:30:24 +03:00
|
|
|
$ hg diff --git -r ".^" -r .
|
2015-10-31 01:37:17 +03:00
|
|
|
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'
|
2016-01-06 00:52:13 +03:00
|
|
|
committing files:
|
|
|
|
dir1/a
|
|
|
|
dir2/subdir/a
|
|
|
|
committing manifest
|
|
|
|
committing changelog
|
|
|
|
committed changeset 5:4cc69952853e
|
2015-10-31 01:37:17 +03:00
|
|
|
|
|
|
|
Test syncing a edit + rename
|
|
|
|
$ echo b > dir1/a
|
|
|
|
$ hg mv dir1/a dir1/b
|
2016-01-11 21:19:22 +03:00
|
|
|
moving dir1/a to dir1/b (glob)
|
2015-10-31 01:37:17 +03:00
|
|
|
$ 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'
|
2016-01-06 00:52:13 +03:00
|
|
|
committing files:
|
|
|
|
dir1/b
|
|
|
|
dir2/subdir/b
|
|
|
|
committing manifest
|
|
|
|
committing changelog
|
|
|
|
committed changeset 6:a6e4f018e982
|
2016-01-08 05:30:24 +03:00
|
|
|
$ hg diff --git -r ".^" -r .
|
2015-10-31 01:37:17 +03:00
|
|
|
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"
|
|
|
|
mirrored changes in 'dir1/b' to 'dir2/subdir/b'
|
2017-09-08 20:01:05 +03:00
|
|
|
amending changeset a6e4f018e982
|
2016-01-06 00:52:13 +03:00
|
|
|
committing files:
|
|
|
|
dir1/b
|
|
|
|
dir2/subdir/b
|
|
|
|
committing manifest
|
|
|
|
committing changelog
|
2017-09-08 20:01:05 +03:00
|
|
|
1 changesets found
|
2016-01-06 00:52:13 +03:00
|
|
|
uncompressed size of bundle content:
|
2017-09-08 20:01:05 +03:00
|
|
|
241 (changelog)
|
|
|
|
223 (manifests)
|
|
|
|
199 dir1/b
|
|
|
|
213 dir2/subdir/b
|
|
|
|
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/a6e4f018e982-44b76a2e-amend.hg (glob)
|
2016-01-06 00:52:13 +03:00
|
|
|
1 changesets found
|
|
|
|
uncompressed size of bundle content:
|
2016-10-21 18:58:52 +03:00
|
|
|
282 (changelog)
|
2016-01-06 00:52:13 +03:00
|
|
|
223 (manifests)
|
|
|
|
199 dir1/b
|
|
|
|
213 dir2/subdir/b
|
|
|
|
adding branch
|
|
|
|
adding changesets
|
|
|
|
adding manifests
|
|
|
|
adding file changes
|
|
|
|
added 1 changesets with 2 changes to 2 files
|
|
|
|
committed changeset 6:a9fa97a5457f
|
2016-01-08 05:30:24 +03:00
|
|
|
$ hg diff --git -r ".^" -r .
|
2015-10-31 01:37:17 +03:00
|
|
|
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
|
|
|
|
$ cat >> .hg/hgrc <<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
|
|
|
|
$ cat >> .hg/hgrc <<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 0
|
|
|
|
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"
|
|
|
|
$ hg rebase --config extensions.rebase= -d 1
|
|
|
|
rebasing 2:70b4edc7f658 "edit dir1/a with sync on" (tip)
|
|
|
|
mirrored changes in 'dir1/a' to 'dir2/a'
|
2017-07-11 19:44:53 +03:00
|
|
|
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/70b4edc7f658-c81f5ea9-rebase.hg (glob)
|
2016-01-08 05:30:24 +03:00
|
|
|
$ hg diff --git -r ".^" -r .
|
2015-10-31 01:37:17 +03:00
|
|
|
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
|
2015-11-25 22:21:47 +03:00
|
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
|
|
Test committing part of the working copy
|
|
|
|
$ rm -rf repo
|
|
|
|
$ hg init repo
|
|
|
|
$ cd repo
|
|
|
|
$ cat >> .hg/hgrc <<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
|
2015-12-12 01:46:29 +03:00
|
|
|
$ hg commit -Am "add dir1/a" "re:dir1/a"
|
2015-11-25 22:21:47 +03:00
|
|
|
mirrored adding 'dir1/a' to 'dir2/a'
|
|
|
|
$ hg status
|
|
|
|
A dir1/b
|
|
|
|
$ hg log -r . --stat
|
|
|
|
changeset: 0:9eb46ceb8af3
|
|
|
|
tag: tip
|
|
|
|
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'
|
2017-09-08 20:01:05 +03:00
|
|
|
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/9eb46ceb8af3-c2e9da44-amend.hg (glob)
|
2015-11-25 22:21:47 +03:00
|
|
|
$ hg status
|
|
|
|
A dir1/b
|
|
|
|
$ hg log -r . --stat
|
|
|
|
changeset: 0:50bf2325c501
|
|
|
|
tag: tip
|
|
|
|
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'
|
2017-09-08 20:01:05 +03:00
|
|
|
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/50bf2325c501-d4070811-amend.hg (glob)
|
2015-11-25 22:21:47 +03:00
|
|
|
$ hg status
|
|
|
|
$ hg log -r . --stat
|
|
|
|
changeset: 0:5245011388b8
|
|
|
|
tag: tip
|
|
|
|
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(-)
|
|
|
|
|
2016-01-06 00:52:13 +03:00
|
|
|
|
|
|
|
- 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 changeset 2:10f8197f7e02
|
|
|
|
$ echo aaa > dir1/a
|
|
|
|
$ echo aaa > dir2/a
|
|
|
|
$ hg commit -m "add non-conflicting changes" --config ui.verbose=False
|
2016-01-11 21:19:22 +03:00
|
|
|
$ hg diff --git -r ".^" -r .
|
2016-01-06 00:52:13 +03:00
|
|
|
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
|
|
|
|
|
dirsync: Behave better with already-inconsistent mirror
Summary:
If a mirror of a file is missing, dirsync now behaves better:
- When deleting the source, it allows the commit and does no mirroring since the two paths are already in sync (previously, it raised an exception when trying to delete the mirror)
- When updating the source, it creates a file in the mirrored location to match
- When updating (creating) the mirrored file, the source (which already exists) is updated too
Fixes https://www.facebook.com/groups/sourcecontrol/permalink/929877003728587/.
Test Plan: `../../hg/tests/run-tests.py test-dirsync.t`
Reviewers: #sourcecontrol, durham, lcharignon, ttung
Reviewed By: durham
Subscribers: poshannessy, mjpieters, durham
Differential Revision: https://phabricator.fb.com/D2794928
Signature: t1:2794928:1456446576:c18d06a42eb89b5168c25d048ba4fa1fa3f0c6d3
2016-02-26 03:50:43 +03:00
|
|
|
$ 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'
|
|
|
|
$ cat >> .hg/hgrc <<EOF
|
|
|
|
> [dirsync]
|
|
|
|
> group1.dir1 = dir1/
|
|
|
|
> group1.dir2 = dir2/
|
|
|
|
> EOF
|
|
|
|
$ hg rm dir1/a
|
|
|
|
$ hg status
|
|
|
|
R dir1/a
|
|
|
|
$ hg commit -m 'rm dir1/a'
|
|
|
|
not mirroring remove of 'dir1/a' to 'dir2/a'; it is already removed
|
2016-03-05 00:52:11 +03:00
|
|
|
$ hg diff --git -r '.^' -r .
|
dirsync: Behave better with already-inconsistent mirror
Summary:
If a mirror of a file is missing, dirsync now behaves better:
- When deleting the source, it allows the commit and does no mirroring since the two paths are already in sync (previously, it raised an exception when trying to delete the mirror)
- When updating the source, it creates a file in the mirrored location to match
- When updating (creating) the mirrored file, the source (which already exists) is updated too
Fixes https://www.facebook.com/groups/sourcecontrol/permalink/929877003728587/.
Test Plan: `../../hg/tests/run-tests.py test-dirsync.t`
Reviewers: #sourcecontrol, durham, lcharignon, ttung
Reviewed By: durham
Subscribers: poshannessy, mjpieters, durham
Differential Revision: https://phabricator.fb.com/D2794928
Signature: t1:2794928:1456446576:c18d06a42eb89b5168c25d048ba4fa1fa3f0c6d3
2016-02-26 03:50:43 +03:00
|
|
|
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'
|
|
|
|
$ cat >> .hg/hgrc <<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
|
2016-03-05 00:52:11 +03:00
|
|
|
$ hg diff --git -r '.^' -r .
|
dirsync: Behave better with already-inconsistent mirror
Summary:
If a mirror of a file is missing, dirsync now behaves better:
- When deleting the source, it allows the commit and does no mirroring since the two paths are already in sync (previously, it raised an exception when trying to delete the mirror)
- When updating the source, it creates a file in the mirrored location to match
- When updating (creating) the mirrored file, the source (which already exists) is updated too
Fixes https://www.facebook.com/groups/sourcecontrol/permalink/929877003728587/.
Test Plan: `../../hg/tests/run-tests.py test-dirsync.t`
Reviewers: #sourcecontrol, durham, lcharignon, ttung
Reviewed By: durham
Subscribers: poshannessy, mjpieters, durham
Differential Revision: https://phabricator.fb.com/D2794928
Signature: t1:2794928:1456446576:c18d06a42eb89b5168c25d048ba4fa1fa3f0c6d3
2016-02-26 03:50:43 +03:00
|
|
|
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'
|
|
|
|
$ cat >> .hg/hgrc <<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'
|
2016-03-05 00:52:11 +03:00
|
|
|
$ hg diff --git -r '.^' -r .
|
dirsync: Behave better with already-inconsistent mirror
Summary:
If a mirror of a file is missing, dirsync now behaves better:
- When deleting the source, it allows the commit and does no mirroring since the two paths are already in sync (previously, it raised an exception when trying to delete the mirror)
- When updating the source, it creates a file in the mirrored location to match
- When updating (creating) the mirrored file, the source (which already exists) is updated too
Fixes https://www.facebook.com/groups/sourcecontrol/permalink/929877003728587/.
Test Plan: `../../hg/tests/run-tests.py test-dirsync.t`
Reviewers: #sourcecontrol, durham, lcharignon, ttung
Reviewed By: durham
Subscribers: poshannessy, mjpieters, durham
Differential Revision: https://phabricator.fb.com/D2794928
Signature: t1:2794928:1456446576:c18d06a42eb89b5168c25d048ba4fa1fa3f0c6d3
2016-02-26 03:50:43 +03:00
|
|
|
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 ..
|
dirsync: disable dirsync during shelve/unshelve
Summary:
Shelve and unshelve use commits under the hood to bundle up data. dirsync sees
these commits happening and performs mirrors, which then shows up at unbundle
time, making it impossible to mirror the change again. Example: if I change X,
and it gets mirrored to Y, if I go back and change X later after a unshelve, hg
commit now fails because Y has pending changes and differs from X.
Test Plan: Added a test
Reviewers: #mercurial, ttung, quark
Reviewed By: quark
Subscribers: quark, wez, mjpieters, frantic, wluh
Differential Revision: https://phabricator.intern.facebook.com/D3266602
Signature: t1:3266602:1462484017:738f67c0ab4b5af999819d3855c1f4ba6b2ea338
2016-05-06 00:51:59 +03:00
|
|
|
|
|
|
|
Dont mirror during shelve
|
|
|
|
$ rm -rf repo
|
|
|
|
$ hg init repo
|
|
|
|
$ cd repo
|
|
|
|
$ cat >> .hg/hgrc <<EOF
|
|
|
|
> [extensions]
|
|
|
|
> shelve=
|
|
|
|
> [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
|
2017-03-18 02:35:08 +03:00
|
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
2017-03-20 20:55:43 +03:00
|
|
|
Test .hgdirsync in the working copy
|
2017-03-18 02:35:08 +03:00
|
|
|
|
|
|
|
$ rm -rf repo
|
|
|
|
$ hg init repo
|
|
|
|
$ cd repo
|
|
|
|
$ cat >> .hg/hgrc <<EOF
|
|
|
|
> [dirsync]
|
|
|
|
> group1.dir1 = dir1/
|
|
|
|
> group1.dir2 = dir2/
|
|
|
|
> EOF
|
2017-03-20 20:55:43 +03:00
|
|
|
$ cat >> .hgdirsync <<EOF
|
2017-03-18 02:35:08 +03:00
|
|
|
> 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 .
|
|
|
|
changeset: 0:1cde422b6101
|
|
|
|
tag: tip
|
|
|
|
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
|
|
|
|
|
|
|
|
|
2017-03-20 20:55:43 +03:00
|
|
|
Change .hgdirsync in the working copy affects what will be synced
|
2017-03-18 02:35:08 +03:00
|
|
|
|
2017-03-20 20:55:43 +03:00
|
|
|
$ rm .hgdirsync
|
2017-03-18 02:35:08 +03:00
|
|
|
|
|
|
|
$ echo c > dir2/c
|
|
|
|
$ echo d > dir4/d
|
|
|
|
$ hg commit -m subdir -A dir2/c dir4/d
|
|
|
|
mirrored adding 'dir2/c' to 'dir1/c'
|
|
|
|
|
2017-03-20 20:55:43 +03:00
|
|
|
$ cat >> .hgdirsync <<EOF
|
2017-03-18 02:35:08 +03:00
|
|
|
> 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'
|
|
|
|
|
2017-03-20 20:55:43 +03:00
|
|
|
Only the ".hgdirsync" at the top of the repo is effective
|
2017-03-18 02:35:08 +03:00
|
|
|
|
|
|
|
$ cd dir1
|
2017-03-20 20:55:43 +03:00
|
|
|
$ cat >> .hgdirsync <<'EOF'
|
2017-03-18 02:35:08 +03:00
|
|
|
> 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 ../..
|
2017-09-22 01:57:11 +03:00
|
|
|
|
|
|
|
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'
|