svn commit: r226957 - user/dougb/portmaster

Doug Barton dougb at FreeBSD.org
Mon Oct 31 08:23:22 UTC 2011


Author: dougb
Date: Mon Oct 31 08:23:22 2011
New Revision: 226957
URL: http://svn.freebsd.org/changeset/base/226957

Log:
  Add a feature to allow users to list files that should be preserved
  across upgrades.

Modified:
  user/dougb/portmaster/portmaster

Modified: user/dougb/portmaster/portmaster
==============================================================================
--- user/dougb/portmaster/portmaster	Mon Oct 31 03:47:23 2011	(r226956)
+++ user/dougb/portmaster/portmaster	Mon Oct 31 08:23:22 2011	(r226957)
@@ -3672,6 +3672,18 @@ if [ -n "$upg_port" -o -n "$ro_upg_port"
 
 	# Could be empty if -o
 	if [ -n "$upg_port" ]; then
+		case " $PM_PRESERVE_PORTS " in
+		*" $portdir "*)
+			preserve_port=`echo $portdir | sed 's#[-+/\.]#_#g'`
+			eval preserve_port_files="\$${preserve_port}_files"
+			preserve_dir=`mktemp -d ${TMPDIR}/d-${PM_PARENT_PID}-${preserve_port}`
+			for file in $preserve_port_files; do
+				cp -p $file ${preserve_dir}/ ||
+				    fail "Cannot copy $file, which is in \$${preserve_port}_files"
+			done
+			unset preserve_port files
+		esac
+
 		pm_sv "Running pkg_delete for $upg_port"
 		pm_pkg_delete_s -f $upg_port
 	fi
@@ -3733,6 +3745,34 @@ else
 		install_failed ${latest_pv}.tbz
 	fi
 fi
+
+for file in $preserve_port_files; do
+	mv $file ${file}-new
+	mv ${preserve_dir}/${file##*/} $file
+	oldmd5="MD5:`md5 -q $file`"
+
+	newcon=`pm_mktemp contents`
+	while read left right; do
+		case "$left" in
+		@cwd)		short_file="${file#${right}/}" ;;
+		$short_file)	found_it=found_it ; continue;;
+		@comment)	if [ -n "$found_it" ]; then
+					echo -e "${short_file}-new\n$left $right"
+					echo -e "$short_file\n at comment $oldmd5"
+					unset found_it
+					continue
+				fi ;;
+		esac
+		echo "$left $right" 
+	done < $pdb/$new_port/+CONTENTS > $newcon
+	mv $newcon $pdb/$new_port/+CONTENTS
+	unset file oldmd5 newcon left right short_file
+done
+if [ -n "$preserve_dir" ]; then
+	rmdir $preserve_dir 2>/dev/null
+	unset preserve_dir
+fi
+
 echo ''
 
 [ "$PM_DEL_BUILD_ONLY" = doing_build_only_dep ] &&


More information about the svn-src-user mailing list