Commit 01bab6e2 authored by Natanael Copa's avatar Natanael Copa

abuild: implement locking of downloaded files

We need locking Since the build servers use a shared download dir
and multiple vservers might want download same file at same time.

fixes #873
parent 2419e502
......@@ -86,6 +86,9 @@ cleanup() {
msg "Uninstalling dependencies..."
$SUDO $APK del --quiet $apk_opt_wait $uninstall_after
fi
if [ -n "$CLEANUP_FILES" ]; then
rm -f $CLEANUP_FILES
fi
}
die() {
......@@ -258,7 +261,8 @@ uri_fetch() {
local d="${uri##*/}" # $(basename $uri)
local opts
[ -n "$quiet" ] && opts="-s"
[ -f "$SRCDEST/$d" ] && return 0
local lockfile="$SRCDEST/$d".lock
# fix saveas-*://* URIs
case "$uri" in
......@@ -272,6 +276,14 @@ uri_fetch() {
esac
mkdir -p "$SRCDEST"
CLEANUP_FILES="$CLEANUP_FILES $lockfile"
(
flock -n -x 200 || msg "Waiting for ${lockfile##*/}..."
flock -w 600 -x 200
[ -f "$SRCDEST/$d" ] && exit 0 # use exit since its a subshell
if [ -f "$SRCDEST/$d.part" ]; then
msg "Partial download found. Trying to resume"
opts="$opts -C -"
......@@ -289,6 +301,12 @@ uri_fetch() {
$fetcher $opts -o "$SRCDEST/$d.part" "$uri" \
&& mv "$SRCDEST/$d.part" "$SRCDEST/$d"
) 200>$lockfile
local rc=$?
rm -f "$lockfile"
return $rc
}
is_remote() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment