77 | | # Determine the default type depending on the mirror. |
78 | | if {${livecheck.check} eq "default"} { |
79 | | if {$has_master_sites} { |
80 | | foreach {master_site} ${master_sites} { |
81 | | if {[regexp {^(sourceforge|freshmeat|googlecode|gnu)(?::([^:]+))?} ${master_site} _ site subdir]} { |
82 | | if {${subdir} ne "" && ${livecheck.name} eq "default"} { |
83 | | set livecheck.name ${subdir} |
84 | | } |
85 | | set livecheck.check ${site} |
86 | | |
87 | | break |
88 | | } |
89 | | } |
90 | | } |
91 | | if {${livecheck.check} eq "default"} { |
92 | | set livecheck.check "freshmeat" |
93 | | } |
94 | | if {$has_homepage} { |
95 | | if {[regexp {^http://code.google.com/p/([^/]+)} $homepage _ tag]} { |
96 | | if {${livecheck.name} eq "default"} { |
97 | | set livecheck.name $tag |
98 | | } |
99 | | set livecheck.check "googlecode" |
100 | | } elseif {[regexp {^http://www.gnu.org/software/([^/]+)} $homepage _ tag]} { |
101 | | if {${livecheck.name} eq "default"} { |
102 | | set livecheck.name $tag |
103 | | } |
104 | | set livecheck.check "gnu" |
105 | | } |
106 | | } |
107 | | } |
108 | | if {${livecheck.name} eq "default"} { |
109 | | set livecheck.name $name |
110 | | } |
111 | | |
125 | | # Perform the check depending on the type. |
126 | | switch ${livecheck.check} { |
127 | | "freshmeat" { |
128 | | if {!$has_homepage || ${livecheck.url} eq ${homepage}} { |
129 | | set livecheck.url "http://freshmeat.net/projects/${livecheck.name}/releases.atom" |
| 90 | # Check _resources/port1.0/livecheck for available types. |
| 91 | set types_dir [getdefaultportresourcepath "port1.0/livecheck"] |
| 92 | if {[catch {set available_types [glob -directory $types_dir -tails -types f *.tcl]} result]} { |
| 93 | return -code 1 "No available types were found. Check '$types_dir'." |
| 94 | } |
| 95 | |
| 96 | # Convert available_types from a list of files (e.g., { freshmeat.tcl |
| 97 | # gnu.tcl ... }) into a string in the format "type|type|..." (e.g., |
| 98 | # "freshmeat|gnu|..."). |
| 99 | set available_types [regsub -all {\.tcl} [join $available_types |] {}] |
| 100 | |
| 101 | if {${livecheck.check} eq "default"} { |
| 102 | # Determine the default type depending on the mirror. |
| 103 | if {$has_master_sites} { |
| 104 | foreach {master_site} ${master_sites} { |
| 105 | if {[regexp "^($available_types)(?::(\[^:\]+))?" ${master_site} _ site subdir]} { |
| 106 | if {${subdir} ne "" && ${livecheck.name} eq "default"} { |
| 107 | set livecheck.name ${subdir} |
| 108 | } |
| 109 | set livecheck.check ${site} |
| 110 | |
| 111 | break |
| 112 | } |
136 | | "sourceforge" { |
137 | | if {!$has_homepage || ${livecheck.url} eq ${homepage}} { |
138 | | set livecheck.url "http://sourceforge.net/export/rss2_projfiles.php?project=${livecheck.name}" |
139 | | } |
140 | | if {${livecheck.distname} eq "default"} { |
141 | | set livecheck.distname ${livecheck.name} |
142 | | } |
143 | | if {${livecheck.regex} eq ""} { |
144 | | set livecheck.regex [list "<title>[quotemeta ${livecheck.distname}] (.*) released.*</title>"] |
145 | | } |
146 | | set livecheck.check "regex" |
| 115 | # If the default type cannot be determined from the mirror, use the |
| 116 | # fallback type (which is specified by a symlink). |
| 117 | if {${livecheck.check} eq "default"} { |
| 118 | set livecheck.check "fallback" |
148 | | "googlecode" { |
149 | | if {!$has_homepage || ${livecheck.url} eq ${homepage}} { |
150 | | set livecheck.url "http://code.google.com/p/${livecheck.name}/downloads/list" |
151 | | } |
152 | | if {${livecheck.distname} eq "default"} { |
153 | | set livecheck.distname [regsub ***=[quotemeta ${livecheck.version}] [quotemeta [file tail [lindex ${distfiles} 0]]] (.*)] |
154 | | } |
155 | | if {${livecheck.regex} eq ""} { |
156 | | set livecheck.regex [list "<a href=\"http://[quotemeta ${livecheck.name}].googlecode.com/files/${livecheck.distname}\""] |
157 | | } |
158 | | set livecheck.check "regex" |
| 120 | |
| 121 | # Load the defaults from _resources/port1.0/livecheck/${livecheck.check}.tcl. |
| 122 | set defaults_file "$types_dir/${livecheck.check}.tcl" |
| 123 | ui_debug "Loading the defaults from '$defaults_file'" |
| 124 | if {[catch {source $defaults_file} result]} { |
| 125 | return -code 1 "The defaults could not be loaded from '$defaults_file'." |