summaryrefslogtreecommitdiff
path: root/src/lib/archive.source.sh
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-06-13 10:15:20 +0300
committerPaul Buetow <paul@buetow.org>2026-06-13 10:15:20 +0300
commitd4971998edae804c39797486be7a342d43e61e5c (patch)
tree830c008847704b40b7f45d4c7c620beed03958d6 /src/lib/archive.source.sh
parente9437367b8fc7a4cb0ffed6c0a8ba89356a3b9ad (diff)
Refactor helper modules for im0
Diffstat (limited to 'src/lib/archive.source.sh')
-rw-r--r--src/lib/archive.source.sh52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/lib/archive.source.sh b/src/lib/archive.source.sh
new file mode 100644
index 0000000..127a0c5
--- /dev/null
+++ b/src/lib/archive.source.sh
@@ -0,0 +1,52 @@
+tarball() {
+ local -r tarball_name="$1"; shift
+ local -r tarball_suffix="$TARBALL_SUFFIX"
+ local base
+ local old_tarball
+ local -a tar_opts=()
+
+ # Cleanup tarballs from previous runs for the configured suffix.
+ while IFS= read -r -d '' old_tarball; do
+ if [[ "$old_tarball" == *"$tarball_suffix" ]]; then
+ rm -f "$old_tarball"
+ fi
+ done < <(find "$DIST_DIR" -maxdepth 1 -type f -print0)
+
+ base=$(basename "$INCOMING_DIR")
+ resolve_tar_opts tar_opts
+
+ log_info "Creating tarball $(_display_path "$DIST_DIR/$tarball_name")" \
+ "from $INCOMING_DIR"
+ (
+ cd "$(dirname "$INCOMING_DIR")"
+ run_with_timeout tar "$TAR_TIMEOUT" \
+ tar "${tar_opts[@]}" -f "$DIST_DIR/$tarball_name" "$base"
+ )
+}
+
+resolve_tar_opts() {
+ local -n options_ref="$1"; shift
+ local tar_opts_decl
+
+ options_ref=()
+
+ if ! tar_opts_decl=$(declare -p TAR_OPTS 2>/dev/null); then
+ options_ref=(-c)
+ return
+ fi
+
+ case "$tar_opts_decl" in
+ declare\ -a*\ TAR_OPTS=*)
+ options_ref=("${TAR_OPTS[@]}")
+ ;;
+ *)
+ if [ -n "${TAR_OPTS:-}" ]; then
+ read -r -a options_ref <<< "$TAR_OPTS"
+ fi
+ ;;
+ esac
+
+ if (( ${#options_ref[@]} == 0 )); then
+ options_ref=(-c)
+ fi
+}