diff options
Diffstat (limited to 'abuild.in')
-rwxr-xr-x | abuild.in | 20 |
1 files changed, 19 insertions, 1 deletions
@@ -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() { |