[24870] branches/dp2mp-move/base/portmgr/autosubmit.tcl

source_changes at macosforge.org source_changes at macosforge.org
Sun May 6 20:07:18 PDT 2007


Revision: 24870
          http://trac.macosforge.org/projects/macports/changeset/24870
Author:   jmpp at macports.org
Date:     2007-05-06 20:07:18 -0700 (Sun, 06 May 2007)

Log Message:
-----------
Merging jberry's r24688, r24691, r24702, r24834 and r24854: Work on autosubmit script.

Added Paths:
-----------
    branches/dp2mp-move/base/portmgr/autosubmit.tcl

Copied: branches/dp2mp-move/base/portmgr/autosubmit.tcl (from rev 24688, trunk/base/portmgr/autosubmit.tcl)
===================================================================
--- branches/dp2mp-move/base/portmgr/autosubmit.tcl	                        (rev 0)
+++ branches/dp2mp-move/base/portmgr/autosubmit.tcl	2007-05-07 03:07:18 UTC (rev 24870)
@@ -0,0 +1,151 @@
+#!/usr/bin/env tclsh
+
+package require darwinports
+package require sqlite3
+
+proc open_db { db_file } {
+	# Open/create our database
+	sqlite3 db $db_file
+	db timeout 10000
+	if { [llength [db eval {pragma table_info('SubmitInfo')}]] == 0 } {
+		db eval {
+			create table SubmitInfo (
+				porturl text unique,
+				portname text,
+				last_mod_date datetime,
+				submitted_mod_date datetime,
+				submit_date datetime
+			)
+		}
+	}
+}
+
+
+proc close_db {} {
+	db close
+}
+
+
+proc sql_date { datetime } {
+	return [clock format $datetime -format "%Y-%m-%d %H:%M:%S"]
+}
+
+
+proc submit_ports {} {
+	global prefix submit_options verbose
+
+	if {[catch {set res [dportsearch "^.*\$"]} result]} {
+		puts "port search failed: $result"
+		exit 1
+	}
+	
+	foreach {name array} $res {
+		array unset portinfo
+		array set portinfo $array
+	
+		if {![info exists portinfo(porturl)]} {
+			puts stderr "Internal error: no porturl for $name"
+			continue
+		}
+		
+		set porturl $portinfo(porturl)
+		if { 0 != [regexp {file://(.*)} $porturl match path] } {
+			set portdir [file normalize $path]
+		} else {
+			set portdir [file normalize [darwinports::getportdir $porturl]]
+		}
+		set portfile "${portdir}/Portfile"
+		if { $verbose } { puts "checking ${name}" }
+	
+		if {[file readable $portfile]} {
+			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
+				
+				if { $values(last_mod_date) == "" || $values(last_mod_date) != $mod_date } {
+				
+					# The last_mod_date has changed, so just update it to provide
+					# hysteresis for file changes
+					if { $verbose } { 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
+					
+					# 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
+					if { $verbose } { puts "   submission up to date as of $values(submit_date)" }
+				}
+				
+			}
+			
+			if { $none } {
+				# No record yet, so just create a record for this port
+				# Do nothing else yet to provide hysteresis for file changes
+				if { $verbose } { 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"]
+
+# Do argument processing
+set verbose 0
+if { [lsearch $argv -v] >= 0 } {
+	set verbose 1
+}
+
+# Initialize dports api
+dportinit
+
+# Submit ports
+puts "Using database at $db_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/20070506/f98bed6c/attachment.html


More information about the macports-changes mailing list