Changeset 17375 for trunk/base


Ignore:
Timestamp:
Apr 9, 2006, 5:24:51 AM (14 years ago)
Author:
pguyot (Paul Guyot)
Message:

Updated livecheck feature.
Cf:
http://opendarwin.org/pipermail/darwinports/2006-April/033501.html

Location:
trunk/base
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/base/doc/portfile.7

    r15506 r17375  
    888888.Em moddate
    889889(uses the modification date of some URL resource),
     890.Em regex
     891(retrieve the version by applying a regex to some URL resource),
    890892.Em md5
    891893(compares the md5 sum of some URL resource) or
     
    900902.br
    901903.Sy Values:
    902 .Em freshmeat md5 moddate none
     904.Em freshmeat moddate regex md5 none
    903905.It Ic livecheck.name
    904906Name of the project for live checks (used for freshmeat-based checks).
     
    909911.Sy Default:
    910912.Em ${name}
     913.It Ic livecheck.version
     914Version of the project for live checks (used for regex-based checks).
     915.br
     916.Sy Type:
     917.Em optional
     918.br
     919.Sy Default:
     920.Em ${version}
    911921.It Ic livecheck.url
    912922URL to query for the check.
     
    919929or
    920930.Em http://freshmeat.net/projects-xml/${livecheck.name}/${livecheck.name}.xml
     931.It Ic livecheck.regex
     932Regular expression to parse the resource for regex checks.
     933.br
     934.Sy Type:
     935.Em optional
    921936.It Ic livecheck.distfiles_check
    922937What kind of check to perform on distfiles,
  • trunk/base/src/port1.0/portlivecheck.tcl

    r13497 r17375  
    22# portlivecheck.tcl
    33#
    4 # $Id: portlivecheck.tcl,v 1.3 2005/08/13 22:47:51 pguyot Exp $
     4# $Id: portlivecheck.tcl,v 1.4 2006/04/09 05:24:50 pguyot Exp $
    55#
    66# Copyright (c) 2005 Paul Guyot <pguyot@kallisys.net>,
     
    5151default livecheck.update_check freshmeat
    5252default livecheck.md5 ""
     53default livecheck.regex ""
    5354default livecheck.name {$name}
     55default livecheck.version {$version}
    5456
    5557proc livecheck_main {args} {
    56         global livecheck.distfiles_check livecheck.url livecheck.update_check livecheck.md5 livecheck.name
     58        global livecheck.distfiles_check livecheck.url livecheck.update_check livecheck.md5 livecheck.regex livecheck.name livecheck.version
    5759        global fetch.type
    58         global homepage portname portpath workpath
     60        global homepage portname portpath workpath version
    5961       
    6062        set updated 0
     63        set updated_version "unknown"
    6164
    6265        set tempfile ${workpath}/livecheck.TMP
     
    6467
    6568        ui_debug "Portfile modification date is [clock format $port_moddate]"
     69        ui_debug "Port version is $version"
    6670
    6771        # Check the distfiles if it's a regular fetch phase.
     
    105109       
    106110        # Perform the check depending on the type.
     111        if {"${livecheck.update_check}" == "freshmeat"} {
     112                if {![info exists homepage] || [string equal "${livecheck.url}" "${homepage}"]} {
     113                        set livecheck.url "http://freshmeat.net/projects-xml/${livecheck.name}/${livecheck.name}.xml"
     114                }
     115                if {"${livecheck.regex}" == ""} {
     116                        set livecheck.regex "<latest_release_version>(.*)</latest_release_version>"
     117                }
     118                set livecheck.update_check "regex"
     119        }
     120       
    107121        switch ${livecheck.update_check} {
    108                 "freshmeat" {
    109                         if {${livecheck.url} == ${homepage}} {
    110                                 set livecheck.url "http://freshmeat.net/projects-xml/${livecheck.name}/${livecheck.name}.xml"
    111                         }
    112                        
     122                "regex" {
    113123                        if {[catch {curl fetch ${livecheck.url} $tempfile} error]} {
    114124                                ui_error "cannot check if $portname was updated ($error)"
    115125                        } else {
    116                                 # let's extract the modification date from the file.
     126                                # let's extract the version from the file.
    117127                                set chan [open $tempfile "r"]
    118128                                set updated -1
    119129                                while {1} {
    120                                         set line [gets $chan]
    121                                         if {[regexp "<date_updated>(.*)</date_updated>" $line line date_string]} {
    122                                                 if {[catch {set date_updated [clock scan $date_string -gmt 1]} error]} {
     130                                        if {[gets $chan line] < 0} {
     131                                                break
     132                                        }
     133                                        if {[regexp ${livecheck.regex} $line line updated_version]} {
     134                                                if {$updated_version != $version} {
     135                                                        set updated 1
     136                                                } else {
    123137                                                        set updated 0
    124                                                         ui_error "cannot check if $portname was updated (couldn't parse date_updated tag: $error)"
    125                                                 } else {
    126                                                         ui_debug "Freshmeat date is [clock format $date_updated]"
    127                                                         set updated [expr $date_updated > $port_moddate]
    128138                                                }
    129139                                                break
     
    131141                                }
    132142                                if {$updated < 0} {
    133                                         ui_error "cannot check if $portname was updated (couldn't find date_updated tag)"
     143                                        ui_error "cannot check if $portname was updated (regex didn't match)"
    134144                                }
    135145                        }
     
    167177
    168178        if {${livecheck.update_check} != "none"} {
    169                 if {$updated} {
    170                         ui_info "$portname seems to have been updated"
    171                 } else {
     179                if {$updated > 0} {
     180                        ui_msg "$portname seems to have been updated (port version: $version, new version: $updated_version)"
     181                } elseif {$updated == 0} {
    172182                        ui_debug "$portname seems to be up to date"
    173183                }
Note: See TracChangeset for help on using the changeset viewer.