Date: Sat, 21 Aug 2010 04:04:46 +0000 (UTC) From: Doug Barton <dougb@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r211535 - user/dougb/portmaster Message-ID: <201008210404.o7L44kEG056022@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dougb Date: Sat Aug 21 04:04:46 2010 New Revision: 211535 URL: http://svn.freebsd.org/changeset/base/211535 Log: Roto-rooter some old code in check_for_updates() and check_restart_and_udf(): 1. Add a new function, check_force_multi() which is called from check_for from several places now. It checks whether or not -f is in use, and if not whether the port in question is part of multiport(). 2. Cut some of the stale code in check_for: a. Since the only time check_for is called in a list context is when using -L, rely on that instead of its own variable. b. There is no need to specify the udf file on its own anymore, so eliminate that here (and everywhere else). c. It is not necessary to check URB* related stuff in check_for, all of the callers handle this already. 3. check_pkg_version() does not need to be its own function anymore, so bring that code back in line. 4. Call the new check_force_multi() from all the places that need it. This is new to the --index case (a bug fix), and modified/streamlined when the ports directory is being checked whether $iport and $port_ver are the same or not. 5. If there is no $origin directory but +IGNOREME exists make the result consistent with the MOVED case by adding some white space after the warning message and adding the port to CUR_DEPS so it won't warn again. 6. At the end when no update is available don't create CUR_DEPS if -L 7. In check_restart_and_udf() make the code consistent with other functions that check flags, and just derive the udf file from $iport. 8. In update_port() print more relevant messages on what is going to be done based on whether we are doing an update, or (re-)install. 9. In dependency_check() pass the arg to already_done (really old bug). 10. Correct some spurious whitespace in the code. Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Fri Aug 20 23:51:34 2010 (r211534) +++ user/dougb/portmaster/portmaster Sat Aug 21 04:04:46 2010 (r211535) @@ -1087,7 +1087,7 @@ if [ -n "$CLEAN_PACKAGES" ]; then origin=${origin#@comment ORIGIN:} if [ -z "$PM_INDEX" ]; then - if [ -d "$pd/$origin" ]; then + if [ -d "$pd/$origin" ]; then pm_cd $pd/$origin && port_ver=`pm_make -V PKGNAME` [ -n "$port_ver" ] || fail "Is $pd/$origin/Makefile missing?" else @@ -1391,47 +1391,35 @@ check_state () { return 0 } -check_pkg_version () { - local iport port_ver udf - - iport=$1 ; port_ver=$2 ; udf=$3 - - case `pkg_version -t $iport $port_ver` in - \<) return 1 ;; - =) return ;; - \>) if [ -n "$PM_VERBOSE" ]; then - echo " ===>>> Port version $port_ver does not" - echo " ===>>> seem newer than installed $iport" - fi - if [ -n "$PM_FORCE" ]; then - check_restart_and_udf $udf $iport || return 1 - elif [ -n "$URB_YES" ]; then - case "$MASTER_RB_LIST" in *" $iport "*) - if ! check_restart_and_udf $udf $iport; then - return 1 - else - URB_DONE_LIST="${URB_DONE_LIST}${upg_port}:" - fi ;; - esac - fi ;; - esac +# Takes $iport and $origin as arguments +# +check_force_multi () { + if [ -n "$PM_FORCE" ]; then + check_restart_and_udf $1 || return 1 + elif [ -n "$PM_MULTI_PORTS" ]; then + case "$PM_MULTI_PORTS" in + *:${1}:*) return 1 ;; + *:${2}:*) return 1 ;; + esac + fi } check_for_updates () { # Global: num_updates - local list_only nf iport origin port_ver skip udf do_update + local nf iport origin port_ver do_update skip - [ "$1" = 'list' ] && { list_only=list_only; nf=nonfatal; shift; } + [ "$1" = 'list' ] && { nf=nonfatal; shift; } - iport=$1 - - origin=${2:-`origin_from_pdb $iport`} || return 0 + iport=$1 ; origin=${2:-`origin_from_pdb $iport`} || return 0 if [ -n "$PM_INDEX" ]; then case "$PM_INDEX_PORTS" in *${iport}*) port_ver=`parse_index $origin name` ; do_update=upd_idx ;; esac + [ -z "$do_update" -a -z "$LIST_PLUS" ] && { + check_force_multi $iport $origin || do_update=upd_fm_idx; } + [ -n "$PM_INDEX_FIRST" ] || skip=index_skip fi @@ -1440,6 +1428,8 @@ check_for_updates () { if [ -e "$pdb/$iport/+IGNOREME" ]; then echo " ===>>> Warning: Unable to cd to $pd/$origin" echo " ===>>> Continuing due to $pdb/$iport/+IGNOREME" + echo '' + CUR_DEPS="${CUR_DEPS}${iport}:${origin}:" return 0 else fail "Cannot cd to port directory: $pd/$origin" @@ -1464,42 +1454,43 @@ check_for_updates () { fi if [ -z "$do_update" -a -n "$port_ver" ]; then - udf="$pdb/$iport/PM_UPGRADE_DONE_FLAG" if [ "$iport" = "$port_ver" ]; then - if [ -n "$PM_FORCE" ]; then - check_restart_and_udf $udf $iport || do_update=do_update_force - elif [ -n "$URB_YES" ]; then - case "$MASTER_RB_LIST" in *" $iport "*) - if ! check_restart_and_udf $udf $iport; then - do_update=do_update_urb - else - URB_DONE_LIST="${URB_DONE_LIST}${upg_port}:" - fi ;; - esac - elif [ -n "$PM_MULTI_PORTS" ]; then - case "$PM_MULTI_PORTS" in - *:${iport}:*) do_update=do_update_mi ;; - *:${origin}:*) do_update=do_update_mo ;; - esac - elif [ -n "$LIST_PLUS" ]; then - [ -z "$PM_INDEX_ONLY" ] && check_state + if [ -n "$LIST_PLUS" ]; then + check_state return 0 elif [ -n "$LIST" ]; then return 0 + else + check_force_multi $iport $origin || do_update=upd_fm_eq + unset port_ver fi else - check_pkg_version $iport $port_ver $udf || do_update=do_update_check + case `pkg_version -t $iport $port_ver` in + \<) do_update=upd_lt ;; + =) ;; # Can be reached if same version with different options + \>) if [ -n "$PM_VERBOSE" ]; then + echo " ===>>> Port version $port_ver does not" + echo " ===>>> seem newer than installed $iport" + fi ;; + *) fail "pkg_version -t $iport $port_ver gave an unexpected result" + esac + + [ -z "$do_update" ] && { + check_force_multi $iport $origin || do_update=upd_fm_ne; } fi fi - [ -z "$do_update" ] && { CUR_DEPS="${CUR_DEPS}${iport}:${origin}:" ; return 0; } + if [ -z "$do_update" ]; then + [ -z "$LIST_PLUS" ] && CUR_DEPS="${CUR_DEPS}${iport}:${origin}:" + return 0 + fi - if [ -n "$list_only" ]; then + if [ -n "$LIST_PLUS" ]; then if [ -z "$moved_npd" ]; then echo " ===>>> New version available: $port_ver" [ -e "$pdb/$iport/+IGNOREME" ] && echo " ===>>> +IGNOREME file is present for $1" - [ -z "$PM_INDEX_ONLY" ] && { pm_cd_pd $origin ; check_state; } + [ -z "$PM_INDEX_ONLY" ] && { pm_cd_pd $origin ; check_state; } num_updates=$(( $num_updates + 1 )) else unset moved_npd @@ -1990,14 +1981,13 @@ already_done () { check_restart_and_udf () { # RESTART will usually be empty, and we don't want # to go out to the disk if we don't have to. - if [ -z "$RESTART" ]; then - return 1 - elif [ ! -e "$1" ]; then + [ -z "$RESTART" ] && return 1 + + if [ ! -e "$pdb/${1}/PM_UPGRADE_DONE_FLAG" ]; then return 1 else - already_done $2 ; echo '' + already_done $1 ; echo '' fi - return 0 } check_interactive () { @@ -2120,10 +2110,16 @@ update_build_l () { } update_port () { - local update_to deps + local deps - [ -n "$2" ] && update_to=" to $2" - echo "===>>> Launching child to update ${1#$pd/}${update_to}" + if [ -n "$2" ]; then + echo "===>>> Launching child to update $1 to $2" + else + case "$1" in + */*) echo "===>>> Launching child to install ${1#$pd/}" ;; + *) echo "===>>> Launching child to reinstall $1" ;; + esac + fi dep_of_deps=$(( $dep_of_deps + 1 )) @@ -2280,7 +2276,7 @@ dependency_check () { clean_build_only_list fi - local d_port origin iport udf + local d_port origin iport # Do not export, for THIS parent process only [ -n "$PM_FIRST_PASS" ] && doing_dep_check=doing_dep_check @@ -2332,9 +2328,8 @@ dependency_check () { check_exclude ${iport:-$origin} || continue - udf="$pdb/$iport/PM_UPGRADE_DONE_FLAG" if [ -n "$PM_FORCE" -a -n "$iport" ]; then - if ! check_restart_and_udf $udf $iport; then + if ! check_restart_and_udf $iport; then echo "===>>> Forcing update for $pd/$origin" update_port $iport else @@ -2343,11 +2338,11 @@ dependency_check () { continue elif [ -n "$URB_YES" -a -n "$iport" ]; then case "$URB_DONE_LIST" in - *:${iport}:*) already_done ; continue ;; esac + *:${iport}:*) already_done $iport ; continue ;; esac case "$MASTER_RB_LIST" in *" $iport "*) check_interactive $iport || continue - if ! check_restart_and_udf $udf $iport; then + if ! check_restart_and_udf $iport; then update_port $iport else CUR_DEPS="${CUR_DEPS}${iport}:${origin}:" @@ -2803,8 +2798,7 @@ if ! : ; then PM_DEPTH= if [ -n "$PM_FORCE" ]; then - udf="$pdb/$iport/PM_UPGRADE_DONE_FLAG" - if ! check_restart_and_udf $udf $iport; then + if ! check_restart_and_udf $iport; then echo "===>>> Forcing update for $iport" update_port $iport else
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008210404.o7L44kEG056022>