#!/usr/bin/tcl # # Run this script to test to see that the latest trunk changes can be # merged into LTS branches without breaking anything. # # To Use: # # * Copy this script into a directory above the sqlite checkout # * Run "fossil update trunk" and "fossil revert" # * Run "tclsh ../merge-test.tcl" (in other words run this script) # # Operation: # # This script changes to each LTS branch to be tested, merges the latest # trunk changes into the branch (without committing them) and then # runs "make test". Any errors are stored in local files. # # Limitations: # # Some LTS branches are not synced directly from trunk but rather from # other LTS branches. These other branches cannot be tested because # there is no good way to generate the intermediate merges. # ############################################################################### # Run a shell command contained in arguments. Put the return code in # global variable ::res and the output string in global variable ::result # proc safeexec {args} { global res result set res [catch "exec $args" result] } # Run the shell command contained in arguments. Print an error and exit # if anything goes wrong. # proc mustbeok {args} { global res result set res [catch "exec $args" result] if {$res} { puts "FAILED: $args" puts $result exit 1 } } # Write $content into a file named $filename. The file is overwritten if it # already exist. The file is create if it does not already exist. # proc writefile {filename content} { set fd [open $filename wb] puts $fd $content close $fd } # Run the merge-test # foreach {branch configopts} { begin-concurrent {--enable-json1} begin-concurrent-pnu {--enable-json1} wal2 {--enable-all} reuse-schema {--enable-all} } { puts $branch set errorfile ${branch}-error.txt mustbeok fossil revert mustbeok fossil up $branch safeexec fossil merge trunk if {$res} { puts " merge failed - see $errorfile" writefile $errorfile $result } else { puts " merge ok" safeexec ./configure --enable-debug {*}$configopts if {$res} { puts " configure failed - see $errorfile" writefile $errorfile $result } else { puts " configure ok" safeexec make fuzzcheck sqlite3 testfixture if {$res} { puts " build failed - see $errorfile" writefile $errorfile $result } else { puts " build ok" safeexec make test if {$res} { puts " test failed - see $errorfile" writefile $errorfile $result } else { puts " test ok" } } } } } mustbeok fossil revert mustbeok fossil up trunk puts "reset back to trunk"