correction de bugs. ajout de l'option -n
This commit is contained in:
parent
c3243fddb1
commit
0fb65ad026
42
ulib/conf
42
ulib/conf
|
@ -619,8 +619,10 @@ function gconf_addline() {
|
||||||
# Dans le fichier de configuration $1, ajouter la ligne NEWLINE entre les lignes
|
# Dans le fichier de configuration $1, ajouter la ligne NEWLINE entre les lignes
|
||||||
# BEGIN et END.
|
# BEGIN et END.
|
||||||
# -a BEGIN
|
# -a BEGIN
|
||||||
# Spécifier une expression pour matcher une ligne de type BEGIN. Les
|
# Spécifier une expression pour matcher une ligne de type BEGIN. Si
|
||||||
# lignes sont matchées dans l'ordre, i.e. avec '-a 1 -a 2', il faut
|
# cette option n'est pas spécifiée, on considère que le début de fichier
|
||||||
|
# matche la ligne BEGIN: la ligne NEWLINE est ajoutée dès que possible.
|
||||||
|
# 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
|
# d'abord trouver la ligne 1 puis la ligne 2, sinon, le test n'est pas
|
||||||
# concluant.
|
# concluant.
|
||||||
# -t LINE
|
# -t LINE
|
||||||
|
@ -633,19 +635,27 @@ function gconf_addline() {
|
||||||
# faut la mettre à jour. Supprimer la ligne existante et la remplacer
|
# faut la mettre à jour. Supprimer la ligne existante et la remplacer
|
||||||
# par la nouvelle ligne.
|
# par la nouvelle ligne.
|
||||||
# -z END
|
# -z END
|
||||||
# Spécifier une expression pour la matcher la ligne de type END. Dès que
|
# Spécifier une expression pour matcher la ligne de type END. Que cette
|
||||||
# cette ligne est rencontrée, et si aucun des tests -t ou -r n'est
|
# option soit ou non spécifiée, on considère toujours que la fin de
|
||||||
# concluant, alors ajouter la nouvelle ligne avant celle-ci
|
# fichier matche la ligne END. Ainsi, si END n'est pas trouvée, la ligne
|
||||||
|
# NEWLINE est ajoutée à la fin du fichier.
|
||||||
|
# Dès que la ligne END est rencontrée, et si aucun des tests -t ou -r
|
||||||
|
# n'est concluant, alors ajouter la nouvelle ligne avant celle-ci
|
||||||
|
# -n MAX[=1]
|
||||||
|
# Ajouter au plus MAX occurences de NEWLINE. Après avoir matché END, le
|
||||||
|
# cycle recommence, au plus MAX-1 fois. Utiliser MAX=-1 pour désactiver
|
||||||
|
# la limite
|
||||||
# Cette fonction nécessite gawk et ignore la locale
|
# Cette fonction nécessite gawk et ignore la locale
|
||||||
|
|
||||||
eval "$(utools_local)"
|
eval "$(utools_local)"
|
||||||
local -a beginlines newlines
|
local -a beginlines newlines
|
||||||
local testline replaceline endline
|
local testline replaceline endline max
|
||||||
parse_opts "${PRETTYOPTS[@]}" \
|
parse_opts "${PRETTYOPTS[@]}" \
|
||||||
-a:,--begin: beginlines \
|
-a:,--begin: beginlines \
|
||||||
-t:,--test: testline= \
|
-t:,--test: testline= \
|
||||||
-r:,--replace: replaceline= \
|
-r:,--replace: replaceline= \
|
||||||
-z:,--end: endline= \
|
-z:,--end: endline= \
|
||||||
|
-n:,--max: max= \
|
||||||
@ args -- "$@" && set -- "${args[@]}" || {
|
@ args -- "$@" && set -- "${args[@]}" || {
|
||||||
eerror "$args"
|
eerror "$args"
|
||||||
return 1
|
return 1
|
||||||
|
@ -663,14 +673,16 @@ function gconf_addline() {
|
||||||
eerror "Vous devez spécifier la ligne à rajouter"
|
eerror "Vous devez spécifier la ligne à rajouter"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
[ -n "$max" ] || max=1
|
||||||
newlines=("$@")
|
newlines=("$@")
|
||||||
|
|
||||||
# générer le script
|
# générer le script
|
||||||
local script="$(awkdef -f beginlines[@] testline="$testline" replaceline="$replaceline" endline="$endline" newlines[@])"'
|
local script="$(awkdef -f beginlines[@] testline="$testline" replaceline="$replaceline" endline="$endline" max:int="$max" newlines[@])"'
|
||||||
BEGIN {
|
BEGIN {
|
||||||
searchindex = 1
|
searchindex = 1
|
||||||
found = 0
|
found = 0
|
||||||
writeline = 1
|
writeline = 1
|
||||||
|
if (beginlines_count == 0) found = 1
|
||||||
}
|
}
|
||||||
function writelines_maybe() {
|
function writelines_maybe() {
|
||||||
if (writeline) {
|
if (writeline) {
|
||||||
|
@ -681,31 +693,37 @@ function writelines_maybe() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
!found && searchindex <= length(beginlines) && $0 ~ beginlines[searchindex] {
|
max != 0 && !found && searchindex <= length(beginlines) && $0 ~ beginlines[searchindex] {
|
||||||
searchindex++
|
searchindex++
|
||||||
if (searchindex > length(beginlines)) {
|
if (searchindex > length(beginlines)) {
|
||||||
found = 1
|
found = 1
|
||||||
}
|
}
|
||||||
print; next
|
print; next
|
||||||
}
|
}
|
||||||
found && testline != "" && $0 ~ testline {
|
max != 0 && found && writeline && testline != "" && $0 ~ testline {
|
||||||
writeline = 0
|
writeline = 0
|
||||||
print; next
|
print; next
|
||||||
}
|
}
|
||||||
found && replaceline != "" && $0 ~ replaceline {
|
max != 0 && found && writeline && replaceline != "" && $0 ~ replaceline {
|
||||||
writelines_maybe()
|
writelines_maybe()
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
found && endline != "" && $0 ~ endline {
|
max != 0 && found && writeline && endline != "" && $0 ~ endline {
|
||||||
writelines_maybe()
|
writelines_maybe()
|
||||||
searchindex = 1
|
searchindex = 1
|
||||||
found = 0
|
found = 0
|
||||||
writeline = 1
|
writeline = 1
|
||||||
|
if (max > 0) max--
|
||||||
print; next
|
print; next
|
||||||
}
|
}
|
||||||
{ print }
|
{ print }
|
||||||
|
END {
|
||||||
|
if (max != 0 && found && writeline) {
|
||||||
|
writelines_maybe()
|
||||||
|
}
|
||||||
|
}
|
||||||
'
|
'
|
||||||
#edebug "$script"
|
edebug "$script"
|
||||||
|
|
||||||
# traiter le fichier
|
# traiter le fichier
|
||||||
local tmpfile; ac_set_tmpfile tmpfile
|
local tmpfile; ac_set_tmpfile tmpfile
|
||||||
|
|
Loading…
Reference in New Issue