svn commit: r200168 - user/dougb/portmaster

Doug Barton dougb at FreeBSD.org
Sat Dec 5 21:50:06 UTC 2009


Author: dougb
Date: Sat Dec  5 21:50:06 2009
New Revision: 200168
URL: http://svn.freebsd.org/changeset/base/200168

Log:
  Add the ability to specify a repository on the local file system.
  Fall back to fetching if the local package does not exist, or is
  not up to date.

Modified:
  user/dougb/portmaster/portmaster

Modified: user/dougb/portmaster/portmaster
==============================================================================
--- user/dougb/portmaster/portmaster	Sat Dec  5 20:52:11 2009	(r200167)
+++ user/dougb/portmaster/portmaster	Sat Dec  5 21:50:06 2009	(r200168)
@@ -242,6 +242,7 @@ usage () {
 	echo "Common flags: [--force-config] [-CGHKgntvw B|b f|i D|d]"
 	echo "    [[--packages|--packages-only] [-P|-PP] | [--packages-build]]"
 	echo "    [--packages-if-newer] [--delete-build-only] [--always-fetch]"
+	echo "    [--local-packagedir=<path>]"
 	echo "    [-m <arguments for make>] [-x <glob pattern to exclude from building>]"
 	echo "${0##*/} [Common flags] <full name of port directory in $pdb>"
 	echo "${0##*/} [Common flags] <full path to $pd/foo/bar>"
@@ -314,6 +315,8 @@ usage () {
 	echo '--packages-if-newer use package if newer than installed even'
 	echo '   if the package is not the latest according to the ports tree'
 	echo '--always-fetch fetch package even if it already exists locally'
+	echo '--local-packagedir=<path> where local packages can be found,'
+	echo '   will fall back to fetching if no local version exists'
 	echo ''
 	echo '-l list installed ports by category'
 	echo '-L list installed ports by category, and search for updates'
@@ -427,6 +430,8 @@ for var in "$@" ; do
 				export PM_PACKAGES_NEWER ;;
 	--always-fetch)		PM_ALWAYS_FETCH=pm_always_fetch
 				export PM_ALWAYS_FETCH ;;
+	--local-packagedir=*)	LOCAL_PACKAGEDIR=${var#--local-packagedir=}
+				export LOCAL_PACKAGEDIR ;;
 	-[A-Za-z0-9]*)		newopts="$newopts $var" ;;
 	--delete-build-only)	PM_DEL_BUILD_ONLY=pm_dbo
 				PM_BUILD_ONLY_LIST=pm_bol
@@ -2479,13 +2484,24 @@ fetch_package () {
 	sitepath="${sitepath%/}/${portdir%/*}/"
 
 	[ -n "$PM_VERBOSE" ] &&
-		echo "===>>> Checking package repository for latest available version"
+	echo "===>>> Checking package repository for latest available version"
 
-	case "$new_port" in
-	*\.*)	s=${new_port%%\.*} ;;
-	*)	s=`pm_make -V LATEST_LINK` ;;
-	esac
-	latest_pv=`fetch -q -o - ${sitepath} 2>/dev/null | grep "href=\"${s}"`
+	if [ -n "$LOCAL_PACKAGEDIR" ]; then
+		s=`pm_make -V LATEST_LINK`
+		if [ -r "${LOCAL_PACKAGEDIR}/Latest/${s}.tbz" ]; then
+			local_package=${LOCAL_PACKAGEDIR}/Latest/${s}.tbz
+			latest_pv=`readlink ${LOCAL_PACKAGEDIR}/Latest/${s}.tbz`
+			latest_pv=${latest_pv##*/}
+		fi
+	fi
+
+	if [ -z "$latest_pv" ]; then
+		case "$new_port" in
+		*\.*)	s=${new_port%%\.*} ;;
+		*)	s=`pm_make -V LATEST_LINK` ;;
+		esac
+		latest_pv=`fetch -q -o - ${sitepath} 2>/dev/null | grep "href=\"${s}"`
+	fi
 	unset s
 
 	if [ -z "$latest_pv" ]; then
@@ -2513,6 +2529,8 @@ notnewer () {
 	echo ''
 	echo "===>>> The newest available package ($latest_pv)"
 	echo "       is not newer than the installed version ($upg_port)"
+
+	unset local_package
 }
 
 	if [ "$latest_pv" = "$new_port" ]; then
@@ -2617,7 +2635,9 @@ if [ -z "$use_package" ]; then
 
 	eval pm_make $port_log_args || fail "make failed for $portdir"
 else
-	fetch_package $latest_pv || fail "Fetch for ${latest_pv}.tbz failed"
+	[ -z "$local_package" ] && {
+		fetch_package $latest_pv ||
+			fail "Fetch for ${latest_pv}.tbz failed"; }
 fi
 
 # Ignore if no old port exists
@@ -2703,6 +2723,8 @@ if [ -z "$use_package" ]; then
 	eval pm_make_s -DNO_DEPENDS install $port_log_args ||
 		install_failed $new_port
 else
+	[ -n "$local_package" ] && ppd=${local_package%/Latest*}/All
+
 	echo "===>>> Installing package"
 	pkg_add --no-deps --force ${ppd}/${latest_pv}.tbz ||
 		install_failed ${latest_pv}.tbz


More information about the svn-src-user mailing list