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 à
|
si un fichier \${2#.}.local existe (e.g 'file.ext.local'), prendre ce fichier à
|
||||||
la place comme source
|
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() {
|
function template_copy_replace() {
|
||||||
local src="$1" dest="$2"
|
local src="$1" dest="$2"
|
||||||
local srcdir srcname lsrcname
|
local srcdir srcname lsrcname
|
||||||
@ -37,8 +42,28 @@ function template_copy_replace() {
|
|||||||
lsrcname="${srcname#.}.local"
|
lsrcname="${srcname#.}.local"
|
||||||
[ -e "$srcdir/$lsrcname" ] && src="$srcdir/$lsrcname"
|
[ -e "$srcdir/$lsrcname" ] && src="$srcdir/$lsrcname"
|
||||||
|
|
||||||
|
[ -e "$src" ] || return 2
|
||||||
|
|
||||||
userfiles+=("$dest")
|
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
|
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 à
|
si un fichier \${1#.}.local existe (e.g 'file.ext.local'), prendre ce fichier à
|
||||||
la place comme source
|
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() {
|
function template_copy_missing() {
|
||||||
local src="$1" dest="$2"
|
local src="$1" dest="$2"
|
||||||
local srcdir srcname lsrcname
|
local srcdir srcname lsrcname
|
||||||
@ -63,15 +94,33 @@ function template_copy_missing() {
|
|||||||
dest="$srcdir/$dest"
|
dest="$srcdir/$dest"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
userfiles+=("$dest")
|
|
||||||
if [ ! -e "$dest" ]; then
|
|
||||||
lsrcname="${srcname#.}.local"
|
lsrcname="${srcname#.}.local"
|
||||||
[ -e "$srcdir/$lsrcname" ] && src="$srcdir/$lsrcname"
|
[ -e "$srcdir/$lsrcname" ] && src="$srcdir/$lsrcname"
|
||||||
|
|
||||||
cp -P "$src" "$dest"
|
[ -e "$src" ] || return 2
|
||||||
return 0
|
|
||||||
|
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
|
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 "\
|
function: template_dump_vars "\
|
||||||
@ -219,8 +268,13 @@ function _template_can_process() {
|
|||||||
esac
|
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() {
|
function template_process_userfiles() {
|
||||||
local awkscript sedscript workfile userfile
|
local awkscript sedscript workfile userfile
|
||||||
|
local have_backup
|
||||||
ac_set_tmpfile awkscript
|
ac_set_tmpfile awkscript
|
||||||
ac_set_tmpfile sedscript
|
ac_set_tmpfile sedscript
|
||||||
template_generate_scripts "$awkscript" "$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 cat "$userfile" | awk -f "$awkscript" | sed -rf "$sedscript" >"$workfile"; then
|
||||||
if testdiff "$workfile" "$userfile"; then
|
if testdiff "$workfile" "$userfile"; then
|
||||||
# n'écrire le fichier que s'il a changé
|
# 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
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
ac_clean "$awkscript" "$sedscript" "$workfile"
|
ac_clean "$awkscript" "$sedscript" "$workfile"
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user