#!/bin/sh

# This script is called by ota.sh just before calling PmUpdater.
# Returning non-zero aborts the update installation.


ROOT=/rootfs
STATUS_FILE=$ROOT/var/lib/software/SessionFiles/update_status.txt
# 1.4 does not have hidden save_for_software_updates directory
OLD_SAVE_DIR=$ROOT/media/internal/save_for_software_update
OLD_SAVE_DATA_FILE=$OLD_SAVE_DIR/saved-data.tar.gz
OLD_SAVE_VAR_FILE=$OLD_SAVE_DIR/saved-var.tar.gz
SAVE_DIR=$ROOT/media/internal/.save_for_software_update
SAVE_DATA_FILE=$SAVE_DIR/saved-data.tar.gz
SAVE_VAR_FILE=$SAVE_DIR/saved-var.tar.gz
DATA_FILES="$ROOT/var/luna/data/attachments \
        $ROOT/var/luna/data/emails \
        $ROOT/var/luna/files"
          

cleanup()
{
    echo "$0: $1"
    exit 1
}


##################################################################

# Save files from var partition if updating from java-based OS.
if [ -f $ROOT/etc/event.d/java-serviceboot ]
then
    # fsck has already been run on all partitions by miniboot.sh

    # clear javadumps before dataexport runs so that any dumps it reports
    # are preserved
    rm -f $ROOT/var/log/reports/javadumps/*
    
    # call dataexport
    if [ -x $ROOT/usr/bin/dataexport ]
    then
        chroot $ROOT /usr/bin/dataexport
        if [ $? -ne 0 ]
        then
            # write an error to update_status.txt if data export fails
            # so that DM2 session reports problem to server
            echo "E0060013" > $STATUS_FILE
            cleanup "dataexport error"
        fi
    else
        echo "E0060012" > $STATUS_FILE
        cleanup "dataexport script not found"
    fi

    # remove place-holders
    rm -f $OLD_SAVE_DATA_FILE
    rm -f $OLD_SAVE_VAR_FILE

    # save files that will be migrated to the filecache partition
    mkdir -p $SAVE_DIR
    echo "$0: saving $SAVE_DATA_FILE"
    
    # use --ignore-failed-read because the files directory may not exist
    if ! tar --ignore-failed-read -cvzf $SAVE_DATA_FILE $DATA_FILES
    then
        echo "E0060012" > $STATUS_FILE
        cleanup "error saving data"
    fi

    # remove data files before saving var
    if ! rm -fR $DATA_FILES
    then
        echo "E0060012" > $STATUS_FILE
        cleanup "error removing data"
    fi

    # Save var, excluding data files and links to other partitions.
    # This tar file restores var after var is resized.  It is also used
    # by WebOS Doctor when flashing either 1.4 or the new OS.  Note that
    # this tar file includes the 1.4 dbdata directory, so WebOS Doctor
    # must exclude this directory when flashing the new OS.
    echo "$0: saving $SAVE_VAR_FILE"
    if ! tar -cvzf $SAVE_VAR_FILE \
        --exclude=$ROOT/var/lib/software/tmp \
        --exclude=$ROOT/var/lib/update \
        --exclude=$ROOT/var/log \
        --exclude=$ROOT/var/tmp \
        --exclude=$ROOT/var/palm/jail \
        $ROOT/var
    then
        # restore data files before rebooting
        tar -C / -xvzf $SAVE_DATA_FILE
        echo "E0060012" > $STATUS_FILE        
        cleanup "error saving var"
    fi
fi

echo "$0: normal exit"
exit 0
