#!/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
}

[ $# -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
    ;;
*)
    help
    exit 1
    ;;
esac
