test-reexec 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #!/bin/bash
  2. # Test Script for task re-execution
  3. #
  4. # Copyright 2012 Intel Corporation
  5. #
  6. # SPDX-License-Identifier: GPL-2.0-or-later
  7. #
  8. # DESCRIPTION
  9. # This script is intended to address issues for re-execution of
  10. # tasks. The test results are saved in ./reexeclogs. Force build
  11. # logs are saved with prefix "force". Build failure logs are saved with
  12. # prefix "failed". Log files with prefix "initial" are used to save
  13. # initial build logs for each recipe. Log files with prefix "clean" are
  14. # used to save logs of clean task after testing for a recipe is finished.
  15. #
  16. targets=`bitbake -s | cut -d " " -f 1`
  17. LOGS=./reexeclogs
  18. mkdir -p $LOGS
  19. # Clear sstate files for specified recipe
  20. function clearsstate {
  21. target=$1
  22. sstate_dir=`bitbake $target -e | grep "^SSTATE_DIR=" | cut -d "\"" -f 2`
  23. sstate_pkgspec=`bitbake $target -e | grep "^SSTATE_PKGSPEC=" | cut -d "\"" -f 2`
  24. sstasks=`bitbake $target -e | grep "^SSTATETASKS=" | cut -d "\"" -f 2`
  25. for sstask in $sstasks
  26. do
  27. sstask=${sstask:3}
  28. case $sstask in
  29. populate_sysroot) sstask="populate-sysroot"
  30. ;;
  31. populate_lic) sstask="populate-lic"
  32. ;;
  33. package_write_ipk) sstask="deploy-ipk"
  34. ;;
  35. package_write_deb) sstask="deploy-deb"
  36. ;;
  37. package_write_rpm) sstask="deploy-rpm"
  38. ;;
  39. package) sstask="package"
  40. ;;
  41. deploy) sstask="deploy"
  42. ;;
  43. *)
  44. ;;
  45. esac
  46. echo "Removing ${sstate_dir}/${sstate_pkgspec}*_${sstask}.tgz* for $target"
  47. rm -rf ${sstate_dir}/${sstate_pkgspec}*_${sstask}.tgz*
  48. done
  49. }
  50. # Function to re-execute specified task of recipe
  51. function testit {
  52. target=$1
  53. task=$2
  54. task=`echo $task | sed 's/_setscene//'`
  55. if [ -f $LOGS/force.$target.$task ]; then
  56. return
  57. fi
  58. case $task in
  59. clean|build|cleansstate|cleanall|package|cleansstate2|package_write|package_write_ipk|package_write_rpm|package_write_deb|fetch|populate_lic) return;;
  60. fetchall|devshell|buildall|listtasks|checkuri|checkuriall) return;;
  61. esac
  62. echo "Attempting target $target, task $task"
  63. echo "Initial build"
  64. bitbake $target -c cleansstate > $LOGS/initial.$target.$task
  65. bitbake $target >> $LOGS/initial.$target.$task
  66. clearsstate $target >> $LOGS/initial.$target.$task
  67. echo "Re-execution build"
  68. bitbake $target -c $task -f > $LOGS/force.$target.$task
  69. if [ "$?" != 0 ]; then
  70. echo "FAILURE for $target $task"
  71. cp $LOGS/force.$target.$task $LOGS/failed.$target.$task
  72. bitbake $target -c clean > $LOGS/clean.$target.$task
  73. else
  74. bitbake $target >> $LOGS/force.$target.$task
  75. if [ "$?" != 0 ]; then
  76. echo "FAILURE2 for $target $task"
  77. cp $LOGS/force.$target.$task $LOGS/failed.$target.$task
  78. bitbake $target -c clean > $LOGS/clean.$target.$task
  79. fi
  80. fi
  81. echo "Done"
  82. }
  83. # Go through the recipe list and these recipes' task list
  84. # Then re-execute them
  85. for target in $targets; do
  86. # Remove log messages from bitbake output
  87. case $target in
  88. Summary*|WARNING*|Loading*|Loaded*|Package*|=====*) continue;;
  89. esac
  90. tasks=`bitbake $target -c listtasks | grep ^do_ | sed s/do_//`
  91. for task in $tasks; do
  92. testit $target $task
  93. done
  94. done