template: pallier les problèmes d'I/O
This commit is contained in:
parent
28487e0240
commit
ee33699608
@ -22,7 +22,12 @@ et \$2 vaudra alors 'file'
|
||||
si un fichier \${2#.}.local existe (e.g 'file.ext.local'), prendre ce fichier à
|
||||
la place comme source
|
||||
|
||||
Ajouter file au tableau userfiles"
|
||||
Ajouter file au tableau userfiles
|
||||
|
||||
retourner:
|
||||
- 0 en cas de copie avec succès
|
||||
- 2 si la source n'existe pas
|
||||
- 3 si une erreur I/O s'est produite lors de la copie"
|
||||
function template_copy_replace() {
|
||||
local src="$1" dest="$2"
|
||||
local srcdir srcname lsrcname
|
||||
@ -37,8 +42,28 @@ function template_copy_replace() {
|
||||
lsrcname="${srcname#.}.local"
|
||||
[ -e "$srcdir/$lsrcname" ] && src="$srcdir/$lsrcname"
|
||||
|
||||
[ -e "$src" ] || return 2
|
||||
|
||||
userfiles+=("$dest")
|
||||
cp -P "$src" "$dest"
|
||||
local have_backup
|
||||
if [ -e "$dest" ]; then
|
||||
# copie de sauvegarde avant
|
||||
if ! cp -P --preserve=all "$dest" "$dest.bck.$$"; then
|
||||
rm "$dest.bck.$$"
|
||||
return 3
|
||||
fi
|
||||
have_backup=1
|
||||
fi
|
||||
if ! cp -P "$src" "$dest"; then
|
||||
rm "$dest"
|
||||
if [ -n "$have_backup" ]; then
|
||||
# restaurer la sauvegarde en cas d'erreur
|
||||
cp -P --preserve=all "$dest.bck.$$" "$dest" &&
|
||||
rm "$dest.bck.$$"
|
||||
fi
|
||||
return 3
|
||||
fi
|
||||
[ -n "$have_backup" ] && rm "$dest.bck.$$"
|
||||
return 0
|
||||
}
|
||||
|
||||
@ -51,7 +76,13 @@ et \$2 vaudra alors 'file'
|
||||
si un fichier \${1#.}.local existe (e.g 'file.ext.local'), prendre ce fichier à
|
||||
la place comme source
|
||||
|
||||
Ajouter file au tableau userfiles"
|
||||
Ajouter file au tableau userfiles
|
||||
|
||||
retourner:
|
||||
- 0 en cas de copie avec succès
|
||||
- 1 si le fichier existait déjà
|
||||
- 2 si la source n'existe pas
|
||||
- 3 si une erreur I/O s'est produite lors de la copie"
|
||||
function template_copy_missing() {
|
||||
local src="$1" dest="$2"
|
||||
local srcdir srcname lsrcname
|
||||
@ -63,15 +94,33 @@ function template_copy_missing() {
|
||||
dest="$srcdir/$dest"
|
||||
fi
|
||||
|
||||
userfiles+=("$dest")
|
||||
if [ ! -e "$dest" ]; then
|
||||
lsrcname="${srcname#.}.local"
|
||||
[ -e "$srcdir/$lsrcname" ] && src="$srcdir/$lsrcname"
|
||||
lsrcname="${srcname#.}.local"
|
||||
[ -e "$srcdir/$lsrcname" ] && src="$srcdir/$lsrcname"
|
||||
|
||||
cp -P "$src" "$dest"
|
||||
return 0
|
||||
[ -e "$src" ] || return 2
|
||||
|
||||
userfiles+=("$dest")
|
||||
[ -e "$dest" ] && return 1
|
||||
|
||||
if ! cp -P "$src" "$dest"; then
|
||||
# ne pas garder le fichier en cas d'erreur de copie
|
||||
rm "$dest"
|
||||
return 3
|
||||
fi
|
||||
return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
function: template_ioerror "\
|
||||
tester si une erreur de copie s'est produite lors de l'appel à
|
||||
template_copy_missing() ou template_copy_replace(), par exemple en cas de
|
||||
dépassement de capacité du disque ou si le fichier source n'existe pas
|
||||
|
||||
il faut appeler cette fonction avec la valeur de retour de ces fonctions, e.g
|
||||
template_copy_missing file
|
||||
template_ioerror $? && die"
|
||||
function template_ioerror() {
|
||||
local r="${1:-$?}"
|
||||
[ $r -ge 2 ]
|
||||
}
|
||||
|
||||
function: template_dump_vars "\
|
||||
@ -219,8 +268,13 @@ function _template_can_process() {
|
||||
esac
|
||||
}
|
||||
|
||||
function: template_process_userfiles "\
|
||||
retourner:
|
||||
- 0 en cas de traitement avec succès des fichiers
|
||||
- 3 si une erreur I/O s'est produite lors du traitement d'un des fichiers"
|
||||
function template_process_userfiles() {
|
||||
local awkscript sedscript workfile userfile
|
||||
local have_backup
|
||||
ac_set_tmpfile awkscript
|
||||
ac_set_tmpfile sedscript
|
||||
template_generate_scripts "$awkscript" "$sedscript" "$@"
|
||||
@ -231,10 +285,28 @@ function template_process_userfiles() {
|
||||
if cat "$userfile" | awk -f "$awkscript" | sed -rf "$sedscript" >"$workfile"; then
|
||||
if testdiff "$workfile" "$userfile"; then
|
||||
# n'écrire le fichier que s'il a changé
|
||||
cat "$workfile" >"$userfile"
|
||||
if [ -e "$userfile" ]; then
|
||||
# copie de sauvegarde avant
|
||||
if ! cp -P --preserve=all "$userfile" "$userfile.bck.$$"; then
|
||||
rm "$userfile.bck.$$"
|
||||
return 3
|
||||
fi
|
||||
have_backup=1
|
||||
fi
|
||||
if ! cat "$workfile" >"$userfile"; then
|
||||
rm "$userfile"
|
||||
if [ -n "$have_backup" ]; then
|
||||
# restaurer la sauvegarde en cas d'erreur
|
||||
cp -P --preserve=all "$userfile.bck.$$" "$userfile" &&
|
||||
rm "$userfile.bck.$$"
|
||||
fi
|
||||
return 3
|
||||
fi
|
||||
[ -n "$have_backup" ] && rm "$userfile.bck.$$"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
ac_clean "$awkscript" "$sedscript" "$workfile"
|
||||
return 0
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user