summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archbuild.in3
-rw-r--r--lib/common.sh90
-rw-r--r--makechrootpkg.in7
-rw-r--r--mkarchroot.in18
4 files changed, 50 insertions, 68 deletions
diff --git a/archbuild.in b/archbuild.in
index 38fb8bf..8e272a1 100644
--- a/archbuild.in
+++ b/archbuild.in
@@ -51,7 +51,7 @@ if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then
[[ -d $copy ]] || continue
msg2 "Deleting chroot copy '$(basename "${copy}")'..."
- lock_open_write 9 "$copy.lock" "Locking chroot copy '$copy'"
+ lock 9 "$copy.lock" "Locking chroot copy '$copy'"
if [[ "$(stat -f -c %T "${copy}")" == btrfs ]]; then
{ type -P btrfs && btrfs subvolume delete "${copy}"; } &>/dev/null
@@ -68,6 +68,7 @@ if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then
"${chroots}/${repo}-${arch}/root" \
"${base_packages[@]}" || abort
else
+ lock 9 "${chroots}/${repo}-${arch}/root.lock" "Locking clean chroot"
setarch ${arch} arch-nspawn \
-C "@pkgdatadir@/pacman-${repo}.conf" \
-M "@pkgdatadir@/makepkg-${arch}.conf" \
diff --git a/lib/common.sh b/lib/common.sh
index 9f537c7..c6c5993 100644
--- a/lib/common.sh
+++ b/lib/common.sh
@@ -107,48 +107,76 @@ in_array() {
}
##
-# usage : lock_open_write( $fd, $path.lock, $wait_message )
+# usage : get_full_version( [$pkgname] )
+# return : full version spec, including epoch (if necessary), pkgver, pkgrel
##
-lock_open_write() {
+get_full_version() {
+ # set defaults if they weren't specified in buildfile
+ pkgbase=${pkgbase:-${pkgname[0]}}
+ epoch=${epoch:-0}
+ if [[ -z $1 ]]; then
+ if [[ $epoch ]] && (( ! $epoch )); then
+ echo $pkgver-$pkgrel
+ else
+ echo $epoch:$pkgver-$pkgrel
+ fi
+ else
+ for i in pkgver pkgrel epoch; do
+ local indirect="${i}_override"
+ eval $(declare -f package_$1 | sed -n "s/\(^[[:space:]]*$i=\)/${i}_override=/p")
+ [[ -z ${!indirect} ]] && eval ${indirect}=\"${!i}\"
+ done
+ if (( ! $epoch_override )); then
+ echo $pkgver_override-$pkgrel_override
+ else
+ echo $epoch_override:$pkgver_override-$pkgrel_override
+ fi
+ fi
+}
+
+##
+# usage : lock( $fd, $file, $message )
+##
+lock() {
local fd=$1
- local path=$2
- local msg=$3
+ local file=$2
+ local mesg=$3
# Only reopen the FD if it wasn't handed to us
- if [[ "$(readlink -f /dev/fd/$fd)" != "$(readlink -f "${path}")" ]]; then
- mkdir -p "${path%/*}"
- eval "exec $fd>${path}"
+ if [[ "$(readlink -f /dev/fd/$fd)" != "$(readlink -f "$file")" ]]; then
+ mkdir -p "${file%/*}"
+ eval "exec $fd>"'"$file"'
fi
if ! flock -n $fd; then
- stat_busy "$msg"
+ stat_busy "$mesg"
flock $fd
stat_done
fi
}
##
-# usage : lock_open_read( $fd, $path.lock, $wait_message )
+# usage : slock( $fd, $file, $message )
##
-lock_open_read() {
+slock() {
local fd=$1
- local path=$2
- local msg=$3
+ local file=$2
+ local mesg=$3
# Only reopen the FD if it wasn't handed to us
- if [[ "$(readlink -f /dev/fd/$fd)" != "$(readlink -f "${path}")" ]]; then
- mkdir -p "${path%/*}"
- eval "exec $fd>${path}"
+ if [[ "$(readlink -f /dev/fd/$fd)" != "$(readlink -f "$file")" ]]; then
+ mkdir -p "${file%/*}"
+ eval "exec $fd>"'"$file"'
fi
+ eval "exec $fd>"'"$file"'
if ! flock -sn $fd; then
- stat_busy "$msg"
+ stat_busy "$mesg"
flock -s $fd
stat_done
fi
}
-
##
# usage : lock_close( $fd )
##
@@ -156,31 +184,3 @@ lock_close() {
local fd=$1
eval "exec $fd>&-"
}
-
-##
-# usage : get_full_version( [$pkgname] )
-# return : full version spec, including epoch (if necessary), pkgver, pkgrel
-##
-get_full_version() {
- # set defaults if they weren't specified in buildfile
- pkgbase=${pkgbase:-${pkgname[0]}}
- epoch=${epoch:-0}
- if [[ -z $1 ]]; then
- if [[ $epoch ]] && (( ! $epoch )); then
- echo $pkgver-$pkgrel
- else
- echo $epoch:$pkgver-$pkgrel
- fi
- else
- for i in pkgver pkgrel epoch; do
- local indirect="${i}_override"
- eval $(declare -f package_$1 | sed -n "s/\(^[[:space:]]*$i=\)/${i}_override=/p")
- [[ -z ${!indirect} ]] && eval ${indirect}=\"${!i}\"
- done
- if (( ! $epoch_override )); then
- echo $pkgver_override-$pkgrel_override
- else
- echo $epoch_override:$pkgver_override-$pkgrel_override
- fi
- fi
-}
diff --git a/makechrootpkg.in b/makechrootpkg.in
index a0941b4..b68dc0a 100644
--- a/makechrootpkg.in
+++ b/makechrootpkg.in
@@ -120,15 +120,12 @@ umask 0022
chroottype=$(stat -f -c %T "$chrootdir")
# Lock the chroot we want to use. We'll keep this lock until we exit.
-# Note this is the same FD number as in mkarchroot
-lock_open_write 9 "$copydir.lock" \
- "Waiting for existing lock on chroot copy to be released: [$copy]"
+lock 9 "$copydir.lock" "Locking chroot copy [$copy]"
if [[ ! -d $copydir ]] || $clean_first; then
# Get a read lock on the root chroot to make
# sure we don't clone a half-updated chroot
- lock_open_read 8 "$chrootdir/root.lock" \
- "Waiting for existing lock on clean chroot to be released"
+ slock 8 "$chrootdir/root.lock" "Locking clean chroot"
stat_busy "Creating clean working copy [$copy]"
if [[ "$chroottype" == btrfs ]]; then
diff --git a/mkarchroot.in b/mkarchroot.in
index 68db64c..970bbb9 100644
--- a/mkarchroot.in
+++ b/mkarchroot.in
@@ -49,29 +49,13 @@ else
cache_dirs=(${cache_dir})
fi
-# {{{ functions
-chroot_lock () {
- # Only reopen the FD if it wasn't handed to us
- if [[ $(readlink -f /dev/fd/9) != "${working_dir}.lock" ]]; then
- exec 9>"${working_dir}.lock"
- fi
-
- # Lock the chroot. Take note of the FD number.
- if ! flock -n 9; then
- stat_busy "Locking chroot"
- flock 9
- stat_done
- fi
-}
-# }}}
-
umask 0022
[[ -e $working_dir ]] && die "Working directory '$working_dir' already exists"
mkdir -p "$working_dir"
-chroot_lock
+lock 9 "${working_dir}.lock" "Locking chroot"
if [[ $(stat -f -c %T "$working_dir") == btrfs ]]; then
rmdir "$working_dir"