sapling/tests/test-dirsync.t
Durham Goode 9b444e63df dirsync: fix extramatches function
Summary:
matchfn actually accepts just a single argument (the file name), so our
extramatches function was incorrect. The test didn't hit it because the matcher
had no patterns (it only had explicit files), so it never executed the matchfn.

Test Plan: I updated the tests with a pattern to force this code path to be hit.

Reviewers: #sourcecontrol, ttung

Differential Revision: https://phabricator.fb.com/D2750982
2015-12-11 14:46:29 -08:00

349 lines
8.0 KiB
Perl

$ extpath=$(dirname $TESTDIR)
$ cp $extpath/dirsync.py $TESTTMP
$ cat >> $HGRCPATH << EOF
> [extensions]
> dirsync=$TESTTMP/dirsync.py
> EOF
$ hg init repo
$ cd repo
$ cat >> .hg/hgrc <<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
$ hg commit --traceback -m "add in dir1"
mirrored adding 'dir1/a' to 'dir2/subdir/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/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'
$ 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
$ hg commit -m "remove in dir1"
mirrored remove of 'dir1/a' to 'dir2/subdir/a'
$ 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"
not mirroring 'dir1/a' to 'dir2/subdir/a'; it already matches
not mirroring 'dir2/subdir/a' to 'dir1/a'; it already matches
$ 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
$ 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
$ 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'
Test syncing a edit + rename
$ echo b > dir1/a
$ hg mv dir1/a dir1/b
$ 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'
$ 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"
mirrored changes in 'dir1/b' to 'dir2/subdir/b'
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/a6e4f018e982-f4dc39cf-amend-backup.hg (glob)
$ 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
$ 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"
created new head
$ 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'
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/70b4edc7f658-c81f5ea9-backup.hg (glob)
$ 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
$ 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
$ 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
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'
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/9eb46ceb8af3-2c09d2e4-amend-backup.hg (glob)
$ 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'
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/50bf2325c501-ac54e4d9-amend-backup.hg (glob)
$ 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(-)