#!/bin/sh
#Copyright: 2026 Aitor <aitor@genuen.org>
#License: CC0-1.0
#Comment: oneshot; invoke with: sv once mountnfs.sh

exec 2>&1

ebegin() { [ "${VERBOSE:-}" = no ] || echo "$@"; }
eend() { r=${1:-0}; shift || true; [ "$r" -eq 0 ] || [ "${VERBOSE:-}" = no ] || echo "$*" >&2; return "$r"; }
einfo() { [ "${VERBOSE:-}" = no ] || echo "$@"; }
ewarn() { echo "$@" >&2; }
eerror() { echo "$@" >&2; }

/usr/lib/runit-services/stage1/sv once networking || true

. /lib/init/vars.sh
. /lib/init/mount-functions.sh

do_wait_async_mount() {
	waitnfs=
	for file in $(fstab_files); do
		if [ -f "$file" ]; then
			while read DEV MTPT FSTYPE OPTS REST; do
				case "$DEV" in
				  ""|\#*) continue ;;
				esac
				case "$OPTS" in
				  noauto|*,noauto|noauto,*|*,noauto,*) continue ;;
				esac
				case "$FSTYPE" in
				  nfs|nfs4|smbfs|cifs|coda|ncp|ncpfs|ceph) ;;
				  *) continue ;;
				esac
				case "$MTPT" in
				  /usr/local|/usr/local/*) ;;
				  /usr|/usr/*) waitnfs="$waitnfs $MTPT" ;;
				  /var|/var/*) waitnfs="$waitnfs $MTPT" ;;
				esac
			done < "$file"
		fi
	done

	TIMEOUT=900
	for mountpt in $waitnfs; do
		ebegin "Waiting for $mountpt"
		while ! mountpoint -q $mountpt; do
			sleep 0.1
			TIMEOUT=$(( $TIMEOUT - 1 ))
			if [ $TIMEOUT -le 0 ]; then
				eend 1
				break
			fi
		done
		if [ $TIMEOUT -gt 0 ]; then
			eend 0
		fi
	done
}

if [ no != "$ASYNCMOUNTNFS" ]; then
	do_wait_async_mount
else
	FROMINITD=yes /etc/network/if-up.d/mountnfs
fi
exit 0
