Изменён формат шаблона конфига ядра

master
Mike Khiretskiy 9 years ago
parent 8c8a1a1e59
commit 3cfa198029

@ -158,82 +158,45 @@ variable_value()
# оставить только названия параметров + "="
options_name() {
sed -r 's/^(.*=)(.*)$/\1/'
}
# преобразовать список строк в параметры для grep
grep_patterns() {
awk '{print "-e "$1}'
}
# исключить из вывода переданные шаблоны
exclude_options() {
if [[ -n $1 ]]
then
grep -v $*
else
cat
fi
}
# сохранить в выводе переданные шаблоны
keep_options() {
if [[ -n $1 ]]
then
grep $*
else
cat
fi
sed -r 's/^# (CON.*) is not set.*$/\1=/' | sed -r 's/^(CON.*=).*/\1/'
}
# преобразовать опции в синтаксис удаления параметра
remove_syntax() {
sed -r 's/^(.*=.*)$/!\1/'
sed -r 's/^(.*=).*$/!\1/'
}
# удалить выключенные параметры
discard_option_n() {
grep -v "=n$"
# преобразовать CONFIG_XXX=n -> # CONFIG_XXX is not set
n2not_set() {
sed -r 's/(CONFIG.*)=n/# \1 is not set/'
}
# оставить только выключенные параметры
keep_option_n() {
grep "=n$"
# получить разницу в конфигурационных файлах
diff_config() {
diff -u <(grep CONFIG_ $1 | sort | n2not_set) <(grep CONFIG_ $2 | sort | n2not_set)
}
# преобразовать # CONFIG_XXX is not set -> CONFIG_XXX=n
not_set2n() {
sed -r 's/# (CONFIG.*) is not set/\1=n/'
# получить разницу в параметрах конфигурационных файлов
diff_config_options() {
diff -u <(cat $1 | options_name | sort) <(cat $2 | options_name | sort)
}
# получить изменённые и новые параметры с новыми значениями
# изменённые параметры
append_options() {
diff -u $1 $2 | grep "^+[C#]" | sed 's/^.//' | not_set2n
diff_config $1 $2 | grep -e "^+CON" -e "^+# CON" | sed 's/^.//' | sort
}
# получить изменённые и удалённые параметры со старыми значениями
# удаленные параметры
removed_options() {
diff -u $1 $2 | grep "^-[C#]" | sed 's/^.//' | not_set2n
diff_config_options $1 $2 | grep -e "^-CON" | sed 's/^.//' | sort
}
# получить содержимое шаблона
diff_template_body() {
local orig_file=$1
local new_file=$2
# получаем список опций, которые стали выключенными в новом конфиге
local keep_opts=( $(append_options $orig_file $new_file | keep_option_n | options_name | grep_patterns) )
# получаем список опций, которые не изменились по значению, но возможно изменились по расположению в файле
local exclude_opts=( $(append_options $orig_file $new_file | grep_patterns) )
# сохраняем в шаблоне старые значения опций, которые изменились с пометкой на удаление
removed_options $orig_file $new_file | exclude_options ${exclude_opts[*]} | keep_options ${keep_opts[*]} | remove_syntax | sort || true
# получаем список опций, которые изменились
local exclude_opts=( $(removed_options $orig_file $new_file | options_name | grep_patterns) )
# сохраняем список опций, которые стали выключенные, но в отсутствовали в старом конфиге (оставляем только новые опции)
append_options $orig_file $new_file | exclude_options ${exclude_opts[*]} | keep_option_n | remove_syntax | sort || true
# получаем список опций, которые не изменились по значению, но возможно изменились по расположению в файле
local exclude_opts=( $(removed_options $orig_file $new_file | grep_patterns) )
# сохраняем список опций которые изменились и стали либо y либо m
append_options $orig_file $new_file | exclude_options ${exclude_opts[*]} | discard_option_n | sort || true
append_options $1 $2
removed_options $1 $2 | remove_syntax
}
# вывести заголов для шаблона

Loading…
Cancel
Save