index : builder | |
Archlinux32 build system | gitolite user |
summaryrefslogtreecommitdiff |
author | Erich Eckner <git@eckner.net> | 2017-11-01 10:28:05 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2017-11-01 10:28:05 +0100 |
commit | ad463afa2d41e42463476e43436eac224bac1de3 (patch) | |
tree | 3c51efa5929a02cbde5df72750b4843460d26edf /bin | |
parent | 05a43c23b36c4b68a246bc69fa0d699a3ec469fb (diff) |
-rwxr-xr-x | bin/build-master-status | 24 | ||||
-rwxr-xr-x | bin/calculate-dependent-packages | 16 | ||||
-rwxr-xr-x | bin/cleanup | 12 | ||||
-rwxr-xr-x | bin/common-functions | 29 | ||||
-rwxr-xr-x | bin/db-update | 4 | ||||
-rwxr-xr-x | bin/get-package-updates | 16 | ||||
-rwxr-xr-x | bin/prioritize-build-list | 4 | ||||
-rwxr-xr-x | bin/return-assignment | 4 | ||||
-rwxr-xr-x | bin/sanity-check | 20 | ||||
-rwxr-xr-x | bin/seed-build-list | 8 | ||||
-rwxr-xr-x | bin/show-dependencies | 59 | ||||
-rwxr-xr-x | bin/why-dont-you | 8 |
diff --git a/bin/build-master-status b/bin/build-master-status index 0e83d5b..a606c27 100755 --- a/bin/build-master-status +++ b/bin/build-master-status @@ -78,14 +78,14 @@ pending_packages=$( wc -l ) next_tasks=$( - ( + { cat "${work_dir}/build-list" find "${work_dir}/package-states" -maxdepth 1 -name '*.broken' -printf '%f\n' | \ sed ' s|\.\([^.]\+\)\.\([^.]\+\)\.\([^.]\+\)\.[^.]\+$| \1 \2 \3| p ' - ) | \ + } | \ sort | \ uniq -u | \ while read -r package git_revision mod_git_revision repository; do @@ -111,7 +111,7 @@ testing=$( done | \ grep -c '\.pkg\.tar\.xz$' ) || true -( +{ find "${work_dir}/package-states/" -maxdepth 1 -name '*.broken' -printf '%f\n' | \ sed 's|\.\([^.]\+\)\.\([^.]\+\)\.\([^.]\+\)\.[^.]\+$| \1 \2 \3|' | \ while read -r pkg rev mod_rev repo; do @@ -119,7 +119,7 @@ testing=$( echo "${pkg}" fi done - ( + { find "${work_dir}/build-list.loops" -maxdepth 1 -regextype grep \ -regex '.*/loop_[0-9]\+' \ -exec cat '{}' \; | \ @@ -127,10 +127,10 @@ testing=$( find "${work_dir}/package-states/" -maxdepth 1 -name '*.broken' -printf '%f\n' | \ sed 's|\(\.[^.]\+\)\{4\}||' | \ sort -u - ) | \ + } | \ sort | \ uniq -d -) | \ +} | \ sort -u > \ "${tmp_dir}/broken-packages-names" broken=$( @@ -196,7 +196,7 @@ looped_packages=$( if ${web}; then "${base_dir}/bin/calculate-dependent-packages" - ( + { printf '%s\n' \ '<html>' \ '<head>' \ @@ -232,10 +232,10 @@ if ${web}; then '</table>' \ '</body>' \ '</html>' - ) | \ + } | \ sponge "${tmp_dir}/build-master-status.html" end=$(($(date +%s)-7*24*60*60)) - ( + { [ -f "${webserver_directory}/statistics" ] && \ cat "${webserver_directory}/statistics" printf '%s ' \ @@ -253,7 +253,7 @@ if ${web}; then "${next_tasks}" | \ sed 's| $|\n|' echo "${end}" - ) | \ + } | \ sort -k1nr,1 | \ sed -n " /^${end}\$/q @@ -340,10 +340,10 @@ if ${web}; then grep -m1 "^$(str_to_regex "${sf}.")[^.]\+\.build-log\.gz\$" )" \ "$( - ( + { grep -m1 "^$(str_to_regex "${sf}") " "${work_dir}/dependent-count" || \ echo 'x ' - ) | \ + } | \ cut -d' ' -f2 )" \ "${build_error}" diff --git a/bin/calculate-dependent-packages b/bin/calculate-dependent-packages index d4791b0..4ca6bfd 100755 --- a/bin/calculate-dependent-packages +++ b/bin/calculate-dependent-packages @@ -43,10 +43,10 @@ while [ -s "${tmp_dir}/build-list" ] && [ "${sums}" != "$(sha512sum "${tmp_dir}/ sha512sum "${tmp_dir}/dependent-count" ) - ( + { sed 's|^|? |' "${tmp_dir}/build-list" sed 'p' "${tmp_dir}/dependent-count" - ) | \ + } | \ sort -k2,2 | \ uniq -uf1 | \ cut -d' ' -f2 | \ @@ -77,10 +77,10 @@ while [ -s "${tmp_dir}/build-list" ] && [ "${sums}" != "$(sha512sum "${tmp_dir}/ while read -r sf; do if [ -n "$( - ( + { sort -u "${work_dir}/package-infos/${sf}.builds" cat "${tmp_dir}/build-list.build-depends" - ) | \ + } | \ sort | \ uniq -d )" ]; then @@ -113,17 +113,17 @@ while [ -s "${tmp_dir}/build-list" ] && [ "${sums}" != "$(sha512sum "${tmp_dir}/ continue fi if [ -n "$( - ( + { sed ' s|^|'"${work_dir}"'/package-infos/| s|$|.builds| ' "${loop}" | \ xargs -r cat | \ sort -u - ( + { sed 'p' "${loop}" cat "${tmp_dir}/build-list" - ) | \ + } | \ sort | \ uniq -u | \ sed ' @@ -132,7 +132,7 @@ while [ -s "${tmp_dir}/build-list" ] && [ "${sums}" != "$(sha512sum "${tmp_dir}/ ' | \ xargs -r grep -hvx 'base\|base-devel' | \ sort -u - ) | \ + } | \ sort | \ uniq -d )" ]; then diff --git a/bin/cleanup b/bin/cleanup index 1479a9b..d0e7bee 100755 --- a/bin/cleanup +++ b/bin/cleanup @@ -19,7 +19,7 @@ fi # remove blocked/broken/locked markes of packages not on the buildlist anymore -( +{ find "${work_dir}/package-states" -maxdepth 1 \( -name '*.broken' -o -name '*.locked' -o -name '*.blocked' \) -printf '%f\n' | \ sed ' s|^\(.*\)\.\([^.]\+\)\.\([^.]\+\)\.\([^.]\+\)\.\([^.]\+\)$|state \0 \1 \2 \3 \4 \5| @@ -29,7 +29,7 @@ fi print "order " $1 "." $2 "." $3 "." $4 " " $1 " " $2 " " $3 " " $4 " blocked" print "order " $1 "." $2 "." $3 "." $4 " " $1 " " $2 " " $3 " " $4 " locked" }' "${work_dir}/build-list" -) | \ +} | \ sort -k3 | \ uniq -uf2 | \ grep '^state ' | \ @@ -39,7 +39,7 @@ fi # remove logs where package is not broken/locked anymore -( +{ find "${build_log_directory}/error" -maxdepth 1 -type f -printf '%f\n' | \ sed 's|\.[^.]\+\.build-log\.gz$||' | \ sort -u @@ -48,7 +48,7 @@ fi s|\.[^.]\+$|| p ' -) | \ +} | \ sort | \ uniq -u | \ cut -d' ' -f1 | \ @@ -63,7 +63,7 @@ find "${build_log_directory}/error" -maxdepth 1 -type f -printf '%f\n' | \ sort -k3,3 -k2r,2 | \ uniq -f2 --group=prepend | \ cut -d' ' -f1 | \ - ( + { count=0 while read -r a; do if [ -z "${a}" ]; then @@ -75,7 +75,7 @@ find "${build_log_directory}/error" -maxdepth 1 -type f -printf '%f\n' | \ fi count=$((count+1)) done - ) + } # only keep namcap logs of last 2 weeks for succeeded packages find "${build_log_directory}/success" -maxdepth 1 -type f -mtime +14 \ diff --git a/bin/common-functions b/bin/common-functions index 7f7df3d..751b86d 100755 --- a/bin/common-functions +++ b/bin/common-functions @@ -246,7 +246,7 @@ delete_old_metadata() { sort -u ) - ( + ( # the new shell is intentional # what we have echo "${current_metadata}" @@ -269,7 +269,7 @@ delete_old_metadata() { "${tmp_dir}/current-metadata" # the newest of the following should stay: - ( + { # deletion-list items cat "${work_dir}/deletion-list" # all packages in the repos @@ -281,7 +281,7 @@ delete_old_metadata() { /\//d ' done - ) | \ + } | \ sort -u | \ join -j 1 -o 2.2,2.3,2.4,2.1 - "${tmp_dir}/current-metadata" | \ sort -k4,4 > \ @@ -295,7 +295,7 @@ delete_old_metadata() { uniq -Df3 < \ "${tmp_dir}/find-newest-revisions" | \ uniq --group=append -f3 | \ - ( + { revs='' mod_revs='' opkg='' @@ -338,7 +338,7 @@ delete_old_metadata() { orepo="${repo}" opkg="${pkg}" done - ) | \ + } | \ awk '{print $4 " " $1 " " $2 " " $3}' | \ sed 'p' ) | \ @@ -475,7 +475,7 @@ remove_old_package_versions() { fi - ( + ( # the new shell is intentional tmp_dir=$(mktemp -d) trap 'rm -rf --one-file-system "${tmp_dir}"' EXIT @@ -634,17 +634,18 @@ make_source_info() { find_pkgbuilds "${package}" "${repository}" "${git_repo}" "${git_revision}" "${mod_git_revision}" - ( + ( # the new shell is intentional tmp_dir=$(mktemp -d "${work_dir}/tmp.XXXXXX") trap 'rm -rf --one-file-system "${tmp_dir}"' EXIT extract_source_directory "${git_repo}" "${git_revision}" "${mod_git_revision}" "${tmp_dir}" - ( + { cd "${tmp_dir}" makepkg --printsrcinfo - ) > \ + cd .. + } > \ "${output}" ) @@ -714,7 +715,7 @@ find_newest_of_git_revisions() { echo "${revisions}" | \ xargs -rn1 git -C "${repo}" rev-parse | \ - ( + { newest='' while read -r current; do if [ -z "${newest}" ] || \ @@ -723,7 +724,7 @@ find_newest_of_git_revisions() { fi done echo "${newest}" - ) + } } # find_package_repository_to_package $package $git_repository @@ -810,7 +811,7 @@ find_dependencies_on_build_list() { generate_package_metadata "${package}" "${git_revision}" "${mod_git_revision}" "${repository}" - ( + { cat "${work_dir}/package-infos/${package}.${git_revision}.${mod_git_revision}.${repository}.build-depends" awk '{print $1 "." $2 "." $3 "." $4}' < \ "${work_dir}/build-list" | \ @@ -820,7 +821,7 @@ find_dependencies_on_build_list() { " | \ xargs -r cat | \ sort -u - ) | \ + } | \ sort | \ uniq -d @@ -938,7 +939,7 @@ shrink_version() { find_biggest_subset_of_packages() { - ( + ( # the new shell is intentional omega="$1" keep="$2" all_builds="$3" diff --git a/bin/db-update b/bin/db-update index f304d7b..d62497e 100755 --- a/bin/db-update +++ b/bin/db-update @@ -243,7 +243,7 @@ move_packages() { # move the packages remotely via sftp - ( + { while read -r package; do if [ -z "${package}" ]; then @@ -264,7 +264,7 @@ move_packages() { done < \ "${tmp_dir}/tmp/packages" echo 'quit' - ) | \ + } | \ if ${no_action}; then sed 's|^|sftp: |' else diff --git a/bin/get-package-updates b/bin/get-package-updates index 059630a..350bc29 100755 --- a/bin/get-package-updates +++ b/bin/get-package-updates @@ -149,7 +149,7 @@ for repo in ${repo_names}; do eval repo_path='"${repo_paths__'"${repo}"'}"' eval old_repo_revision='"${old_repo_revisions__'"${repo}"'}"' eval new_repo_revision='"${new_repo_revisions__'"${repo}"'}"' - ( + { # if old revision unknown, mimic "git diff"-output # shellcheck disable=SC2154 if [ "${old_repo_revision}" = "NONE" ]; then @@ -159,7 +159,7 @@ for repo in ${repo_names}; do else git -C "${repo_path}" diff --no-renames --name-status "${old_repo_revision}" "${new_repo_revision}" fi - ) | \ + } | \ # only track changes in PKGBUILDs grep '/PKGBUILD$' | \ if [ "${repo}" = "archlinux32" ]; then @@ -260,7 +260,7 @@ echo 'apply blacklisting' black_listed='' black_listed_new=$( - ( + { git -C "${repo_paths__archlinux32}" archive "$(cat "${work_dir}/archlinux32.revision.new")" -- 'blacklist' | \ tar -Ox 'blacklist' | \ sed ' @@ -270,7 +270,7 @@ black_listed_new=$( find "${work_dir}/package-infos" -maxdepth 1 -name 'lib32-*' -printf '%f\n' | \ sed 's|\(\.[^.]\+\)\{4\}$||' | \ uniq - ) | \ + } | \ sort -u ) @@ -360,7 +360,7 @@ while [ -n "${black_listed_new}" ]; do sort -u ) black_listed_new=$( - ( + { # shellcheck disable=SC2086 printf '%s\n' ${black_listed} | \ sort -k1,1 | \ @@ -373,7 +373,7 @@ while [ -n "${black_listed_new}" ]; do sort | \ uniq -c cat "${work_dir}/built-packages" - ) | \ + } | \ sort | \ uniq -d | \ awk '{print $2}' | \ @@ -417,14 +417,14 @@ fi echo 'Now actually sort it.' -( +{ # this part will have the correct build order, but all the infos are missing tsort "${work_dir}/build-order" 2> "${work_dir}/tsort.error" | \ nl -ba | \ awk '{print $1 " not-git also-not-git whatever " $2}' # this part has all the infos, but possibly the wrong order awk '{print "0 " $2 " " $3 " " $4 " " $1}' "${work_dir}/build-list.new" -) | \ +} | \ sort -k5,5 -k1nr | \ # now, we have the correct order and the infos, but in adjacent lines uniq -f4 -D | \ diff --git a/bin/prioritize-build-list b/bin/prioritize-build-list index 793086e..06d4c06 100755 --- a/bin/prioritize-build-list +++ b/bin/prioritize-build-list @@ -23,10 +23,10 @@ if ! flock -s -n 8; then exit 1 fi -( +{ sed -n "/^$1/p" "${work_dir}/build-list" sed "/^$1/d" "${work_dir}/build-list" -) | \ +} | \ sponge "${work_dir}/build-list" # Remove the lock file diff --git a/bin/return-assignment b/bin/return-assignment index 9bb4b0c..7fb6005 100755 --- a/bin/return-assignment +++ b/bin/return-assignment @@ -189,7 +189,7 @@ packages=$( find . -maxdepth 1 -name '*.pkg.tar.xz' -printf '%f\n' ) package_errors=$( - ( + { # shellcheck disable=SC2086 printf '%s\n' ${packages} | \ sed ' @@ -203,7 +203,7 @@ package_errors=$( s|$| i686| s|^|expected: | ' "${work_dir}/package-infos/$1.$2.$3.$4.packages" - ) | \ + } | \ sort -k2 | \ uniq -u -f1 ) diff --git a/bin/sanity-check b/bin/sanity-check index 37e2cd3..d329869 100755 --- a/bin/sanity-check +++ b/bin/sanity-check @@ -168,11 +168,11 @@ while [ $# -gt 0 ]; do fi errors=$( - ( + { cut -d' ' -f1 < \ "${work_dir}/build-list" cat "${work_dir}/deletion-list" - ) | \ + } | \ sort | \ uniq -d ) @@ -198,12 +198,12 @@ while [ $# -gt 0 ]; do "${tmp_dir}/messages" errors=$( - ( + { # shellcheck disable=SC2086 printf 'expected %s\n' ${repos} ls_master_mirror 'i686' | \ sed 's|^|found |' - ) | \ + } | \ sort -k2 | \ uniq -uf1 ) @@ -263,7 +263,7 @@ while [ $# -gt 0 ]; do "${tmp_dir}/" errors=$( - ( + { tar -tzf "${tmp_dir}/${repo}.db.tar.gz" | \ grep '/$' | \ sed ' @@ -277,7 +277,7 @@ while [ $# -gt 0 ]; do s|^|in_repository | ' | \ sort -u - ) | \ + } | \ sort -k2 | \ uniq -uf1 ) @@ -292,7 +292,7 @@ while [ $# -gt 0 ]; do fi errors=$( - ( + { tar -tzf "${tmp_dir}/${repo}.files.tar.gz" | \ grep '/$' | \ sed ' @@ -306,7 +306,7 @@ while [ $# -gt 0 ]; do s|^|in_repository | ' | \ sort -u - ) | \ + } | \ sort -k2 | \ uniq -uf1 ) @@ -339,7 +339,7 @@ while [ $# -gt 0 ]; do "${tmp_dir}/messages" errors=$( - ( + { if [ "${status}" = 'staging' ]; then find "${work_dir}/package-states" -name '*.done' \ -exec sed 's|^|package-state-file |' '{}' \; @@ -354,7 +354,7 @@ while [ $# -gt 0 ]; do done | \ grep '\.pkg\.tar\.xz$' | \ sed 's|^|package-file |' - ) | \ + } | \ sort -k2 | \ uniq -cf1 | \ grep -v '^\s*2\s' | \ diff --git a/bin/seed-build-list b/bin/seed-build-list index 0428e27..b865b0c 100755 --- a/bin/seed-build-list +++ b/bin/seed-build-list @@ -151,7 +151,7 @@ while read -r mirror; do if [ -z "${mirror}" ]; then continue fi - ( + { # theirs for repo in ${repos}; do curl -sS "${mirror}/${repo}/os/x86_64/${repo}.db.tar.gz" | \ @@ -172,7 +172,7 @@ while read -r mirror; do sed ' s|^\(.*\)-\([^-]\+-[^-]\+\)|ours \1-\2 \2 \1| ' - ) | \ + } | \ expand_version 3 | \ sort -k4,4 -k3Vr,3 -k1,1 | \ shrink_version 3 | \ @@ -190,10 +190,10 @@ sort -k1,1 -u "${tmp_dir}/delta-packages" | \ join -1 1 -2 5 -o 2.1,2.2,2.3,2.4,2.5 "${tmp_dir}/delta-packages" "${tmp_dir}/known-packages" >> \ "${tmp_dir}/append-packages" -( +{ awk '{print $5}' "${tmp_dir}/append-packages" cat "${tmp_dir}/delta-packages" -) | \ +} | \ sort | \ uniq -u | \ sponge "${tmp_dir}/delta-packages" diff --git a/bin/show-dependencies b/bin/show-dependencies index a4ad4f7..66ba538 100755 --- a/bin/show-dependencies +++ b/bin/show-dependencies @@ -30,28 +30,28 @@ if [ $# -eq 0 ]; then sort > \ "${tmp_dir}/broken" broken=$( - ( + { find "${work_dir}/package-infos" -maxdepth 1 -name '*.build-depends' | \ sed 's|^.*/\(.*\)\(\.[^.]\+\)\{4\}|\1 \0|' | \ sort -k1,1 | \ join -1 1 -2 1 -o 1.2 - "${tmp_dir}/broken" | \ xargs -r cat - ) | \ + } | \ sort -u | \ join -1 1 -2 2 -o 2.1 - "${tmp_dir}/builds" ) broken=$( - ( - ( + { + { # shellcheck disable=SC2086 printf '%s\n' ${broken} cat "${tmp_dir}/broken" - ) | \ + } | \ sort -u cut -d' ' -f1 < \ "${work_dir}/build-list" | \ sort -u - ) | \ + } | \ sort | \ uniq -d ) @@ -65,31 +65,31 @@ if [ $# -eq 0 ]; then rm -rf --one-file-system "${tmp_dir}" trap - EXIT broken=$( - ( + { # shellcheck disable=SC2086 printf '%s\n' ${broken} - ( + { find "${webserver_directory}/graphs" -maxdepth 1 -name '*.png' -printf '%f\n' | \ sed 's|\.png$||' - ( + { cut -d' ' -f1 < \ "${work_dir}/build-list" cat "${work_dir}/deletion-list" - ) | \ + } | \ sort -u - ) | \ + } | \ sort | \ uniq -d - ) | \ + } | \ sort -u ) # shellcheck disable=SC2086 "$0" 'ALL' ${broken} - ( + { find "${webserver_directory}/graphs" -maxdepth 1 -name '*.png' # shellcheck disable=SC2086 printf "${webserver_directory}"'/graphs/%s.png\n' ${broken} ${broken} 'ALL' 'ALL' - ) | \ + } | \ sort | \ uniq -u | \ xargs -r rm @@ -128,12 +128,12 @@ sort -u "${work_dir}/build-order" | \ sort -k1,1 "${work_dir}/build-list" > \ "${tmp_dir}/build-list.sorted-by-package" -( +{ sort -k1,1 "${tmp_dir}/original-build-order" | \ join -1 1 -2 1 -o 1.1,1.2 - "${tmp_dir}/build-list.sorted-by-package" sort -k2,2 "${tmp_dir}/original-build-order" | \ join -1 2 -2 1 -o 1.1,1.2 - "${tmp_dir}/build-list.sorted-by-package" -) | \ +} | \ sort -u | \ sponge "${tmp_dir}/original-build-order" @@ -169,13 +169,13 @@ for target_package in "$@"; do sort -u > \ "${tmp_dir}/relevant-stuff" - ( + { # groups and split packages built by jobs on the build list - which are also dependencies of packages on the build-list sort -k1,1 "${tmp_dir}/original-build-order" | \ join -1 1 -2 1 -o 2.1 - "${tmp_dir}/relevant-stuff" # build list jobs themself cut -d' ' -f1 < "${work_dir}/build-list" - ) | \ + } | \ sort -u | \ sponge "${tmp_dir}/relevant-stuff" @@ -207,13 +207,12 @@ for target_package in "$@"; do awk '{print $1}' "${tmp_dir}/build-order" | \ sort -u > \ "${tmp_dir}/new" - ( + { cat \ "${tmp_dir}/original-build-order" \ "${tmp_dir}/known-split-packages" - grep -v ' base\(-devel\)\?$' "${tmp_dir}/known-groups" || \ - true - ) | \ + sed '/ base\(-devel\)\?$/d' "${tmp_dir}/known-groups" + } | \ sort -k2,2 | \ join -1 2 -2 1 -o 1.1,1.2 - "${tmp_dir}/new" | \ sponge -a "${tmp_dir}/build-order" @@ -246,47 +245,47 @@ for target_package in "$@"; do done >> \ "${tmp_dir}/knots" - ( + { sort -u "${work_dir}/deletion-list" tr ' ' '\n' < \ "${tmp_dir}/build-order" | \ sort -u - ) | \ + } | \ sort | \ uniq -d | \ xargs -r printf '3 deletion-list-package %s\n' >> \ "${tmp_dir}/knots" - ( + { awk '{print $2}' "${tmp_dir}/known-split-packages" | \ sort -u tr ' ' '\n' < \ "${tmp_dir}/build-order" | \ sort -u - ) | \ + } | \ sort | \ uniq -d | \ xargs -r printf '4 split-package %s\n' >> \ "${tmp_dir}/knots" - ( + { cat "${tmp_dir}/known-packages" tr ' ' '\n' < \ "${tmp_dir}/build-order" | \ sort -u - ) | \ + } | \ sort | \ uniq -d | \ xargs -r printf '5 package %s\n' >> \ "${tmp_dir}/knots" - ( + { awk '{print $2}' "${tmp_dir}/known-groups" | \ sort -u tr ' ' '\n' < \ "${tmp_dir}/build-order" | \ sort -u - ) | \ + } | \ sort | \ uniq -d | \ xargs -r printf '6 group %s\n' >> \ diff --git a/bin/why-dont-you b/bin/why-dont-you index a3776ab..b3d9500 100755 --- a/bin/why-dont-you +++ b/bin/why-dont-you @@ -18,10 +18,10 @@ case "${action}" in 'build') for pkg in "$@"; do - ( + { grep "^$(str_to_regex "${pkg}") " "${work_dir}/build-list" || \ >&2 printf '"%s" is not on the build list.\n' "${pkg}" - ) | \ + } | \ while read -r package git_revision mod_git_revision repository; do if package_locked_or_blocked "${package}" "${git_revision}" "${mod_git_revision}" "${repository}"; then @@ -290,12 +290,12 @@ case "${action}" in ) errors=$( - ( + { # shellcheck disable=SC2086 printf '%s\n' ${build_depends} awk '{print $3}' "${tmp_dir}/deleted.builds" | \ sort -u - ) | \ + } | \ sort | \ uniq -d | \ join -1 1 -2 3 -o 2.1,2.2,2.3 - "${tmp_dir}/deleted.builds" |