Move update_meta script to the top
[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 cd $(dirname $0)
22
23 # fetch project config
24 echo "Fetching project config for $PRJ"
25 osc -A $API meta prjconf $PRJ >_config
26
27 # fetch project meta
28 echo "Fetching project meta for $PRJ"
29 osc -A $API meta prj $PRJ >_meta
30
31 # check that each subdir exists on OBS project
32 shopt -s extglob
33 for file in $(ls */@(_aggregate|_link)); do
34         pkg=$(dirname $file)
35         echo "Checking $pkg"
36         if ! osc -A $API ls $PRJ $pkg &>/dev/null; then
37                 echo "Package $pkg was removed on OBS. Removing dir $pkg."
38                 git rm -rf $pkg
39         fi
40 done
41
42 function check_package() {
43         pkg=$1
44         pkgtype="X"
45
46         # fetch file list for each package and deduce type
47         for filename in $(osc -A $API ls -u $PRJ $pkg); do
48                 case $filename in
49                         _aggregate)     pkgtype="A"; break;;
50                         _link)          pkgtype="L"; break;;
51                         _service)       pkgtype="S"; break;;
52                         *)                      pkgtype="U"; break;;
53                 esac
54         done
55         msg="$pkgtype $pkg"
56
57         # uddate aggregate and link packages
58         case $pkgtype in
59                 A)
60                         mkdir -p $pkg
61                         osc -A $API api /source/$PRJ/$pkg/_aggregate >$pkg/_aggregate
62                         osc -A $API api /source/$PRJ/$pkg/_meta >$pkg/_meta
63                         msg="$msg (updated)"
64                         ;;
65                 L)
66                         mkdir -p $pkg
67                         osc -A $API api /source/$PRJ/$pkg/_link >$pkg/_link
68                         msg="$msg (updated)"
69                         ;;
70                 *)
71                         ;;
72         esac
73
74         echo $msg
75 }
76
77 # fetch packages list 
78 osc -A $API ls $PRJ | while read pkg; do
79         parallel_jobs $PARALLEL_JOBS
80         check_package $pkg &
81 done
82
83 parallel_jobs 1
84