--- etc-update-20020731/etc-update.foo 2002-07-31 14:43:21.000000000 +0200 +++ etc-update-20020731/etc-update 2003-09-13 18:55:27.000000000 +0200 @@ -32,16 +32,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 +50,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 +87,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 +115,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 +126,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 +148,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 +168,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 +183,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 +194,37 @@ 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} +find $configdirs -iname '*.rpmnew' > /var/run/etc-update.$$ +trap "rm -f /var/run/etc-update.$$" KILL INT QUIT EXIT +while read -u 10 new_full_path; do + file="${new_full_path##*/}" + old_full_path="${new_full_path%/*}/${file%.rpmnew}" - rm_extra_file ${old_full_path} ${new_full_path} -done + if cmp "${old_full_path}" "${new_full_path}"; then + mv -f "${new_full_path}" "${old_full_path}" + else + rm_extra_file "${old_full_path}" "${new_full_path}" + fi +done 10< /var/run/etc-update.$$ +rm -f /var/run/etc-update.$$ echo "*** script finished ..."