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