#!/bin/sh

. /lib/partman/definitions.sh

for dev in $DEVICES/*; do
    [ -d "$dev" ] || continue
    cd $dev
    partitions=
    open_dialog PARTITIONS
    while { read_line num id size type fs path name; [ "$id" ]; }; do
	[ "$fs" != free ] || continue
        partitions="$partitions $id,$num"
    done
    close_dialog
    
    for part in $partitions; do
        id=${part%,*}
        num=${part#*,}
	[ -f $id/method -a -f $id/format ] || continue
	method=$(cat $id/method)
	if [ "$method" = swap ]; then
	    if 
		[ -f $id/formatted -a $id/formatted -nt $id/method ]
	    then
		continue
	    fi
	    log "Try to format swap space in $dev/$id"
	    template=partman-basicfilesystems/progress_swap_formatting
	    open_dialog PARTITION_INFO $id
	    read_line x1 x2 x3 x4 x5 device x6
	    close_dialog
	    db_subst $template PARTITION "$num"
	    db_subst $template DEVICE $(humandev $(cat device))
	    name_progress_bar $template
	    open_dialog CREATE_FILE_SYSTEM $id linux-swap
	    read_line status
	    close_dialog
	    sync
	    if [ "$status" != OK ]; then
		db_progress START 0 3 partman/text/formatting
		db_progress INFO $template
		db_progress SET 1
		if
		    log-output -t partman --pass-stdout mkswap $device >/dev/null
		then
		    sync
		    status=OK
		else
		    status=failed
		fi
		db_progress STOP
	    fi
	    
	    if [ "$status" != OK ]; then
		db_subst partman-basicfilesystems/create_swap_failed TYPE linux-swap
		db_subst partman-basicfilesystems/create_swap_failed PARTITION "$num"
		db_subst partman-basicfilesystems/create_swap_failed DEVICE $(humandev $(cat device))
		db_input critical partman-basicfilesystems/create_swap_failed || true
		db_go || true
		exit 1
	    fi
	    >$id/formatted
	fi
    done
done
