<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>