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