describe changes
[platform/upstream/libsolv.git] / tools / repo2solv.sh
index ff206c8..25862d4 100755 (executable)
@@ -4,7 +4,26 @@
 # give it a directory of a local mirror of a repo and this
 # tries to detect the repo type and generate one SOLV file on stdout
 
+test_susetags() {
+  if test -s content; then
+    DESCR=`grep DESCRDIR content | cut -d ' ' -f 2`
+    if test -z $DESCR; then
+      DESCR=suse/setup/descr
+    fi
+    test -d $DESCR
+    return $?
+  else
+    return 1
+  fi
+}
+
+# this should signal an error if there is a problem
+set -e 
+
 LANG=C
+unset CDPATH
+parser_options=${PARSER_OPTIONS:-}
+
 
 dir="$1"
 cd "$dir" || exit 1
@@ -25,7 +44,26 @@ if test -d repodata; then
   if test -n "$cmd"; then
     # we have some primary.xml*
     primfile=`mktemp` || exit 3
-    $cmd $i | rpmmd2solv > $primfile
+    $cmd $i | rpmmd2solv $parser_options > $primfile || exit 4
+  fi
+
+  # This contains a updateinfo.xml* and maybe patches
+  if test -f updateinfo.xml || test -f updateinfo.xml.gz || test -f updateinfo.xml.bz2 ; then
+      for i in updateinfo.xml*; do
+          case $i in
+              *.gz) cmd="gzip -dc" ;;
+              *.bz2) cmd="bzip2 -dc" ;;
+              *) cmd="cat" ;;
+          esac
+          # only check the first updateinfo.xml*, in case there are more
+          break
+      done
+      updateinfofile="/nonexist"
+      if test -n "$cmd"; then
+      # we have some updateinfo.xml*
+          updateinfofile=`mktemp` || exit 3
+          $cmd $i | updateinfoxml2solv $parser_options > $updateinfofile || exit 4
+      fi
   fi
 
   patchfile="/nonexist"
@@ -41,23 +79,51 @@ if test -d repodata; then
        esac
      done
      echo '</patches>'
-    ) | grep -v '\?xml' | patchxml2solv > $patchfile
+    ) | grep -v '\?xml' | patchxml2solv $parser_options > $patchfile || exit 4
+  fi
+
+  # This contains a deltainfo.xml*
+  if test -f deltainfo.xml || test -f deltainfo.xml.gz || test -f deltainfo.xml.bz2 ; then
+      for i in deltainfo.xml*; do
+          case $i in
+              *.gz) cmd="gzip -dc" ;;
+              *.bz2) cmd="bzip2 -dc" ;;
+              *) cmd="cat" ;;
+          esac
+          # only check the first deltainfo.xml*, in case there are more
+          break
+      done
+      deltainfofile="/nonexist"
+      if test -n "$cmd"; then
+      # we have some deltainfo.xml*
+          deltainfofile=`mktemp` || exit 3
+          $cmd $i | deltainfoxml2solv $parser_options > $deltainfofile || exit 4
+      fi
   fi
 
-  # Now merge primary and patches
-  if test -s $primfile && test -s $patchfile; then
-    mergesolv $primfile $patchfile
-  elif test -s $primfile; then
-    cat $primfile
-  elif test -s $patchfile; then
-    cat $patchfile
+  # Now merge primary, patches, updateinfo, and deltainfo
+  if test -s $primfile; then
+    m_primfile=$primfile
+  fi
+  if test -s $patchfile; then
+    m_patchfile=$patchfile
   fi
-  rm -f $primfile $patchfile
-elif test -d suse/setup/descr && test -s content; then
+  if test -s $updateinfofile; then
+    m_updateinfofile=$updateinfofile
+  fi
+  if test -s $deltainfofile; then
+    m_deltainfofile=$deltainfofile
+  fi
+  mergesolv $m_primfile $m_patchfile $m_updateinfofile $m_deltainfofile
+  rm -f $primfile $patchfile $updateinfofile $deltainfofile
+
+elif test_susetags; then
   olddir=`pwd`
-  cd suse/setup/descr || exit 2
-  filepack=`mktemp` || exit 3
-  filecont=`mktemp` || exit 3
+  DESCR=`grep DESCRDIR content | cut -d ' ' -f 2`
+  if test -z $DESCR; then
+    DESCR=suse/setup/descr
+  fi
+  cd ${DESCR} || exit 2
   (
     # First packages
     if test -s packages.gz; then
@@ -68,7 +134,16 @@ elif test -d suse/setup/descr && test -s content; then
       cat packages
     fi
 
-    # First packages
+    # DU
+    if test -s packages.DU.gz; then
+      gzip -dc packages.DU.gz
+    elif test -s packages.DU.bz2; then
+      bzip2 -dc packages.DU.bz2
+    elif test -s packages.DU; then
+      cat packages.DU
+    fi
+
+    # Now default language
     if test -s packages.en.gz; then
       gzip -dc packages.en.gz
     elif test -s packages.en.bz2; then
@@ -77,8 +152,6 @@ elif test -d suse/setup/descr && test -s content; then
       cat packages.en
     fi
 
-    # XXX need to do something with packages.DU and packages.{lang}
-
     # Now patterns.  Not simply those files matching *.pat{,.gz,bz2},
     # but only those mentioned in the file 'patterns'
     if test -f patterns; then
@@ -91,9 +164,36 @@ elif test -d suse/setup/descr && test -s content; then
        esac
       done
     fi
-  ) | susetags2solv -a > $filepack
+
+    # Now all other packages.{lang}.  Needs to come last as it switches
+    # languages for all following susetags files
+    for i in packages.*; do
+      case $i in
+       *.gz) name="${i%.gz}" ; prog="gzip -dc" ;;
+       *.bz2) name="${i%.bz2}" ; prog="bzip2 -dc" ;;
+       *) name="$i"; prog=cat ;;
+      esac
+      case $name in
+       # ignore files we handled already
+       *.DU | *.en | *.FL | packages ) continue ;;
+       *) 
+         suff=${name#packages.}
+         echo "=Lan: $suff"
+         eval "$prog '$i'" ;;
+      esac
+    done
+
+  ) | susetags2solv -c "${olddir}/content" $parser_options || exit 4
   cd "$olddir"
-  content2solv < content > $filecont
-  mergesolv $filecont $filepack
-  rm -f $filepack $filecont
+else
+  rpms=''
+  for r in *.rpm ; do
+    rpms="$rpms$r
+"
+  done
+  if test -n "$rpms" ; then
+      echo "$rpms" | rpms2solv -m -
+  else
+      exit 1
+  fi
 fi