Tizen:Common add corefx-managed_aggregate
[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                         osc -A $API api /source/$PRJ/$pkg/_meta >$pkg/_meta
49                         if grep '<build' $pkg/_meta &>/dev/null; then
50                                 msg="$msg (updated, with meta)"
51                         else
52                                 rm $pkg/_meta
53                                 msg="$msg (updated)"
54                         fi
55                         ;;
56                 *)
57                         content=$(osc -A $API api /source/$PRJ/$pkg/_meta)
58                         if echo $content | grep -q '<build>' ; then
59                                 mkdir -p $pkg
60                                 echo $content >$pkg/_meta
61                                 msg="$msg (updated)"
62                         fi
63                         ;;
64         esac
65         echo $msg
66 }
67
68 cd $PRJ
69
70 if [ "$ACTION" == 'get' ] ; then
71         # fetch project config
72         echo "Fetching project config for $PRJ"
73         osc -A $API meta prjconf $PRJ >_config
74
75         # fetch project meta
76         echo "Fetching project meta for $PRJ"
77         osc -A $API meta prj $PRJ >_meta
78
79         # check that each subdir exists on OBS project
80         shopt -s extglob
81         for file in $(ls */@(_aggregate|_link)); do
82                 pkg=$(dirname $file)
83                 echo "Checking $pkg"
84                 if ! osc -A $API ls $PRJ $pkg &>/dev/null; then
85                         echo "Package $pkg was removed on OBS. Removing dir $pkg."
86                         git rm -rf $pkg
87                 fi
88         done
89         # fetch packages list
90         osc -A $API ls $PRJ | while read pkg; do
91                 parallel_jobs $PARALLEL_JOBS
92                 check_package $pkg &
93         done
94
95         parallel_jobs 1
96 elif [ "$ACTION" == 'put' ] ; then
97         find . -type f | while read path; do
98                 path=$(echo $path|cut -d/ -f2-)
99                 echo Sending $path to $PRJ
100                 osc -A $API api -X PUT /source/$PRJ/$path -f $path
101         done
102 else
103         >&2 echo "Error: Unknown action: $ACTION"
104         exit 1
105 fi