source: trunk/base/portmgr/autosubmit.tcl @ 29367

Last change on this file since 29367 was 26177, checked in by jmpp@…, 13 years ago

Finally merging the dp2mp-move branch into trunk, woot!

This basically means all strings in our sources,
whether it's something we output to the user or something
internal, such as a function/proc naming, are entirely in
the macports namespace and we no longer mix darwinports
with apple with macports strings.

It also means we now have new paths in svn and on
the client side at installation time, added to a
cleaner structure under ${prefix}/var/. Read
http://trac.macports.org/projects/macports/wiki/MacPortsRenaming
for more information.

NOTE: This commit also marks the rsync server finally
being moved over to the macosforge boxes, with the new
layout outlined in the dp2mp-move branch in place.
DNS entries still point to the old rsync server for
macports, however, so sync'ing/selfupdating an installation
based on these sources will be temporarily broken
until dns refresh.

To developers and testers, please do test the upgrade
target in the main base/Makefile as thouroughly as
possible and report any bugs/shortcomings/unexpected_behavior
to me, thanks!

  • Property svn:executable set to *
File size: 3.7 KB
Line 
1#!/usr/bin/env tclsh
2
3package require macports
4package require sqlite3
5
6proc open_db { db_file } {
7        # Open/create our database
8        sqlite3 db $db_file
9        db timeout 10000
10        if { [llength [db eval {pragma table_info('SubmitInfo')}]] == 0 } {
11                db eval {
12                        create table SubmitInfo (
13                                porturl text unique,
14                                portname text,
15                                last_mod_date datetime,
16                                submitted_mod_date datetime,
17                                submit_date datetime
18                        )
19                }
20        }
21}
22
23
24proc close_db {} {
25        db close
26}
27
28
29proc sql_date { datetime } {
30        return [clock format $datetime -format "%Y-%m-%d %H:%M:%S"]
31}
32
33
34proc submit_ports {} {
35        global prefix submit_options verbose
36
37        if {[catch {set res [mportsearch "^.*\$"]} result]} {
38                puts "port search failed: $result"
39                exit 1
40        }
41       
42        foreach {name array} $res {
43                array unset portinfo
44                array set portinfo $array
45       
46                if {![info exists portinfo(porturl)]} {
47                        puts stderr "Internal error: no porturl for $name"
48                        continue
49                }
50               
51                set porturl $portinfo(porturl)
52                if { 0 != [regexp {file://(.*)} $porturl match path] } {
53                        set portdir [file normalize $path]
54                } else {
55                        set portdir [file normalize [macports::getportdir $porturl]]
56                }
57                set portfile "${portdir}/Portfile"
58                if { $verbose } { puts "checking ${name}" }
59       
60                if {[file readable $portfile]} {
61                        set mod_date [sql_date [file mtime $portfile]]
62                        set cur_date [sql_date [clock seconds]]
63                       
64                        set post ""
65                        set none 1
66                        db eval { select * from submitinfo where porturl=$porturl } values {
67                                set none 0
68                               
69                                if { $values(last_mod_date) == "" || $values(last_mod_date) != $mod_date } {
70                               
71                                        # The last_mod_date has changed, so just update it to provide
72                                        # hysteresis for file changes
73                                        if { $verbose } { puts "    update ${name} mod date to $mod_date" }
74                                        set post { update submitinfo set last_mod_date=$mod_date where porturl=$porturl }                               
75                               
76                                } elseif { $values(submitted_mod_date) != $mod_date } {
77                               
78                                        # last_mod_date is correct and stable, but has not yet been submitted
79                                        # so let's submit it
80       
81                                        # Open the port
82                                        set err 0
83                                        if {[catch {set workername [mportopen $porturl [array get submit_options]]} result]} {
84                                                global errorInfo
85                                                ui_debug "$errorInfo"
86                                                puts "Unable to open port: $result"
87                                                set err 1
88                                        }
89       
90                                        # Submit the port
91                                        if { !$err && [catch {set result [mportexec $workername submit]} result]} {
92                                                global errorInfo
93                                                ui_debug "$errorInfo"
94                                                puts "Unable to execute port: $result"
95                                                set err 1
96                                        }
97                       
98                                        # Close the port
99                                        mportclose $workername
100                                       
101                                        # Update the date in the database for this item
102                                        if { !$err && !$result } {
103                                                set post { update submitinfo set submitted_mod_date=$mod_date, submit_date=$cur_date where porturl=$porturl }
104                                        }
105                                } else {
106                               
107                                        # The port has already been submitted
108                                        if { $verbose } { puts "   submission up to date as of $values(submit_date)" }
109                                }
110                               
111                        }
112                       
113                        if { $none } {
114                                # No record yet, so just create a record for this port
115                                # Do nothing else yet to provide hysteresis for file changes
116                                if { $verbose } { puts "    set ${name} mod date to $mod_date" }
117                                set post { insert into submitinfo (porturl,portname,last_mod_date) values ($porturl, $name, $mod_date) }                               
118                        }
119                       
120                        # Do update or insert post processing
121                        if { $post != "" } {
122                                db eval $post
123                        }
124                }
125               
126        }
127}
128
129
130# Globals
131set SUBMITTER_NAME "autosubmit"
132set SUBMITTER_EMAIL "autosubmit@macports.org"
133array set submit_options "submitter_name $SUBMITTER_NAME submitter_email $SUBMITTER_EMAIL"
134
135# Do argument processing
136set verbose 0
137if { [lsearch $argv -v] >= 0 } {
138        set verbose 1
139}
140
141# Initialize mports api
142mportinit
143
144# Submit ports
145set db_file [file normalize "${macports::macports_user_dir}/autosubmit.db"]
146if { $verbose } { puts "Using database at $db_file" }
147open_db $db_file
148submit_ports
149close_db
Note: See TracBrowser for help on using the repository browser.