[24834] trunk/base/portmgr/autosubmit.tcl

source_changes at macosforge.org source_changes at macosforge.org
Sat May 5 19:07:03 PDT 2007


Revision: 24834
          http://trac.macosforge.org/projects/macports/changeset/24834
Author:   jberry at macports.org
Date:     2007-05-05 19:07:03 -0700 (Sat, 05 May 2007)

Log Message:
-----------
Updates to autosubmit script

Modified Paths:
--------------
    trunk/base/portmgr/autosubmit.tcl

Modified: trunk/base/portmgr/autosubmit.tcl
===================================================================
--- trunk/base/portmgr/autosubmit.tcl	2007-05-06 00:47:47 UTC (rev 24833)
+++ trunk/base/portmgr/autosubmit.tcl	2007-05-06 02:07:03 UTC (rev 24834)
@@ -1,21 +1,20 @@
 #!/usr/bin/env tclsh
 
-# TODO:
-#	- don't use a hard-coded db location
-
 package require darwinports
 package require sqlite3
 
-
-proc open_db {} {
+proc open_db { db_file } {
 	# Open/create our database
-	sqlite3 db "/Users/jberry/autosubmit.db"
+	sqlite3 db $db_file
 	db timeout 10000
 	if { [llength [db eval {pragma table_info('SubmitInfo')}]] == 0 } {
 		db eval {
 			create table SubmitInfo (
 				porturl text unique,
-				lastsubmit datetime
+				portname text,
+				last_mod_date datetime,
+				submitted_mod_date datetime,
+				submit_date datetime
 			)
 		}
 	}
@@ -32,14 +31,15 @@
 }
 
 
-proc check_ports {} {
+proc submit_ports {} {
+	global prefix submit_options
+
 	if {[catch {set res [dportsearch "^.*\$"]} result]} {
 		puts "port search failed: $result"
 		exit 1
 	}
 	
 	foreach {name array} $res {
-		global prefix
 		array unset portinfo
 		array set portinfo $array
 	
@@ -58,45 +58,88 @@
 		puts "checking ${name}"
 	
 		if {[file readable $portfile]} {
-			set moddate [sql_date [file mtime $portfile]]
-			set values [db eval { select * from submitinfo where porturl=$porturl and $moddate <= lastsubmit }]
-			if { [llength $values] == 0 } {
-				puts "submitting ${name}"
+			set mod_date [sql_date [file mtime $portfile]]
+			set cur_date [sql_date [clock seconds]]
+			
+			set post ""
+			set none 1
+			db eval { select * from submitinfo where porturl=$porturl } values {
+				set none 0
 				
-				# Open the port
-				if {[catch {set workername [dportopen $porturl]} result]} {
-					global errorInfo
-					ui_debug "$errorInfo"
-					puts "Unable to open port: $result"
-					continue
-				}
+				if { $values(last_mod_date) == "" || $values(last_mod_date) != $mod_date } {
 				
-				# Submit the port
-				if {[catch {set result [dportexec $workername submit]} result]} {
-					global errorInfo
+					# The last_mod_date has changed, so just update it to provide
+					# hysteresis for file changes
+					puts "    update ${name} mod date to $mod_date"
+					set post { update submitinfo set last_mod_date=$mod_date where porturl=$porturl }				
+				
+				} elseif { $values(submitted_mod_date) != $mod_date } {
+				
+					# last_mod_date is correct and stable, but has not yet been submitted
+					# so let's submit it
+	
+					# Open the port
+					set err 0
+					if {[catch {set workername [dportopen $porturl [array get submit_options]]} result]} {
+						global errorInfo
+						ui_debug "$errorInfo"
+						puts "Unable to open port: $result"
+						set err 1
+					}
+	
+					# Submit the port
+					if { !$err && [catch {set result [dportexec $workername submit]} result]} {
+						global errorInfo
+						ui_debug "$errorInfo"
+						puts "Unable to execute port: $result"
+						set err 1
+					}
+			
+					# Close the port
 					dportclose $workername
-					ui_debug "$errorInfo"
-					puts "Unable to execute port: $result"
 					
-					# Cleanup
-					dportclose $workername
-					continue
+					# Update the date in the database for this item
+					if { !$err && !$result } {
+						set post { update submitinfo set submitted_mod_date=$mod_date, submit_date=$cur_date where porturl=$porturl }
+					}
+				} else {
+				
+					# The port has already been submitted
+					puts "   submission up to date as of $values(submit_date)"
 				}
-		
-				# Close the port
-				dportclose $workername
-		
-				# Update the date in the database for this item
-				db eval { insert or replace into submitinfo (porturl,lastsubmit) values ($porturl, $moddate) }
+				
 			}
+			
+			if { $none } {
+				# No record yet, so just create a record for this port
+				# Do nothing else yet to provide hysteresis for file changes
+				puts "    set ${name} mod date to $mod_date"
+				set post { insert into submitinfo (porturl,portname,last_mod_date) values ($porturl, $name, $mod_date) }				
+			}
+			
+			# Do update or insert post processing
+			if { $post != "" } {
+				db eval $post
+			}
 		}
 		
 	}
 }
 
 
+# Globals
+set SUBMITTER_NAME "autosubmit"
+set SUBMITTER_EMAIL "autosubmit at macports.org"
+array set submit_options "submitter_name $SUBMITTER_NAME submitter_email $SUBMITTER_EMAIL"
+
+global darwinports::autoconf::macports_user_dir
+set db_file [file normalize "${darwinports::autoconf::macports_user_dir}/autosubmit.db"]
+
+puts "Using database at $db_file"
+
 # Initialize dports api
 dportinit
-open_db
-check_ports
-close_db
\ No newline at end of file
+
+open_db $db_file
+submit_ports
+close_db

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20070505/1a044c98/attachment.html


More information about the macports-changes mailing list