[26921] trunk/base/src/macports1.0/macports.tcl
source_changes at macosforge.org
source_changes at macosforge.org
Wed Jul 11 11:35:27 PDT 2007
Revision: 26921
http://trac.macosforge.org/projects/macports/changeset/26921
Author: sfiera at macports.org
Date: 2007-07-11 11:35:27 -0700 (Wed, 11 Jul 2007)
Log Message:
-----------
Changes to upgrade; a port's version and revision need to be considered
separately, for cases where the old and new versions consist of different
numbers of segments, i.e. openssl 0.9.8_2 and 0.9.8e_0 (true story!)
Modified Paths:
--------------
trunk/base/src/macports1.0/macports.tcl
Modified: trunk/base/src/macports1.0/macports.tcl
===================================================================
--- trunk/base/src/macports1.0/macports.tcl 2007-07-11 16:36:02 UTC (rev 26920)
+++ trunk/base/src/macports1.0/macports.tcl 2007-07-11 18:35:27 UTC (rev 26921)
@@ -1701,19 +1701,20 @@
# fill array with information
array set portinfo [lindex $result 1]
- # set version_in_tree
+ # set version_in_tree and revision_in_tree
if {![info exists portinfo(version)]} {
ui_error "Invalid port entry for $portname, missing version"
return 1
}
- set version_in_tree "$portinfo(version)_$portinfo(revision)"
+ set version_in_tree "$portinfo(version)"
+ set revision_in_tree "$portinfo(revision)"
set epoch_in_tree "$portinfo(epoch)"
# the depflag tells us if we should follow deps (this is for stuff installed outside MacPorts)
# if this is set (not 0) we dont follow the deps
set depflag 0
- # set version_installed
+ # set version_installed and revision_installed
set ilist {}
if { [catch {set ilist [registry::installed $portname ""]} result] } {
if {$result == "Registry error: $portname not registered as installed." } {
@@ -1751,10 +1752,12 @@
}
set anyactive 0
set version_installed 0
+ set revision_installed 0
set epoch_installed 0
if {$ilist == ""} {
# XXX this sets $version_installed to $version_in_tree even if not installed!!
set version_installed $version_in_tree
+ set revision_installed $revision_in_tree
# That was a very dirty hack showing how ugly our depencendy and upgrade code is.
# To get it working when user provides -f, we also need to set the variant to
# avoid a future failure.
@@ -1766,30 +1769,38 @@
set variant ""
foreach i $ilist {
set variant [lindex $i 3]
- set version "[lindex $i 1]_[lindex $i 2]"
- if { [rpm-vercomp $version $version_installed] > 0} {
+ set version [lindex $i 1]
+ set revision [lindex $i 2]
+ if { [rpm-vercomp $version $version_installed] > 0
+ || ([rpm-vercomp $version $version_installed] == 0
+ && [rpm-vercomp $revision $revision_installed] > 0)} {
set version_installed $version
+ set revision_installed $revision
set epoch_installed [registry::property_retrieve [registry::open_entry $portname [lindex $i 1] [lindex $i 2] $variant] epoch]
set num $i
}
set isactive [lindex $i 4]
- if {$isactive == 1 && [rpm-vercomp $version_installed $version] < 0 } {
- # deactivate version
- if {[catch {portimage::deactivate $portname $version $optionslist} result]} {
- global errorInfo
- ui_debug "$errorInfo"
- ui_error "Deactivating $portname $version_installed failed: $result"
- return 1
- }
+ if {$isactive == 1}
+ if { [rpm-vercomp $version_installed $version] < 0
+ || ([rpm-vercomp $version_installed $version] == 0
+ && [rpm-vercomp $revision_installed $revision] < 0)} {
+ # deactivate version
+ if {[catch {portimage::deactivate $portname $version $optionslist} result]} {
+ global errorInfo
+ ui_debug "$errorInfo"
+ ui_error "Deactivating $portname $version_installed_$revision_installed failed: $result"
+ return 1
+ }
+ }
}
}
if { [lindex $num 4] == 0 && 0 == [string compare "image" ${macports::registry.installtype}] } {
# activate the latest installed version
- if {[catch {portimage::activate $portname $version_installed$variant $optionslist} result]} {
+ if {[catch {portimage::activate $portname ${version_installed}_$revision_installed$variant $optionslist} result]} {
global errorInfo
ui_debug "$errorInfo"
- ui_error "Activating $portname $version_installed failed: $result"
+ ui_error "Activating $portname ${version_installed}_$revision_installed failed: $result"
return 1
}
}
@@ -1797,8 +1808,8 @@
# output version numbers
ui_debug "epoch: in tree: $epoch_in_tree installed: $epoch_installed"
- ui_debug "$portname $version_in_tree exists in the ports tree"
- ui_debug "$portname $version_installed is installed"
+ ui_debug "$portname ${version_in_tree}_$revision_in_tree exists in the ports tree"
+ ui_debug "$portname ${version_installed}_$revision_installed is installed"
# set the nodeps option
if {![info exists options(ports_nodeps)]} {
@@ -1844,8 +1855,11 @@
}
# check installed version against version in ports
- if { [rpm-vercomp $version_installed $version_in_tree] >= 0 && ![info exists options(ports_force)] } {
- ui_debug "No need to upgrade! $portname $version_installed >= $portname $version_in_tree"
+ if { ( [rpm-vercomp $version_installed $version_in_tree] > 0
+ || ([rpm-vercomp $version_installed $version_in_tree] == 0
+ && [rpm-vercomp $revision_installed $revision_in_tree] >= 0 ))
+ && ![info exists options(ports_force)] } {
+ ui_debug "No need to upgrade! $portname ${version_installed}_$revision_installed >= $portname ${version_in_tree}_$revision_in_tree"
if { $epoch_installed >= $epoch_in_tree } {
# Check if we have to do dependents
if {[info exists options(ports_do_dependents)]} {
@@ -1889,7 +1903,7 @@
foreach v $variant {
if {[lsearch $avariants $v] == -1} {
} else {
- ui_debug "variant $v is present in $portname $version_in_tree"
+ ui_debug "variant $v is present in $portname ${version_in_tree}_$revision_in_tree"
set variations($v) "+"
}
}
@@ -1919,19 +1933,19 @@
# uninstall old ports
if {[info exists options(port_uninstall_old)] || $epoch_override == 1 || [info exists options(ports_force)] || 0 != [string compare "image" ${macports::registry.installtype}] } {
# uninstall old
- ui_debug "Uninstalling $portname $version_installed$oldvariant"
- if {[catch {portuninstall::uninstall $portname $version_installed$oldvariant $optionslist} result]} {
+ ui_debug "Uninstalling $portname ${version_installed}_$revision_installed$oldvariant"
+ if {[catch {portuninstall::uninstall $portname ${version_installed}_$revision_installed$oldvariant $optionslist} result]} {
global errorInfo
ui_debug "$errorInfo"
- ui_error "Uninstall $portname $version_installed$oldvariant failed: $result"
+ ui_error "Uninstall $portname ${version_installed}_$revision_installed$oldvariant failed: $result"
return 1
}
} else {
# XXX deactivate version_installed
- if {[catch {portimage::deactivate $portname $version_installed$oldvariant $optionslist} result]} {
+ if {[catch {portimage::deactivate $portname ${version_installed}_$revision_installed$oldvariant $optionslist} result]} {
global errorInfo
ui_debug "$errorInfo"
- ui_error "Deactivating $portname $version_installed failed: $result"
+ ui_error "Deactivating $portname ${version_installed}_$revision_installed failed: $result"
return 1
}
}
@@ -1939,7 +1953,7 @@
if {[catch {set result [mportexec $workername install]} result]} {
global errorInfo
ui_debug "$errorInfo"
- ui_error "Couldn't activate $portname $version_in_tree$oldvariant: $result"
+ ui_error "Couldn't activate $portname ${version_in_tree}_$revision_in_tree$oldvariant: $result"
return 1
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20070711/95b47290/attachment.html
More information about the macports-changes
mailing list