return error, if *2solv helpers do
[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 LANG=C
8 parser_options=${PARSER_OPTIONS:-}
9
10
11 dir="$1"
12 cd "$dir" || exit 1
13 if test -d repodata; then
14   cd repodata || exit 2
15
16   # This contains a primary.xml* and maybe patches
17   for i in primary.xml*; do
18     case $i in
19       *.gz) cmd="gzip -dc" ;;
20       *.bz2) cmd="bzip2 -dc" ;;
21       *) cmd="cat" ;;
22     esac
23     # only check the first primary.xml*, in case there are more
24     break
25   done
26   primfile="/nonexist"
27   if test -n "$cmd"; then
28     # we have some primary.xml*
29     primfile=`mktemp` || exit 3
30     $cmd $i | rpmmd2solv $parser_options > $primfile || exit 4
31   fi
32
33   patchfile="/nonexist"
34   if test -f patches.xml; then
35     patchfile=`mktemp` || exit 3
36     (
37      echo '<patches>'
38      for i in patch-*.xml*; do
39        case $i in
40          *.gz) gzip -dc "$i" ;;
41          *.bz2) bzip2 -dc "$i" ;;
42          *) cat "$i" ;;
43        esac
44      done
45      echo '</patches>'
46     ) | grep -v '\?xml' | patchxml2solv $parser_options > $patchfile || exit 4
47   fi
48
49   # Now merge primary and patches
50   if test -s $primfile && test -s $patchfile; then
51     mergesolv $primfile $patchfile
52   elif test -s $primfile; then
53     cat $primfile
54   elif test -s $patchfile; then
55     cat $patchfile
56   fi
57   rm -f $primfile $patchfile
58 elif test -d suse/setup/descr && test -s content; then
59   olddir=`pwd`
60   cd suse/setup/descr || exit 2
61   (
62     # First packages
63     if test -s packages.gz; then
64       gzip -dc packages.gz
65     elif test -s packages.bz2; then
66       bzip2 -dc packages.bz2
67     elif test -s packages; then
68       cat packages
69     fi
70
71     # First packages
72     if test -s packages.en.gz; then
73       gzip -dc packages.en.gz
74     elif test -s packages.en.bz2; then
75       bzip2 -dc packages.en.bz2
76     elif test -s packages.en; then
77       cat packages.en
78     fi
79
80     # XXX need to do something with packages.DU and packages.{lang}
81
82     # Now patterns.  Not simply those files matching *.pat{,.gz,bz2},
83     # but only those mentioned in the file 'patterns'
84     if test -f patterns; then
85       for i in `cat patterns`; do
86         test -s "$i" || continue
87         case $i in
88           *.gz) gzip -dc "$i" ;;
89           *.bz2) bzip2 -dc "$i" ;;
90           *) cat "$i" ;;
91         esac
92       done
93     fi
94   ) | susetags2solv -c "${olddir}/content" $parser_options || exit 4
95   cd "$olddir"
96 else
97   exit 1
98 fi