jattool-tfind 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/bin/bash
  2. #shellcheck disable=SC1090,SC2164
  3. . "$(sfpath)" || exit 3
  4. shellfu import pretty
  5. usage() {
  6. mkusage "$@" "[options] PATH" \
  7. -- \
  8. "Discover all JATS tests under directory PATH." \
  9. -o \
  10. "-f FMT Print test name in format FMT. 'id', 'version' or" \
  11. " 'path'."
  12. }
  13. discover() {
  14. #
  15. # Find tests under dirs ${FindDirs[@]}
  16. #
  17. local s_dir # suite root dir
  18. local t_cand # possible test path
  19. local t_apath # absolute path to test directory
  20. local t_rpath # relative path to test directory within $s_dir
  21. local s_id # suite's jats: id
  22. find "${FindDirs[@]}" -name test \
  23. | while read -r t_cand; do
  24. s_dir=$(straverse "$t_cand") || continue
  25. t_apath=$(dirname "$(readlink -f "$t_cand")")
  26. t_rpath=${t_apath#$s_dir/}
  27. s_id=$(jattool sfind -f id "$s_dir")
  28. s_ver=$(jattool sfind -f version "$s_dir")
  29. t_id=$s_id$t_rpath
  30. t_path=$s_dir/$t_rpath
  31. debug -v s_dir s_id t_apath t_rpath t_id t_path
  32. case $Fmt in
  33. path) echo "$t_path" ;;
  34. id) echo "$t_id" ;;
  35. version) echo "$s_ver" ;;
  36. esac
  37. done
  38. }
  39. straverse() {
  40. #
  41. # Traverse back from test dir $1 and print its suite dir
  42. #
  43. local tdir=$1
  44. local dir
  45. dir=$(readlink -f "$tdir")
  46. while true; do
  47. test -d "$dir/.jats" && echo "$dir" && return 0
  48. test "$dir" == "/" && return 1
  49. dir=${dir%/*}; test -n "$dir" || dir=/
  50. done
  51. }
  52. main() {
  53. local FindDirs=()
  54. local Fmt=path
  55. while true; do case $1 in
  56. -f) Fmt=$2; shift 2 || usage -w "missing FMT" ;;
  57. -*) usage -w "unknown argument: $1" ;;
  58. *) break ;;
  59. esac done
  60. FindDirs=("$@")
  61. case $Fmt in
  62. id|version|path) : ;;
  63. *) usage -w "unknown FMT: $Fmt" ;;
  64. esac
  65. debug -v FindDirs Fmt
  66. discover | grep .
  67. }
  68. main "$@"