<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.
</pre>
<p><a href="https://github.com/macports/macports-base/commit/19c933969bc62ee54c86fbadaf4d98252b3df5ee">https://github.com/macports/macports-base/commit/19c933969bc62ee54c86fbadaf4d98252b3df5ee</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 19c93396 Preserve only requested variants on upgrade
</span>19c93396 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 19c933969bc62ee54c86fbadaf4d98252b3df5ee
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Thu Apr 15 03:51:13 2021 +1000
<span style='display:block; white-space:pre;color:#404040;'> Preserve only requested variants on upgrade
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Fixes: https://trac.macports.org/ticket/46956
</span>---
src/cregistry/sql.c | 103 ++++++++++++++++++++++++++++++++++++-
src/macports1.0/macports.tcl | 63 ++++++++++++++---------
src/port/port.tcl | 13 +++--
src/port1.0/portinstall.tcl | 6 +--
src/port1.0/portutil.tcl | 11 ++--
src/registry2.0/entryobj.c | 4 +-
src/registry2.0/portuninstall.tcl | 10 +++-
src/registry2.0/receipt_sqlite.tcl | 4 +-
src/registry2.0/registry.tcl | 2 +-
9 files changed, 169 insertions(+), 47 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/sql.c b/src/cregistry/sql.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 193a4f3d..8ed4eb79 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/sql.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/sql.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -160,7 +160,7 @@ int create_tables(sqlite3* db, reg_error* errPtr) {
</span> ", version TEXT COLLATE VERSION"
", revision INTEGER"
", variants TEXT"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ", negated_variants TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", requested_variants TEXT"
</span> ", state TEXT"
", date DATETIME"
", installtype TEXT"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -746,6 +746,105 @@ int update_db(sqlite3* db, reg_error* errPtr) {
</span> continue;
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (sql_version(NULL, -1, version, -1, "1.210") < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* add */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static char* version_1_210_queries[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if SQLITE_VERSION_NUMBER >= 3025000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "ALTER TABLE registry.ports RENAME COLUMN negated_variants TO requested_variants",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Create a temporary table */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "CREATE TEMPORARY TABLE mp_ports_backup ("
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "id INTEGER PRIMARY KEY"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", name TEXT COLLATE NOCASE"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", portfile TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", location TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", epoch INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", version TEXT COLLATE VERSION"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", revision INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", variants TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", negated_variants TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", state TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", date DATETIME"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", installtype TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", archs TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", requested INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", os_platform TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", os_major INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", cxx_stdlib TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", cxx_stdlib_overridden INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", UNIQUE (name, epoch, version, revision, variants)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ")",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Copy all data into the temporary table */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "INSERT INTO mp_ports_backup SELECT id, name, portfile, location, epoch, "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "version, revision, variants, negated_variants, state, date, installtype, "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "archs, requested, os_platform, os_major, cxx_stdlib, "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cxx_stdlib_overridden FROM registry.ports",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Drop the original table and re-create it with the new structure */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "DROP TABLE registry.ports",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "CREATE TABLE registry.ports ("
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "id INTEGER PRIMARY KEY"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", name TEXT COLLATE NOCASE"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", portfile TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", location TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", epoch INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", version TEXT COLLATE VERSION"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", revision INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", variants TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", requested_variants TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", state TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", date DATETIME"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", installtype TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", archs TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", requested INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", os_platform TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", os_major INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", cxx_stdlib TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", cxx_stdlib_overridden INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ", UNIQUE (name, epoch, version, revision, variants)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ")",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "CREATE INDEX registry.port_name ON ports"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "(name, epoch, version, revision, variants)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "CREATE INDEX registry.port_state ON ports(state)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Copy all data back from temporary table */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "INSERT INTO registry.ports (id, name, portfile, location, epoch, version, "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "revision, variants, requested_variants, state, date, installtype, archs, "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "requested, os_platform, os_major, cxx_stdlib, cxx_stdlib_overridden) "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "SELECT id, name, portfile, location, epoch, version, revision, "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "variants, negated_variants, state, date, installtype, archs, "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "requested, os_platform, os_major, cxx_stdlib, cxx_stdlib_overridden "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "FROM mp_ports_backup",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Remove temporary table */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "DROP TABLE mp_ports_backup",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Assume all existing variants were requested, which often
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ won't be true, but does match the former upgrade behaviour. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "UPDATE registry.ports SET requested_variants = variants || requested_variants",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "UPDATE registry.metadata SET value = '1.210' WHERE key = 'version'",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "COMMIT",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ NULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite3_finalize(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stmt = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!do_queries(db, version_1_210_queries, errPtr)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rollback_db(db);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ did_update = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /* add new versions here, but remember to:
* - finalize the version query statement and set stmt to NULL
* - do _not_ use "BEGIN" in your query list, since a transaction has
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -755,7 +854,7 @@ int update_db(sqlite3* db, reg_error* errPtr) {
</span> * - update the current version number below
*/
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if (sql_version(NULL, -1, version, -1, "1.205") > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (sql_version(NULL, -1, version, -1, "1.210") > 0) {
</span> /* the registry was already upgraded to a newer version and cannot be used anymore */
reg_throw(errPtr, REG_INVALID, "Version number in metadata table is newer than expected.");
sqlite3_finalize(stmt);
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports.tcl b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index ba9d42b4..f52e09a5 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1959,13 +1959,18 @@ proc mportopen_installed {name version revision variants options} {
</span> set portfile_dir [file join ${registry.path} registry portfiles ${name}-${version}_${revision} [$regref portfile]]
set variations {}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set minusvariant [lrange [split [$regref negated_variants] -] 1 end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Relies on all negated variants being at the end of requested_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set minusvariant [lrange [split [$regref requested_variants] -] 1 end]
</span> set plusvariant [lrange [split [$regref variants] +] 1 end]
foreach v $plusvariant {
lappend variations $v +
}
foreach v $minusvariant {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend variations $v -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string first "+" $v] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend variations $v -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_warn "Invalid negated variant for $name @${version}_${revision}${variants}: $v"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
array set options_array $options
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4006,9 +4011,9 @@ proc macports::_upgrade {portname dspec variationslist optionslist {depscachenam
</span> set oldvariant $variant_installed
set regref [registry::open_entry $portname $version_installed $revision_installed $variant_installed $epoch_installed]
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set oldnegatedvariant [registry::property_retrieve $regref negated_variants]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$oldnegatedvariant == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set oldnegatedvariant {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set oldrequestedvariant [registry::property_retrieve $regref requested_variants]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$oldrequestedvariant == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set oldrequestedvariant {}
</span> }
set requestedflag [registry::property_retrieve $regref requested]
set os_platform_installed [registry::property_retrieve $regref os_platform]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4032,29 +4037,39 @@ proc macports::_upgrade {portname dspec variationslist optionslist {depscachenam
</span>
set globalvarlist [array get macports::global_variations]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set minusvariant [lrange [split $oldnegatedvariant -] 1 end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set plusvariant [lrange [split $oldvariant +] 1 end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_debug "Merging existing variants '${oldvariant}$oldnegatedvariant' into variants"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Relies on all negated variants being at the end of requested_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set splitvariant [split $oldrequestedvariant -]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set minusvariant [lrange $splitvariant 1 end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set plusvariant [lrange [split $splitvariant +] 1 end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug "Merging existing requested variants '${oldrequestedvariant}' into variants"
</span> set oldvariantlist [list]
foreach v $plusvariant {
lappend oldvariantlist $v +
}
foreach v $minusvariant {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend oldvariantlist $v -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string first "+" $v] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend oldvariantlist $v -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set installedvariations($v) -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_warn "Invalid negated variant for ${portname}: $v"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # save the current variants for dependency calculation purposes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # in case we don't end up upgrading this port
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set plusvariant [lrange [split $oldvariant +] 1 end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach v $plusvariant {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set installedvariations($v) +
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # merge in the old variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # merge in the old requested variants
</span> foreach {variation value} $oldvariantlist {
if {![info exists variations($variation)]} {
set variations($variation) $value
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # save the current variants for dependency calculation purposes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # in case we don't end up upgrading this port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set installedvariations($variation) $value
</span> }
# Now merge in the global (i.e. variants.conf) variations.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # We wait until now so that existing variants for this port
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # We wait until now so that existing requested variants for this port
</span> # override global variations
foreach {variation value} $globalvarlist {
if {![info exists variations($variation)]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4145,16 +4160,16 @@ proc macports::_upgrade {portname dspec variationslist optionslist {depscachenam
</span> if {[info exists portinfo(canonical_active_variants)] && $portinfo(canonical_active_variants) ne $oldvariant} {
if {[llength $variationslist] > 0} {
ui_warn "Skipping upgrade since $portname ${version_installed}_$revision_installed >= $portname ${version_in_tree}_${revision_in_tree}, even though installed variants \"$oldvariant\" do not match \"$portinfo(canonical_active_variants)\". Use 'upgrade --enforce-variants' to switch to the requested variants."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # reopen with the installed variants so deps are calculated correctly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- catch {mportclose $mport}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {set mport [mportopen $porturl [array get interp_options] [array get installedvariations]]} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_debug $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "Unable to open port: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span> } else {
ui_debug "Skipping upgrade since $portname ${version_installed}_$revision_installed >= $portname ${version_in_tree}_${revision_in_tree}, even though installed variants \"$oldvariant\" do not match \"$portinfo(canonical_active_variants)\"."
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ # reopen with the installed variants so deps are calculated correctly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ catch {mportclose $mport}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set mport [mportopen $porturl [array get interp_options] [array get installedvariations]]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Unable to open port: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> } else {
ui_debug "No need to upgrade! $portname ${version_installed}_$revision_installed >= $portname ${version_in_tree}_$revision_in_tree"
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5195,7 +5210,7 @@ proc macports::revupgrade_scanandrebuild {broken_port_counts_name opts} {
</span> if {$macports::revupgrade_mode ne "rebuild"} {
ui_msg "$macports::ui_prefix Found $num_broken_ports broken port${s}:"
foreach port $broken_ports {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_msg " [$port name] @[$port version] [$port variants][$port negated_variants]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg " [$port name] @[$port version]_[$port revision][$port variants]"
</span> if {[info exists broken_files_by_port($port)]} {
foreach f $broken_files_by_port($port) {
ui_msg " $f"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5280,7 +5295,7 @@ proc macports::revupgrade_scanandrebuild {broken_port_counts_name opts} {
</span> foreach port $topsort_ports {
lappend broken_portnames [$port name]@[$port version][$port variants]
if {![info exists macports::ui_options(questions_yesno)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_msg " [$port name] @[$port version] [$port variants][$port negated_variants]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg " [$port name] @[$port version]_[$port revision][$port variants]"
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5390,7 +5405,7 @@ proc macports::revupgrade_buildgraph {port stackname adjlistname revadjlistname
</span>
set visited($port) true
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_debug "Processing port [$port name] @[$port epoch]:[$port version]_[$port revision] [$port variants] [$port negated_variants]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug "Processing port [$port name] @[$port epoch]:[$port version]_[$port revision][$port variants]"
</span> set dependent_ports [$port dependents]
foreach dep $dependent_ports {
set is_broken_port false
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port/port.tcl b/src/port/port.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 97ea67b9..88163b82 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3296,19 +3296,18 @@ proc action_installed { action portlist opts } {
</span> set ivariants [lindex $i 3]
set iactive [lindex $i 4]
set extra ""
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set nvariants ""
</span> if {[macports::ui_isset ports_verbose]} {
set regref [registry::open_entry $iname $iversion $irevision $ivariants [lindex $i 5]]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set nvariants [registry::property_retrieve $regref negated_variants]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$nvariants == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set nvariants ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rvariants [registry::property_retrieve $regref requested_variants]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$rvariants != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append extra " requested_variants='$rvariants'"
</span> }
set os_platform [registry::property_retrieve $regref os_platform]
set os_major [registry::property_retrieve $regref os_major]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set archs [registry::property_retrieve $regref archs]
</span> if {$os_platform != 0 && $os_platform ne "" && $os_major != 0 && $os_major ne ""} {
append extra " platform='$os_platform $os_major'"
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archs [registry::property_retrieve $regref archs]
</span> if {$archs != 0 && $archs ne ""} {
append extra " archs='$archs'"
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3318,9 +3317,9 @@ proc action_installed { action portlist opts } {
</span> }
}
if { $iactive == 0 } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts " $iname @${iversion}_${irevision}${ivariants}${nvariants}${extra}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts " $iname @${iversion}_${irevision}${ivariants}${extra}"
</span> } elseif { $iactive == 1 } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts " $iname @${iversion}_${irevision}${ivariants}${nvariants} (active)${extra}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts " $iname @${iversion}_${irevision}${ivariants} (active)${extra}"
</span> }
}
} elseif { $restrictedList } {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portinstall.tcl b/src/port1.0/portinstall.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index dc3b29dd..928a3a5c 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portinstall.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portinstall.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -333,7 +333,7 @@ proc portinstall::extract_contents {location type} {
</span>
proc portinstall::install_main {args} {
global subport version portpath depends_run revision user_options \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- portvariants negated_variants depends_lib PortInfo epoch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ portvariants requested_variants depends_lib PortInfo epoch \
</span> os.platform os.major portarchivetype installPlist registry.path porturl \
portinstall::file_is_binary portinstall::actual_cxx_stdlib portinstall::cxx_stdlib_overridden
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -398,8 +398,8 @@ proc portinstall::install_main {args} {
</span> }
# Trick to have a portable GMT-POSIX epoch-based time.
$regref date [expr {[clock scan now -gmt true] - [clock scan "1970-1-1 00:00:00" -gmt true]}]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists negated_variants]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $regref negated_variants $negated_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[info exists requested_variants]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $regref requested_variants $requested_variants
</span> }
foreach dep_portname $dep_portnames {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portutil.tcl b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index a57d73f5..53f3fe6e 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2020,7 +2020,7 @@ proc canonicalize_variants {variants {sign "+"}} {
</span> }
proc eval_variants {variations} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global all_variants PortInfo requested_variations portvariants negated_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global all_variants PortInfo requested_variations portvariants requested_variants
</span> set dlist $all_variants
upvar $variations upvariations
set chosen [choose_variants $dlist upvariations]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2086,13 +2086,16 @@ proc eval_variants {variations} {
</span> set PortInfo(active_variants) $activevariants
set PortInfo(canonical_active_variants) $portvariants
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # now set the negated variants
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set negated_list [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # now set the requested variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach dvar $chosen {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set thevar [ditem_key $dvar provides]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend requested_list $thevar "+"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> foreach dvar $negated {
set thevar [ditem_key $dvar provides]
lappend negated_list $thevar "-"
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set negated_variants [canonicalize_variants $negated_list "-"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set requested_variants [canonicalize_variants $requested_list "+"][canonicalize_variants $negated_list "-"]
</span>
return 0
}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/entryobj.c b/src/registry2.0/entryobj.c
</span><span style='display:block; white-space:pre;color:#808080;'>index df79c97b..7005c3d6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/entryobj.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/entryobj.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -47,7 +47,7 @@ const char* entry_props[] = {
</span> "version",
"revision",
"variants",
<span style='display:block; white-space:pre;background:#ffe0e0;'>- "negated_variants",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "requested_variants",
</span> "date",
"state",
"installtype",
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -426,7 +426,7 @@ static entry_obj_cmd_type entry_cmds[] = {
</span> { "version", entry_obj_prop },
{ "revision", entry_obj_prop },
{ "variants", entry_obj_prop },
<span style='display:block; white-space:pre;background:#ffe0e0;'>- { "negated_variants", entry_obj_prop },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "requested_variants", entry_obj_prop },
</span> { "date", entry_obj_prop },
{ "state", entry_obj_prop },
{ "installtype", entry_obj_prop },
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/portuninstall.tcl b/src/registry2.0/portuninstall.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 01b838a7..638f3d06 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/portuninstall.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/portuninstall.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -72,13 +72,19 @@ proc generate_deplist {port {optslist ""}} {
</span> array set depportinfo [lindex $result 1]
set porturl $depportinfo(porturl)
set variations [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set minusvariant [lrange [split [registry::property_retrieve $port negated_variants] -] 1 end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Relies on all negated variants being at the end of requested_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set minusvariant [lrange [split [registry::property_retrieve $port requested_variants] -] 1 end]
</span> set plusvariant [lrange [split [$port variants] +] 1 end]
foreach v $plusvariant {
lappend variations $v "+"
}
foreach v $minusvariant {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend variations $v "-"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string first "+" $v] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend variations $v "-"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_warn "Invalid negated variant for $portname @[$port version]_[$port revision][$port variants]: $v"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> }
if {![catch {set mport [mportopen $porturl [concat $optslist subport $portname] [array get variations]]} result]} {
array unset depportinfo
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/receipt_sqlite.tcl b/src/registry2.0/receipt_sqlite.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index d89de2fc..4541e9d0 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/receipt_sqlite.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/receipt_sqlite.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -359,7 +359,7 @@ proc list_dependents {name version revision variants} {
</span> # \li \c imagefiles A list of files installed by this port
# \li \c files A list of filenames as which the imagefiles should be activated
# if state is "installed"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# \li \c negated_variants The canonical representation of the negated variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# \li \c requested_variants The canonical representation of the requested variants
</span> # \li \c os_platform The platform on which the port was installed
# \li \c os_major The major version of the OS on which the port was installed
# \li \c archs A list of architectures of this port
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -395,7 +395,7 @@ proc create_entry_l {proplist} {
</span> } else {
$regref map $props(files)
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach key {negated_variants os_platform os_major archs} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach key {requested_variants os_platform os_major archs} {
</span> if {$props($key) != 0} {
$regref $key $props($key)
} else {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/registry.tcl b/src/registry2.0/registry.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 2646948d..6ba0bab7 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/registry.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/registry.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -446,7 +446,7 @@ proc convert_to_sqlite {} {
</span>
lappend proplist date [receipt_flat::property_retrieve $iref date]
lappend proplist epoch [receipt_flat::property_retrieve $iref epoch]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend proplist negated_variants [receipt_flat::property_retrieve $iref negated_variants]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend proplist requested_variants ${ivariants}[receipt_flat::property_retrieve $iref negated_variants]
</span> lappend proplist requested [receipt_flat::property_retrieve $iref requested]
lappend proplist os_platform [receipt_flat::property_retrieve $iref os_platform]
lappend proplist os_major [receipt_flat::property_retrieve $iref os_major]
</pre><pre style='margin:0'>
</pre>