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
|
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
|
# 'name=value' et où les commentaires débutent par '#'. C'est typiquement le cas
|
||||||
# des scripts de profile du shell
|
# des scripts de profile du shell
|
||||||
|
|
||||||
|
@ -342,7 +342,7 @@ function mconf_enable() {
|
||||||
# convient pas pour les directives dont le nom peut apparaitre plusieurs
|
# convient pas pour les directives dont le nom peut apparaitre plusieurs
|
||||||
# fois dans le fichier
|
# fois dans le fichier
|
||||||
# Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
# 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 conf="$1"; shift
|
||||||
local section="$1"; shift
|
local section="$1"; shift
|
||||||
[ -n "$*" ] || return 1
|
[ -n "$*" ] || return 1
|
||||||
|
@ -415,10 +415,10 @@ END {
|
||||||
exit modified
|
exit modified
|
||||||
}"
|
}"
|
||||||
|
|
||||||
ac_set_tmpfile tmpfile
|
local tmpfile; ac_set_tmpfile tmpfile
|
||||||
local mode="$(fix_mode "$conf")"
|
local mode="$(fix_mode "$conf")"
|
||||||
local modified=1
|
local modified=1
|
||||||
if <"$conf" >"$tmpfile" awk "$script"; then
|
if <"$conf" >"$tmpfile" cawk "$script"; then
|
||||||
cat "$tmpfile" >"$conf"
|
cat "$tmpfile" >"$conf"
|
||||||
modified=0
|
modified=0
|
||||||
fi
|
fi
|
||||||
|
@ -437,7 +437,7 @@ function mconf_disable() {
|
||||||
# noms sont recherchées et commentées. Si la directive ne figure pas dans le
|
# noms sont recherchées et commentées. Si la directive ne figure pas dans le
|
||||||
# fichier, c'est un NOP.
|
# fichier, c'est un NOP.
|
||||||
# Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
# 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 conf="$1"; shift
|
||||||
local section="$1"; shift
|
local section="$1"; shift
|
||||||
[ -n "$*" ] || return 1
|
[ -n "$*" ] || return 1
|
||||||
|
@ -473,10 +473,10 @@ END {
|
||||||
}
|
}
|
||||||
'
|
'
|
||||||
|
|
||||||
ac_set_tmpfile tmpfile
|
local tmpfile; ac_set_tmpfile tmpfile
|
||||||
local mode="$(fix_mode "$conf")"
|
local mode="$(fix_mode "$conf")"
|
||||||
local modified=1
|
local modified=1
|
||||||
if <"$conf" >"$tmpfile" awk "$script"; then
|
if <"$conf" >"$tmpfile" cawk "$script"; then
|
||||||
cat "$tmpfile" >"$conf"
|
cat "$tmpfile" >"$conf"
|
||||||
modified=0
|
modified=0
|
||||||
fi
|
fi
|
||||||
|
@ -493,7 +493,7 @@ function mconf_append() {
|
||||||
# Une ligne '$name = $value' est ajoutée à la fin de la section, qui est
|
# 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
|
# créée si nécessaire à la fin du fichier de configuration
|
||||||
# Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
# 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 conf="$1"; shift
|
||||||
local section="$1"; shift
|
local section="$1"; shift
|
||||||
[ -n "$*" ] || return 1
|
[ -n "$*" ] || return 1
|
||||||
|
@ -542,10 +542,10 @@ END {
|
||||||
exit modified
|
exit modified
|
||||||
}'
|
}'
|
||||||
|
|
||||||
ac_set_tmpfile tmpfile
|
local tmpfile; ac_set_tmpfile tmpfile
|
||||||
local mode="$(fix_mode "$conf")"
|
local mode="$(fix_mode "$conf")"
|
||||||
local modified=1
|
local modified=1
|
||||||
if <"$conf" >"$tmpfile" awk "$script"; then
|
if <"$conf" >"$tmpfile" cawk "$script"; then
|
||||||
cat "$tmpfile" >"$conf"
|
cat "$tmpfile" >"$conf"
|
||||||
modified=0
|
modified=0
|
||||||
fi
|
fi
|
||||||
|
@ -562,7 +562,7 @@ function mconf_check() {
|
||||||
# configuration, et doit être de la forme name[=value]
|
# configuration, et doit être de la forme name[=value]
|
||||||
# Si une valeur est spécifiée, vérifier que le fichier contient la valeur
|
# 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.
|
# 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 conf="$1"; shift
|
||||||
local section="$1"; shift
|
local section="$1"; shift
|
||||||
[ -n "$*" ] || return 1
|
[ -n "$*" ] || return 1
|
||||||
|
@ -607,5 +607,115 @@ END {
|
||||||
}
|
}
|
||||||
exit 0
|
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