Date: Tue, 3 Aug 2010 22:41:16 +0000 (UTC) From: Doug Barton <dougb@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r210830 - user/dougb/portmaster Message-ID: <201008032241.o73MfGVr082386@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dougb Date: Tue Aug 3 22:41:15 2010 New Revision: 210830 URL: http://svn.freebsd.org/changeset/base/210830 Log: New Feature =========== Add the ability to skip the rebuild of the -r port by adding -R * In getopts() for -r assign the name of the parent port to a persistent variable (PM_RBP) so that we can use it later * In check_for_updates() use $PM_RBP to determine if the parent port is up to date * In post_first_pass() check for -R + -r, and test whether or not the parent port is up to date. If it, and all dependencies are up to date remove it from build_l and set a flag (PM_REQ_BY_SKIP_PARENT) for the main build routine. Either way, notify the user. * Move the routine (basically unchanged) for handling the dependent ports into a function, urb_final() so that it can be called both from the end of the script (where it used to be) and from the main build routine if the flag is set to skip the parent build * At the beginning of the main build routine call check_for_updates() to see if the parent is up to date * In the main build routine test for the skip-parent-build flag Other Fixes =========== 1. In parent_exit(): * Remove a now-redundant test for -r/-f * If INSTALLED_LIST has content but ilist does not, move it over so we can display the right information about work done * Add one line of whitespace between the last (potentially variable number) of PM_SU_VERBOSE messages and the summary of work 2. In post_first_pass() add PM_NO_CONFIRM to the unset list 3. In the main "after the first pass" code when processing the -r stuff add some more whitespace to the status messasges Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Tue Aug 3 22:17:29 2010 (r210829) +++ user/dougb/portmaster/portmaster Tue Aug 3 22:41:15 2010 (r210830) @@ -139,8 +139,7 @@ parent_exit () { if [ -z "$TRAP" ]; then if [ -n "$UPDATE_REQ_BYS" -o -n "$PM_FORCE" ]; then - [ -n "$UPDATE_REQ_BYS" -o -n "$PM_FORCE" ] && - files=`find $pdb -type f -name PM_UPGRADE_DONE_FLAG` + files=`find $pdb -type f -name PM_UPGRADE_DONE_FLAG` if [ -n "$files" ]; then pm_sv Deleting \'install complete\' flags pm_find_s $pdb -type f -name PM_UPGRADE_DONE_FLAG -delete @@ -184,7 +183,11 @@ parent_exit () { elif [ -z "$show_list" ]; then case "$INSTALLED_LIST" in *\\n\\t*) show_list=all ;; - *\\n) show_list=one ;; + *\\n) show_list=one + if [ -z "$ilist" ]; then + ilist="${INSTALLED_LIST#\\t}" + ilist="${ilist%\\n}" + fi ;; esac fi if [ -n "$PM_LOG" ]; then @@ -202,6 +205,7 @@ parent_exit () { fi date >> $PM_LOG fi + [ -n "$PM_SU_VERBOSE" ] && echo '' case "$show_list" in all) echo "===>>> The following actions were performed:" echo -e $INSTALLED_LIST @@ -1300,7 +1304,8 @@ while getopts 'BCDFGHKLPRabde:fghilm:nop 2) fail 'The argument to -r must match only one port' ;; esac fi - portdir=`origin_from_pdb ${glob_dirs##*/}` ; unset glob_dirs ;; + PM_RBP=${glob_dirs##*/} ; unset glob_dirs + portdir=`origin_from_pdb $PM_RBP` ;; s) CLEAN_STALE=sopt ;; t) RECURSE_THOROUGH=topt; ARGS="-t $ARGS" ;; u) fail 'The -u option has been deprecated' ;; @@ -1501,6 +1506,9 @@ check_for_updates () { unset moved_npd fi return 0 + elif [ "$PM_RBP" = "$iport" ]; then + PM_RBP_NEEDS_UPGRADE=pm_rbp_needs_upgrade + return 0 fi # No need for check_exclude here because it is already @@ -2414,6 +2422,17 @@ create_master_rb_list () { post_first_pass () { local action + if [ -n "$UPDATE_REQ_BYS" -a -n "$RESTART" ]; then + if [ -z "$NO_DEP_UPDATES" -o -n "$PM_RBP_NEEDS_UPGRADE" ]; then + echo "===>>> $PM_RBP and/or dependencies are out of date, forcing rebuild" + else + echo "===>>> $PM_RBP is up to date, skipping rebuild due to -R flag" + PM_REQ_BY_SKIP_PARENT=pm_req_by_skip_parent + build_l="${build_l#*\\n}" + fi + echo '' + fi + if [ $num_of_deps -gt 0 ]; then term_printf " (${num_of_deps})" @@ -2448,7 +2467,7 @@ echo " all of the above try adding echo "===>>> Starting $action for $* <<<===" echo '' - unset PM_FP_SEEN_LIST PM_FIRST_PASS + unset PM_FP_SEEN_LIST PM_FIRST_PASS PM_NO_CONFIRM dep_of_deps=0 @@ -2596,6 +2615,45 @@ make_config () { pm_make_s $config_type } +urb_final () { + # Global: URB_YES + + local req_by + + export URB_YES=urb_yes_final + echo "===>>> Updating ports that depend on $new_port" + echo '' + create_master_rb_list + for req_by in $MASTER_RB_LIST; do + # Probably not needed, but JIC + [ -d "$pdb/$req_by" ] || continue + + case "$URB_DONE_LIST" in + *:${req_by}:*) already_done $req_by ; continue ;; + esac + + # Check here since if "no" it will not prompt + check_interactive $req_by || continue + + [ -n "$PM_VERBOSE" ] && + echo "===>>> $new_port is required by $req_by" + check_exclude $req_by || continue + + # Shortcut, since check_for will force it + if [ -z "$RESTART" -a -z "$PM_FORCE" ]; then + update_port $req_by + else + check_for_updates $req_by || fail 'Update failed' + fi + echo "===>>> Returning to check of ports depending on $upg_port" + done + echo '' + echo "===>>> Done updating ports that depend on $new_port" + echo '' + + safe_exit +} + #=============== End functions for main =============== # INIT Parent @@ -2950,6 +3008,8 @@ fi if [ -n "$PM_FIRST_PASS" -a "$$" -eq "$PM_PARENT_PID" ]; then if [ -n "$upg_port" ]; then update_build_l $upg_port + [ -n "$UPDATE_REQ_BYS" -a -n "$RESTART" ] && + check_for_updates $upg_port else update_build_l $portdir fi @@ -3065,6 +3125,7 @@ if [ -n "$PM_FIRST_PASS" ]; then safe_exit elif [ -n "$UPDATE_REQ_BYS" ]; then export URB_YES=urb_yes + echo '' echo "===>>> Checking ports that depend on $upg_port" echo '' create_master_rb_list @@ -3093,7 +3154,7 @@ if [ -n "$PM_FIRST_PASS" ]; then fi echo "===>>> Returning to check of ports depending on $upg_port" done - + echo '' echo "===>>> Done checking ports that depend on $upg_port" echo '' unset URB_YES MASTER_RB_LIST ; URB_DONE_LIST=':' @@ -3128,7 +3189,6 @@ if [ -z "$NO_DEP_UPDATES" ]; then dependency_check all-depends-list fi [ -z "$PM_INDEX_ONLY" ] && pm_cd_pd $portdir -# elif [ "$$" -eq "$PM_PARENT_PID" ]; then echo "===>>> All dependencies are up to date" echo '' @@ -3148,6 +3208,8 @@ if [ -z "$new_port" ]; then fi fi +[ -n "$PM_REQ_BY_SKIP_PARENT" ] && urb_final + if [ -n "$PM_PACKAGES" -o "$PM_PACKAGES_BUILD" = doing_build_only_dep ]; then fetch_package () { local do_fetch @@ -3670,37 +3732,7 @@ if [ -z "$DONT_SCRUB_DISTFILES" ]; then fi fi -if [ -n "$UPDATE_REQ_BYS" -a -s "$pdb/$new_port/+REQUIRED_BY" ]; then - export URB_YES=urb_yes2 - echo "===>>> Updating ports that depend on $new_port" - echo '' - create_master_rb_list - for req_by in $MASTER_RB_LIST; do - # Probably not needed, but JIC - [ -d "$pdb/$req_by" ] || continue - - case "$URB_DONE_LIST" in - *:${req_by}:*) already_done $req_by ; continue ;; - esac - - # Check here since if "no" it will not prompt - check_interactive $req_by || continue - - [ -n "$PM_VERBOSE" ] && - echo "===>>> $new_port is required by $req_by" - check_exclude $req_by || continue - - # Shortcut, since check_for will force it - if [ -z "$RESTART" -a -z "$PM_FORCE" ]; then - update_port $req_by - else - check_for_updates $req_by || fail 'Update failed' - fi - echo "===>>> Returning to check of ports depending on $upg_port" - done - echo "===>>> Done updating ports that depend on $new_port" - echo '' -fi +[ -n "$UPDATE_REQ_BYS" -a -s "$pdb/$new_port/+REQUIRED_BY" ] && urb_final safe_exit
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008032241.o73MfGVr082386>