__ini_value: remove is_state 'nosuchfile'
Because the state 'nosuchfile' is exactly the same as 'absent', it was removed with the code connected to it. It's not important if the file exists or not - because in both cases, it contains no key-value. Also, the code if the explorer returned 'nosuchfile' was wrong: Completly overwrite the file with the assumption the file does not exist is not correct, as it can return for multiple objects of the same file and therefore, they overwrite themself.
This commit is contained in:
parent
8f687e5ce2
commit
ad736a66d0
|
@ -21,7 +21,7 @@ file="$(cat "$__object/parameter/file")"
|
|||
|
||||
# abort if no file exist
|
||||
if ! [ -f "$file" ]; then
|
||||
echo nosuchfile
|
||||
echo absent
|
||||
exit
|
||||
fi
|
||||
|
||||
|
|
|
@ -24,9 +24,8 @@ file="$(cat "$__object/parameter/file")"
|
|||
# validation check
|
||||
case "$state_should" in
|
||||
present|commented|absent)
|
||||
if [ "$state_is" != "nosuchfile" ]; then
|
||||
# Generate the basic awk struct if a file already exists
|
||||
cat <<SHELL
|
||||
# Generate the basic awk struct if a file already exists
|
||||
cat <<SHELL
|
||||
tmpfile="\$(mktemp '${file}.cdist.XXXXXXXX')"
|
||||
if [ -f '$file' ]; then
|
||||
cp -p '$file' "\$tmpfile"
|
||||
|
@ -35,94 +34,45 @@ fi
|
|||
awk -f - '$file' > "\$tmpfile" <<'AWK'
|
||||
SHELL
|
||||
|
||||
# generate the awk script and strip unnecessary things
|
||||
{
|
||||
# basic functions which everyone needs
|
||||
cat "$__type/files/common.awk"
|
||||
# generate the awk script and strip unnecessary things
|
||||
{
|
||||
# basic functions which everyone needs
|
||||
cat "$__type/files/common.awk"
|
||||
|
||||
# generate the script
|
||||
awk -v state="$state_should" '
|
||||
function parse(line) {
|
||||
if(match(line, /^[ \t]*# %code_print%$/) > 0) {
|
||||
if(state == "present")
|
||||
print "v_print()"
|
||||
else if(state == "commented")
|
||||
print "v_print_commented()"
|
||||
else
|
||||
print "print \"script compile error! cdist state " state " unkown!\" > /dev/stderr"
|
||||
}
|
||||
else print line
|
||||
# generate the script
|
||||
awk -v state="$state_should" '
|
||||
function parse(line) {
|
||||
if(match(line, /^[ \t]*# %code_print%$/) > 0) {
|
||||
if(state == "present")
|
||||
print "v_print()"
|
||||
else if(state == "commented")
|
||||
print "v_print_commented()"
|
||||
else
|
||||
print "print \"script compile error! cdist state " state " unkown!\" > /dev/stderr"
|
||||
}
|
||||
{
|
||||
if(match($0, /^[ \t]*# %codeblock_([^%]+)%$/) > 0) {
|
||||
split($2, result, "_"); type = substr(result[2], 1, length(result[2]) - 1)
|
||||
file = (ENVIRON["__type"] "/files/parts/" state "/" type ".awk")
|
||||
while((getline line < file) > 0)
|
||||
parse(line)
|
||||
close(file)
|
||||
}
|
||||
else print
|
||||
}' "$__type/files/base.awk"
|
||||
} | strip_comments
|
||||
else print line
|
||||
}
|
||||
{
|
||||
if(match($0, /^[ \t]*# %codeblock_([^%]+)%$/) > 0) {
|
||||
split($2, result, "_"); type = substr(result[2], 1, length(result[2]) - 1)
|
||||
file = (ENVIRON["__type"] "/files/parts/" state "/" type ".awk")
|
||||
while((getline line < file) > 0)
|
||||
parse(line)
|
||||
close(file)
|
||||
}
|
||||
else print
|
||||
}' "$__type/files/base.awk"
|
||||
} | strip_comments
|
||||
|
||||
# end of here-doc
|
||||
cat <<SHELL
|
||||
# end of here-doc
|
||||
cat <<SHELL
|
||||
AWK
|
||||
mv -f "\$tmpfile" '$file'
|
||||
SHELL
|
||||
|
||||
# state_is 'nosuchfile' is the same as state_should 'absent'
|
||||
elif [ "$state_should" != "absent" ]; then
|
||||
# generate the indentation string
|
||||
spaces() {
|
||||
_i="$1"
|
||||
while [ "$_i" -gt 0 ]; do
|
||||
printf " "
|
||||
_i=$((_i - 1))
|
||||
done
|
||||
echo
|
||||
}
|
||||
|
||||
# get values required for the comment field
|
||||
key="$(cat "$__object/parameter/key")"
|
||||
delimiter="$(cat "$__object/parameter/delimiter")"
|
||||
value="$(cat "$__object/parameter/value")"
|
||||
indentation="$(cat "$__object/parameter/indentation" || true)"
|
||||
i_indent="$(spaces "$indentation")"
|
||||
delimiter_space="$(cat "$__object/parameter/delimiter-space" || true)"
|
||||
i_del_space="$(spaces "$delimiter_space")"
|
||||
comment_sign="$(cut -c1 < "$__object/parameter/comment-sign")"
|
||||
|
||||
# Generate a simple shell script which just generates the file
|
||||
printf "cat <<'FILE' > '%s'\n" "$file"
|
||||
printf "%s cdist-generated file by %s/%s\n" "$comment_sign" \
|
||||
"${__type##*/}" "$__object_id"
|
||||
echo
|
||||
|
||||
# print values if available
|
||||
section="$__object/parameter/section"
|
||||
if [ -f "$section" ]; then
|
||||
cat "$section"
|
||||
echo
|
||||
fi
|
||||
comment="$__object/parameter/comment"
|
||||
if [ -f "$comment" ]; then
|
||||
printf "%s%s " "$i_indent" "$comment_sign"
|
||||
cat "$comment"
|
||||
fi
|
||||
|
||||
# print the value
|
||||
printf "%s%s%s%s%s%s%s\n" \
|
||||
"$i_indent" \
|
||||
"$(if [ "$state_should" = "commented" ]; then
|
||||
printf "%s" "$comment_sign";
|
||||
fi)" \
|
||||
"$key" "$i_del_space" "$delimiter" "$i_del_space" "$value"
|
||||
echo
|
||||
|
||||
# terminate HERE-DOC
|
||||
echo "FILE"
|
||||
fi
|
||||
# Do not threat it differently if the file does not exist. It's just
|
||||
# absent. Because multiple explorers can say the file does not exist,
|
||||
# so the file should not be completly overwritten all times.
|
||||
;;
|
||||
|
||||
*)
|
||||
|
|
Loading…
Reference in New Issue