Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37596748
en ru br
Репозитории ALT
S:20020731-alt1
5.1: 20020731-alt1
4.1: 20020731-alt1
4.0: 20020731-alt1
www.altlinux.org/Changes

Группа :: Система/Основа
Пакет: etc-update

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: etc-update-user.patch
Скачать


--- etc-update-20020731/etc-update.bak	2002-07-31 20:43:21 +0800
+++ etc-update-20020731/etc-update	2006-07-01 16:58:53 +0800
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 # Copyright 2002 Gentoo Technologies, Inc.
 # Distributed under the terms of the GNU General Public License, v2 or later
 # Authors: (C) Jochem Kossen 2002, (C) Leo Lipelis 2002
@@ -10,14 +10,17 @@
 # file anymore. It also means settings will be saved during upgrading.
 #
 configfile="/etc/etc-updaterc"
-configdirs="/etc /usr/share/config"
-
+configdirs="/etc"
+runtimedir="$TMPDIR"
+myname="${0##*/}"
 #
 # Source the configurationfile
 #
 if [ -e $configfile ]; then
 	source $configfile
 fi
+test  -z "$runtimedir" && runtimedir="/tmp"
+configdirs="$configdirs $*"
 
 #
 # Make sure required variables are defined
@@ -32,16 +35,16 @@
 #
 # Find all "rpmnew" configuration files.
 #
-cfg_files=`find $configdirs -iname '*.rpmnew'`
+#cfg_files=`find $configdirs -iname '*.rpmnew'`
 
 #
 # Ask which one of the given two files to install
 #
 rm_extra_file() {
-	old=$1
-	new=$2
+	old="$1"
+	new="$2"
 	
-	show_diff $old $new
+	show_diff "$old" "$new"
 	menu1
 	
 	# read and echo 1 char from stdin
@@ -50,22 +53,26 @@
 	case $input in
 	1)
 		echo "*** upgrading to $new ..."
-		mv $mv_opts $new $old
+		mv "$mv_opts" "$new" "$old"
 		;;
 	2)
 		echo "*** keeping $old ..."
-		rm $rm_opts $new
+		rm "$rm_opts" "$new"
 		;;
 	3)
-		merge_files $old $new
-		install_merged_file $old $new
+		merge_files "$old" "$new"
+		install_merged_file "$old" "$new"
 		;;
 	4)
-		rm_extra_file $old $new
+		rm_extra_file "$old" "$new"
 		;;
 	5)
 		echo "*** skipping ..."
 		;;
+	6)
+		echo "*** bye ..."
+		exit 1
+		;;
 	*)
 		echo "!!! Please pick a valid choice next time !!!"
 		menu1
@@ -83,10 +90,11 @@
 echo "2) Keep existing $old"
 echo "3) Merge the two files"
 echo "4) Show the difference between the two files again"
-echo "  OR"
 echo "5) Skip (keep all files)"
+echo "  OR"
+echo "6) Quit etc-update"
 echo
-echo -n "Type (1, 2, 3, 4 or 5): "									
+echo -n "Type (1, 2, 3, 4, 5 or 6): "									
 }
 
 #
@@ -110,9 +118,9 @@
 # Install merged file
 #
 install_merged_file() {
-	old=$1
-	merged=$1.merged
-	new=$2
+	old="$1"
+	merged="$1.merged"
+	new="$2"
 
 	menu2
 	# read and echo 1 char from stdin
@@ -121,21 +129,21 @@
 	case $input in
 	1)
 		echo "*** upgrading to $merged ..."
-		chmod --reference=$old $merged
-		mv $mv_opts $merged $old
-		rm $rm_opts $new
+		chmod --reference="$old" "$merged"
+		mv "$mv_opts" "$merged" "$old"
+		rm "$rm_opts" "$new"
 		;;
 	2)
-		show_diff $old $merged
-		install_merged_file $old $new
+		show_diff "$old" "$merged"
+		install_merged_file "$old" "$new"
 		;;
 	3)
-		merge_files $old $new
-		install_merged_file $old $new
+		merge_files "$old" "$new"
+		install_merged_file "$old" "$new"
 		;;
 	4)
 		echo "*** keeping original file ..."
