mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

301 lines
7.4 KiB

  1. #!/bin/bash
  2. #
  3. # --- ROCK-COPYRIGHT-NOTE-BEGIN ---
  4. #
  5. # This copyright note is auto-generated by ./scripts/Create-CopyPatch.
  6. # Please add additional copyright information _after_ the line containing
  7. # the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by
  8. # the ./scripts/Create-CopyPatch script. Do not edit this copyright text!
  9. #
  10. # ROCK Linux: rock-src/scripts/Create-ErrList
  11. # ROCK Linux is Copyright (C) 1998 - 2003 Clifford Wolf
  12. #
  13. # This program is free software; you can redistribute it and/or modify
  14. # it under the terms of the GNU General Public License as published by
  15. # the Free Software Foundation; either version 2 of the License, or
  16. # (at your option) any later version. A copy of the GNU General Public
  17. # License can be found at Documentation/COPYING.
  18. #
  19. # Many people helped and are helping developing ROCK Linux. Please
  20. # have a look at http://www.rocklinux.org/ and the Documentation/TEAM
  21. # file for details.
  22. #
  23. # --- ROCK-COPYRIGHT-NOTE-END ---
  24. config=default
  25. repstat=0
  26. showerr=0
  27. showtree=0
  28. delete=0
  29. remove=0
  30. fulldelete=0
  31. newdelete=0
  32. onlyreal=0
  33. onlyupdated=0
  34. repository=""
  35. stages="[0123456789]"
  36. copydir=""
  37. movedir=""
  38. logdir=""
  39. while [ "$1" ] ; do
  40. case "$1" in
  41. -cfg)
  42. config=$2 ; shift ; shift ;;
  43. -repstat)
  44. repstat=1 ; shift ;;
  45. -showerr)
  46. showerr=1 ; shift ;;
  47. -showtree)
  48. showtree=1 ; shift ;;
  49. -repository)
  50. if [ $2 != '!' ] ; then
  51. repository=" $2 " ; shift ; shift
  52. while [ "$1" -a -d "package/$1" ] ; do
  53. repository="$repository $1 " ; shift
  54. done
  55. else
  56. shift ; shift ; repository=""
  57. for x in $( ls package/ ) ; do
  58. [ -d "package/$x" ] &&
  59. repository="$repository $x"
  60. done
  61. repository="$repository "
  62. while [ "$1" -a -d "package/$1" ] ; do
  63. repository="${repository// $1 / }" ; shift
  64. done
  65. fi
  66. ;;
  67. -stage)
  68. stages="[$2]" ; shift ; shift ;;
  69. -logdir)
  70. logdir=$2 ; shift ; shift ;;
  71. -copydir)
  72. copydir=$2 ; shift ; shift ;;
  73. -movedir)
  74. movedir=$2 ; shift ; shift ;;
  75. -delete)
  76. delete=1 ; shift ;;
  77. -remove)
  78. remove=1 ; shift ;;
  79. -fulldelete)
  80. fulldelete=1 ; shift ;;
  81. -newdelete)
  82. newdelete=1 ; shift ;;
  83. -real)
  84. onlyreal=1 ; shift ;;
  85. -updated)
  86. onlyupdated=1 ; shift ;;
  87. -*)
  88. x="${0//?/ }" ; x="${x# }"
  89. echo "Usage: $0 [ -cfg config ] [ -repository repository ] \\"
  90. echo " $x [ -copydir copydir | -movedir movedir ] [ -repstat ] \\"
  91. echo " $x [ -stage stage ] [ -logdir logdir ] [ -[full|new]delete ] \\"
  92. echo " $x [ -real ] [ -updated ] [ -showerr [ -showtree ] | <package> ]"
  93. exit 1 ;;
  94. *)
  95. break ;;
  96. esac
  97. done
  98. . scripts/parse-config
  99. logdir="${logdir:-build/$ROCKCFG_ID/root/var/adm/logs}"
  100. pkgdir="${logdir%/*}/packages"
  101. if [ "$newdelete" = 1 ]; then
  102. while read pkg cksum1
  103. do
  104. cksum2=$( md5sum package/*/$pkg/* 2> /dev/null | \
  105. grep -v '\.cache$' | md5sum | cut -f1 -d' ' )
  106. if [ "$cksum1" != "$cksum2" ]; then
  107. echo "Scheduling package '$pkg' for rebuild ..."
  108. mine -rf -R build/$ROCKCFG_ID/root $pkg
  109. rm -f build/$ROCKCFG_ID/root/var/adm/*/?-$pkg.*
  110. fi
  111. done < <(
  112. grep '^ROCK Linux Package Source Checksum: ' \
  113. build/$ROCKCFG_ID/root/var/adm/packages/* |
  114. tr '/:' ' ' | cut -f7,14 -d' '
  115. )
  116. exit 0
  117. fi
  118. if [ "$repstat" = 1 ] ; then
  119. {
  120. echo
  121. echo -e "Repository\tPkg Total\tPkg OK\tPkg Error"
  122. echo
  123. total_pkgt=0 ; total_pkgo=0 ; total_pkge=0
  124. for x in $( cd package ; echo [a-z0-9]* ) ; do
  125. pkgt=0 ; pkgo=0 ; pkge=0
  126. for y in $( cd package/$x ; echo [a-z0-9]* ) ; do
  127. if [ "$( ls $logdir/$stages-$y.err 2> /dev/null )" ]
  128. then (( pkge++ )) ; (( total_pkge++ ))
  129. elif [ "$( ls $logdir/$stages-$y.log 2> /dev/null )" ]
  130. then (( pkgo++ )) ; (( total_pkgo++ ))
  131. fi
  132. done
  133. (( pkgt = pkgo + pkge )) ; (( total_pkgt += pkgt ))
  134. [ $pkgt != 0 ] && echo -e "$x\t$pkgt\t$pkgo\t$pkge"
  135. done
  136. echo
  137. echo -e "total\t$total_pkgt\t$total_pkgo\t$total_pkge"
  138. echo
  139. } | {
  140. expand -t20,35,50 | sed 's,^, ,'
  141. }
  142. exit 0
  143. fi
  144. if [ "$1" ] ; then
  145. if [ "$fulldelete" = 1 ] ; then
  146. for x ; do
  147. rm -vf "$logdir"/$stages-$x.{err,log,out}
  148. rm -vf "$logdir"/../*/$x
  149. done
  150. elif [ "$remove" = 1 ] ; then
  151. for x ; do
  152. echo "Scheduling package '$x' for rebuild ..."
  153. mine -rf -R build/$ROCKCFG_ID/root $x
  154. rm -f build/$ROCKCFG_ID/root/var/adm/*/?-$x.*
  155. done
  156. elif [ "$delete" = 1 ] ; then
  157. for x ; do rm -vf "$logdir"/$stages-$x.err ; done
  158. else
  159. for x ; do less "$logdir"/$stages-$x.err ; done
  160. fi
  161. exit 0
  162. fi
  163. echo
  164. echo "Error logs from $ROCKCFG_ID:"
  165. [ $showerr = 0 ] && echo
  166. count_pkg=0
  167. count_err=0
  168. count_log=0
  169. for stagelevel in $( echo $stages | tr -d '[]' | sed 's,.,& ,g' ) ; do
  170. while read x x x tree pkg x ; do
  171. [ "$repository" -a \
  172. "${repository/ $tree /}" = "$repository" ] && continue
  173. if [ -f "$logdir/$stagelevel-$pkg.err" ] ; then
  174. this_is_error=1
  175. if [ $onlyreal != 0 ] ; then
  176. [ -f "$pkgdir/$pkg" ] && this_is_error=0
  177. fi
  178. if [ $onlyupdated != 0 -a $this_is_error != 0 ] ; then
  179. [ "$( bash scripts/xfind.sh package/*/$pkg download/*/$pkg -newer "$logdir/$stagelevel-$pkg.err" )" ] || this_is_error=0
  180. fi
  181. else
  182. this_is_error=0
  183. fi
  184. if [ $this_is_error = 1 ] ; then
  185. if [ $showerr = 0 ] ; then
  186. d=$( ./scripts/Check-Deps-3 $stagelevel \
  187. $pkg config/$config/packages | \
  188. cut -f3 -d' ' | sort -u | wc -l )
  189. d="$( printf "%3d" $d )"
  190. echo "[$stagelevel] $d ${tree:0:13}/${pkg:0:18}"
  191. else
  192. echo ; echo "== $stagelevel-$pkg.err =="
  193. tail -20 "$logdir/$stagelevel-$pkg.err" | \
  194. tac | perl -e '
  195. my @lines;
  196. my $counter;
  197. while (<>) {
  198. chomp;
  199. $lines[$#lines+1] = $_;
  200. }
  201. for ($counter=0; $counter <= $#lines; $counter++) {
  202. $_=$lines[$counter];
  203. if ( /^checking for .*\.\.\. *Package / ||
  204. /configure: error:/ ) {
  205. for ($_=1; $_ <= $counter; $_++) {
  206. print "$lines[$_]\n";
  207. }
  208. exit 0;
  209. }
  210. }
  211. for ($counter=0; $counter <= $#lines; $counter++) {
  212. $_=$lines[$counter];
  213. if ( /^(make\S*): / ) {
  214. my $makeprefix=$1;
  215. my $output="$_\n";
  216. while ( defined
  217. ($_=$lines[$counter++]) ) {
  218. last unless /^(make\S*): /;
  219. $output="" if $1 ne $makeprefix;
  220. $makeprefix=$1;
  221. $output.="$_\n";
  222. }
  223. print $output; exit 0;
  224. }
  225. }
  226. foreach (@lines) {
  227. print "$_\n";
  228. }
  229. ' | tac | fold -s -79
  230. depcheck() {
  231. echo "${1}\`---> $3"
  232. for x in `grep -lwi $3 $logdir/*.err | \
  233. sed 's,.*/.-,,; s,\.err,,' | sort -u`
  234. do
  235. [ "$x" = "$3" ] && continue
  236. [ "${2/ $x /}" != "$2" ] && continue
  237. depcheck "${1} " "$2 $3 " $x
  238. done
  239. }
  240. [ $showtree = 1 ] && depcheck "" "" $pkg
  241. fi
  242. if [ "$copydir" ] ; then
  243. mkdir -p "$copydir"
  244. cp "$logdir/$stagelevel-$pkg.err" "$copydir"
  245. fi
  246. if [ "$movedir" ] ; then
  247. mkdir -p "$movedir"
  248. mv "$logdir/$stagelevel-$pkg.err" "$movedir"
  249. fi
  250. if [ "$fulldelete" -eq 1 ] ; then
  251. rm -f "$logdir"/$stages-$pkg.{err,log,out}
  252. rm -f "$logdir"/../*/$pkg
  253. elif [ "$delete" -eq 1 ] ; then
  254. rm -f "$logdir/$stagelevel-$pkg.err"
  255. fi
  256. count_err=$(( $count_err + 1 ))
  257. elif [ -f "$logdir/$stagelevel-$pkg.log" ] ; then
  258. count_log=$(( $count_log + 1 ))
  259. fi
  260. count_pkg=$(( $count_pkg + 1 ))
  261. done < <( grep "^X [0-9-]*$stagelevel" config/$config/packages )
  262. done > >(
  263. if [ $showerr = 0 ] ; then
  264. paste - - | expand -t40 | sed 's,^, ,'
  265. else cat ; fi
  266. )
  267. sleep 1
  268. echo
  269. echo "$count_pkg builds total, $count_log completed fine," \
  270. "$count_err with errors."
  271. echo