aboutsummaryrefslogtreecommitdiff
path: root/libs/common
diff options
context:
space:
mode:
Diffstat (limited to 'libs/common')
-rwxr-xr-xlibs/common202
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
}