--- /dev/null
+#!/bin/bash
+
+API=https://api.tizen.org
+PRJ=${1:-Tizen:Common}
+
+PARALLEL_JOBS=8
+
+set -e
+
+function parallel_jobs {
+ local max_number=$((0 + ${1:-0}))
+ while true; do
+ jobs &>/dev/null
+ if [[ $(jobs -p | wc -l) -lt $max_number ]]; then
+ break
+ fi
+ sleep 0.3
+ done
+}
+
+cd $(dirname $0)
+
+# fetch project config
+echo "Fetching project config for $PRJ"
+osc -A $API meta prjconf $PRJ >_config
+
+# fetch project meta
+echo "Fetching project meta for $PRJ"
+osc -A $API meta prj $PRJ >_meta
+
+# check that each subdir exists on OBS project
+shopt -s extglob
+for file in $(ls */@(_aggregate|_link)); do
+ pkg=$(dirname $file)
+ echo "Checking $pkg"
+ if ! osc -A $API ls $PRJ $pkg &>/dev/null; then
+ echo "Package $pkg was removed on OBS. Removing dir $pkg."
+ git rm -rf $pkg
+ fi
+done
+
+function check_package() {
+ pkg=$1
+ pkgtype="X"
+
+ # fetch file list for each package and deduce type
+ for filename in $(osc -A $API ls -u $PRJ $pkg); do
+ case $filename in
+ _aggregate) pkgtype="A"; break;;
+ _link) pkgtype="L"; break;;
+ _service) pkgtype="S"; break;;
+ *) pkgtype="U"; break;;
+ esac
+ done
+ msg="$pkgtype $pkg"
+
+ # uddate aggregate and link packages
+ case $pkgtype in
+ A)
+ mkdir -p $pkg
+ osc -A $API api /source/$PRJ/$pkg/_aggregate >$pkg/_aggregate
+ osc -A $API api /source/$PRJ/$pkg/_meta >$pkg/_meta
+ msg="$msg (updated)"
+ ;;
+ L)
+ mkdir -p $pkg
+ osc -A $API api /source/$PRJ/$pkg/_link >$pkg/_link
+ msg="$msg (updated)"
+ ;;
+ *)
+ ;;
+ esac
+
+ echo $msg
+}
+
+# fetch packages list
+osc -A $API ls $PRJ | while read pkg; do
+ parallel_jobs $PARALLEL_JOBS
+ check_package $pkg &
+done
+
+parallel_jobs 1
+