[124476] trunk/base/src/registry2.0/portuninstall.tcl
jmr at macports.org
jmr at macports.org
Sun Aug 24 13:22:58 PDT 2014
Revision: 124476
https://trac.macports.org/changeset/124476
Author: jmr at macports.org
Date: 2014-08-24 13:22:58 -0700 (Sun, 24 Aug 2014)
Log Message:
-----------
fix uninstall --follow-dependencies brokenness
Modified Paths:
--------------
trunk/base/src/registry2.0/portuninstall.tcl
Modified: trunk/base/src/registry2.0/portuninstall.tcl
===================================================================
--- trunk/base/src/registry2.0/portuninstall.tcl 2014-08-24 18:55:10 UTC (rev 124475)
+++ trunk/base/src/registry2.0/portuninstall.tcl 2014-08-24 20:22:58 UTC (rev 124476)
@@ -43,15 +43,49 @@
# generate list of all dependencies of the port
proc generate_deplist {port {optslist ""}} {
- array set options $optslist
- # note deps before we uninstall if we're going to uninstall them too
- if {[info exists options(ports_uninstall_follow-dependencies)] && [string is true -strict $options(ports_uninstall_follow-dependencies)]} {
- set deptypes {depends_fetch depends_extract depends_build depends_lib depends_run}
- set all_dependencies {}
- # look up deps from the saved portfile if possible
- if {![catch {set mport [mportopen_installed [$port name] [$port version] [$port revision] [$port variants] $optslist]}]} {
- array set depportinfo [mportinfo $mport]
- mportclose $mport
+
+ set deptypes {depends_fetch depends_extract depends_build depends_lib depends_run}
+ set all_dependencies {}
+ # look up deps from the saved portfile if possible
+ if {![catch {set mport [mportopen_installed [$port name] [$port version] [$port revision] [$port variants] $optslist]}]} {
+ array set depportinfo [mportinfo $mport]
+ mportclose $mport
+ foreach type $deptypes {
+ if {[info exists depportinfo($type)]} {
+ foreach dep $depportinfo($type) {
+ lappend all_dependencies [lindex [split $dep :] end]
+ }
+ }
+ }
+ # append those from the registry (could be different because of path deps)
+ foreach dep [$port dependencies] {
+ lappend all_dependencies [$dep name]
+ }
+ } else {
+ # grab the deps from the dep map
+ set portname [$port name]
+ set depmaplist [registry::list_depends $portname [$port version] [$port revision] [$port variants]]
+ foreach dep $depmaplist {
+ lappend all_dependencies [lindex $dep 0]
+ }
+ # and the ones from the current portfile
+ if {![catch {mportlookup $portname} result] && [llength $result] >= 2} {
+ array set depportinfo [lindex $result 1]
+ set porturl $depportinfo(porturl)
+ set variations {}
+ set minusvariant [lrange [split [registry::property_retrieve $port negated_variants] -] 1 end]
+ set plusvariant [lrange [split [$port variants] +] 1 end]
+ foreach v $plusvariant {
+ lappend variations $v "+"
+ }
+ foreach v $minusvariant {
+ lappend variations $v "-"
+ }
+ if {![catch {set mport [mportopen $porturl [concat $optslist subport $portname] [array get variations]]} result]} {
+ array unset depportinfo
+ array set depportinfo [mportinfo $mport]
+ mportclose $mport
+ }
foreach type $deptypes {
if {[info exists depportinfo($type)]} {
foreach dep $depportinfo($type) {
@@ -59,49 +93,10 @@
}
}
}
- # append those from the registry (could be different because of path deps)
- foreach dep [$port dependencies] {
- lappend all_dependencies [$dep name]
- }
- } else {
- # grab the deps from the dep map
- set portname [$port name]
- set depmaplist [registry::list_depends $portname [$port version] [$port revision] [$port variants]]
- foreach dep $depmaplist {
- lappend all_dependencies [lindex $dep 0]
- }
- # and the ones from the current portfile
- if {![catch {mportlookup $portname} result] && [llength $result] >= 2} {
- array set depportinfo [lindex $result 1]
- set porturl $depportinfo(porturl)
- set variations {}
- set minusvariant [lrange [split [registry::property_retrieve $port negated_variants] -] 1 end]
- set plusvariant [lrange [split [$port variants] +] 1 end]
- foreach v $plusvariant {
- lappend variations $v "+"
- }
- foreach v $minusvariant {
- lappend variations $v "-"
- }
- if {![catch {set mport [mportopen $porturl [concat $optionslist subport $portname] [array get variations]]} result]} {
- array unset depportinfo
- array set depportinfo [mportinfo $mport]
- mportclose $mport
- }
- foreach type $deptypes {
- if {[info exists depportinfo($type)]} {
- foreach dep $depportinfo($type) {
- lappend all_dependencies [lindex [split $dep :] end]
- }
- }
- }
- }
}
- array unset depportinfo
- set all_dependencies [lsort -unique $all_dependencies]
- return $all_dependencies
}
- return {}
+ set all_dependencies [lsort -unique $all_dependencies]
+ return $all_dependencies
}
# takes a composite version spec rather than separate version,revision,variants
@@ -245,9 +240,8 @@
}
}
- set ref $port
- # save list of dependencies if --follow-dependencies specified
- if {[info exists options(ports_uninstall_follow-dependencies)]} {
+ # note deps before we uninstall if we're going to uninstall them too (i.e. --follow-dependencies)
+ if {[info exists options(ports_uninstall_follow-dependencies)] && [string is true -strict $options(ports_uninstall_follow-dependencies)]} {
set all_dependencies [registry_uninstall::generate_deplist $port $optionslist]
}
@@ -257,6 +251,7 @@
ui_msg "$UI_PREFIX [format [msgcat::mc "Uninstalling %s @%s"] $portname $composite_spec]"
# Get the full path to the image file
+ set ref $port
set imagefile [registry::property_retrieve $ref location]
file delete $imagefile
# Try to delete the port's image dir; will fail if there are more image
@@ -340,12 +335,14 @@
}
}
}
- set depref [registry::entry imaged $dep]
- set depdeps [registry_uninstall::generate_deplist $depref $optionslist]
- foreach d $depdeps {
- set index [lsearch $alldeps $d]
- if {$index == -1} {
- lappend alldeps $d
+ set deprefs [registry::entry imaged $dep]
+ foreach depref $deprefs {
+ set depdeps [registry_uninstall::generate_deplist $depref $optionslist]
+ foreach d $depdeps {
+ set index [lsearch $alldeps $d]
+ if {$index == -1} {
+ lappend alldeps $d
+ }
}
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/macports-changes/attachments/20140824/c3f9cd97/attachment.html>
More information about the macports-changes
mailing list