#!/usr/bin/env bash
#
# Copyright OpenEmbedded Contributors
#
# SPDX-License-Identifier: GPL-2.0-only
#

help ()
{
    base=`basename $0`
    echo -e "Usage: $base command"
    echo "Avaliable commands:"
    echo -e "\texport <file.conf>: export and lock down the AUTOPR values from the PR service into a file for release."
    echo -e "\timport <file.conf>: import the AUTOPR values from the exported file into the PR service."
}

clean_cache()
{
    s=`bitbake -e | grep ^CACHE= | cut -f2 -d\"`
    if [ "x${s}" != "x" ]; then
        rm -rf ${s}
    fi
}

do_export ()
{
    file=$1
    [ "x${file}" == "x" ] && help && exit 1
    rm -f ${file}

    clean_cache
    bitbake -R conf/prexport.conf -p
    s=`bitbake -R conf/prexport.conf -e | grep ^PRSERV_DUMPFILE= | cut -f2 -d\"`
    if [ "x${s}" != "x" ];
    then
       [ -e $s ] && mv -f $s $file && echo "Exporting to file $file succeeded!"
       return 0
    fi
    echo "Exporting to file $file failed!"
    return 1
}

do_import ()
{
    file=$1
    [ "x${file}" == "x" ] && help && exit 1

    clean_cache
    bitbake -R conf/primport.conf -R $file -p
    ret=$?
    [ $ret -eq 0 ] && echo "Importing from file $file succeeded!" || echo "Importing from file $file failed!"
    return $ret
}

do_migrate_localcount ()
{
    df=`bitbake -R conf/migrate_localcount.conf -e | \
                grep ^LOCALCOUNT_DUMPFILE= | cut -f2 -d\"`
    if [ "x${df}" == "x" ];
    then
        echo "LOCALCOUNT_DUMPFILE is not defined!"
        return 1
    fi

    rm -rf $df
    clean_cache
    echo "Exporting LOCALCOUNT to AUTOINCs..."
    bitbake -R conf/migrate_localcount.conf -p
    [ ! $? -eq 0 ] && echo "Exporting to file $df failed!" && exit 1

    if [ -e $df ];
    then
        echo "Exporting to file $df succeeded!"
    else
        echo "Exporting to file $df failed!"
        exit 1
    fi
    
    echo "Importing generated AUTOINC entries..."
    [ -e $df ] && do_import $df

    if [ ! $? -eq 0 ]
    then
        echo "Migration from LOCALCOUNT to AUTOINCs failed!"
        return 1
    fi

    echo "Migration from LOCALCOUNT to AUTOINCs succeeded!"
    return 0
}

[ $# -eq 0 ] && help  && exit 1

case $2 in
*.conf|*.inc)
    ;;
*)
    echo ERROR: $2 must end with .conf or .inc!
    exit 1
    ;;
esac

case $1 in
export)
    do_export $2
    ;;
import)
    do_import $2
    ;;
migrate_localcount)
    do_migrate_localcount
    ;;
*)
    help
    exit 1
    ;;
esac
