Refactor update_meta script
[scm/meta/obs.git] / update_meta.sh
1 #!/bin/bash 
2
3 API=https://api.tizen.org
4 PRJ=${1:-Tizen:Common}
5
6 PARALLEL_JOBS=8
7
8 set -e
9
10 function parallel_jobs {
11         local max_number=$((0 + ${1:-0}))
12         while true; do
13                 jobs &>/dev/null
14                 if [[ $(jobs -p | wc -l) -lt $max_number ]]; then
15                         break
16                 fi
17                 sleep 0.3
18         done
19 }
20
21 function check_package() {
22         pkg=$1
23         pkgtype="X"
24
25         # fetch file list for each package and deduce type
26         for filename in $(osc -A $API ls -u $PRJ $pkg); do
27                 case $filename in
28                         _aggregate)     pkgtype="A"; break;;
29                         _link)          pkgtype="L"; break;;
30                         _service)       pkgtype="S"; break;;
31                         *)                      pkgtype="U"; break;;
32                 esac
33         done
34         msg="$pkgtype $pkg"
35
36         # uddate aggregate and link packages
37         case $pkgtype in
38                 A)
39                         mkdir -p $pkg
40                         osc -A $API api /source/$PRJ/$pkg/_aggregate >$pkg/_aggregate
41                         osc -A $API api /source/$PRJ/$pkg/_meta >$pkg/_meta
42                         msg="$msg (updated)"
43                         ;;
44                 L)
45                         mkdir -p $pkg
46                         osc -A $API api /source/$PRJ/$pkg/_link >$pkg/_link
47                         msg="$msg (updated)"
48                         ;;
49                 *)
50                         ;;
51         esac
52
53         echo $msg
54 }
55
56 cd $(dirname $0)
57
58 # fetch project config
59 echo "Fetching project config for $PRJ"
60 osc -A $API meta prjconf $PRJ >_config
61
62 # fetch project meta
63 echo "Fetching project meta for $PRJ"
64 osc -A $API meta prj $PRJ >_meta
65
66 # check that each subdir exists on OBS project
67 shopt -s extglob
68 for file in $(ls */@(_aggregate|_link)); do
69         pkg=$(dirname $file)
70         echo "Checking $pkg"
71         if ! osc -A $API ls $PRJ $pkg &>/dev/null; then
72                 echo "Package $pkg was removed on OBS. Removing dir $pkg."
73                 git rm -rf $pkg
74         fi
75 done
76 # fetch packages list 
77 osc -A $API ls $PRJ | while read pkg; do
78         parallel_jobs $PARALLEL_JOBS
79         check_package $pkg &
80 done
81
82 parallel_jobs 1
83