summaryrefslogtreecommitdiff
path: root/test/merge_exe.test
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
committercashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
commit4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch)
treec296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /test/merge_exe.test
downloadrelic-master.tar.gz
initial commitHEADmaster
Diffstat (limited to 'test/merge_exe.test')
-rw-r--r--test/merge_exe.test93
1 files changed, 93 insertions, 0 deletions
diff --git a/test/merge_exe.test b/test/merge_exe.test
new file mode 100644
index 0000000..c0ffc5e
--- /dev/null
+++ b/test/merge_exe.test
@@ -0,0 +1,93 @@
+#
+# Copyright (c) 2016 D. Richard Hipp
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the Simplified BSD License (also
+# known as the "2-Clause License" or "FreeBSD License".)
+#
+# This program is distributed in the hope that it will be useful,
+# but without any warranty; without even the implied warranty of
+# merchantability or fitness for a particular purpose.
+#
+# Author contact information:
+# drh@hwaci.com
+# http://www.hwaci.com/drh/
+#
+############################################################################
+#
+# Testing changes to a file's execute bit caused by a merge
+#
+
+if {$tcl_platform(platform) eq "unix"} {
+ proc setx {fn isexe} {
+ file attributes $fn -permissions [expr {$isexe ? "+" : "-"}]x
+ }
+
+ proc test_exe {fn expected} {
+ test merge_exe-$fn {[file executable $fn]==$expected}
+ }
+} else {
+ # WARNING: This is a hack for setting and testing a file's execute bit
+ # on Windows. Never operate directly on Fossil database files like this
+ # unless you really need to and really know what you're doing.
+
+ proc query {sql} {
+ return [exec $::fossilexe sqlite3 --no-repository _FOSSIL_ $sql]
+ }
+
+ proc setx {fn isexe} {
+ set isexe [expr {bool($isexe)}]
+ query "UPDATE vfile SET isexe=$isexe WHERE pathname='$fn'"
+ }
+
+ proc test_exe {fn expected} {
+ set result [query "SELECT isexe FROM vfile WHERE pathname='$fn'"]
+ test merge_exe-$fn {$result==$expected}
+ }
+}
+
+test_setup
+
+write_file f1 "line"
+write_file f2 "line"
+write_file f3 "line"
+write_file f4 "line"
+fossil addremove
+setx f3 1
+setx f4 1
+fossil commit -m "add files"
+
+write_file f0 "f0"
+fossil add f0
+setx f0 1
+fossil mv --hard f1 f1n
+setx f1n 1
+write_file f2 "line\nline2"
+setx f2 1
+write_file f3 "line\nline2"
+setx f3 0
+setx f4 0
+fossil commit -b b -m "changes"
+
+fossil update trunk
+write_file f3 "line3\nline"
+fossil commit -m "edit f3"
+
+fossil merge b
+test_status_list merge_exe-mrg $RESULT {
+ EXECUTABLE f1
+ EXECUTABLE f2
+ UNEXEC f3
+ UNEXEC f4
+ UPDATE f2
+ MERGE f3
+ RENAME f1 -> f1n
+ ADDED f0
+}
+foreach {fn isexe} {f0 1 f1n 1 f2 1 f3 0 f4 0} {
+ test_exe $fn $isexe
+}
+
+###############################################################################
+
+test_cleanup