git: 3693d9140e05 - main - rc: ignore .pkgsave files

From: Warner Losh <imp_at_FreeBSD.org>
Date: Wed, 15 Mar 2023 03:08:27 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=3693d9140e05aba9942232df13468f51a6cde136

commit 3693d9140e05aba9942232df13468f51a6cde136
Author:     Mina Galić <me+git@igalic.co>
AuthorDate: 2023-03-15 02:52:15 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2023-03-15 02:52:15 +0000

    rc: ignore .pkgsave files
    
    The local parts of rc already skip .sample files; we add .pkgsave to the
    list, and add logic for base.
    
    Thanks to @RhodiumToad for getting this started.
    
    Differential Revision: https://reviews.freebsd.org/D27962
    Reviewed by: imp
    Pull Request: https://github.com/freebsd/freebsd-src/pull/662
---
 libexec/rc/rc      |  9 ++++++---
 libexec/rc/rc.subr | 15 ++++++++++++++-
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/libexec/rc/rc b/libexec/rc/rc
index f021251bbd81..8ae048b67c1b 100644
--- a/libexec/rc/rc
+++ b/libexec/rc/rc
@@ -94,7 +94,9 @@ fi
 # Do a first pass to get everything up to $early_late_divider so that
 # we can do a second pass that includes $local_startup directories
 #
-files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null`
+unset system_rc
+find_system_scripts
+files=`rcorder ${skip} ${skip_firstboot} ${system_rc} 2>/dev/null`
 
 _rc_elem_done=' '
 for _rc_elem in ${files}; do
@@ -106,7 +108,7 @@ for _rc_elem in ${files}; do
 	esac
 done
 
-unset files local_rc
+unset files local_rc system_rc
 
 # Now that disks are mounted, for each dir in $local_startup
 # search for init scripts that use the new rc.d semantics.
@@ -122,7 +124,8 @@ if [ -e ${firstboot_sentinel} ]; then
 	skip_firstboot=""
 fi
 
-files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} 2>/dev/null`
+find_system_scripts
+files=`rcorder ${skip} ${skip_firstboot} ${system_rc} ${local_rc} 2>/dev/null`
 for _rc_elem in ${files}; do
 	case "$_rc_elem_done" in
 	*" $_rc_elem "*)	continue ;;
diff --git a/libexec/rc/rc.subr b/libexec/rc/rc.subr
index e21504248749..1c01f1cfd071 100644
--- a/libexec/rc/rc.subr
+++ b/libexec/rc/rc.subr
@@ -2083,7 +2083,7 @@ find_local_scripts_new() {
 		if [ -d "${dir}" ]; then
 			for file in `grep -l '^# PROVIDE:' ${dir}/* 2>/dev/null`; do
 				case "$file" in
-				*.sample) ;;
+				*.sample|*.pkgsave) ;;
 				*)	if [ -x "$file" ]; then
 						local_rc="${local_rc} ${file}"
 					fi
@@ -2094,6 +2094,19 @@ find_local_scripts_new() {
 	done
 }
 
+find_system_scripts() {
+	system_rc=''
+	for file in /etc/rc.d/*; do
+		case "${file##*/}" in
+		*.pkgsave) ;;
+		*)	if [ -x "$file" ]; then
+				system_rc="${system_rc} ${file}"
+			fi
+			;;
+		esac
+	done
+}
+
 # check_required_{before|after} command
 #	Check for things required by the command before and after its precmd,
 #	respectively.  The two separate functions are needed because some