1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-13 07:34:50 +00:00

New Implementation

==================
The previous code tried to handle moved ports in much the same way
as it handled replacing a port with the -o option, but this would
sometimes create problems if we are deep in a dependency graph.
So rather than re-implement only a portion of the -o code, use the
whole thing instead.

We accomplish this by either exec'ing ourselves with the proper -o
options if we are in the dependency tree, or by asking the user to
restart with the proper -o options if they specified the moved port
on the command line. The latter is necessary to avoid having to
duplicate all the "initialize the parent process" code.  This allows
me to simplify the code in a few places since -o is now the only
special case.

Bug Fixes
=========
1. Don't try to derive $portdir from $upg_port if using -o
2. Don't try to build a port with an +IGNOREME file if we are doing
the dependent ports in -r mode

Minor tweak: Add some whitespace after a warning message
This commit is contained in:
Doug Barton 2008-03-19 21:47:16 +00:00
parent d31dd82e40
commit 8bc50bccf4
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=209402

View File

@ -41,7 +41,7 @@ umask 022
version () {
local rcs cvs
rcs='$Id: portmaster,v 2.24 2008/01/30 01:40:33 doug Exp $'
rcs='$Id: portmaster,v 2.27 2008/03/19 21:32:24 doug Exp $'
cvs='$FreeBSD$'
rcs="${rcs#*,v }" ; rcs="${rcs%% *}"
@ -161,6 +161,7 @@ safe_exit () {
echo " but first take a moment to review the error messages"
echo -n " above. Then press Enter when ready to proceed. "
read DISCARD
echo ''
fi
p='less -e'
@ -367,7 +368,7 @@ check_regular_file () {
check_dependency_files () {
# Global: grep_deps
local origin iport ro_opd moved_opd
local origin iport ro_opd
origin=$1 ; iport=$2
@ -376,12 +377,10 @@ check_dependency_files () {
origin=`echo $origin | sed 's#\+#\\\\+#g'` ;; esac
case "$ro_opd" in *+*)
ro_opd=`echo $ro_opd | sed 's#\+#\\\\+#g'` ;; esac
case "$moved_opd" in *+*)
moved_opd=`echo $moved_opd | sed 's#\+#\\\\+#g'` ;; esac
# Always rely on the grep'ed dependencies instead of +REQUIRED_BY
grep_deps=`pm_mktemp grep-deps-${iport}`
egrep -l "DEPORIGIN:($origin|$ro_opd|$moved_opd)$" $pdb/*/+CONTENTS |
egrep -l "DEPORIGIN:($origin|$ro_opd)$" $pdb/*/+CONTENTS |
cut -f 5 -d '/' | sort -u > $grep_deps
if [ ! -s "$grep_deps" ]; then
@ -491,13 +490,11 @@ IFS='
}
find_moved_port () {
# Global: moved_opd moved_npd
# Global: moved_npd
local sf iport IFS l
sf=$1 # Search for
iport=$2
# Old port directory, do not update if we recurse
[ -z "$moved_opd" ] && moved_opd=$1
# To avoid having each word of the reason treated separately
IFS='
@ -1769,7 +1766,7 @@ else
fi
fi
if [ -n "$upg_port" ]; then
if [ -n "$upg_port" -a -z "$REPLACE_ORIGIN" ]; then
portdir=`origin_from_pdb $upg_port`
[ -n "$portdir" ] || fail "No ORIGIN in $pdb/$upg_port/+CONTENTS"
elif [ -z "$portdir" ]; then
@ -1779,8 +1776,15 @@ fi
if [ ! -d "$pd/$portdir" ]; then
find_moved_port $portdir $upg_port || no_valid_port
[ -n "$moved_npd" ] || no_valid_port
portdir=$moved_npd
[ -d "$pd/$portdir" ] || no_valid_port
[ -d "$pd/$moved_npd" ] || no_valid_port
if [ "$$" -eq "$PARENT_PID" ]; then
echo "===>>> To update this port run:"
echo "===>>> ${0##*/} $ARGS -o $moved_npd $upg_port"
fail 'Port has moved'
else
exec $0 $ARGS -o $moved_npd $upg_port
fi
fi
[ -z "$upg_port" -a -z "$REPLACE_ORIGIN" ] &&
upg_port=`iport_from_origin ${portdir}`
@ -1811,7 +1815,7 @@ if [ -e "$pdb/$upg_port/+IGNOREME" ]; then
fi
;;
esac
elif [ -n "$NO_RECURSIVE_CONFIG" ]; then
elif [ -n "$NO_RECURSIVE_CONFIG" -o -n "$URB_YES" ]; then
echo ''
echo "===>>> $upg_port has an +IGNOREME file, ignoring"
echo ''
@ -2172,12 +2176,8 @@ if [ -s "$grep_deps" ]; then
grep -ql "DEPORIGIN:$ro_opd$" $dp_cont &&
update_contents $dp_cont $portdir $new_port $ro_opd
fi
if [ -n "$moved_opd" ]; then
grep -ql "DEPORIGIN:$moved_opd$" $dp_cont &&
update_contents $dp_cont $portdir $new_port $moved_opd
fi
# Do this one last so it can get deleted as a duplicate
# if either of the other two were present.
# if ro_opd is present.
if grep -ql "DEPORIGIN:$portdir$" $dp_cont; then
update_contents $dp_cont $portdir $new_port
fi
@ -2232,10 +2232,6 @@ if [ -z "$DONT_SCRUB_DISTFILES" ]; then
delete_all_distfiles $ro_opd
delete_dist_list
fi
if [ -n "$moved_opd" ]; then
delete_all_distfiles $moved_opd
delete_dist_list
fi
fi
if [ -n "$UPDATE_REQ_BYS" -a -s "$pdb/$new_port/+REQUIRED_BY" ]; then