summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alvarez <pedro.alvarez@codethink.co.uk>2014-02-26 11:51:52 +0000
committerPedro Alvarez <pedro.alvarez@codethink.co.uk>2014-02-26 11:51:52 +0000
commitf585763060076fdd5104409554613b9ca110f910 (patch)
treea5efde1dda2ad6004d987edbf7f7208173f605f5
parentbcfb17b890e74538655695c4f76962b16565f664 (diff)
parent087ad206db4ef25eff2c21c3d6e06194f0e217ee (diff)
downloadtbdiff-f585763060076fdd5104409554613b9ca110f910.tar.gz
Merge branch 'baserock/pedroalvarez/bscs-wrong-merge2'
Reviewed-by: Richard Maw
-rwxr-xr-xbaserock-system-config-sync/baserock-system-config-sync21
-rw-r--r--tests/bscs-merge.pass/upgrades.in/systems/factory/orig/etc/file82
-rw-r--r--tests/bscs-merge.pass/upgrades.in/systems/factory/run/etc/file82
-rw-r--r--tests/bscs-merge.pass/upgrades.in/systems/version2/orig/etc/file82
-rw-r--r--tests/bscs-merge.pass/upgrades.in/systems/version2/run/etc/file82
-rw-r--r--tests/bscs-merge.pass/upgrades.out/systems/factory/orig/etc/file82
-rw-r--r--tests/bscs-merge.pass/upgrades.out/systems/factory/run/etc/file82
-rw-r--r--tests/bscs-merge.pass/upgrades.out/systems/version2/orig/etc/file82
-rw-r--r--tests/bscs-merge.pass/upgrades.out/systems/version2/run/etc/file82
-rwxr-xr-xtests/run_tests.sh7
10 files changed, 33 insertions, 11 deletions
diff --git a/baserock-system-config-sync/baserock-system-config-sync b/baserock-system-config-sync/baserock-system-config-sync
index a093b15..e297197 100755
--- a/baserock-system-config-sync/baserock-system-config-sync
+++ b/baserock-system-config-sync/baserock-system-config-sync
@@ -134,6 +134,7 @@ merge_regular_file() {
v1_exists=$(test -f "$v1" && echo exists || echo none)
vu_exists=$(test -f "$vu" && echo exists || echo none)
v2_exists=$(test -f "$v2" && echo exists || echo none)
+
case "$v1_exists $vu_exists $v2_exists" in
'exists none none')
cp -a "$v1" "$vt"
@@ -152,16 +153,24 @@ merge_regular_file() {
;;
'none exists exists')
cp -a "$v2" "$vt"
- if ! (diff -u "$v2" --label="$v2" "$vu" --label="$vu" | patch "$vt" -t); then
- cp -a "$v2" "$vt" # merge failed, use v2
- # 'patch' creates a file '.rej' with the diff that did not apply
+
+ # If v2 == vu, then use v2
+ if ! cmp -s "$v2" "$vu"; then
+ if ! (diff -u "$v2" --label="$v2" "$vu" --label="$vu" | patch "$vt" -f); then
+ cp -a "$v2" "$vt" # merge failed, use v2
+ # 'patch' creates a file '.rej' with the diff that did not apply
+ fi
fi
;;
'exists exists exists')
cp -a "$v2" "$vt"
- if ! (diff -u "$v1" --label="$v1" "$vu" --label="$vu" | patch "$vt" -t); then
- cp -a "$v2" "$vt" # merge failed, use v2
- # 'patch' creates a file '.rej' with the diff that did not apply
+
+ # If v2 == vu, then use v2
+ if ! cmp -s "$v2" "$vu"; then
+ if ! (diff -u "$v1" --label="$v1" "$vu" --label="$vu" | patch "$vt" -f); then
+ cp -a "$v2" "$vt" # merge failed, use v2
+ # 'patch' creates a file '.rej' with the diff that did not apply
+ fi
fi
;;
*)
diff --git a/tests/bscs-merge.pass/upgrades.in/systems/factory/orig/etc/file8 b/tests/bscs-merge.pass/upgrades.in/systems/factory/orig/etc/file8
new file mode 100644
index 0000000..7c1f4fb
--- /dev/null
+++ b/tests/bscs-merge.pass/upgrades.in/systems/factory/orig/etc/file8
@@ -0,0 +1,2 @@
+whereami=v1,vu,v2
+version=v1
diff --git a/tests/bscs-merge.pass/upgrades.in/systems/factory/run/etc/file8 b/tests/bscs-merge.pass/upgrades.in/systems/factory/run/etc/file8
new file mode 100644
index 0000000..24553ad
--- /dev/null
+++ b/tests/bscs-merge.pass/upgrades.in/systems/factory/run/etc/file8
@@ -0,0 +1,2 @@
+whereami=v1,vu,v2
+version=vu
diff --git a/tests/bscs-merge.pass/upgrades.in/systems/version2/orig/etc/file8 b/tests/bscs-merge.pass/upgrades.in/systems/version2/orig/etc/file8
new file mode 100644
index 0000000..24553ad
--- /dev/null
+++ b/tests/bscs-merge.pass/upgrades.in/systems/version2/orig/etc/file8
@@ -0,0 +1,2 @@
+whereami=v1,vu,v2
+version=vu
diff --git a/tests/bscs-merge.pass/upgrades.in/systems/version2/run/etc/file8 b/tests/bscs-merge.pass/upgrades.in/systems/version2/run/etc/file8
new file mode 100644
index 0000000..24553ad
--- /dev/null
+++ b/tests/bscs-merge.pass/upgrades.in/systems/version2/run/etc/file8
@@ -0,0 +1,2 @@
+whereami=v1,vu,v2
+version=vu
diff --git a/tests/bscs-merge.pass/upgrades.out/systems/factory/orig/etc/file8 b/tests/bscs-merge.pass/upgrades.out/systems/factory/orig/etc/file8
new file mode 100644
index 0000000..7c1f4fb
--- /dev/null
+++ b/tests/bscs-merge.pass/upgrades.out/systems/factory/orig/etc/file8
@@ -0,0 +1,2 @@
+whereami=v1,vu,v2
+version=v1
diff --git a/tests/bscs-merge.pass/upgrades.out/systems/factory/run/etc/file8 b/tests/bscs-merge.pass/upgrades.out/systems/factory/run/etc/file8
new file mode 100644
index 0000000..24553ad
--- /dev/null
+++ b/tests/bscs-merge.pass/upgrades.out/systems/factory/run/etc/file8
@@ -0,0 +1,2 @@
+whereami=v1,vu,v2
+version=vu
diff --git a/tests/bscs-merge.pass/upgrades.out/systems/version2/orig/etc/file8 b/tests/bscs-merge.pass/upgrades.out/systems/version2/orig/etc/file8
new file mode 100644
index 0000000..24553ad
--- /dev/null
+++ b/tests/bscs-merge.pass/upgrades.out/systems/version2/orig/etc/file8
@@ -0,0 +1,2 @@
+whereami=v1,vu,v2
+version=vu
diff --git a/tests/bscs-merge.pass/upgrades.out/systems/version2/run/etc/file8 b/tests/bscs-merge.pass/upgrades.out/systems/version2/run/etc/file8
new file mode 100644
index 0000000..24553ad
--- /dev/null
+++ b/tests/bscs-merge.pass/upgrades.out/systems/version2/run/etc/file8
@@ -0,0 +1,2 @@
+whereami=v1,vu,v2
+version=vu
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 36dff01..102aea6 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -25,11 +25,8 @@ compare_dirs() {
(cd "$1" && busybox find * -exec busybox stat -c '%n %a' {} + | sort) > "$file1"
(cd "$2" && busybox find * -exec busybox stat -c '%n %a' {} + | sort) > "$file2"
- # Compare file contents
- diff -r "$1" "$2"
-
- # Compare permissions
- diff "$file1" "$file2"
+ # Compare file contents then permissions
+ diff -r "$1" "$2" && diff "$file1" "$file2"
)
local ret="$?"