Revision: 139023 https://trac.macports.org/changeset/139023 Author: ijackson@macports.org Date: 2015-07-29 12:01:18 -0700 (Wed, 29 Jul 2015) Log Message: ----------- Set obsoletes information of the solv. If A replaced_by B, then B obsoletes A. This is achieved by mapping $solvables to the portnames that have replaced_by field in PortIndex. By iterating over this list, we set A's $portinfo(replaced_by) i.e., B's solv with obsoletes value of $A. Also keep a check if $portinfo(replaced_by) port exists or not. Modified Paths: -------------- branches/gsoc15-dependency/base/src/macports1.0/macports_libsolv.tcl Modified: branches/gsoc15-dependency/base/src/macports1.0/macports_libsolv.tcl =================================================================== --- branches/gsoc15-dependency/base/src/macports1.0/macports_libsolv.tcl 2015-07-29 12:59:23 UTC (rev 139022) +++ branches/gsoc15-dependency/base/src/macports1.0/macports_libsolv.tcl 2015-07-29 19:01:18 UTC (rev 139023) @@ -82,8 +82,13 @@ lappend fields "depends_lib" $solv::SOLVABLE_REQUIRES [list] lappend fields "depends_run" $solv::SOLVABLE_REQUIRES [list] lappend fields "conflicts" $solv::SOLVABLE_CONFLICTS [list] - lappend fields "replaced_by" $solv::SOLVABLE_OBSOLETES [list] + ## Variable for replace_by to set obsoletes of solv. + variable replaced_by + + ## Variable to map portname to its solv + variable solvs + ## Check if libsolv cache (pool) is already created or not. if {![info exists pool]} { global macports::sources @@ -170,14 +175,39 @@ } } + ## Set up map from port to its solvable if replaced_by another package. + if {[info exists portinfo(replaced_by)]} { + set replaced_by($name) $solvable + } + ## Set SOLVABLE_PROVIDES for the solv so that the package can be found during depcalc. set provides [$pool rel2id [$solvable cget -nameid] [$solvable cget -evrid] $solv::REL_EQ 1] $solvable add_deparray $solv::SOLVABLE_PROVIDES $provides ## Set portinfo of each solv object. Map it to correct solvid. set portindexinfo([$solvable cget -id]) $line + + ## Set solv's to its portname + set solvs($name) $solvable } + ## Set obsoletes by reading the replaced_by contents. + ## Obsoletes: A replaced_by B means B obsoletes A. + if {[array exists replaced_by] && [array size replaced_by] > 0} { + foreach name [array names replaced_by] { + array set portinfo $portindexinfo([$replaced_by($name) cget -id]) + set A $name + set B $portinfo(replaced_by) + ## Check if the replaced_by port actually exists or not. + if {![info exists solvs($B)]} { + ui_msg "No port with the name $B exists. Skipping adding obsoletes for $A." + } else { + $solvs($B) add_deparray $solv::SOLVABLE_OBSOLETES [$pool str2id $A 1] + } + array unset -nocomplain portinfo + } + } + } catch * { ui_warn "It looks like your PortIndex file for $source may be corrupt." throw