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
7 # this should signal an error if there is a problem
11 parser_options=${PARSER_OPTIONS:-}
16 if test -d repodata; then
19 # This contains a primary.xml* and maybe patches
20 for i in primary.xml*; do
22 *.gz) cmd="gzip -dc" ;;
23 *.bz2) cmd="bzip2 -dc" ;;
26 # only check the first primary.xml*, in case there are more
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
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
40 *.gz) cmd="gzip -dc" ;;
41 *.bz2) cmd="bzip2 -dc" ;;
44 # only check the first updateinfo.xml*, in case there are more
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
56 if test -f patches.xml; then
57 patchfile=`mktemp` || exit 3
60 for i in patch-*.xml*; do
62 *.gz) gzip -dc "$i" ;;
63 *.bz2) bzip2 -dc "$i" ;;
68 ) | grep -v '\?xml' | patchxml2solv $parser_options > $patchfile || exit 4
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
80 elif test -s $patchfile; then
83 rm -f $primfile $patchfile $updateinfofile
84 elif test -d suse/setup/descr && test -s content; then
86 cd suse/setup/descr || exit 2
89 if test -s packages.gz; then
91 elif test -s packages.bz2; then
92 bzip2 -dc packages.bz2
93 elif test -s packages; then
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
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
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
121 *.gz) gzip -dc "$i" ;;
122 *.bz2) bzip2 -dc "$i" ;;
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
132 *.gz) name="${i%.gz}" ; prog="gzip -dc" ;;
133 *.bz2) name="${i%.bz2}" ; prog="bzip2 -dc" ;;
134 *) name="$i"; prog=cat ;;
137 # ignore files we handled already
138 *.DU | *.en | *.FL | packages ) continue ;;
140 suff=${name#packages.}
146 ) | susetags2solv -c "${olddir}/content" $parser_options || exit 4
154 if test -n "$rpms" ; then
155 echo "$rpms" | rpms2solv -m -