From feebbfbfe7654c7dd83cc96f98a61705687233a9 Mon Sep 17 00:00:00 2001 From: Valentin Lab Date: Thu, 1 Sep 2022 21:33:46 +0200 Subject: [PATCH] fix: [vps] make ``nextcloud upgrade`` change ``compose.yml`` in more scenarii Signed-off-by: Valentin Lab --- bin/vps | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/bin/vps b/bin/vps index 354ecd0..4fa3d1a 100755 --- a/bin/vps +++ b/bin/vps @@ -87,45 +87,56 @@ compose:get-compose-yml() { decorator._mangle_fn compose:get-compose-yml export -f compose:get-compose-yml + compose:has-container-project-myc() { local projects projects=$(docker:running-container-projects) || return 1 [[ $'\n'"$projects"$'\n' == *$'\n'"myc"$'\n'* ]] } + compose:file:value-change() { - local key="$1" value="$2" first=1 count=0 diff="" + local key="$1" value="$2" + yaml:file:value-change "$(compose:get-compose-yml)" "$key" "$value" || exit 1 +} +export -f compose:file:value-change + + +yaml:file:value-change() { + local file="$1" key="$2" value="$3" first=1 count=0 diff="" ( - COMPOSE_YML_FILE=$(compose:get-compose-yml) || exit 1 - export COMPOSE_YML_FILE - cd "${COMPOSE_YML_FILE%/*}" + cd "${file%/*}" while read-0 hunk; do if [ -n "$first" ]; then diff+="$hunk" first= continue fi - [[ "$hunk" =~ $'\n'"+"[[:space:]]+"${key##*.}:" ]] && { + if [[ "$hunk" =~ $'\n'"+"[[:space:]]+"${key##*.}:" ]]; then ((count++)) diff+="$hunk" >&2 - } + else + : + # echo "discarding:" >&2 + # e "$hunk" | prefix " | " >&2 + fi done < <( export DEBUG= settmpdir YQ_TEMP - cp "${COMPOSE_YML_FILE}" "$YQ_TEMP/compose.yml" && + cp "${file}" "$YQ_TEMP/compose.yml" && yq -i ".${key} = \"${value}\"" "$YQ_TEMP/compose.yml" && - diff -u1 "${COMPOSE_YML_FILE}" "$YQ_TEMP/compose.yml" | - sed -r "s/^(@@.*)$/\x00\1/g;s%^(\+\+\+) [^\t]+%\1 ${COMPOSE_YML_FILE}%g" + sed -ri 's/^([^# ])/\n\0/g' "$YQ_TEMP/compose.yml" && + diff -u0 -Z "${file}" "$YQ_TEMP/compose.yml" | + sed -r "s/^(@@.*)$/\x00\1/g;s%^(\+\+\+) [^\t]+%\1 ${file}%g" + printf "\0" ) if [[ "$count" == 0 ]]; then - err "No change made to 'compose.yml'." + err "No change made to '$file'." return 1 fi if [[ "$count" != 1 ]]; then - err "compose file change request seems dubious and was refused." - if [ -n "$DEBUG" ]; then - e "$diff" | prefix " | " - fi + err "compose file change request seems dubious and was refused:" + e "$diff" | prefix " | " >&2 return 1 fi echo Applying: >&2 @@ -133,7 +144,7 @@ compose:file:value-change() { patch <<<"$diff" ) || exit 1 } -export -f compose:file:value-change +export -f yaml:file:value-change type:is-mailcow() {