#!/bin/sh

. /lib/partman/definitions.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="/var/lib/partman/devices/=dev=md=${NUMBER}"
		DEVNODE="/dev/md/${NUMBER}"
	else
		DEVICE="/var/lib/partman/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