-		rm $rm_opts $merged $new
+		rm "$rm_opts" "$merged" "$new"
 		;;
 	5)
 		echo "*** skipping ..."
@@ -143,11 +151,11 @@
 	6)
 		echo "*** going back to previous menu ..."
 		echo
-		if [ -e $merged ]; then
+		if [ -e "$merged" ]; then
 			echo "*** an (old?) merged file exists. It will be removed ..."
-			rm $rm_opts $merged
+			rm "$rm_opts" "$merged"
 		fi
-		rm_extra_file $old $new
+		rm_extra_file "$old" "$new"
 		;;
 	*)
 		echo "!!! Please pick a valid choice next time !!!"
@@ -163,14 +171,14 @@
 	echo
 	if [ "`echo $pager`" ]; then
 		(echo "*** showing difference between $1 and $2" && echo && \
-		`echo $diff_command | sed \
-		-e s@%file1@$1@g \
-		-e s@%file2@$2@g` ) | $pager
+		eval `echo $diff_command | sed \
+		-e "s@%file1@\"$1\"@g" \
+		-e "s@%file2@\"$2\"@g"` ) | $pager
 	else
 		echo "*** showing difference between $1 and $2" && echo
-		`echo $diff_command | sed \
-		-e s@%file1@$1@g \
-		-e s@%file2@$2@g`
+		eval `echo $diff_command | sed \
+		-e "s@%file1@\"$1\"@g" \
+		-e "s@%file2@\"$2\"@g"`
 	fi
 }
 
@@ -178,9 +186,9 @@
 # Merge two files
 #
 merge_files() {
-	old=$1
-	merged=$1.merged
-	new=$2
+	old="$1"
+	merged="$1.merged"
+	new="$2"
 
 	echo
 	echo "*** merging $old with $new ..."
@@ -189,30 +197,44 @@
 		echo
 		echo "*** an (old?) merged file already exists. It will be removed ..."
 		echo
-		rm $rm_opts $merged
+		rm "$rm_opts" "$merged"
 	fi
 
 	# echo the help message for the merge command if it's defined
 	if [ "`echo $merge_helpmessage`" ]; then
 		echo
-		echo $merge_helpmessage
+		echo "$merge_helpmessage"
 	fi
 
 	# execute the merge command
 	echo
-	`echo $merge_command |sed \
-	-e s@%merged@$merged@g \
-	-e s@%orig@$old@g \
-	-e s@%new@$new@g`
+	eval `echo $merge_command |sed \
+	-e "s@%merged@\"$merged\"@g" \
+	-e "s@%orig@\"$old\"@g" \
+	-e "s@%new@\"$new\"@g"`
 }
 
 #
 # Run the script
 #
-for new_full_path in $cfg_files; do
-	file=${new_full_path##*/}
-	old_full_path=${new_full_path%/*}/${file%.rpmnew}
-
-	rm_extra_file ${old_full_path} ${new_full_path}
-done
+find $configdirs -iname '*.rpmnew' -o -iname '*.rpmsave' > $runtimedir/$myname.$$ 2>/dev/null
+trap "rm -f $runtimedir/$myname.$$" KILL INT QUIT EXIT
+while read -u 10 new_full_path; do
+	file="${new_full_path##*/}"
+        if [ "`echo "$new_full_path" | grep rpmnew 2>&1`" ]; then
+            old_full_path="${new_full_path%/*}/${file%.rpmnew}"
+        elif [ "`echo "$new_full_path" | grep rpmsave 2>&1`" ]; then
+            old_full_path="${new_full_path%/*}/${file%.rpmsave}"
+        fi
+        if [ -e "$old_full_path" -a -e "$new_full_path" ]; then
+            if cmp "$old_full_path" "$new_full_path"; then
+                touch -r "$new_full_path" "$old_full_path"
+                chmod --reference="$new_full_path" "$old_full_path"
+		mv -f "$new_full_path" "$old_full_path"
+            else
+ 		rm_extra_file "$old_full_path" "$new_full_path"
+            fi
+        fi
+done 10< $runtimedir/$myname.$$
+rm -f $runtimedir/$myname.$$
 echo "*** script finished ..."
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin