#!/bin/sh

. /lib/partman/lib/base.sh

# Check if we have RAID
if [ ! -f /proc/mdstat ]; then
	exit 0
fi

# Obtain the size of an MD device
get_size () {
	while [ -z "$(echo "$line" | grep "^md$NUMBER :")" ]; do
		read line
		[ $? -eq 1 ] && break  # EOF
	done
	read line
	size=$(echo "$line" | sed -e 's/ blocks.*//')
	# If the sed failed, the line didn't contain the size; just
	# return 0 in that case.
	if [ "$size" = "$line" ]; then
		size=0
	fi
}

# Create the raid devices
for i in $(grep ^md /proc/mdstat | grep -v inactive | \
	   sed -e 's/^\(md.*\) : active \([[:alnum:]]*\).*/\1/'); do
	NUMBER="${i#md}"
	if [ -e "/dev/md/${NUMBER}" ]; then
		DEVICE="$DEVICES/=dev=md=${NUMBER}"
		DEVNODE="/dev/md/${NUMBER}"
	else
		DEVICE="$DEVICES/=dev=md${NUMBER}"
		DEVNODE="/dev/md${NUMBER}"
	fi
	mkdir -p ${DEVICE}
	cd ${DEVICE}
	echo "$DEVNODE" > ${DEVICE}/device

	db_metaget partman-md/text/device description
	echo "${RET}" > ${DEVICE}/model

	get_size < /proc/mdstat
	sector_size=$(grep " sectors" /proc/mdstat | sed -e 's/[^0-9]\+//g')
	if [ -z "$sector_size" ]; then
		sector_size=1024
	fi
	size=$(($size * $sector_size))
	echo "$size" > ${DEVICE}/size

	open_dialog OPENED "$DEVNODE"
	read_line response
	close_dialog
	if [ "$response" = no ]; then
		open_dialog OPEN "$DEVNODE"
		read_line response
		close_dialog
		if [ "$response" = failed ]; then
			rm -rf ${DEVICE}
		fi
	fi

	open_dialog NEW_LABEL loop
	close_dialog

	open_dialog PARTITIONS
	free_space=''
	while { read_line num id size type fs path name; [ "$id" ]; }; do
		if [ "$fs" = free ]; then
			free_space=$id
			free_size=$size
		fi
	done
	close_dialog

	if [ "$free_space" ]; then
		open_dialog NEW_PARTITION primary ext2 $free_space full $free_size
		read_line num id size type fs path name
		close_dialog
		if [ "$id" ]; then
			open_dialog GET_FILE_SYSTEM $id
			read_line filesystem
			close_dialog
			if [ "$filesystem" != none ]; then
				open_dialog CHANGE_FILE_SYSTEM $id $filesystem
				close_dialog
			fi
		fi
	fi

	open_dialog DISK_UNCHANGED
	close_dialog
done

exit 0
