Ignore:
Timestamp:
Jul 1, 2004, 5:21:18 PM (15 years ago)
Author:
wbb4
Message:

Bug:
Submitted by: wbb4@
Reviewed by: wbb4@
Approved by:
Obtained from: wbb4-versionfoobage-1 branch, pguyot@, wbb4@

This is the merge of the Port Images branch (wbb4-versionfoobage-1) into HEAD.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/base/src/port1.0/portutil.tcl

    r6917 r7620  
    526526
    527527proc target_run {ditem} {
    528     global target_state_fd portname
     528    global target_state_fd portpath portname portversion portrevision portvariants ports_force
    529529    set result 0
     530    set skipped 0
    530531    set procedure [ditem_key $ditem procedure]
    531532    if {$procedure != ""} {
     
    536537        }
    537538       
    538         if {[check_statefile target $name $target_state_fd] && $result == 0} {
    539             set result 0
    540             ui_debug "Skipping completed $name ($portname)"
    541         } elseif {$result == 0} {
    542             # Execute pre-run procedure
    543             if {[ditem_contains $ditem prerun]} {
    544                 set result [catch {[ditem_key $ditem prerun] $name} errstr]
    545             }
    546            
    547             if {$result == 0} {
    548                 foreach pre [ditem_key $ditem pre] {
    549                     ui_debug "Executing $pre"
    550                     set result [catch {$pre $name} errstr]
    551                     if {$result != 0} { break }
     539        if { ![info exists portvariants] } {
     540                set portvariants ""
     541        }
     542
     543        if {$result == 0} {
     544                # Skip the step if required and explain why through ui_debug.
     545                # 1st case: the step was already done (as mentioned in the state file)
     546                if {[check_statefile target $name $target_state_fd]} {
     547                    ui_debug "Skipping completed $name ($portname)"
     548                    set skipped 1
     549                # 2nd case: the step is not to always be performed
     550                # and this exact port/version/revision/variants is already installed
     551                # and user didn't mention -f
     552                # and portfile didn't change since installation.
     553                } elseif {[ditem_key $ditem runtype] != "always"
     554                        && [registry_exists $portname $portversion $portrevision $portvariants]
     555                        && !([info exists ports_force] && $ports_force == "yes")} {
     556                                               
     557                        # Did the Portfile change since installation?
     558                        set regref [registry_open $portname $portversion $portrevision $portvariants]
     559                       
     560                        set installdate [registry_prop_retr $regref date]
     561                        if { $installdate != 0
     562                                && $installdate < [file mtime ${portpath}/Portfile]} {
     563                                ui_debug "Portfile changed since installation"
     564                        } else {
     565                                # Say we're skipping.
     566                                set skipped 1
     567                               
     568                                ui_debug "Skipping $name ($portname) since this port is already installed"
     569                        }
     570                       
     571                        # Something to close the registry entry may be called here, if it existed.
     572                # 3rd case: the same port/version/revision/Variants is already active
     573                # and user didn't mention -f
     574                } elseif {$name == "com.apple.activate"
     575                        && [registry_exists $portname $portversion $portrevision $portvariants]
     576                        && !([info exists ports_force] && $ports_force == "yes")} {
     577                       
     578                        # Is port active?
     579                        set regref [registry_open $portname $portversion $portrevision $portvariants]
     580                       
     581                        if { [registry_prop_retr $regref active] != 0 } {
     582                                # Say we're skipping.
     583                                set skipped 1
     584                               
     585                                ui_debug "Skipping $name ($portname) since this port is already active"
     586                        }
     587                       
    552588                }
    553             }
    554            
    555             if {$result == 0} {
    556                 ui_debug "Executing $name ($portname)"
    557                 set result [catch {$procedure $name} errstr]
    558             }
    559            
    560             if {$result == 0} {
    561                 foreach post [ditem_key $ditem post] {
    562                     ui_debug "Executing $post"
    563                     set result [catch {$post $name} errstr]
    564                     if {$result != 0} { break }
     589                       
     590                # otherwise execute the task.
     591                if {$skipped == 0} {
     592                        # Execute pre-run procedure
     593                        if {[ditem_contains $ditem prerun]} {
     594                        set result [catch {[ditem_key $ditem prerun] $name} errstr]
     595                        }
     596                       
     597                        if {$result == 0} {
     598                        foreach pre [ditem_key $ditem pre] {
     599                                ui_debug "Executing $pre"
     600                                set result [catch {$pre $name} errstr]
     601                                if {$result != 0} { break }
     602                        }
     603                        }
     604                       
     605                        if {$result == 0} {
     606                        ui_debug "Executing $name ($portname)"
     607                        set result [catch {$procedure $name} errstr]
     608                        }
     609                       
     610                        if {$result == 0} {
     611                        foreach post [ditem_key $ditem post] {
     612                                ui_debug "Executing $post"
     613                                set result [catch {$post $name} errstr]
     614                                if {$result != 0} { break }
     615                        }
     616                        }
     617                        # Execute post-run procedure
     618                        if {[ditem_contains $ditem postrun] && $result == 0} {
     619                        set postrun [ditem_key $ditem postrun]
     620                        ui_debug "Executing $postrun"
     621                        set result [catch {$postrun $name} errstr]
     622                        }
    565623                }
    566             }
    567             # Execute post-run procedure
    568             if {[ditem_contains $ditem postrun] && $result == 0} {
    569                 set postrun [ditem_key $ditem postrun]
    570                 ui_debug "Executing $postrun"
    571                 set result [catch {$postrun $name} errstr]
    572             }
    573624        }
    574625        if {$result == 0} {
    575             if {[ditem_key $ditem runtype] != "always"} {
     626                # Only write to state file if:
     627                # - we indeed performed this step.
     628                # - this step is not to always be performed
     629                # - this step must be written to file
     630                if {$skipped == 0
     631            && [ditem_key $ditem runtype] != "always"
     632            && [ditem_key $ditem state] != "no"} {
    576633                write_statefile target $name $target_state_fd
    577634            }
     
    717774    return $mismatch
    718775}
    719 
    720 # Traverse the ports collection hierarchy and call procedure func for
    721 # each directory containing a Portfile
    722 proc port_traverse {func {dir .}} {
    723     set pwd [pwd]
    724     if {[catch {cd $dir} err]} {
    725         ui_error $err
    726         return
    727     }
    728     foreach name [readdir .] {
    729         if {[string match $name .] || [string match $name ..]} {
    730             continue
    731         }
    732         if {[file isdirectory $name]} {
    733             port_traverse $func $name
    734         } else {
    735             if {[string match $name Portfile]} {
    736                 catch {eval $func {[file join $pwd $dir]}}
    737             }
    738         }
    739     }
    740     cd $pwd
    741 }
    742 
    743776
    744777########### Port Variants ###########
     
    943976}
    944977
     978proc target_state {ditem args} {
     979    eval "ditem_append $ditem state $args"
     980}
     981
    945982proc target_init {ditem args} {
    946983    eval "ditem_append $ditem init $args"
     
    10891126    set size    0;
    10901127    foreach file [readdir $dir] {
    1091         if {$file == "." || $file == ".." || [file type [file join $dir $file]] == "link" } {
     1128        if {[file type [file join $dir $file]] == "link" } {
    10921129            continue
    10931130        }
Note: See TracChangeset for help on using the changeset viewer.