<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/e372075c484826a39dc30c8b27ed38e79e8e4b8a">https://github.com/macports/macports-base/commit/e372075c484826a39dc30c8b27ed38e79e8e4b8a</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 e372075c4 Make 'port archive' ensure an archive exists
</span>e372075c4 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit e372075c484826a39dc30c8b27ed38e79e8e4b8a
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Mon May 19 14:21:52 2025 +1000

<span style='display:block; white-space:pre;color:#404040;'>    Make 'port archive' ensure an archive exists
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The behaviour of this action became a little confusing when archives
</span><span style='display:block; white-space:pre;color:#404040;'>    ceased to be the only form of port image. Also added a new
</span><span style='display:block; white-space:pre;color:#404040;'>    --no-activate option for the install action, for when you don't want to
</span><span style='display:block; white-space:pre;color:#404040;'>    create an archive but just want to run the install target without
</span><span style='display:block; white-space:pre;color:#404040;'>    activating (which is what the archive action previously did).
</span>---
 src/package1.0/Makefile.in     |   3 +-
 src/package1.0/package.tcl     |   1 +
 src/package1.0/portarchive.tcl | 225 +++++++++++++++++++++++++++++++++++++++++
 src/port/port.tcl              |  14 +--
 src/port1.0/portinstall.tcl    | 141 +-------------------------
 src/port1.0/portsandbox.tcl    |   1 +
 src/port1.0/portutil.tcl       |   7 ++
 7 files changed, 247 insertions(+), 145 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/package1.0/Makefile.in b/src/package1.0/Makefile.in
</span><span style='display:block; white-space:pre;color:#808080;'>index b784e4f2f..c349d6d08 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/package1.0/Makefile.in
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/package1.0/Makefile.in
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -6,8 +6,7 @@ include ../../Mk/macports.autoconf.mk
</span> INSTALLDIR=       ${TCL_PACKAGE_PATH}/package1.0
 
 SRCS=  package.tcl portdmg.tcl portmdmg.tcl portmpkg.tcl portpkg.tcl \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        portunarchive.tcl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   portarchivefetch.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   portarchive.tcl portunarchive.tcl portarchivefetch.tcl
</span> 
 all:: pkgIndex.tcl
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/package1.0/package.tcl b/src/package1.0/package.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 36d5dc7ea..602e4b7bb 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/package1.0/package.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/package1.0/package.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -36,5 +36,6 @@ package require portpkg 1.0
</span> package require portmpkg 1.0
 package require portdmg 1.0
 package require portmdmg 1.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+package require portarchive 1.0
