summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'bin/etc-update')
-rwxr-xr-xbin/etc-update413
1 files changed, 0 insertions, 413 deletions
diff --git a/bin/etc-update b/bin/etc-update
deleted file mode 100755
index 5dd5a13..0000000
--- a/bin/etc-update
+++ /dev/null
@@ -1,413 +0,0 @@
-#!/bin/bash
-# Copyright 1999-2005 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /local/data/ulm/cvs/history/var/cvsroot/gentoo-src/portage/bin/etc-update,v 1.27 2005/04/19 22:05:48 vapier Exp $
-
-# Author Brandon Low <lostlogic@gentoo.org>
-#
-# Previous version (from which I've borrowed a few bits) by:
-# Jochem Kossen <j.kossen@home.nl>
-# Leo Lipelis <aeoo@gentoo.org>
-# Karl Trygve Kalleberg <karltk@gentoo.org>
-
-export PORTAGE_CALLER="etc-update"
-
-if [ $(/usr/lib/portage/bin/portageq envvar USERLAND) = BSD ] ; then
- function sed() { gsed "$@"; }
-fi
-
-function get_config() {
- item=$1
-
- # First strip off comment lines, then grab the configuration
- # item. If there's more than one of the same configuration item,
- # then allow the last setting to take precedence.
- cut -d'#' -f1-1 /etc/etc-update.conf | \
- sed -ne "s/^ *$item *= *\([\"']\{0,1\}\)\(.*\)\1/\2/p" |sed -e '$p;d'
-}
-
-function scan() {
-
- echo "Scanning Configuration files..."
- rm -rf ${TMP}/files > /dev/null 2>&1
- mkdir ${TMP}/files || die "Failed mkdir command!" 1
- count=0
- input=0
-
- for path in ${CONFIG_PROTECT}; do if [ -d ${path} ]; then
- ofile=""
- for file in `find ${path}/ -iname "._cfg????_*" |
- sed -e "s:\(^.*/\)\(._cfg*_\)\(/.*$\):\1\2\3\%\2\%\3:" |
- sort -t'%' -k3 -k2 | cut -f1 -d'%'`; do
- rpath=`echo "${file/\/\///}" | sed -e "s:/[^/]*$::"`
- rfile=`echo "${file/\/\///}" | sed -e "s:^.*/::"`
- for mpath in ${CONFIG_PROTECT_MASK}; do
- if [[ "${rpath}" == "${mpath}"* ]]; then
- mv ${rpath}/${rfile} ${rpath}/${rfile:10}
- break
- fi
- done
- [ ! -f ${file} ] && continue
-
-
- if [[ "${ofile:10}" != "${rfile:10}" ]] ||
- [[ ${opath} != ${rpath} ]]; then
- MATCHES=0
- if [[ "${EU_AUTOMERGE}" == "yes" ]]; then
- if [ ! -e "${rpath}/${rfile}" ] || [ ! -e "${rpath}/${rfile:10}" ]; then
- MATCHES=0
- else
- diff -Bbua ${rpath}/${rfile} ${rpath}/${rfile:10} | egrep '^[+-]' | egrep -v '^[+-][\t ]*#|^--- |^\+\+\+ ' | egrep -qv '^[-+][\t ]*$'
- MATCHES=$?
- fi
- elif [[ -z `diff -Nua ${rpath}/${rfile} ${rpath}/${rfile:10}|
- grep "^[+-][^+-]"|grep -v '# .Header:.*'` ]]; then
- MATCHES=1
- fi
- if [[ "${MATCHES}" == "1" ]]; then
- echo "Automerging trivial changes in: ${rfile:10}"
- mv ${rpath}/${rfile} ${rpath}/${rfile:10}
- continue
- else
- count=${count}+1
- echo "${rpath}/${rfile:10}" > ${TMP}/files/${count}
- echo "${rpath}/${rfile}" >> ${TMP}/files/${count}
- ofile="${rfile}"
- opath="${rpath}"
- continue
- fi
- fi
-
- if [[ -z `diff -Nua ${rpath}/${rfile} ${rpath}/${ofile}|
- grep "^[+-][^+-]"|grep -v '# .Header:.*'` ]]; then
- mv ${rpath}/${rfile} ${rpath}/${ofile}
- continue
- else
- echo "${rpath}/${rfile}" >> ${TMP}/files/${count}
- ofile="${rfile}"
- opath="${rpath}"
- fi
- done
- fi; done
-
-}
-
-function sel_file() {
- local -i isfirst=0
- until [ -f ${TMP}/files/${input} ] || [ ${input} == -1 ] || [ ${input} == -3 ]; do
- local numfiles=$(ls ${TMP}/files|wc -l)
- local numwidth=${#numfiles}
- for file in $(ls ${TMP}/files|sort -n); do
- if (( ${isfirst} == 0 )); then
- isfirst=${file}
- fi
- numshow=$(printf "%${numwidth}i${PAR} " ${file})
- spacer=${numshow//?/ }
- echo -n "${numshow}"
- if (( ${mode} == 0 )); then
- spacedit=0
- for word in $(<${TMP}/files/${file}); do
- if (( ${spacedit} == 1 )); then
- echo -n "${spacer}"
- else
- spacedit=1
- fi
- echo ${word}
- done
- else
- head -n1 ${TMP}/files/${file}
- fi
- done > ${TMP}/menuitems
-
- if [ "${OVERWRITE_ALL}" == "yes" ]; then
- input=0
- else
- if (( ${mode} == 0 )); then
- echo "The following is the list of files which need updating, each
-configuration file is followed by a list of possible replacement files."
- else
- local my_title="Please select a file to update"
- fi
-
- if (( ${mode} == 0 )); then
- cat ${TMP}/menuitems
- echo "Please select a file to edit by entering the corresponding number."
- echo " (don't use -3 or -5 if you're unsure what to do)"
- echo " (-1 to exit) (-3 to auto merge all remaining files)"
- echo -n " (-5 to auto-merge AND not use 'mv -i'): "
- read input
- else
- dialog --title "${title}" --menu "${my_title}" \
- 0 0 0 $(echo -e "-1 Exit\n$(<${TMP}/menuitems)") \
- 2> ${TMP}/input
- input=$(<${TMP}/input)
- fi
- if (( ${input} == -5 )); then
- input=-3
- export mv_opts=""
- fi
- if (( ${input} == -3 )); then
- input=0
- export OVERWRITE_ALL="yes"
- fi
- fi # -3 automerge
- if (( ${input} == 0 )); then
- input=${isfirst}
- fi
- done
-}
-
-function do_file() {
- echo
- local -i my_input
- local -i fcount=0
- until (( $(wc -l < ${TMP}/files/${input}) < 2 )); do
- my_input=0
- if (( $(wc -l < ${TMP}/files/${input}) == 2 )); then
- my_input=1
- fi
- until (( ${my_input} > 0 )) && (( ${my_input} < $(wc -l < ${TMP}/files/${input}) )); do
- fcount=0
-
- if [ "${OVERWRITE_ALL}" == "yes" ]; then
- my_input=0
- else
- for line in $(<${TMP}/files/${input}); do
- if (( ${fcount} > 0 )); then
- echo -n "${fcount}${PAR} "
- echo "${line}"
- else
- if (( ${mode} == 0 )); then
- echo "Below are the new config files for ${line}:"
- else
- local my_title="Please select a file to process for ${line}"
- fi
- fi
- fcount=${fcount}+1
- done > ${TMP}/menuitems
-
- if (( ${mode} == 0 )); then
- cat ${TMP}/menuitems
- echo -n "Please select a file to process (-1 to exit this file): "
- read my_input
- else
- dialog --title "${title}" --menu "${my_title}" \
- 0 0 0 `echo -e "$(<${TMP}/menuitems)\n${fcount} Exit"` \
- 2> ${TMP}/input
- my_input=$(<${TMP}/input)
- fi
- fi # OVERWRITE_ALL
-
- if (( ${my_input} == 0 )); then
- my_input=1
- elif (( ${my_input} == -1 )); then
- input=0
- return
- elif (( ${my_input} == ${fcount} )); then
- break
- fi
- done
- if (( ${my_input} == ${fcount} )); then
- break
- fi
-
- fcount=${my_input}+1
-
- file=$(sed -e "${fcount}p;d" ${TMP}/files/${input})
- ofile=$(head -n1 ${TMP}/files/${input})
-
- do_cfg "${file}" "${ofile}"
-
- sed -e "${fcount}!p;d" ${TMP}/files/${input} > ${TMP}/files/sed
- mv ${TMP}/files/sed ${TMP}/files/${input}
-
- if (( ${my_input} == -1 )); then
- break
- fi
- done
- echo
- rm ${TMP}/files/${input}
- count=${count}-1
-}
-
-function do_cfg() {
-
- local file="${1}"
- local ofile="${2}"
- local -i my_input=0
-
- until (( ${my_input} == -1 )) || [ ! -f ${file} ]; do
- if [ "${OVERWRITE_ALL}" == "yes" ]; then
- my_input=1
- else
- showdiffcmd=$(echo "${diff_command}" |
- sed -e "s:%file1:${ofile}:" -e "s:%file2:${file}:")
-
- if [ "${using_editor}" == 0 ]; then
- (
- echo "Showing differences between ${ofile} and ${file}"
- ${showdiffcmd}
- ) | ${pager}
- else
- echo "Beginning of differences between ${ofile} and ${file}"
- ${showdiffcmd}
- echo "End of differences between ${ofile} and ${file}"
- fi
- if [ -L "${file}" ]; then
- echo
- echo "-------------------------------------------------------------"
- echo "NOTE: File is a symlink to another file. REPLACE recommended."
- echo " The original file may simply have moved. Please review."
- echo "-------------------------------------------------------------"
- echo
- fi
- echo -n "1) Replace original with update
-2) Delete update, keeping original as is
-3) Interactively merge original with update
-4) Show differences again
-Please select from the menu above (-1 to ignore this update): "
- read my_input
- fi
-
- case ${my_input} in
- 1) echo "Replacing ${ofile} with ${file}"
- mv ${mv_opts} ${file} ${ofile}
- my_input=-1
- continue
- ;;
- 2) echo "Deleting ${file}"
- rm ${rm_opts} ${file}
- continue
- ;;
- 3) do_merge "${file}" "${ofile}"
- my_input=${?}
-# [ ${my_input} == 255 ] && my_input=-1
- continue
- ;;
- 4) continue
- ;;
- *) continue
- ;;
- esac
- done
-}
-
-function do_merge() {
-
- local file="${1}"
- local ofile="${2}"
- local mfile="${2}.merged"
- local -i my_input=0
- echo "${file} ${ofile} ${mfile}"
-
- if [ -e ${mfile} ] ; then
- echo "A previous version of the merged file exists, cleaning..."
- rm ${rm_opts} ${mfile}
- fi
-
- until (( ${my_input} == -1 )); do
- echo "Merging ${file} and ${ofile}"
- `echo "${merge_command}" |
- sed -e "s:%merged:${mfile}:g" \
- -e "s:%orig:${ofile}:g" \
- -e "s:%new:${file}:g"`
- until (( ${my_input} == -1 )); do
- echo -n "1) Replace ${ofile} with merged file
-2) Show differences between merged file and original
-3) Remerge original with update
-4) Edit merged file
-5) Return to the previous menu
-Please select from the menu above (-1 to exit, losing this merge): "
- read my_input
- case ${my_input} in
- 1) echo "Replacing ${ofile} with ${mfile}"
- chmod --reference=${ofile} ${mfile}
- mv ${mv_opts} ${mfile} ${ofile}
- rm ${rm_opts} ${file}
- return 255
- ;;
- 2) ( echo "Showing differences between ${ofile} and ${mfile}"
- `echo "${diff_command}" | \
- sed -e "s:%file1:${ofile}:" \
- -e "s:%file2:${mfile}:"` ) | ${pager}
- continue
- ;;
- 3) break
- ;;
- 4) ${EDITOR:-nano -w} "${mfile}"
- continue
- ;;
- 5) rm ${rm_opts} ${mfile}
- return 0
- ;;
- *) continue
- ;;
- esac
- done
- done
- rm ${rm_opts} ${mfile}
- return 255
-}
-
-function die() {
- trap "" term
- trap "" kill
- echo "Exiting: ${1}"
- rm -rf ${TMP}
- exit ${2}
-}
-
-#
-# Run the script
-#
-scriptname=`basename $0`
-
-trap die term
-
-TMP=/tmp/$$
-rm -rf ${TMP} 2> /dev/null
-mkdir ${TMP} || die "failed mkdir command!" 1
-
-# I need the CONFIG_PROTECT value
-CONFIG_PROTECT=$(/usr/lib/portage/bin/portageq envvar CONFIG_PROTECT)
-CONFIG_PROTECT_MASK=$(/usr/lib/portage/bin/portageq envvar CONFIG_PROTECT_MASK)
-
-# load etc-config's configuration
-EU_AUTOMERGE=`get_config eu_automerge`
-rm_opts=`get_config rm_opts`
-mv_opts=`get_config mv_opts`
-cp_opts=`get_config cp_opts`
-pager=`get_config pager`
-diff_command=`get_config diff_command`
-using_editor=`get_config using_editor`
-merge_command=`get_config merge_command`
-declare -i mode=`get_config mode`
-[ -z ${mode} ] && mode=0
-[ -z "${pager}" ] && pager="cat"
-
-#echo "rm_opts: $rm_opts, mv_opts: $mv_opts, cp_opts: $cp_opts"
-#echo "pager: $pager, diff_command: $diff_command, merge_command: $merge_command"
-
-if (( ${mode} == 0 )); then
- PAR=")"
-else
- PAR=""
-fi
-
-declare -i count=0
-declare -i input=0
-declare title="Gentoolkit's etc-update tool!"
-
-scan
-
-until (( ${input} == -1 )); do
- if (( ${count} == 0 )); then
- die "Nothing left to do; exiting. :)" 0
- fi
- sel_file
- if (( ${input} != -1 )); then
- do_file
- fi
-done
-
-die "User termination!" 0