OpenPKG CVS Repository
  http://cvs.openpkg.org/
  ____________________________________________________________________________

  Server: cvs.openpkg.org                  Name:   Thomas Lotterer
  Root:   /v/openpkg/cvs                   Email:  [EMAIL PROTECTED]
  Module: openpkg-tools                    Date:   04-Jul-2006 15:02:26
  Branch: HEAD                             Handle: 2006070414022300

  Modified files:
    openpkg-tools/cmd       dev.sh

  Log:
    replace "openpkg dev search" file listing logic by repository index
    crawling logic

  Summary:
    Revision    Changes     Path
    1.79        +70 -26     openpkg-tools/cmd/dev.sh
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: openpkg-tools/cmd/dev.sh
  ============================================================================
  $ cvs diff -u -r1.78 -r1.79 dev.sh
  --- openpkg-tools/cmd/dev.sh  20 Jun 2006 13:20:45 -0000      1.78
  +++ openpkg-tools/cmd/dev.sh  4 Jul 2006 13:02:23 -0000       1.79
  @@ -2487,21 +2487,53 @@
       done
   }
   
  -search_for () {
  -    URL=`echo $2 | sed -e 's| *$||'`
  -    openpkg register --printstatus >/dev/null 2>&1 \
  -    && URL=`openpkg register --rewriteurls $URL`
  -    PKG=`$E/lib/openpkg/curl -l -s $URL |\
  -         sed -e 's|[^-a-zA-Z0-9_\.]||g' |\
  -         grep "^$1" | sort -r`
  -    if [ ".$PKG" != . ]; then
  -        for pkg in $PKG; do
  +search_index ()
  +{
  +    local findpkg="$1"
  +    local urls="$2"
  +
  +    local url=""
  +    local baseurl=""
  +    local index=""
  +    for url in $urls; do
  +        openpkgE register --printstatus >/dev/null 2>&1  && url=`openpkgE 
register --rewriteurls $url`
  +        case $url in
  +            */00INDEX.rdf )
  +                baseurl=`echo $url | sed -e 's;/00INDEX.rdf$;;'`
  +                index=`$curlT -s "$url"`
  +                ;;
  +            */00INDEX.rdf.bz2 )
  +                baseurl=`echo $url | sed -e 's;/00INDEX.rdf.bz2$;;'`
  +                index=`$curlT -s "$url" | $bzipT -q -d`
  +                ;;
  +            * )
  +                baseurl=`echo $url | sed -e 's;/$;;'`
  +                index=`$curlT -s "$baseurl/00INDEX.rdf"`
  +                if [ ".$index" = . ]; then
  +                    index=`$curlT -s "$baseurl/00INDEX.rdf.bz2" | $bzipT -q 
-d`
  +                fi
  +                ;;
  +        esac
  +
  +        local pkg pkgs
  +        pkgs=`printf "===%s===" "$index" \
  +            | awk 'BEGIN { D="" } /<rdf:Description about=/ { D=$3 } 
/<Name>'$findpkg'<\/Name>/ { print D }' \
  +            | sed -e 's;^[^"]*";;' -e 's;"[^"]*$;;'` 
  +        for pkg in $pkgs; do
               NAME=`echo "$pkg" | sed -e 's;\.src\.rpm$;;' -e 's;\.src\.sh$;;'`
               NAME=`echo "$NAME ........................................" | 
cut -c-35`
  -            DLOC=`echo "$pkg" | sed -e "s;^;$URL;"`
  -            echo "$NAME $DLOC"
  +            echo "$NAME $baseurl/$pkg"
           done
  -    fi
  +
  +        local resource resources
  +        resources=`printf "===%s===" "$index" \
  +                   | grep -v /Binary/ \
  +                   | awk '/<Repository rdf:resource=/ { print $3 }' \
  +                   | sed -e 's;^[^"]*";;' -e 's;"[^"]*$;;'` 
  +        for resource in $resources; do
  +            search_index "$findpkg" "$baseurl/$resource"
  +        done
  +    done
   }
   
   search () {
  @@ -2511,25 +2543,37 @@
           E="${RV}"
       fi
   
  -    if [ ".$1" = . ]; then
  +    #   we must have a T/bin/rpm somewhere
  +    if [ ".$T" = . ]; then
  +        matchinstance "${OPENPKG_CTAG}" any
  +        T="${RV}"
  +    fi
  +    curlT=`rpmT --eval '%{l_curl}'`
  +    bzipT=`rpmT --eval '%{l_bzip2}'`
  +
  +    packages=""
  +    urls=""
  +    while [ ".$1" != . ]; do
  +        case ".$1" in
  +            .-r ) shift
  +                  urls="$urls $1" ;;
  +              * ) packages="${packages} $1"
  +        esac
  +        shift
  +    done
  +    if [ ".$urls" = . ]; then
  +        urls="ftp://ftp.openpkg.org";
  +    fi
  +    if [ ".${packages}" = . ]; then
           if [ ".$P" = . ]; then
               die "package cannot be identified. Neither parameter given nor 
\$P set."
           fi
           all="$P"
       else
  -        all="$*"
  +        all="${packages}"
       fi
  -    for i in $all; do
  -        search_for $i ftp://ftp.openpkg.org/current/SRC/
  -        search_for $i ftp://ftp.openpkg.org/stable/SRC/
  -        REL=`$E/lib/openpkg/curl -l -s ftp://ftp.openpkg.org/release/ |\
  -             sed -e 's;
;;' |\
  -             egrep '^[1-9][0-9]*\.[0-9]+$' | sort -rn`
  -        for r in $REL; do
  -            search_for $i ftp://ftp.openpkg.org/release/$r/UPD/
  -            search_for $i ftp://ftp.openpkg.org/release/$r/SRC/
  -            search_for $i ftp://ftp.openpkg.org/release/$r/SRC/PLUS/
  -        done
  +    for name in $all; do
  +        search_index $name $urls
       done
   }
   
  @@ -2898,7 +2942,7 @@
           \$ openpkg dev query   # matchinstance|canonifybranch     query 
script internals
           \$ openpkg dev release # [[spec]...] [-dry] [-m "msg"]    release 
package changes to master server
           \$ openpkg dev run     # [[spec]...] [-dry] -c "cmd" [-f] append cmd 
to %prep for spec and run rpm -bp
  -        \$ openpkg dev search  # [[spec]...]                      search a 
package on master server
  +        \$ openpkg dev search  # [-r repourl...] [[spec]...]      search a 
package in repository index
           \$ openpkg dev setup   # [[[spec]ctag]exec]               initial 
setup of openpkg dev working environment
           \$ openpkg dev srcdir  # [dir]                            use a 
different source directory
           \$ openpkg dev test    # [[spec]...]                      run 
functional test (reserved for future use)
  @@ .
______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
CVS Repository Commit List                     openpkg-cvs@openpkg.org

Reply via email to