Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Apr 2011 07:26:22 +0000 (UTC)
From:      Doug Barton <dougb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r221202 - user/dougb/portmaster
Message-ID:  <201104290726.p3T7QM1G088382@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dougb
Date: Fri Apr 29 07:26:22 2011
New Revision: 221202
URL: http://svn.freebsd.org/changeset/base/221202

Log:
  Fix an unfortunately long-standing bug in the --package code, we need to
  update the +REQUIRED_BY files for ports that the installed port depends on.
  When I tested pkg_add originally I confirmed that it did this, but I
  neglected to re-test when adding the --no-deps option, which suppresses
  this behavior. Mea culpa.
  
  So take this opportunity to fix the bug, and improve some other things in
  the process:
  * Add code to the section that updates dependencies for the newly installed
    package which walks the +CONTENTS file and runs the +REQUIRED_BY update
    for every port that the newly installed depends on. I may revisit this
    later with a more tightly focused solution, but this code is pretty fast,
    and at this point I'd rather be thorough.
  * Create update_required_by() to consolidate the 2 places that were doing
    this already, and avoid adding a 3rd above
  * Set PM_VERBOSE unconditionally for --check-depends. The functions that it
    uses all had code of the form [ -n "$PM_VERBOSE" -o -n "$CHECK_DEPENDS" ]
    which was growing increasingly pointless, and I didn't want to duplicate
    this in the new function. Doing it this way allows me to simplify some
    code quite a bit.
  * Remove a no-longer-used variable from --check-depends
  * Remove a spurious 'return 0' at the end of check_dependency_files

Modified:
  user/dougb/portmaster/portmaster

Modified: user/dougb/portmaster/portmaster
==============================================================================
--- user/dougb/portmaster/portmaster	Fri Apr 29 07:14:37 2011	(r221201)
+++ user/dougb/portmaster/portmaster	Fri Apr 29 07:26:22 2011	(r221202)
@@ -907,16 +907,13 @@ check_dependency_files () {
 		if [ -s "$pdb/$iport/+REQUIRED_BY" ]; then
 			# No actual dependencies exist, so this file is stale
 			# Zero it out so that -s mode can find it
-			if [ -n "$PM_VERBOSE" -o -n "$CHECK_DEPENDS" ]; then
-				echo "	===>>> No installed ports depend on $iport"
-				echo "	===>>> Emptying +REQUIRED_BY file.  Try ${0##*/} -s"
-			fi
+			pm_v "	===>>> No installed ports depend on $iport"
+			pm_v "	===>>> Emptying +REQUIRED_BY file.  Try ${0##*/} -s"
 
 			check_regular_file $pdb/$iport/+REQUIRED_BY
 			$PM_SU_CMD truncate -s0 $pdb/$iport/+REQUIRED_BY
 		fi
 	fi
-	return 0
 }
 
 # Takes default value, optional value, and message as input
@@ -1002,8 +999,7 @@ IFS='
 			fi
 
 			if [ -n "$d_iport" ]; then
-				[ -n "$PM_VERBOSE" -o -n "$CHECK_DEPENDS" ] &&
-					echo "	===>>> Updating @pkgdep for $d_origin"
+				pm_v "	===>>> Updating @pkgdep for $d_origin"
 			else
 				echo "	===>>> $d_origin is listed as a dependency"
 				echo "	===>>> but there is no installed version"
@@ -1051,8 +1047,7 @@ IFS='
 	cmp -s $contents $new_cont && { pm_unlink $new_cont ; return; }
 
 	check_regular_file $contents
-	[ -n "$PM_VERBOSE" -o -n "$CHECK_DEPENDS" ] &&
-		{ echo "	===>>> Installing the new +CONTENTS file" ; echo ''; }
+	pm_v "	===>>> Installing the new +CONTENTS file"
 	pm_install_s $new_cont $contents
 	pm_unlink $new_cont
 }
@@ -1256,6 +1251,24 @@ parse_index () {
 	esac
 }
 