</span> package require portarchivefetch 1.0
 package require portunarchive 1.0
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/package1.0/portarchive.tcl b/src/package1.0/portarchive.tcl
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 000000000..92e8ce755
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/package1.0/portarchive.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,225 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# portarchive.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Copyright (c) 2004 Robert Shaw <rshaw@opendarwin.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Copyright (c) 2002 - 2003 Apple Computer, Inc.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# All rights reserved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Redistribution and use in source and binary forms, with or without
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# modification, are permitted provided that the following conditions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# are met:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 1. Redistributions of source code must retain the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    notice, this list of conditions and the following disclaimer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 2. Redistributions in binary form must reproduce the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    notice, this list of conditions and the following disclaimer in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    documentation and/or other materials provided with the distribution.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 3. Neither the name of Apple Computer, Inc. nor the names of its contributors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    may be used to endorse or promote products derived from this software
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    without specific prior written permission.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# POSSIBILITY OF SUCH DAMAGE.
</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;'>+package provide portarchive 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+package require portutil 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set org.macports.archive [target_new org.macports.archive portarchive::archive_main]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+target_provides ${org.macports.archive} archive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+target_runtype ${org.macports.archive} always
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+target_state ${org.macports.archive} no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+target_requires ${org.macports.archive} main archivefetch fetch checksum extract patch configure build destroot install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+namespace eval portarchive {
</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;'>+set_ui_prefix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portarchive::archive_command_setup {location archive.type} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global archive.env archive.cmd archive.pre_args archive.args \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           archive.post_args portarchive_hfscompression
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set archive.env {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set archive.cmd {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set archive.pre_args {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set archive.args {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set archive.post_args {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch -regex -- ${archive.type} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        aar {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set aa "aa"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[catch {set aa [findBinary $aa ${portutil::autoconf::aa_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "Using $aa"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.cmd "$aa"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.pre_args "archive -v"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.args "-o [shellescape ${location}] -d ."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return -code error "No '$aa' was found on this system!"
</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;'>+        cp(io|gz) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set pax "pax"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[catch {set pax [findBinary $pax ${portutil::autoconf::pax_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "Using $pax"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.cmd "$pax"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.pre_args {-w -v -x cpio}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[regexp {z$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set gzip "gzip"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[catch {set gzip [findBinary $gzip ${portutil::autoconf::gzip_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        ui_debug "Using $gzip"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set archive.args {.}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set archive.post_args "| $gzip -c9 > [shellescape ${location}]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        return -code error "No '$gzip' was found on this system!"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set archive.args "-f [shellescape ${location}] ."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return -code error "No '$pax' was found on this system!"
</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;'>+        t(ar|bz|lz|xz|gz|mptar) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set tar "tar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[catch {set tar [findBinary $tar ${portutil::autoconf::tar_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "Using $tar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.cmd "$tar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.pre_args {-cvf}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[regexp {z2?$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[regexp {bz2?$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        if {![catch {binaryInPath lbzip2}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set gzip "lbzip2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        } elseif {![catch {binaryInPath pbzip2}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set gzip "pbzip2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set gzip "bzip2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set level 9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    } elseif {[regexp {lz$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set gzip "lzma"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set level ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    } elseif {[regexp {xz$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set gzip "xz"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set level 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set gzip "gzip"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set level 9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[info exists portutil::autoconf::${gzip}_path]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set hint [set portutil::autoconf::${gzip}_path]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set hint ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[catch {set gzip [findBinary $gzip $hint]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        ui_debug "Using $gzip"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set archive.args {- .}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set archive.post_args "| $gzip -c$level > [shellescape ${location}]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        return -code error "No '$gzip' was found on this system!"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {${archive.type} eq "tmptar"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        # Pass through tar for hardlink detection and HFS compression,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        # but extract without saving the tar file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        if {${portarchive_hfscompression} && [getuid] == 0 &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            ![catch {binaryInPath bsdtar}] &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            ![catch {exec bsdtar -x --hfsCompression < /dev/null >& /dev/null}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        } then {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set extract_tar bsdtar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set extract_tar_args {-xvp --hfsCompression -f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set extract_tar $tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set extract_tar_args {-xvpf}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set archive.args {- .}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set archive.post_args "| $extract_tar -C $location $extract_tar_args -"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        file mkdir $location
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        set archive.args "[shellescape ${location}] ."
</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;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return -code error "No '$tar' was found on this system!"
</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;'>+        xar {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set xar "xar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[catch {set xar [findBinary $xar ${portutil::autoconf::xar_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "Using $xar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.cmd "$xar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.pre_args {-cvf}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.args "[shellescape ${location}] ."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return -code error "No '$xar' was found on this system!"
</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;'>+        zip {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set zip "zip"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[catch {set zip [findBinary $zip ${portutil::autoconf::zip_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "Using $zip"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.cmd "$zip"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.pre_args {-ry9}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set archive.args "[shellescape ${location}] ."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return -code error "No '$zip' was found on this system!"
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</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;'>+proc portarchive::archive_main {args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set location [get_portimage_path]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[file isfile $location]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_debug "Archive already exists at $location"
</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;'>+    set imagedir [file rootname $location]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![file isdirectory $imagedir]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Query the registry for the definitive location
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        global subport version revision portvariants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set regref [registry_open $subport $version $revision $portvariants ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set imagedir [registry_prop_retr $regref location]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[file isfile $imagedir]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_debug "Archive already exists at $imagedir"
</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;'>+        if {![file isdirectory $imagedir]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_error "No port image found at: $imagedir"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return -code error "Port image missing"
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX portarchivetype archive.dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Now create the archive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    archiveTypeIsSupported $portarchivetype
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    archive_command_setup $location $portarchivetype
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set archive.dir $imagedir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_info "$UI_PREFIX [format [msgcat::mc "Creating %s"] $location]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[getuid] == 0 && [geteuid] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        elevateToRoot "archive"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    command_exec archive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_info "$UI_PREFIX [format [msgcat::mc "Archive %s packaged"] $location]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</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;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 c4446065c..a558cdb0a 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;'>@@ -3888,7 +3888,7 @@ proc action_target { action portlist opts } {
</span>     if {[require_portlist portlist]} {
         return 1
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {($action eq "install" || $action eq "archive") && ![macports::global_option_isset ports_dryrun] && [prefix_unwritable]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$action in {install archive} && ![macports::global_option_isset ports_dryrun] && [prefix_unwritable]} {
</span>         return 1
     }
     set status 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3969,10 +3969,12 @@ proc action_target { action portlist opts } {
</span>             if {![dict exists $options ports_install_unrequested]} {
                 dict set options ports_requested 1
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            # we actually activate as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set target activate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } elseif {$action eq "archive"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set target install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # we actually activate as well by default
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {![dict exists $options ports_install_no-activate]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set target activate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set target install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span>         } else {
             set target $action
         }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4245,7 +4247,7 @@ set cmd_opts_array [dict create {*}{
</span>     space       {{units 1} total}
     activate    {no-exec}
     deactivate  {no-exec}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    install     {allow-failing no-replace no-rev-upgrade unrequested}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    install     {allow-failing no-activate no-replace no-rev-upgrade unrequested}
</span>     uninstall   {follow-dependents follow-dependencies no-exec}
     variants    {index}
     clean       {all archive dist work logs}
<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 0a7e9ca23..3c2b10ada 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;'>@@ -111,145 +111,12 @@ proc portinstall::install_start {args} {
</span> 
 proc portinstall::create_archive {location archive.type} {
     global workpath destpath portpath subport version revision portvariants \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           epoch configure.cxx_stdlib cxx_stdlib PortInfo \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           archive.env archive.cmd archive.pre_args archive.args \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           archive.post_args archive.dir depends_lib depends_run \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           portarchive_hfscompression xcodeversion xcodecltversion use_xcode \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           archive.dir epoch configure.cxx_stdlib cxx_stdlib PortInfo \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           depends_lib depends_run xcodeversion xcodecltversion use_xcode \
</span>            os.subplatform os.version macos_version source_date_epoch
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set archive.env {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set archive.cmd {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set archive.pre_args {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set archive.args {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set archive.post_args {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set archive.dir ${destpath}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    switch -regex -- ${archive.type} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        aar {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set aa "aa"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[catch {set aa [findBinary $aa ${portutil::autoconf::aa_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug "Using $aa"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.cmd "$aa"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.pre_args "archive -v"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.args "-o [shellescape ${location}] -d ."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return -code error "No '$aa' was found on this system!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        cp(io|gz) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set pax "pax"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[catch {set pax [findBinary $pax ${portutil::autoconf::pax_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug "Using $pax"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.cmd "$pax"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.pre_args {-w -v -x cpio}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[regexp {z$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set gzip "gzip"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[catch {set gzip [findBinary $gzip ${portutil::autoconf::gzip_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        ui_debug "Using $gzip"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set archive.args {.}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set archive.post_args "| $gzip -c9 > [shellescape ${location}]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        return -code error "No '$gzip' was found on this system!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set archive.args "-f [shellescape ${location}] ."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return -code error "No '$pax' was found on this system!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        t(ar|bz|lz|xz|gz|mptar) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set tar "tar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[catch {set tar [findBinary $tar ${portutil::autoconf::tar_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug "Using $tar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.cmd "$tar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.pre_args {-cvf}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[regexp {z2?$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[regexp {bz2?$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        if {![catch {binaryInPath lbzip2}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set gzip "lbzip2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        } elseif {![catch {binaryInPath pbzip2}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set gzip "pbzip2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set gzip "bzip2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set level 9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    } elseif {[regexp {lz$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set gzip "lzma"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set level ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    } elseif {[regexp {xz$} ${archive.type}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set gzip "xz"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set level 6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set gzip "gzip"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set level 9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[info exists portutil::autoconf::${gzip}_path]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set hint [set portutil::autoconf::${gzip}_path]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set hint ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[catch {set gzip [findBinary $gzip $hint]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        ui_debug "Using $gzip"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set archive.args {- .}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set archive.post_args "| $gzip -c$level > [shellescape ${location}]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        return -code error "No '$gzip' was found on this system!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {${archive.type} eq "tmptar"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        # Pass through tar for hardlink detection and HFS compression,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        # but extract without saving the tar file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        if {${portarchive_hfscompression} && [getuid] == 0 &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            ![catch {binaryInPath bsdtar}] &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            ![catch {exec bsdtar -x --hfsCompression < /dev/null >& /dev/null}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        } then {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set extract_tar bsdtar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set extract_tar_args {-xvp --hfsCompression -f}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set extract_tar $tar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set extract_tar_args {-xvpf}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set archive.args {- .}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set archive.post_args "| $extract_tar -C $location $extract_tar_args -"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        file mkdir $location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        set archive.args "[shellescape ${location}] ."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return -code error "No '$tar' was found on this system!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        xar {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set xar "xar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[catch {set xar [findBinary $xar ${portutil::autoconf::xar_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug "Using $xar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.cmd "$xar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.pre_args {-cvf}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.args "[shellescape ${location}] ."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return -code error "No '$xar' was found on this system!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        zip {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set zip "zip"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[catch {set zip [findBinary $zip ${portutil::autoconf::zip_path}]} errmsg] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug "Using $zip"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.cmd "$zip"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.pre_args {-ry9}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set archive.args "[shellescape ${location}] ."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug $errmsg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return -code error "No '$zip' was found on this system!"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    portarchive::archive_command_setup ${location} ${archive.type}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set archive.dir ${destpath}
</span> 
     set archive.fulldestpath [file dirname $location]
     # Create archive destination path (if needed)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portsandbox.tcl b/src/port1.0/portsandbox.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 30e83ff2a..03ef7d2bc 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portsandbox.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portsandbox.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -59,6 +59,7 @@ proc portsandbox::set_profile {target} {
</span>             set portsandbox_profile ""
             return
         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        archive -
</span>         install -
         uninstall {
             set allow_dirs [list [file dirname [get_portimage_path]]]
<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 04aea1f9a..8fbe19f74 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;'>@@ -1682,6 +1682,13 @@ proc eval_targets {target} {
</span>                 }
                 return $result
             }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif {$target eq "archive"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # run the archive target but ignore its (completed) dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set result [target_run [lindex [dlist_search $dlist provides $target] 0]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[getuid] == 0 && [geteuid] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                seteuid 0; setegid 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return $result
</span>         }
     }
 
</pre><pre style='margin:0'>

</pre>