diff options
Diffstat (limited to 'libs/common')
-rwxr-xr-x | libs/common | 202 |
1 files changed, 112 insertions, 90 deletions
diff --git a/libs/common b/libs/common index b1d2f571..43fe3b08 100755 --- a/libs/common +++ b/libs/common @@ -73,17 +73,39 @@ download_wrapper() { shift local uris=($@) - # TODO: Add support for curl, in addition - # to wget, for compatibility reasons - wget_options=( - --config=/dev/null - --secure-protocol=PFS - --directory-prefix="${download_dir}" - --continue - -- + local wget_options=( + '--config=/dev/null' + '--secure-protocol=PFS' + "--directory-prefix=$download_dir" + '--continue' + '--' ) - wget "${wget_options[@]}" "${uris[@]}" + local curl_options=( + '-q' + '--continue-at -' + '--remote-name' + '--retry 20' + '--ssl' + '--tlsv1.2' + '--' + ) + + if hash wget > /dev/null 2>&1; then + + wget "${wget_options[@]}" "${uris[@]}" + + elif hash curl > /dev/null 2>&1; then + ( + cd "$download_dir" + + curl "${curl_options[@]}" "${uris[@]}" + ) + else + printf '\n%s\n\n' 'Error: Neither wget nor curl were found' 1>&2 + + return 1 + fi } diff_patch_file() { @@ -91,24 +113,24 @@ diff_patch_file() { local patch_file_path="$2" # TODO: Improve handling of filenames to avoid gotchas w/ \n, \t, etc. - local filename_in_diff="$(sed -rne 's/^-{3}\s+([^ \r\n]*).*/\1/p' "${patch_file_path}")" + local filename_in_diff="$(sed -rne 's/^-{3}\s+([^ \r\n]*).*/\1/p' "$patch_file_path")" local source_file_path - if ! ( grep -E '^-{3}.*/' "${patch_file_path}" >/dev/null 2>&1 ); then - source_file_path="${repository_path}/${filename_in_diff}" + if ! ( grep -E '^-{3}.*/' "$patch_file_path" >/dev/null 2>&1 ); then + source_file_path="$repository_path/$filename_in_diff" else - source_file_path="${repository_path}/${filename_in_diff##*/}" + source_file_path="$repository_path/${filename_in_diff##*/}" fi - patch "${source_file_path}" "${patch_file_path}" + patch "$source_file_path" "$patch_file_path" } path_wildcard_expand() { local path=$@ # Evaluation fails with unescaped whitespaces. - path=$( printf '%s\n' "$path" | sed "s/ /\\\ /g" ) + path=$(printf '%s\n' "$path" | sed "s/ /\\\ /g") eval "arguments_list "$path"" } @@ -117,8 +139,8 @@ file_checksum_create() { local path=$1 local checksum_path="$path.$CHECKSUM" - local name=$( basename "$path" ) - local directory_path=$( dirname "$path" ) + local name=$(basename "$path") + local directory_path=$(dirname "$path") ( cd "$directory_path" @@ -130,12 +152,12 @@ file_checksum_check() { local path=$1 local checksum_path="$path.$CHECKSUM" - local name=$( basename "$path" ) - local directory_path=$( dirname "$path" ) + local name=$(basename "$path") + local directory_path=$(dirname "$path") - if ! [ -f "$checksum_path" ] + if ! [[ -f "$checksum_path" ]] then - printf '%s\n' 'Could not verify file checksum!' >&2 + printf 1>&2 '%s\n' 'Could not verify file checksum!' return 1 fi @@ -150,7 +172,7 @@ file_signature_create() { local signature_path="$path.$DSIG" - if [ -z "$RELEASE_KEY" ] + if [[ -z "$RELEASE_KEY" ]] then return 0 fi @@ -163,9 +185,9 @@ file_signature_check() { local signature_path="$path.$DSIG" - if ! [ -f "$signature_path" ] + if ! [[ -f "$signature_path" ]] then - printf '%s\n' 'Could not verify file signature!' >&2 + printf 1>&2 '%s\n' 'Could not verify file signature!' return 1 fi @@ -195,7 +217,7 @@ file_exists_check() { directory_filled_check() { local path=$1 - if [ -z "$( ls -A "$path" 2> /dev/null )" ] + if [[ -z "$(ls -A "$path" 2> /dev/null)" ]] then return 1 else @@ -206,29 +228,29 @@ directory_filled_check() { archive_files_create() { local source_path="$1" - local directory="$(basename "${source_path}")" - local tarfiles_path="${source_path}/${DOTTARFILES}" - local revision_path="${source_path}/${DOTREVISION}" - local version_path="${source_path}/${DOTVERSION}" - local epoch_path="${source_path}/${DOTEPOCH}" - local rnd_seed_path="${source_path}/${DOTRNDSEED}" + local directory="$(basename "$source_path")" + local tarfiles_path="$source_path/$DOTTARFILES" + local revision_path="$source_path/$DOTREVISION" + local version_path="$source_path/$DOTVERSION" + local epoch_path="$source_path/$DOTEPOCH" + local rnd_seed_path="$source_path/$DOTRNDSEED" - # Files in "${tarfiles_path}" are NUL terminated. + # Files in "$tarfiles_path" are NUL terminated. # `tr '\0' '\n'` for human-readable output. - if git_check "${source_path}"; then - git_files "${source_path}" > "${tarfiles_path}" - printf '%s\0' "${DOTTARFILES}" >> "${tarfiles_path}" + if git_check "$source_path"; then + git_files "$source_path" > "$tarfiles_path" + printf '%s\0' "$DOTTARFILES" >> "$tarfiles_path" else - find "${source_path}" -print0 | env LC_ALL='C.UTF-8' sort -z | sed -z "1d;s,^${source_path}/\\?,,;/^${DOTTARFILES}\$/d" > "${tarfiles_path}" + find "$source_path" -print0 | env LC_ALL='C.UTF-8' sort -z | sed -z "1d;s,^$source_path/\\?,,;/^$DOTTARFILES\$/d" > "$tarfiles_path" fi - for dotfile in "${revision_path}" \ - "${version_path}" \ - "${epoch_path}" \ - "${rnd_seed_path}" + for dotfile in "$revision_path" \ + "$version_path" \ + "$epoch_path" \ + "$rnd_seed_path" do - if [[ -f "${dotfile}" ]]; then - printf '%s\0' ".${dotfile##*.}" >> "${tarfiles_path}" + if [[ -f "$dotfile" ]]; then + printf '%s\0' ".${dotfile##*.}" >> "$tarfiles_path" fi done } @@ -236,10 +258,10 @@ archive_files_create() { archive_files_date() { local source_path="$1" - local epoch_path="${source_path}/${DOTEPOCH}" + local epoch_path="$source_path/$DOTEPOCH" - if [[ -n "${SOURCE_DATE_EPOCH}" ]]; then - find "${source_path}" -execdir touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" {} + + if [[ -n "$SOURCE_DATE_EPOCH" ]]; then + find "$source_path" -execdir touch --no-dereference --date="@$SOURCE_DATE_EPOCH" {} + fi } @@ -248,24 +270,24 @@ archive_create() { local source_path="$2" local directory="$3" - local tarfiles_path="${source_path}/${DOTTARFILES}" - local directory_path="$(dirname "${archive_path}")" + local tarfiles_path="$source_path/$DOTTARFILES" + local directory_path="$(dirname "$archive_path")" - mkdir -p "${directory_path}" + mkdir -p "$directory_path" - if [[ -z "${directory}" ]]; then - directory="$(basename "${source_path}")" + if [[ -z "$directory" ]]; then + directory="$(basename "$source_path")" fi - archive_files_create "${source_path}" - archive_files_date "${source_path}" + archive_files_create "$source_path" + archive_files_date "$source_path" local tar_options=( --create --xz - --file="${archive_path}" - --files-from="${tarfiles_path}" - --transform="s,^,${directory}/,S" + --file="$archive_path" + --files-from="$tarfiles_path" + --transform="s,^,$directory/,S" --no-recursion --warning=no-filename-with-nuls --null @@ -275,7 +297,7 @@ archive_create() { ) ( - cd "${source_path}" + cd "$source_path" tar "${tar_options[@]}" ) } @@ -284,31 +306,31 @@ archive_extract() { local archive_path="$1" local destination_path="$2" - if [[ -z "${destination_path}" ]]; then - destination_path="$(dirname "${archive_path}")" + if [[ -z "$destination_path" ]]; then + destination_path="$(dirname "$archive_path")" fi - tar -xf "${archive_path}" -ps -C "${destination_path}" + tar -xf "$archive_path" -ps -C "$destination_path" } rootfs_files_create() { local source_path="$1" - local directory="$(basename "${source_path}")" - local tarfiles_path="${source_path}/${DOTTARFILES}" + local directory="$(basename "$source_path")" + local tarfiles_path="$source_path/$DOTTARFILES" - # Files in "${tarfiles_path}" are NUL terminated. + # Files in "$tarfiles_path" are NUL terminated. # `tr '\0' '\n'` for human-readable output. - execute_root find "${source_path}" -print0 | env LC_ALL='C.UTF-8' sort -z | sed -z "1d;s,^${source_path}/\\?,,;/^${DOTTARFILES}\$/d" > "${tarfiles_path}" + execute_root find "$source_path" -print0 | env LC_ALL='C.UTF-8' sort -z | sed -z "1d;s,^$source_path/\\?,,;/^$DOTTARFILES\$/d" > "$tarfiles_path" } rootfs_files_date() { local source_path="$1" - local epoch_path="${source_path}/${DOTEPOCH}" + local epoch_path="$source_path/$DOTEPOCH" - if [[ -n "${SOURCE_DATE_EPOCH}" ]]; then - execute_root find "${source_path}" -execdir touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" {} + + if [[ -n "$SOURCE_DATE_EPOCH" ]]; then + execute_root find "$source_path" -execdir touch --no-dereference --date="@$SOURCE_DATE_EPOCH" {} + fi } @@ -317,23 +339,23 @@ rootfs_create() { local source_path="$2" local directory="$3" - local tarfiles_path="${source_path}/${DOTTARFILES}" - local directory_path="$(dirname "${rootfs_path}")" + local tarfiles_path="$source_path/$DOTTARFILES" + local directory_path="$(dirname "$rootfs_path")" - mkdir -p "${directory_path}" + mkdir -p "$directory_path" - if [[ -z "${directory}" ]]; then - directory="$(basename "${source_path}")" + if [[ -z "$directory" ]]; then + directory="$(basename "$source_path")" fi - rootfs_files_create "${source_path}" - rootfs_files_date "${source_path}" + rootfs_files_create "$source_path" + rootfs_files_date "$source_path" local tar_options=( --create --xz - --file="${rootfs_path}" - --files-from="${tarfiles_path}" + --file="$rootfs_path" + --files-from="$tarfiles_path" --no-recursion --warning=no-filename-with-nuls --null @@ -343,12 +365,12 @@ rootfs_create() { ) ( - cd "${source_path}" + cd "$source_path" execute_root tar "${tar_options[@]}" ) - execute_root chmod 644 "${rootfs_path}" - execute_root chown "${USER}:${USER}" "${rootfs_path}" + execute_root chmod 644 "$rootfs_path" + execute_root chown "$USER:$USER" "$rootfs_path" } requirements() { @@ -357,11 +379,11 @@ requirements() { for requirement in "$@" do - requirement_path=$( which "$requirement" || true ) + requirement_path=$(which "$requirement" || true) - if [ -z "$requirement_path" ] + if [[ -z "$requirement_path" ]] then - printf '%s\n' "Missing requirement: $requirement" >&2 + printf 1>&2 '%s\n' "Missing requirement: $requirement" exit 1 fi done @@ -374,11 +396,11 @@ requirements_root() { for requirement in "$@" do # We need to keep stdout output to show the command. - requirement_path=$( execute_root which "$requirement" || true ) + requirement_path=$(execute_root which "$requirement" || true) - if [ -z "$requirement_path" ] + if [[ -z "$requirement_path" ]] then - printf '%s\n' "Missing requirement: $requirement" >&2 + printf 1>&2 '%s\n' "Missing requirement: $requirement" exit 1 fi done @@ -392,7 +414,7 @@ arguments_concat() { for argument in "$@" do - if ! [ -z "$concat" ] + if [[ -n "$concat" ]] then concat="$concat""$delimiter""$argument" else @@ -404,18 +426,18 @@ arguments_concat() { } execute_root() { - local sudo=$( which sudo 2> /dev/null || true ) + local sudo=$(which sudo 2> /dev/null || true) local arguments - printf '%s' 'Running command as root: ' >&2 - printf '%b\n' "$*" >&2 + printf 1>&2 '%s' 'Running command as root: ' + printf 1>&2 '%b\n' "$*" - if ! [ -z "$sudo" ] + if [[ -n "$sudo" ]] then sudo "$@" else # Quote arguments for eval through su. - arguments=$( printf '%q ' "$@" ) + arguments=$(printf '%q ' "$@") su -c "$arguments" fi } |