diff --git a/Library/Homebrew/utils/lock.sh b/Library/Homebrew/utils/lock.sh index 7f0638c1ac..7f2bb8b73f 100644 --- a/Library/Homebrew/utils/lock.sh +++ b/Library/Homebrew/utils/lock.sh @@ -38,14 +38,19 @@ _create_lock() { local lock_fd="$1" local name="$2" local ruby="/usr/bin/ruby" + local python="/usr/bin/python" [[ -x "$ruby" ]] || ruby="$(which ruby 2>/dev/null)" + [[ -x "$python" ]] || python="$(which python 2>/dev/null)" - if [[ -n "$ruby" ]] + if [[ -x "$ruby" ]] && "$ruby" -e "exit(RUBY_VERSION >= '1.8.7')" then "$ruby" -e "File.new($lock_fd).flock(File::LOCK_EX | File::LOCK_NB) || exit(1)" - elif [[ -n "$(which flock)" ]] + elif [[ -x "$(which flock)" ]] then flock -n "$lock_fd" + elif [[ -x "$python" ]] + then + "$python" -c "import fcntl; fcntl.flock($lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB)" else onoe "Cannot create $name lock, please avoid running Homebrew in parallel." fi