# # 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