Projects
New Ticket     Wiki     Browse Source     Timeline     Roadmap     Bug Reports     Search

Changeset 37349 for trunk/base/src

Show
Ignore:
Timestamp:
06/04/08 01:32:15 (6 months ago)
Author:
jmr@…
Message:

Try to be case-insensitive and case-preserving with port names as much as
possible. Match names case-insensitively in the registry (previously this was
not done when running on a case-sensitive FS), but return the name with its
correct case. Additionally, make sure to use the correctly-cased name whenever
possible, where previously the name as entered by the user was used. This
changeset fixes the bug where giving the port name with incorrect case when
deactivating would fail to delete the port's files from $prefix (#11759).

Location:
trunk/base/src
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/base/src/macports1.0/macports.tcl

    r37316 r37349  
    18951895    # fill array with information 
    18961896    array set portinfo [lindex $result 1] 
     1897    # set portname again since the one we were passed may not have had the correct case 
     1898    set portname $portinfo(name) 
    18971899 
    18981900    # set version_in_tree and revision_in_tree 
     
    19531955        set version_installed $version_in_tree 
    19541956        set revision_installed $revision_in_tree 
     1957        set iname $portname 
    19551958        # That was a very dirty hack showing how ugly our depencendy and upgrade code is. 
    19561959        # To get it working when user provides -f, we also need to set the variant to 
     
    19701973                    || ([rpm-vercomp $version $version_installed] == 0 
    19711974                        && [rpm-vercomp $revision $revision_installed] > 0)} { 
     1975                set iname [lindex $i 0] 
    19721976                set version_installed $version 
    19731977                set revision_installed $revision 
    19741978                set variant_installed $variant 
    1975                 set epoch_installed [registry::property_retrieve [registry::open_entry $portname [lindex $i 1] [lindex $i 2] $variant] epoch] 
     1979                set epoch_installed [registry::property_retrieve [registry::open_entry $iname [lindex $i 1] [lindex $i 2] $variant] epoch] 
    19761980                set num $i 
    19771981            } 
     
    19801984            if {$isactive == 1} { 
    19811985                set anyactive yes 
     1986                set active_name [lindex $i 0] 
    19821987                set version_active $version 
    19831988                set revision_active $revision 
     
    19891994                            || [string compare $variant_installed $variant_active] != 0)} { 
    19901995            # deactivate version 
    1991             if {[catch {portimage::deactivate $portname ${version_active}_${revision_active}${variant_active} $optionslist} result]} { 
     1996            if {[catch {portimage::deactivate $active_name ${version_active}_${revision_active}${variant_active} $optionslist} result]} { 
    19921997                global errorInfo 
    19931998                ui_debug "$errorInfo" 
    1994                 ui_error "Deactivating $portname @${version_active}_${revision_active} failed: $result" 
     1999                ui_error "Deactivating $active_name @${version_active}_${revision_active} failed: $result" 
    19952000                return 1 
    19962001            } 
     
    19982003        if { [lindex $num 4] == 0 && 0 == [string compare "image" ${macports::registry.installtype}] } { 
    19992004            # activate the latest installed version 
    2000             if {[catch {portimage::activate $portname ${version_installed}_${revision_installed}$variant $optionslist} result]} { 
     2005            if {[catch {portimage::activate $iname ${version_installed}_${revision_installed}$variant $optionslist} result]} { 
    20012006                global errorInfo 
    20022007                ui_debug "$errorInfo" 
    2003                 ui_error "Activating $portname @${version_installed}_${revision_installed} failed: $result" 
     2008                ui_error "Activating $iname @${version_installed}_${revision_installed} failed: $result" 
    20042009                return 1 
    20052010            } 
     
    20102015    ui_debug "epoch: in tree: $epoch_in_tree installed: $epoch_installed" 
    20112016    ui_debug "$portname ${version_in_tree}_$revision_in_tree exists in the ports tree" 
    2012     ui_debug "$portname ${version_installed}_$revision_installed is installed" 
     2017    ui_debug "$iname ${version_installed}_$revision_installed is installed" 
    20132018 
    20142019    # set the nodeps option   
     
    20772082                && [rpm-vercomp $revision_installed $revision_in_tree] >= 0 )) 
    20782083        && ![info exists options(ports_force)] } { 
    2079         ui_debug "No need to upgrade! $portname ${version_installed}_$revision_installed >= $portname ${version_in_tree}_$revision_in_tree" 
     2084        ui_debug "No need to upgrade! $iname ${version_installed}_$revision_installed >= $portname ${version_in_tree}_$revision_in_tree" 
    20802085        if { $epoch_installed >= $epoch_in_tree } { 
    20812086            # Check if we have to do dependents 
     
    20852090 
    20862091                registry::open_dep_map 
    2087                 set deplist [registry::list_dependents $portname] 
     2092                set deplist [registry::list_dependents $iname] 
    20882093 
    20892094                if { [llength deplist] > 0 } { 
     
    21542159    if {[info exists options(port_uninstall_old)] || $epoch_override == 1 || [info exists options(ports_force)] || 0 != [string compare "image" ${macports::registry.installtype}] } { 
    21552160        # uninstall old 
    2156         ui_debug "Uninstalling $portname ${version_installed}_$revision_installed$oldvariant" 
    2157         if {[catch {portuninstall::uninstall $portname ${version_installed}_$revision_installed$oldvariant $optionslist} result]} { 
     2161        ui_debug "Uninstalling $iname ${version_installed}_$revision_installed$oldvariant" 
     2162        if {[catch {portuninstall::uninstall $iname ${version_installed}_$revision_installed$oldvariant $optionslist} result]} { 
    21582163            global errorInfo 
    21592164            ui_debug "$errorInfo" 
    2160             ui_error "Uninstall $portname ${version_installed}_$revision_installed$oldvariant failed: $result" 
     2165            ui_error "Uninstall $iname ${version_installed}_$revision_installed$oldvariant failed: $result" 
    21612166            return 1 
    21622167        } 
    21632168    } else { 
    21642169        # XXX deactivate version_installed 
    2165         if {[catch {portimage::deactivate $portname ${version_installed}_$revision_installed$oldvariant $optionslist} result]} { 
     2170        if {[catch {portimage::deactivate $iname ${version_installed}_$revision_installed$oldvariant $optionslist} result]} { 
    21662171            global errorInfo 
    21672172            ui_debug "$errorInfo" 
    2168             ui_error "Deactivating $portname ${version_installed}_$revision_installed failed: $result" 
     2173            ui_error "Deactivating $iname ${version_installed}_$revision_installed failed: $result" 
    21692174            return 1 
    21702175        } 
  • trunk/base/src/port/port.tcl

    r37316 r37349  
    210210    set ilist [registry::installed $portname $portversion] 
    211211    if { [llength $ilist] > 1 } { 
     212        # set portname again since the one we were passed may not have had the correct case 
     213        set portname [lindex [lindex $ilist 0] 0] 
    212214        puts "The following versions of $portname are currently installed:" 
    213215        foreach i [portlist_sortint $ilist] {  
     
    15001502            break_softcontinue "port location failed: $result" 1 status 
    15011503        } else { 
     1504            # set portname again since the one we were passed may not have had the correct case 
     1505            set portname [lindex $ilist 0] 
    15021506            set version [lindex $ilist 1] 
    15031507            set revision [lindex $ilist 2] 
     
    16841688            ui_debug "$errorInfo" 
    16851689            break_softcontinue "$result" 1 status 
     1690        } else { 
     1691            # set portname again since the one we were passed may not have had the correct case 
     1692            set portname [lindex [lindex $ilist 0] 0] 
    16861693        } 
    16871694         
     
    19141921    } 
    19151922    foreachport $portlist { 
     1923        if { ![catch {set ilist [registry::installed $portname]} result] } { 
     1924            # set portname again since the one we were passed may not have had the correct case 
     1925            set portname [lindex [lindex $ilist 0] 0] 
     1926        } 
    19161927        set files [registry::port_registered $portname] 
    19171928        if { $files != 0 } { 
     
    19521963        array unset portinfo 
    19531964        array set portinfo [lindex $result 1] 
     1965        # set portname again since the one we were passed may not have had the correct case 
     1966        set portname $portinfo(name) 
    19541967 
    19551968        set depstypes {depends_build depends_lib depends_run} 
     
    20002013        array unset portinfo 
    20012014        array set portinfo [lindex $result 1] 
     2015        # set portname again since the one we were passed may not have had the correct case 
     2016        set portname $portinfo(name) 
    20022017        set porturl $portinfo(porturl) 
    20032018        set portdir $portinfo(portdir) 
  • trunk/base/src/registry1.0/portimage.tcl

    r36501 r37349  
    8080        } 
    8181 
    82         if {$v != ""} { 
    83                 ui_msg "$UI_PREFIX [format [msgcat::mc "Activating %s @%s"] $name $v]" 
    84         } else { 
    85                 ui_msg "$UI_PREFIX [format [msgcat::mc "Activating %s"] $name]" 
    86         } 
    87  
    8882        set ilist [_check_registry $name $v] 
     83        # set name again since the one we were passed may not have had the correct case 
     84        set name [lindex $ilist 0] 
    8985        set version [lindex $ilist 1] 
    9086        set revision [lindex $ilist 2] 
    9187        set     variants [lindex $ilist 3] 
     88         
     89    if {$v != ""} { 
     90        ui_msg "$UI_PREFIX [format [msgcat::mc "Activating %s @%s"] $name $v]" 
     91    } else { 
     92        ui_msg "$UI_PREFIX [format [msgcat::mc "Activating %s"] $name]" 
     93    } 
    9294 
    9395        set ilist [registry::installed $name] 
     
    147149        } 
    148150 
    149         if {$v != ""} { 
    150                 ui_msg "$UI_PREFIX [format [msgcat::mc "Deactivating %s @%s"] $name $v]" 
    151         } else { 
    152                 ui_msg "$UI_PREFIX [format [msgcat::mc "Deactivating %s"] $name]" 
    153         } 
    154  
    155151        set ilist [registry::active $name] 
    156152        if { [llength $ilist] > 1 } { 
     
    159155                set ilist [lindex $ilist 0] 
    160156        } 
     157        # set name again since the one we were passed may not have had the correct case 
     158        set name [lindex $ilist 0] 
    161159        set version [lindex $ilist 1] 
    162160        set revision [lindex $ilist 2] 
    163161        set     variants [lindex $ilist 3] 
    164162        set fqversion ${version}_${revision}${variants} 
     163         
     164    if {$v != ""} { 
     165        ui_msg "$UI_PREFIX [format [msgcat::mc "Deactivating %s @%s"] $name $v]" 
     166    } else { 
     167        ui_msg "$UI_PREFIX [format [msgcat::mc "Deactivating %s"] $name]" 
     168    } 
    165169         
    166170        if { $v != "" && ![string equal ${fqversion} $v] } { 
     
    218222        if { [string equal $v ""] } { 
    219223                if { [llength $ilist] > 1 } { 
     224                    # set name again since the one we were passed may not have had the correct case 
     225                    set name [lindex [lindex $ilist 0] 0] 
    220226                        ui_msg "$UI_PREFIX [msgcat::mc "The following versions of $name are currently installed:"]" 
    221227                        foreach i $ilist {  
  • trunk/base/src/registry1.0/portuninstall.tcl

    r36747 r37349  
    4545        set ilist [registry::installed $portname $v] 
    4646        if { [llength $ilist] > 1 } { 
     47            set portname [lindex [lindex $ilist 0] 0] 
    4748                ui_msg "$UI_PREFIX [msgcat::mc "The following versions of $portname are currently installed:"]" 
    4849                foreach i $ilist {  
     
    6061                return -code error "Registry error: Please specify the full version as recorded in the port registry." 
    6162        } else { 
     63            # set portname again since the one we were passed may not have had the correct case 
     64            set portname [lindex [lindex $ilist 0] 0] 
    6265                set version [lindex [lindex $ilist 0] 1] 
    6366                set revision [lindex [lindex $ilist 0] 2] 
  • trunk/base/src/registry1.0/receipt_flat.tcl

    r36745 r37349  
    427427                # [PG] Huh? 
    428428        } else { 
     429            # We want to be case-insensitive but case-preserving, so the name gets 
     430            # returned with the correct case even if it's wrong when given. To get the 
     431            # correct case on a case-insensitive FS, we have to list the directory and 
     432            # compare against each entry. 
     433            set name_path [file join ${query_path} *] 
     434            set name_entries [glob -nocomplain -types d ${name_path}] 
     435            foreach entry $name_entries { 
     436                set basename [file tail $entry] 
     437                if {[string equal -nocase $basename $name]} { 
     438                    set name $basename 
     439                    break 
     440                } 
     441            } 
    429442                set query_path [file join ${query_path} ${name}] 
    430443                if { $version != "" } {