#!/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\"`
    # Stop any active memory resident server
    bitbake -m
    # Remove cache entries since we want to trigger a full reparse
    if [ "x${s}" != "x" ]; then
        rm -f ${s}/bb_cache*.dat.*
    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 -f $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