+update_required_by () {
+	# Global: grep_deps
+	local do_update
+
+	if [ -e "$pdb/$1/+REQUIRED_BY" ]; then
+		sort $pdb/$1/+REQUIRED_BY | cmp -s $grep_deps - || do_update=do_update
+		check_regular_file $pdb/$1/+REQUIRED_BY
+	else
+		do_update=do_update2
+	fi
+	if [ -n "$do_update" ]; then
+		pm_v "	===>>> Updating $1/+REQUIRED_BY"
+		pm_install_s $grep_deps $pdb/$1/+REQUIRED_BY
+	fi
+
+	pm_unlink $grep_deps && unset grep_deps
+}
+
 #=============== End functions relevant to --features and main ===============
 #=============== Begin code relevant only to --features ===============
 
@@ -1377,7 +1390,7 @@ if [ -n "$CLEAN_PACKAGES" ]; then
 fi	# [ -n "$CLEAN_PACKAGES" ]
 
 if [ -n "$CHECK_DEPENDS" ]; then
-	d_orig_ok=':'
+	PM_VERBOSE=pmv_check_depends
 IFS='
 '
 	for pkg in $pdb/*; do
@@ -1409,21 +1422,7 @@ IFS='
 		fi
 
 		check_dependency_files $origin $iport
-		if [ -s "$grep_deps" ]; then
-			if [ -e "$pkg/+REQUIRED_BY" ]; then
-				sort $pkg/+REQUIRED_BY | cmp -s $grep_deps - ||
-					do_update=do_update
-				check_regular_file $pkg/+REQUIRED_BY
-			else
-				do_update=do_update2
-			fi
-			if [ -n "$do_update" ]; then
-				unset do_update
-				echo "	===>>> Updating +REQUIRED_BY"
-				pm_install_s $grep_deps $pkg/+REQUIRED_BY
-			fi
-		fi
-		[ -n "$grep_deps" ] && { pm_unlink $grep_deps && unset grep_deps; }
+		[ -s "$grep_deps" ] && update_required_by $iport
 
 		update_contents $pkg/+CONTENTS
 	done
@@ -3218,7 +3217,6 @@ if [ -n "$PM_FIRST_PASS" ]; then
 	fi
 
 	dependency_check "$dep_check_type"
-# XXX
 
 	[ -n "$UPDATE_REQ_BYS" -o -n "$URB_YES" ] &&
 		URB_DONE_LIST="${URB_DONE_LIST}${upg_port}:"
@@ -3756,6 +3754,17 @@ if [ -n "$use_package" ]; then
 		echo "===>>> Updating dependencies for $new_port to match installed versions"
 		update_contents $pdb/$new_port/+CONTENTS
 		echo ''
+
+		while read atc s; do
+			case "$atc" in
+			@pkgdep)	[ -n "$s" ] && pkgdep=$s ;;
+			@comment)	[ -n "$pkgdep" ] || continue
+					check_dependency_files ${s#DEPORIGIN:} $pkgdep
+					[ -s "$grep_deps" ] && update_required_by $pkgdep
+					unset pkgdep ;;
+			esac
+		done < $pdb/$new_port/+CONTENTS
+		unset atc s ; pm_v
 	fi
 fi
 
@@ -3795,19 +3804,7 @@ if [ -s "$grep_deps" ]; then
 	done < $grep_deps
 	unset d_port dp_cont do_update
 
-	if [ -e "$pdb/$new_port/+REQUIRED_BY" ]; then
-		sort $pdb/$new_port/+REQUIRED_BY | cmp -s $grep_deps - || do_update=do_update
-		check_regular_file $pdb/$new_port/+REQUIRED_BY
-	else
-		do_update=do_update2
-	fi
-	if [ -n "$do_update" ]; then
-		pm_v ; pm_v "	===>>> Updating $new_port/+REQUIRED_BY"
-		pm_install_s $grep_deps $pdb/$new_port/+REQUIRED_BY
-	fi
-
-	pm_unlink $grep_deps && unset grep_deps do_update
-	echo ''
+	update_required_by $new_port
 fi
 
 if [ -n "$upg_port" ]; then



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104290726.p3T7QM1G088382>