#!/bin/sh

[ -f /target/etc/fstab ] || exit 0

fstab=$(
	for i in /lib/partman/fstab.d/*; do
		[ -x "$i" ] || continue
		$i
	done |
	while read fs mp type options dump pass; do
		echo $mp $fs $type $options $dump $pass
	done |
	sort |
	while read mp fs type options dump pass; do
		case "$fs" in
		    (/dev/disk/*|/dev/fd[0-9]*|/dev/mapper/*_crypt)
			printf "%-15s %-15s %-7s %-15s %-7s %s\n" "$(mapdevfs $fs)" "${mp}" "$type" "$options" "$dump" "$pass"
			;;
		    (/*)
			dev="/var/lib/partman/devices/$(echo "$fs" | sed 's:/:=:g')"
			if [ -f "$dev/loop" ]; then
				loop="$(cat "$dev/loop")"
				if [ "$options" = defaults ]; then
					options=loop
				else
					options="loop,$options"
				fi
				printf "%-15s %-15s %-7s %-15s %-7s %s\n" "$loop" "${mp}" "$type" "$options" "$dump" "$pass"
			else
				uuid="$(PATH="/lib/udev:$PATH" vol_id -u $fs)"
				if [ "$uuid" ]; then
					printf "# %s\n" "$(mapdevfs $fs)"
					printf "%-15s %-15s %-7s %-15s %-7s %s\n" "UUID=$uuid" "${mp}" "$type" "$options" "$dump" "$pass"
				else
					printf "%-15s %-15s %-7s %-15s %-7s %s\n" "$(mapdevfs $fs)" "${mp}" "$type" "$options" "$dump" "$pass"
				fi
			fi
			;;
		esac
	done
)

echo "$fstab" >>/target/etc/fstab
