ajout de gconf_addline()
This commit is contained in:
parent
a362dd3d72
commit
d359e613b4
|
@ -1 +1 @@
|
|||
16
|
||||
17
|
||||
|
|
134
ulib/conf
134
ulib/conf
|
@ -6,7 +6,7 @@ uprovide conf
|
|||
urequire base
|
||||
|
||||
################################################################################
|
||||
# Gestion des fichiers de configuratio où les directives sont de la forme
|
||||
# Gestion des fichiers de configuration où les directives sont de la forme
|
||||
# 'name=value' et où les commentaires débutent par '#'. C'est typiquement le cas
|
||||
# des scripts de profile du shell
|
||||
|
||||
|
@ -342,7 +342,7 @@ function mconf_enable() {
|
|||
# convient pas pour les directives dont le nom peut apparaitre plusieurs
|
||||
# fois dans le fichier
|
||||
# Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||
# Cette fonction nécessite gawk
|
||||
# Cette fonction nécessite gawk et ignore la locale
|
||||
local conf="$1"; shift
|
||||
local section="$1"; shift
|
||||
[ -n "$*" ] || return 1
|
||||
|
@ -415,10 +415,10 @@ END {
|
|||
exit modified
|
||||
}"
|
||||
|
||||
ac_set_tmpfile tmpfile
|
||||
local tmpfile; ac_set_tmpfile tmpfile
|
||||
local mode="$(fix_mode "$conf")"
|
||||
local modified=1
|
||||
if <"$conf" >"$tmpfile" awk "$script"; then
|
||||
if <"$conf" >"$tmpfile" cawk "$script"; then
|
||||
cat "$tmpfile" >"$conf"
|
||||
modified=0
|
||||
fi
|
||||
|
@ -437,7 +437,7 @@ function mconf_disable() {
|
|||
# noms sont recherchées et commentées. Si la directive ne figure pas dans le
|
||||
# fichier, c'est un NOP.
|
||||
# Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||
# Cette fonction nécessite gawk
|
||||
# Cette fonction nécessite gawk et ignore la locale
|
||||
local conf="$1"; shift
|
||||
local section="$1"; shift
|
||||
[ -n "$*" ] || return 1
|
||||
|
@ -473,10 +473,10 @@ END {
|
|||
}
|
||||
'
|
||||
|
||||
ac_set_tmpfile tmpfile
|
||||
local tmpfile; ac_set_tmpfile tmpfile
|
||||
local mode="$(fix_mode "$conf")"
|
||||
local modified=1
|
||||
if <"$conf" >"$tmpfile" awk "$script"; then
|
||||
if <"$conf" >"$tmpfile" cawk "$script"; then
|
||||
cat "$tmpfile" >"$conf"
|
||||
modified=0
|
||||
fi
|
||||
|
@ -493,7 +493,7 @@ function mconf_append() {
|
|||
# Une ligne '$name = $value' est ajoutée à la fin de la section, qui est
|
||||
# créée si nécessaire à la fin du fichier de configuration
|
||||
# Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
||||
# Cette fonction nécessite gawk
|
||||
# Cette fonction nécessite gawk et ignore la locale
|
||||
local conf="$1"; shift
|
||||
local section="$1"; shift
|
||||
[ -n "$*" ] || return 1
|
||||
|
@ -542,10 +542,10 @@ END {
|
|||
exit modified
|
||||
}'
|
||||
|
||||
ac_set_tmpfile tmpfile
|
||||
local tmpfile; ac_set_tmpfile tmpfile
|
||||
local mode="$(fix_mode "$conf")"
|
||||
local modified=1
|
||||
if <"$conf" >"$tmpfile" awk "$script"; then
|
||||
if <"$conf" >"$tmpfile" cawk "$script"; then
|
||||
cat "$tmpfile" >"$conf"
|
||||
modified=0
|
||||
fi
|
||||
|
@ -562,7 +562,7 @@ function mconf_check() {
|
|||
# configuration, et doit être de la forme name[=value]
|
||||
# Si une valeur est spécifiée, vérifier que le fichier contient la valeur
|
||||
# correspondante. Sinon, tester uniquement la présence de la directive.
|
||||
# Cette fonction nécessite gawk
|
||||
# Cette fonction nécessite gawk et ignore la locale
|
||||
local conf="$1"; shift
|
||||
local section="$1"; shift
|
||||
[ -n "$*" ] || return 1
|
||||
|
@ -607,5 +607,115 @@ END {
|
|||
}
|
||||
exit 0
|
||||
}"
|
||||
<"$conf" awk "$script"
|
||||
<"$conf" cawk "$script"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Gestion de fichiers de configuration générique
|
||||
|
||||
function gconf_addline() {
|
||||
# USAGE
|
||||
# gconf_addline configfile -a BEGIN -z END NEWLINE
|
||||
# Dans le fichier de configuration $1, ajouter la ligne NEWLINE entre les lignes
|
||||
# BEGIN et END.
|
||||
# -a BEGIN
|
||||
# Spécifier une expression pour matcher une ligne de type BEGIN. Les
|
||||
# lignes sont matchées dans l'ordre, i.e. avec '-a 1 -a 2', il faut
|
||||
# d'abord trouver la ligne 1 puis la ligne 2, sinon, le test n'est pas
|
||||
# concluant.
|
||||
# -t LINE
|
||||
# Si après avoir matché toutes les lignes BEGIN, la ligne LINE est
|
||||
# rencontrée, alors considérer que la ligne à rajouter existe déjà et
|
||||
# qu'il ne faut pas la rajouter de nouveau
|
||||
# -r LINE
|
||||
# Si après avoir matché toutes les lignes BEGIN, la ligne LINE est
|
||||
# rencontrée, alors considérer que la ligne à rajouter existe et qu'il
|
||||
# faut la mettre à jour. Supprimer la ligne existante et la remplacer
|
||||
# par la nouvelle ligne.
|
||||
# -z END
|
||||
# Spécifier une expression pour la matcher la ligne de type END. Dès que
|
||||
# cette ligne est rencontrée, et si aucun des tests -t ou -r n'est
|
||||
# concluant, alors ajouter la nouvelle ligne avant celle-ci
|
||||
# Cette fonction nécessite gawk et ignore la locale
|
||||
|
||||
eval "$(utools_local)"
|
||||
local -a beginlines newlines
|
||||
local testline replaceline endline
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
-a:,--begin: beginlines \
|
||||
-t:,--test: testline= \
|
||||
-r:,--replace: replaceline= \
|
||||
-z:,--end: endline= \
|
||||
@ args -- "$@" && set -- "${args[@]}" || {
|
||||
eerror "$args"
|
||||
return 1
|
||||
}
|
||||
conf="$1"; shift
|
||||
[ -n "$conf" ] || {
|
||||
eerror "Vous devez spécifier le fichier à modifier"
|
||||
return 1
|
||||
}
|
||||
[ -f "$conf" ] || {
|
||||
eerror "$conf: fichier introuvable"
|
||||
return 1
|
||||
}
|
||||
[ $# -gt 0 ] || {
|
||||
eerror "Vous devez spécifier la ligne à rajouter"
|
||||
return 1
|
||||
}
|
||||
newlines=("$@")
|
||||
|
||||
# générer le script
|
||||
local script="$(awkdef -f beginlines[@] testline="$testline" replaceline="$replaceline" endline="$endline" newlines[@])"'
|
||||
BEGIN {
|
||||
searchindex = 1
|
||||
found = 0
|
||||
writeline = 1
|
||||
}
|
||||
function writelines_maybe() {
|
||||
if (writeline) {
|
||||
for (i = 1; i <= newlines_count; i++) {
|
||||
print newlines[i]
|
||||
}
|
||||
writeline = 0
|
||||
}
|
||||
}
|
||||
|
||||
!found && searchindex <= length(beginlines) && $0 ~ beginlines[searchindex] {
|
||||
searchindex++
|
||||
if (searchindex > length(beginlines)) {
|
||||
found = 1
|
||||
}
|
||||
print; next
|
||||
}
|
||||
found && testline != "" && $0 ~ testline {
|
||||
writeline = 0
|
||||
print; next
|
||||
}
|
||||
found && replaceline != "" && $0 ~ replaceline {
|
||||
writelines_maybe()
|
||||
next
|
||||
}
|
||||
found && endline != "" && $0 ~ endline {
|
||||
writelines_maybe()
|
||||
searchindex = 1
|
||||
found = 0
|
||||
writeline = 1
|
||||
print; next
|
||||
}
|
||||
{ print }
|
||||
'
|
||||
#edebug "$script"
|
||||
|
||||
# traiter le fichier
|
||||
local tmpfile; ac_set_tmpfile tmpfile
|
||||
local mode="$(fix_mode "$conf")"
|
||||
local modified=1
|
||||
if <"$conf" >"$tmpfile" cawk "$script"; then
|
||||
cat "$tmpfile" >"$conf"
|
||||
modified=0
|
||||
fi
|
||||
unfix_mode "$conf" "$mode"
|
||||
ac_clean "$tmpfile"
|
||||
return $modified
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue