123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #!/bin/bash
- # Test Script for task re-execution
- #
- # Copyright 2012 Intel Corporation
- #
- # SPDX-License-Identifier: GPL-2.0-or-later
- #
- # DESCRIPTION
- # This script is intended to address issues for re-execution of
- # tasks. The test results are saved in ./reexeclogs. Force build
- # logs are saved with prefix "force". Build failure logs are saved with
- # prefix "failed". Log files with prefix "initial" are used to save
- # initial build logs for each recipe. Log files with prefix "clean" are
- # used to save logs of clean task after testing for a recipe is finished.
- #
- targets=`bitbake -s | cut -d " " -f 1`
- LOGS=./reexeclogs
- mkdir -p $LOGS
- # Clear sstate files for specified recipe
- function clearsstate {
- target=$1
- sstate_dir=`bitbake $target -e | grep "^SSTATE_DIR=" | cut -d "\"" -f 2`
- sstate_pkgspec=`bitbake $target -e | grep "^SSTATE_PKGSPEC=" | cut -d "\"" -f 2`
- sstasks=`bitbake $target -e | grep "^SSTATETASKS=" | cut -d "\"" -f 2`
- for sstask in $sstasks
- do
- sstask=${sstask:3}
- case $sstask in
- populate_sysroot) sstask="populate-sysroot"
- ;;
- populate_lic) sstask="populate-lic"
- ;;
- package_write_ipk) sstask="deploy-ipk"
- ;;
- package_write_deb) sstask="deploy-deb"
- ;;
- package_write_rpm) sstask="deploy-rpm"
- ;;
- package) sstask="package"
- ;;
- deploy) sstask="deploy"
- ;;
- *)
- ;;
- esac
- echo "Removing ${sstate_dir}/${sstate_pkgspec}*_${sstask}.tgz* for $target"
- rm -rf ${sstate_dir}/${sstate_pkgspec}*_${sstask}.tgz*
- done
- }
- # Function to re-execute specified task of recipe
- function testit {
- target=$1
- task=$2
- task=`echo $task | sed 's/_setscene//'`
- if [ -f $LOGS/force.$target.$task ]; then
- return
- fi
- case $task in
- clean|build|cleansstate|cleanall|package|cleansstate2|package_write|package_write_ipk|package_write_rpm|package_write_deb|fetch|populate_lic) return;;
- fetchall|devshell|buildall|listtasks|checkuri|checkuriall) return;;
- esac
- echo "Attempting target $target, task $task"
- echo "Initial build"
- bitbake $target -c cleansstate > $LOGS/initial.$target.$task
- bitbake $target >> $LOGS/initial.$target.$task
- clearsstate $target >> $LOGS/initial.$target.$task
- echo "Re-execution build"
- bitbake $target -c $task -f > $LOGS/force.$target.$task
- if [ "$?" != 0 ]; then
- echo "FAILURE for $target $task"
- cp $LOGS/force.$target.$task $LOGS/failed.$target.$task
- bitbake $target -c clean > $LOGS/clean.$target.$task
- else
- bitbake $target >> $LOGS/force.$target.$task
- if [ "$?" != 0 ]; then
- echo "FAILURE2 for $target $task"
- cp $LOGS/force.$target.$task $LOGS/failed.$target.$task
- bitbake $target -c clean > $LOGS/clean.$target.$task
- fi
- fi
- echo "Done"
- }
- # Go through the recipe list and these recipes' task list
- # Then re-execute them
- for target in $targets; do
- # Remove log messages from bitbake output
- case $target in
- Summary*|WARNING*|Loading*|Loaded*|Package*|=====*) continue;;
- esac
- tasks=`bitbake $target -c listtasks | grep ^do_ | sed s/do_//`
- for task in $tasks; do
- testit $target $task
- done
- done
|