mirror of
				https://github.com/sqlite/sqlite.git
				synced 2025-10-30 07:05:46 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
| #!/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"
 | 
