svn commit: r221158 - user/dougb/portmaster
Doug Barton
dougb at FreeBSD.org
Thu Apr 28 09:09:35 UTC 2011
Author: dougb
Date: Thu Apr 28 09:09:34 2011
New Revision: 221158
URL: http://svn.freebsd.org/changeset/base/221158
Log:
First pass at making -F work with --packages*:
* If -F and --packages*
o We don't need the full build_l, but we do need to call update_pm_nu
for -a and multiport
o ... which means we need to export PM_NEEDS_UPDATE unconditionally
o We want to imply --no-confirm since we're not using the list anyway
o If not --packages-only lack of a package is a soft fail
While I'm at it, begin making check_fetch_only() useful for --packages*
although we can't do full background fetching for multiple packages yet
Also, revamp the code in check_fetch_only() and where we wait for b/g
distfile fetching to complete to be a lot smarter:
* In check_fetch_only() simplify the code to count fetch processes which
both makes it faster by avoiding ps, and also makes it smarter because
it will find fewer false positives.
* In both, poll every 2 seconds, but only output to the console every 6.
This way we'll be able to exit a lot sooner, but still avoid spamming
the user with lots of messages.
Modified:
user/dougb/portmaster/portmaster
Modified: user/dougb/portmaster/portmaster
==============================================================================
--- user/dougb/portmaster/portmaster Thu Apr 28 08:49:43 2011 (r221157)
+++ user/dougb/portmaster/portmaster Thu Apr 28 09:09:34 2011 (r221158)
@@ -733,6 +733,8 @@ if [ -n "$LIST" -o -n "$LIST_PLUS" ]; th
[ $# -gt 0 ] && fail 'The -[lL] options are not compatible with updates or installs'
fi
+[ -n "$PM_PACKAGES" -a -n "$FETCH_ONLY" ] && export PM_NO_CONFIRM=pm_no_confirm
+
unset my_environment COMMAND_LINE_ARGUMENT
unset -f packages_init cross_idx test_command_line
@@ -2154,26 +2156,26 @@ check_exclude () {
check_fetch_only () {
[ -n "$FETCH_ONLY" ] || return 0
+ [ -z "$1" -a -n "$PM_PACKAGES" ] && return 0
- local sleep nf fetches
+ local count nf fetches
echo ''
- sleep=5
- while `ls ${TMPDIR}/f-${PM_PARENT_PID}-fetchlog-* >/dev/null 2>&1`; do
- nf=`ps -ax | grep [f]etch | wc -l`
+ count=0
+ while nf=`ls ${TMPDIR}/f-${PM_PARENT_PID}-fetchlog-* 2>/dev/null | wc -l`; do
nf=${nf##* }
- [ "$nf" -eq 0 ] && break # Not often, but it happens
- fetches=fetches ; [ "$nf" -eq 1 ] && fetches=fetch
- echo "===>>> Waiting for ${nf##* } distfile $fetches to finish"
- sleep $sleep
+ [ $nf -eq 0 ] && break
+ fetches=fetches ; [ $nf -eq 1 ] && fetches=fetch
- if [ $sleep -eq 10 ]; then
- sleep=5
- else
- sleep=$(( $sleep + 1 ))
+ count=$(( $count + 1 ))
+ if [ $count -eq 1 ]; then
+ echo "===>>> Waiting for $nf distfile $fetches to finish"
+ elif [ $count -eq 3 ]; then
+ count=0
fi
+ sleep 2
done
- echo "===>>> Distfile fetching is complete"
+ echo "===>>> ${1:-Distfile} fetching is complete"
FETCH_ONLY_DONE=fetch_only_done
safe_exit
}
@@ -2840,10 +2842,11 @@ if [ "$$" -eq "$PM_PARENT_PID" -a -z "$S
fi
PM_FIRST_PASS=pm_first_pass ; export PM_FIRST_PASS
+ PM_NEEDS_UPDATE=' ' ; export PM_NEEDS_UPDATE # Used with -F for multiport and -a
if [ -z "$FETCH_ONLY" ]; then
- PM_NEEDS_UPDATE=' ' ; NO_DEP_UPDATES=no_dep_updates ; build_l=''
- export PM_NEEDS_UPDATE NO_DEP_UPDATES build_l
+ NO_DEP_UPDATES=no_dep_updates ; build_l=''
+ export NO_DEP_UPDATES build_l
[ -z "$PM_INDEX_ONLY" ] &&
pm_cd_pd && PM_WRKDIRPREFIX=`pm_make_b -V WRKDIRPREFIX` && pm_cd -
@@ -3137,6 +3140,8 @@ if [ -n "$PM_FIRST_PASS" -a -z "$FETCH_O
else
update_build_l $portdir
fi
+elif [ -n "$FETCH_ONLY" -a -n "$PM_PACKAGES" ]; then
+ update_pm_nu $portdir
fi
# Do these things first time through
@@ -3525,13 +3530,14 @@ notnewer () {
fail "There is no valid package to install"
else
echo ''
+ [ -n "$FETCH_ONLY" ] && safe_exit
echo "===>>> There is no valid package to install, building port instead"
echo ''
fi
fi
fi # [ -n "$pm_package_time" ]
-if [ -z "$use_package" ]; then
+if [ -z "$use_package" -a -z "$FETCH_ONLY" ]; then
if [ -n "$PM_PACKAGES" ]; then
[ -z "$PM_NO_MAKE_CONFIG" ] && make_config
@@ -3545,21 +3551,20 @@ if [ -z "$use_package" ]; then
[ -z "$DONT_PRE_CLEAN" ] && { pm_make clean NOCLEANDEPENDS=ncd ||
fail 'make clean failed'; echo ''; }
- sleep=3
fl_read=`echo ${TMPDIR}/f-${PM_PARENT_PID}-fetchlog-${portdir#*/}.*`
+ count=0
while [ -f "$fl_read" ]; do
- echo "===>>> Waiting on fetch & checksum for $portdir <<<==="
- tail -10 $fl_read 2>/dev/null
- echo '' ; echo ''
- sleep $sleep
-
- if [ $sleep -eq 10 ]; then
- sleep=3
- else
- sleep=$(( $sleep + 1 ))
+ count=$(( $count + 1 ))
+ if [ $count -eq 1 ]; then
+ echo "===>>> Waiting on fetch & checksum for $portdir <<<==="
+ tail -10 $fl_read 2>/dev/null
+ echo '' ; echo ''
+ elif [ $count -eq 3 ]; then
+ count=0
fi
+ sleep 2
done
- unset sleep fl_read
+ unset count fl_read
if [ -n "$HIDE_BUILD" ]; then
port_log=`mktemp -t port_log-${PM_PARENT_PID}-${portdir#*/}` ||
@@ -3574,6 +3579,7 @@ if [ -z "$use_package" ]; then
else
[ -z "$local_package" ] && {
fetch_package $latest_pv || fail "Fetch for ${latest_pv}.tbz failed"; }
+ check_fetch_only Package
fi
# Ignore if no old port exists
More information about the svn-src-user
mailing list