diff --git a/src/port/port.tcl b/src/port/port.tcl index 56b2e27dcc..06cdf67ec5 100755 --- a/src/port/port.tcl +++ b/src/port/port.tcl @@ -2213,14 +2213,20 @@ proc action_activate { action portlist opts } { } foreachport $portlist { set composite_version [composite_version $portversion $variations] - if {[catch {registry_installed $portname $composite_version} result]} { - break_softcontinue "port activate failed: $result" 1 status - } - set regref $result - if {![dict exists $options ports_activate_no-exec] && - [registry::run_target $regref activate $options] - } then { - continue + # if the user passed -f we go for activate_composite at once so that + # the selection list won't be shown twice if there are multiple versions + # or variants installed and the goal was to re-activate the already + # active port. + if {![dict exists $options ports_force]} { + if {[catch {registry_installed $portname $composite_version} result]} { + break_softcontinue "port activate failed: $result" 1 status + } + set regref $result + if {![dict exists $options ports_activate_no-exec] && + [registry::run_target $regref activate $options] + } then { + continue + } } if {![macports::global_option_isset ports_dryrun]} { if {[catch {portimage::activate_composite $portname $composite_version $options} result]} { diff --git a/src/registry2.0/portimage.tcl b/src/registry2.0/portimage.tcl index 0d6652944b..a62f90592e 100644 --- a/src/registry2.0/portimage.tcl +++ b/src/registry2.0/portimage.tcl @@ -91,6 +91,7 @@ proc activate {name {version ""} {revision ""} {variants 0} {options ""}} { set rename_list [dict get $options portactivate_rename_files] } set todeactivate [list] + set actaction "Activating" registry::read { @@ -104,9 +105,14 @@ proc activate {name {version ""} {revision ""} {variants 0} {options ""}} { set location [$requested location] if {[$requested state] eq "installed"} { - ui_info "${name} @${specifier} is already active." - #registry::entry close $requested - return + if {$force} { + set actaction "Reactivating" + lappend todeactivate $requested + } else { + ui_info "${name} @${specifier} is already active." + #registry::entry close $requested + return + } } # this shouldn't be possible @@ -137,7 +143,7 @@ proc activate {name {version ""} {revision ""} {variants 0} {options ""}} { } } - ui_msg "$UI_PREFIX [format [msgcat::mc "Activating %s @%s"] $name $specifier]" + ui_msg "$UI_PREFIX [format [msgcat::mc "$actaction %s @%s"] $name $specifier]" _activate_contents $requested $rename_list } finally {