local p=$2
local f
if test -n "$t" -a -s repomd.xml ; then
- f=`repomdxml2solv -q $t:location < repomd.xml 2>/dev/null`
+ f=`repomdxml2solv -q "$t:location" < repomd.xml 2>/dev/null`
f=${f##*/}
if test -f "$f" ; then
echo "$f"
fi
}
+repomd_types() {
+ test -s repomd.xml && repomdxml2solv -q type < repomd.xml
+}
+
repomd_decompress() {
case $1 in
*.gz) gzip -dc "$1" ;;
esac
}
+susetags_findfile() {
+ if test -s "$1.xz" ; then
+ echo "$1.xz"
+ elif test -s "$1.lzma" ; then
+ echo "$1.lzma"
+ elif test -s "$1.bz2" ; then
+ echo "$1.bz2"
+ elif test -s "$1.gz" ; then
+ echo "$1.gz"
+ fi
+}
+
susetags_findfile_cat() {
if test -s "$1.xz" ; then
xz -dc "$1.xz"
findopt="-prune"
repotype=
+addautooption=
while true ; do
if test "$1" = "-o" ; then
findopt=
repotype=plaindir
shift
+ elif test "$1" = "-X" ; then
+ addautooption=-X
+ shift
+ elif test "$1" = "-A" ; then
+ shift
else
break
fi
if test -z "$repotype" ; then
# autodetect repository type
- if test -d repodata ; then
+ if test -d repodata -o -f repomd.xml; then
repotype=rpmmd
elif test_susetags ; then
repotype=susetags
fi
if test "$repotype" = rpmmd ; then
- cd repodata || exit 2
+ test -d repodata && {
+ cd repodata || exit 2
+ }
primfile=
primxml=`repomd_findfile primary primary.xml`
if test -f "$susedataxml" ; then
repomd_decompress "$susedataxml"
fi
+ # all the languages as well
+ for t in `repomd_types` ; do
+ case "$t" in
+ susedata.*)
+ susedataxml=`repomd_findfile "$t" "$t.xml"`
+ if test -f "$susedataxml" ; then
+ repomd_decompress "$susedataxml"
+ fi
+ ;;
+ esac
+ done
echo '</rpmmd>'
- ) | grep -v '\?xml' | sed '1i\<?xml version="1.0" encoding="UTF-8"?>' | rpmmd2solv $parser_options > $primfile || exit 4
+ ) | sed 's/<?xml[^>]*>//g' | sed '1i\<?xml version="1.0" encoding="UTF-8"?>' | rpmmd2solv $parser_options > $primfile || exit 4
fi
prodfile=
prodxml=`repomd_findfile product product.xml`
fi
if test -n "$prodxml" -a -s "$prodxml" ; then
- prodfile=`mktemp` || exit 3
- (
- echo '<products>'
- repomd_decompress "$prodxml"
- echo '</products>'
- ) | grep -v '\?xml' | rpmmd2solv $parser_options > $prodfile || exit 4
+ prodfile=`mktemp` || exit 3
+ repomd_decompress "$prodxml" | rpmmd2solv $parser_options > $prodfile || exit 4
fi
patternfile=
repomd_decompress "$deltainfoxml" | deltainfoxml2solv $parser_options > $deltainfofile || exit 4
fi
+ # This contains appdata
+ appdataxml=
+ appdatafile=
+ if test -x /usr/bin/appdata2solv ; then
+ appdataxml=`repomd_findfile appdata appdata.xml`
+ fi
+ if test -n "$appdataxml" -a -s "$appdataxml" ; then
+ appdatafile=`mktemp` || exit 3
+ repomd_decompress "$appdataxml" | appdata2solv $parser_options > $appdatafile || exit 4
+ fi
+
# Now merge primary, patches, updateinfo, and deltainfo
- mergesolv $repomdfile $suseinfofile $primfile $prodfile $patternfile $updateinfofile $deltainfofile
- rm -f $repomdfile $suseinfofile $primfile $patternfile $prodfile $updateinfofile $deltainfofile
+ mergesolv $addautooption $repomdfile $suseinfofile $primfile $prodfile $patternfile $updateinfofile $deltainfofile $appdatafile
+ rm -f $repomdfile $suseinfofile $primfile $patternfile $prodfile $updateinfofile $deltainfofile $appdatafile
elif test "$repotype" = susetags ; then
olddir=`pwd`
DESCR=$(get_DESCRDIR)
cd ${DESCR} || exit 2
+ appdataxml=
+ appdatafile=
+ if test -x /usr/bin/appdata2solv ; then
+ appdataxml=`susetags_findfile appdata.xml`
+ fi
+ if test -n "$appdataxml" ; then
+ appdatafile=`mktemp` || exit 3
+ repomd_decompress "$appdataxml" | appdata2solv $parser_options > $appdatafile || exit 4
+ parser_options="-M $appdatafile $parser_options"
+ fi
(
# First packages
susetags_findfile_cat packages
# Now default language
susetags_findfile_cat packages.en
+ # DL (delta rpms)
+ susetags_findfile_cat packages.DL
+
# Now patterns. Not simply those files matching *.pat{,.gz,bz2},
# but only those mentioned in the file 'patterns'
if test -f patterns ; then
esac
case $name in
# ignore files we handled already
- *.DU | *.en | *.FL | packages ) continue ;;
+ *.DU | *.en | *.FL | *.DL | packages ) continue ;;
*)
suff=${name#packages.}
echo "=Lan: $suff"
esac
done
- ) | susetags2solv -c "${olddir}/content" $parser_options || exit 4
+ ) | susetags2solv $addautooption -c "${olddir}/content" $parser_options || exit 4
+ test -n "$appdatafile" && rm -f "$appdatafile"
cd "$olddir"
elif test "$repotype" = plaindir ; then
- find * -name .\* -prune -o $findopt -name \*.delta.rpm -o -name \*.patch.rpm -o -name \*.rpm -a -type f -print0 | rpms2solv -0 -m -
+ find * -name .\* -prune -o $findopt -name \*.delta.rpm -o -name \*.patch.rpm -o -name \*.rpm -a -type f -print0 | rpms2solv $addautooption -0 -m -
else
echo "unknown repository type '$repotype'" >&2
exit 1