diff --git a/tools/packaging/obs-packaging/wait-obs.sh b/tools/packaging/obs-packaging/wait-obs.sh
index 717a3dd6a..fe55e8264 100755
--- a/tools/packaging/obs-packaging/wait-obs.sh
+++ b/tools/packaging/obs-packaging/wait-obs.sh
@@ -35,41 +35,179 @@ run_in_docker() {
fi
}
+# project information
+project=""
+
+# repo information
+repo=""
+repo_state=""
+repo_code=""
+
+# package information
+package=""
+package_code=""
+package_details=""
+
+# packages still building
+packages_building=0
+
+fail=0
+return=0
+continue=0
+
+result_handler() {
+ # reset project information
+ project=""
+
+ # reset repo information
+ repo=""
+ repo_state=""
+ repo_code=""
+
+ local IFS=' '
+ for i in $1; do
+ case $(echo $i | cut -d= -f1) in
+ project)
+ project=$(echo $i | cut -d= -f2 | tr -d '"')
+ ;;
+
+ repository)
+ repo=$(echo $i | cut -d= -f2 | tr -d '"')
+ ;;
+
+ code)
+ repo_code=$(echo $i | cut -d= -f2 | tr -d '"')
+ ;;
+
+ state)
+ repo_state=$(echo $i | cut -d= -f2 | tr -d '"')
+ ;;
+ esac
+ done
+
+ case "${repo_code}" in
+ blocked)
+ continue=1
+ ;;
+
+ unresolvable)
+ fail=1
+ ;;
+
+ excluded)
+ return=1
+ ;;
+ esac
+}
+
+status_handler() {
+ # reset package information
+ package=""
+ package_code=""
+ package_details=""
+
+ local IFS=' '
+ for i in $1; do
+ case $(echo $i | cut -d= -f1) in
+ package)
+ package=$(echo $i | cut -d= -f2 | tr -d '"')
+ ;;
+
+ code)
+ package_code=$(echo $i | cut -d= -f2 | tr -d '"')
+ ;;
+ esac
+ done
+
+ case "${package_code}" in
+ blocked)
+ continue=1
+ ;;
+
+ unresolvable)
+ fail=1
+ ;;
+
+ excluded)
+ return=1
+ ;;
+ esac
+}
+
+details_handler() {
+ # reset package details
+ package_details="$(echo $1 | cut -d\> -f2 | cut -d\< -f1)"
+
+ if [ "$package_details" == "failed" ]; then
+ fail=1
+ osc pr
+ return
+ fi
+
+ if [ "$package_details" == "broken" ]; then
+ fail=1
+ return
+ fi
+
+ if [ "${package_details}" != "succeeded" ] || [ "${package_code}" != "finished" ]; then
+ packages_building=$((packages_building+1))
+ fi
+}
+
+check_repo() {
+ if [ -z "${repo}" ]; then
+ return
+ fi
+}
+
+dump_info() {
+ echo "package: $package, code: $package_code, details: $package_details"
+ echo "repository: $repo, state: $repo_state, code: $repo_code"
+ echo "For more information go to https://build.opensuse.org/package/live_build_log/${project}/${package}/${repo}/$(uname -m)"
+}
+
# Check all project has finshed the build
wait_finish_building() {
local out
while true; do
- sleep 10
+ sleep 30
out=$(osc api "/build/${project}/_result")
- if echo "${out}" | grep 'failed '; then
- echo "Project ${project} has failed packages"
- osc pr
- exit 1
- fi
- if echo "${out}" | grep 'broken '; then
- echo "Project ${project} has broken packages"
- exit 1
- fi
- if echo "${out}" | grep 'code="blocked"'; then
- echo "Project ${project} has blocked packages, waiting"
+ continue=0
+ packages_building=0
+
+ local IFS=$'\n'
+ for i in ${out[*]}; do
+ i="$(echo $i | sed -e 's/^[[:space:]]*//' -e 's/^/' -e 's/>$//')"
+ if echo "$i" | egrep -q "^result"; then
+ result_handler "$i"
+ elif echo "$i" | egrep -q "^status"; then
+ status_handler "$i"
+ elif echo "$i" | egrep -q "^details"; then
+ details_handler "$i"
+ fi
+
+ if [ $fail -eq 1 ]; then
+ echo -n "FAILED: "
+ dump_info
+ exit 1
+ elif [ $return -eq 1 ]; then
+ return
+ elif [ $packages_building -gt 0 ]; then
+ break
+ fi
+ done
+
+ if [ $continue -eq 1 ]; then
continue
fi
- if echo "${out}" | grep 'code="unresolvable"'; then
- echo "Project ${project} has unresolvable packages"
- exit 1
- fi
- if echo "${out}" | grep 'state="building"'; then
- echo "Project ${project} is still building, waiting"
- continue
- fi
- if echo "${out}" | grep 'code="excluded"'; then
- echo "Project ${project} has excluded packages left, quit waiting"
- break
- fi
- echo "No jobs with building status were found"
- echo "${out}"
- break
+ if [ $packages_building -gt 0 ]; then
+ echo -n "BULDING: "
+ dump_info
+ else
+ echo "FINISHED: SUCCEEDED!"
+ break
+ fi
done
}