Generate translated strings for susetags repos (only packages for now).
[platform/upstream/libsolv.git] / tools / repo2solv.sh
1 #! /bin/sh
2 # repo2solv
3 #
4 # give it a directory of a local mirror of a repo and this
5 # tries to detect the repo type and generate one SOLV file on stdout
6
7 # this should signal an error if there is a problem
8 set -e 
9
10 LANG=C
11 parser_options=${PARSER_OPTIONS:-}
12
13
14 dir="$1"
15 cd "$dir" || exit 1
16 if test -d repodata; then
17   cd repodata || exit 2
18
19   # This contains a primary.xml* and maybe patches
20   for i in primary.xml*; do
21     case $i in
22       *.gz) cmd="gzip -dc" ;;
23       *.bz2) cmd="bzip2 -dc" ;;
24       *) cmd="cat" ;;
25     esac
26     # only check the first primary.xml*, in case there are more
27     break
28   done
29   primfile="/nonexist"
30   if test -n "$cmd"; then
31     # we have some primary.xml*
32     primfile=`mktemp` || exit 3
33     $cmd $i | rpmmd2solv $parser_options > $primfile || exit 4
34   fi
35
36   # This contains a updateinfo.xml* and maybe patches
37   if test -f updateinfo.xml || test -f updateinfo.xml.gz || test -f updateinfo.xml.bz2 ; then
38       for i in updateinfo.xml*; do
39           case $i in
40               *.gz) cmd="gzip -dc" ;;
41               *.bz2) cmd="bzip2 -dc" ;;
42               *) cmd="cat" ;;
43           esac
44           # only check the first updateinfo.xml*, in case there are more
45           break
46       done
47       updateinfofile="/nonexist"
48       if test -n "$cmd"; then
49       # we have some updateinfo.xml*
50           updateinfofile=`mktemp` || exit 3
51           $cmd $i | updateinfoxml2solv $parser_options > $updateinfofile || exit 4
52       fi
53   fi
54
55   patchfile="/nonexist"
56   if test -f patches.xml; then
57     patchfile=`mktemp` || exit 3
58     (
59      echo '<patches>'
60      for i in patch-*.xml*; do
61        case $i in
62          *.gz) gzip -dc "$i" ;;
63          *.bz2) bzip2 -dc "$i" ;;
64          *) cat "$i" ;;
65        esac
66      done
67      echo '</patches>'
68     ) | grep -v '\?xml' | patchxml2solv $parser_options > $patchfile || exit 4
69   fi
70
71   # Now merge primary and patches and updateinfo
72   if test -s $primfile && test -s $patchfile && test -s $updateinfofile; then
73       mergesolv $primfile $patchfile $updateinfofile
74   elif test -s $primfile && test -s $updateinfofile; then
75       mergesolv $primfile $updateinfofile
76   elif test -s $primfile && test -s $patchfile; then
77     mergesolv $primfile $patchfile
78   elif test -s $primfile; then
79     cat $primfile
80   elif test -s $patchfile; then
81     cat $patchfile
82   fi
83   rm -f $primfile $patchfile $updateinfofile
84 elif test -d suse/setup/descr && test -s content; then
85   olddir=`pwd`
86   cd suse/setup/descr || exit 2
87   (
88     # First packages
89     if test -s packages.gz; then
90       gzip -dc packages.gz
91     elif test -s packages.bz2; then
92       bzip2 -dc packages.bz2
93     elif test -s packages; then
94       cat packages
95     fi
96
97     # DU
98     if test -s packages.DU.gz; then
99       gzip -dc packages.DU.gz
100     elif test -s packages.DU.bz2; then
101       bzip2 -dc packages.DU.bz2
102     elif test -s packages.DU; then
103       cat packages.DU
104     fi
105
106     # Now default language
107     if test -s packages.en.gz; then
108       gzip -dc packages.en.gz
109     elif test -s packages.en.bz2; then
110       bzip2 -dc packages.en.bz2
111     elif test -s packages.en; then
112       cat packages.en
113     fi
114
115     # Now patterns.  Not simply those files matching *.pat{,.gz,bz2},
116     # but only those mentioned in the file 'patterns'
117     if test -f patterns; then
118       for i in `cat patterns`; do
119         test -s "$i" || continue
120         case $i in
121           *.gz) gzip -dc "$i" ;;
122           *.bz2) bzip2 -dc "$i" ;;
123           *) cat "$i" ;;
124         esac
125       done
126     fi
127
128     # Now all other packages.{lang}.  Needs to come last as it switches
129     # languages for all following susetags files
130     for i in packages.*; do
131       case $i in
132         *.gz) name="${i%.gz}" ; prog="gzip -dc" ;;
133         *.bz2) name="${i%.bz2}" ; prog="bzip2 -dc" ;;
134         *) name="$i"; prog=cat ;;
135       esac
136       case $name in
137         # ignore files we handled already
138         *.DU | *.en | *.FL | packages ) continue ;;
139         *) 
140           suff=${name#packages.}
141           echo "=Lan: $suff"
142           eval "$prog '$i'" ;;
143       esac
144     done
145
146   ) | susetags2solv -c "${olddir}/content" $parser_options || exit 4
147   cd "$olddir"
148 else
149   rpms=''
150   for r in *.rpm ; do
151     rpms="$rpms$r
152 "
153   done
154   if test -n "$rpms" ; then
155       echo "$rpms" | rpms2solv -m -
156   else
157       exit 1
158   fi
159 fi