Date: Sun, 25 Apr 2010 22:39:25 +0000 (UTC) From: Doug Barton <dougb@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r207208 - user/dougb/portmaster Message-ID: <201004252239.o3PMdP8Y091971@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dougb Date: Sun Apr 25 22:39:25 2010 New Revision: 207208 URL: http://svn.freebsd.org/changeset/base/207208 Log: Improve the handling of various situations where there is no ORIGIN recorded in the +CONTENTS file. This is almost always an error in the package building process, and therefore usually needs to be flagged and handled as an error. There are (at least) 2 situations where it may not be an error; bsdpan ports, and when the user has added an +IGNOREME file (usually for 3rd party packages). 1. Add code to origin_from_pdb() that tests to see that grep returned something, echos the result as before, then also returns successfully. a. If the port is a bsdpan port, return with an error code but let the caller handle the reporting as appropriate. b. If there is no ORIGIN but there is an +IGNOREME file don't report the error unless we're using -v, then also report that the +IGNOREME file is there. Either way, return with an error code. c. If there is no ORIGIN, and no +IGNOREME file, report the error and return with an error code. 2. In several places this allows several lines of code where the function is called to be collapsed into: origin=`origin_from_pdb $iport` || continue 3. In the main body where we parse the command line for what to work on convert the code that was individually testing the various conditions that are now handled in origin_from_pdb() to simply parse the return codes with a case statement. In the common case (there is an ORIGIN in +CONTENTS) this is almost certainly a minor optimization since the error handling code in origin_from_pdb() is never reached, and several places where things like "is it a bsdpan port?" and other error handling have been removed. Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Sun Apr 25 22:01:32 2010 (r207207) +++ user/dougb/portmaster/portmaster Sun Apr 25 22:39:25 2010 (r207208) @@ -567,8 +567,23 @@ iport_from_origin () { origin_from_pdb () { local o - o=`grep -m1 '@comment ORIGIN:' $pdb/$1/+CONTENTS 2>/dev/null` - echo ${o#@comment ORIGIN:} + o=`grep -m1 '@comment ORIGIN:' $pdb/$1/+CONTENTS 2>/dev/null` && { + echo ${o#@comment ORIGIN:}; return 0; } + + case "$1" in bsdpan-*) return 3 ;; esac + + if [ -e "$pdb/$1/+IGNOREME" ]; then + if [ -n "$PM_VERBOSE" -o -n "$LIST_ORIGINS" ]; then + echo " ===>>> No ORIGIN in $pdb/$1/+CONTENTS" >&2 + echo " ===>>> $pdb/$1/+IGNOREME exists" >&2 + echo '' >&2 + fi + return 2 + else + echo " ===>>> No ORIGIN in $pdb/$1/+CONTENTS" >&2 + echo '' >&2 + fi + return 1 } check_regular_file () { @@ -780,9 +795,7 @@ read_distinfos () { [ -d $pkg ] || continue iport=${pkg#$pdb/} - case "$iport" in bsdpan-*) continue ;; esac - - origin=`origin_from_pdb $iport` + origin=`origin_from_pdb $iport` || continue if [ ! -d "$pd/$origin" ]; then find_moved_port $origin $iport nonfatal >/dev/null @@ -915,20 +928,13 @@ IFS=' iport=${pkg#$pdb/} - case "$iport" in bsdpan-*) - echo "===>>> BSDPAN ports do not record dependencies ($iport)" - continue ;; esac - echo "===>>> Checking $iport" [ -r "$pkg/+CONTENTS" ] || { echo " ===>>> Warning: No +CONTENTS file!"; continue; } - origin=`origin_from_pdb ${pkg#$pdb/}` - [ -n "$origin" ] || { - echo " ===>>> Warning: No ORIGIN in +CONTENTS file"; - continue; } + origin=`origin_from_pdb $iport` || continue if [ ! -d "$pd/$origin" ]; then echo " ===>>> $pd/$origin does not exist" @@ -972,7 +978,7 @@ if [ -n "$CHECK_PORT_DBDIR" ]; then unset unique_name iport=${pkg#$pdb/} - origin=`origin_from_pdb $iport` + origin=`origin_from_pdb $iport` || continue if [ ! -d "$pd/$origin" ]; then find_moved_port $origin $iport nonfatal >/dev/null @@ -1018,7 +1024,7 @@ if [ -n "$LIST_ORIGINS" ]; then ports_by_category for iport in $roots $leaves; do - origin=`origin_from_pdb $iport` + origin=`origin_from_pdb $iport` || continue echo $origin done @@ -1196,18 +1202,7 @@ check_for_updates () { iport=$1 - case "$iport" in bsdpan-*) [ -n "$PM_VERBOSE" ] && - echo " ===>>> BSDPAN ports cannot be upgraded with portmaster" - return 0 ;; esac - - origin=${2:-`origin_from_pdb $iport`} - if [ -z "$origin" ]; then - if [ -n "$PM_VERBOSE" ]; then - echo "===>>> No ORIGIN in $pdb/$iport/+CONTENTS" - echo '' - fi - return 0 - fi + origin=${2:-`origin_from_pdb $iport`} || return 0 if [ -n "$PM_INDEX" ]; then port_ver=`parse_index $origin name` @@ -2476,11 +2471,7 @@ all_config () { case "$CUR_DEPS" in *:${iport}:*) continue ;; esac - case "$iport" in bsdpan-*) [ -n "$PM_VERBOSE" ] && - echo " ===>>> BSDPAN ports cannot be upgraded with portmaster" - continue ;; esac - - origin=`origin_from_pdb $iport` + origin=`origin_from_pdb $iport` || continue case "$CONFIG_SEEN_LIST" in *:${origin}:*) continue ;; esac [ -n "$PM_BUILD_ONLY_LIST" ] && @@ -2634,15 +2625,16 @@ else fi if [ -n "$upg_port" -a -z "$REPLACE_ORIGIN" ]; then - portdir=`origin_from_pdb $upg_port` - if [ ! -n "$portdir" ]; then - case "$upg_port" in - bsdpan-*) echo '' + portdir=`origin_from_pdb $upg_port` || { + case "$?" in + 3) echo '' echo "===>>> BSDPAN ports cannot be upgraded with portmaster" - echo " (${upg_port})"; echo ''; safe_exit ;; - *) fail "No ORIGIN in $pdb/$upg_port/+CONTENTS" ;; - esac - fi + echo " (${upg_port})"; echo ''; safe_exit ;; + 2) [ -z "$PM_VERBOSE" ] && { + echo " ===>>> No ORIGIN for $upg_port, and +IGNOREME is present"; + echo ''; }; safe_exit ;; + *) fail 'Cannot continue' ;; + esac ; } elif [ -z "$portdir" ]; then no_valid_port fi
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004252239.o3PMdP8Y091971>