[Solar-general] sort -V bug

Diego Saravia dsa en unsa.edu.ar
Lun Jul 5 14:32:07 CEST 2010


bueno, en un rato te lo paso

2010/7/4 Pablo Manuel Rizzo <info en pablorizzo.com>

> Me los pasas como adjuntos en un correo directo? porque pegando de acá
> me quedó con errores
>
>
>
>
> 2010/7/3 Diego Saravia <dsa en unsa.edu.ar>:
> > dado que nos fuimos del mundial, te mando pablo un par de programas
> >
> > el primero es uno en perl que llama al segundo para ordenar un archivo
> que
> > contiene una lista de archivos de ututo
> >
> > es un ls *.tbz2 efectuado en un /ututo/i686, o sea un repositorio de
> > paquetes
> >
> > al segundo si le das un argumento lo "canoniza"
> >
> > o sea lo transforma en un nombre facilmente separable en sus variables y
> > ordenable
> >
> > si le das dos argumentos, un paquete y un canonico los ordena, o sea da 1
> si
> > a>b, 0 si son iguales y -1 si a<b
> >
> > espero te sriva
> >
> >
> > #!/usr/bin/perl
> >
> >
> > sub first{
> >    #my ($data2,$data1)=@_;
> >     $data1=$a;
> >     $data2=$b;
> >    my $pack=`/home/dsa/dsatex/ubuild/scripts/upackname -o ${data2}.can
> > $data1`;
> >     #print "/home/dsa/dsatex/ubuild/scripts/upackname -o ${data2}.can
> > $data1";
> >     #print "pack:$pack";
> >    my ($normresp,$order)=split(/ /,$pack);
> >     #print "O:$order";
> >     return $order+0;
> > }
> > use Data::Dumper;
> > open(FILE, "/home/dsa/ubtest/listapack");
> > while(<FILE>){
> >
> >     $count++;
> >     if ($count>10){last}
> >     chomp $_;
> >     $pack=`/home/dsa/dsatex/ubuild/scripts/upackname -o $_`;
> >     chomp $pack;
> >     ($nombre,$version,$release,$system,$ext)=split(/_/,$pack);
> >     $datos=[$nombre,$version,$release,$system,$ext,$pack,$_];
> >     print "Pro: $nombre,$version,$release,$system,$ext\n";
> >     $dat->{$nombre}=[@{$dat->{$nombre}},$datos];
> >     $lista->{$nombre}=[@{$lista->{$nombre}},$pack];
> > }
> > close(FILE);
> >
> > #print"hh", Dumper $dat;
> >
> > foreach my $nombre (keys %$dat){
> >     print $nombre,"\n";
> >     $datacomp=$dat->{$nombre}->[0]->[5];
> >      print " ingresa: @{$lista->{$nombre}} \n";
> >     @ordenada=sort first @{$lista->{$nombre}};
> >     print "ordenada: @ordenada \n";
> >     foreach my $data (@{$dat->{$nombre}}){
> >
> >     ($n,$v,$r,$s,$e,$p,$o)=@$data;
> >
> >         $pack2=`/home/dsa/dsatex/ubuild/scripts/upackname -o $o
> $datacomp`;
> >         #print "BBBB$pack2\n";
> >         ($normresp,$order)=split(/ /,$pack2);
> >         ($nc,$vc,$rc,$sc,$ec)=split(/_/,$datacomp);
> >     print "   $v $r $s $e $p $o \n";
> >     print "   $vc $rc $sc $ec  - $normresp - $datacomp : $order \n";
> >
> > #$normresp - $datacomp - $order\n";
> >     }
> >
> > }
> >
> >
> > ######################################
> >
> > #!/bin/bash
> >
> > version(){
> > cat <<EOF
> > upackname $PROG_VERSION
> > Copyright (C) 2010 Diego Saravia <dsa en unsa.edu.ar>
> > License: $PROG_LICENCE
> > <http://gnu.org/licenses/gpl.html>
> > EOF
> > }
> >
> > help(){
> > cat <<EOF
> >     upackname PACKAGE
> >
> >     Splits package string in name, version and extension
> >
> >     Prints
> >     PACKSTRING:  Complete file name
> >     PACKDIR:     Directories preceding file name
> >     PACKTYPE:    NOEXT|UNKNOWNPKGEXT|BINPKGEXT|LISTEXT|METAEXT
> >     PACKEXT:     Extension (rpm, deb, ebuild, tbz2, etc)
> >     PACKSYSTEM:  i686, x86_64, hurd-i386, etc
> >     PACKNAME:    Packname
> >     PACKVERSION: Complete version
> >     PACKSV:      Source Version
> >     PACKRV:      Release Version
> >     PACKRVORDER: Release Version in Gentoo transformed for comparisson.
> >
> >     PACKCOMPLETENAME:           without extension
> >     PACKCOMPLETENORMALIZEDNAME: without extension in a normalized fashion
> > EOF
> > }
> >
> > usage(){
> > cat <<EOF
> > Usage:
> >     upackname  PACKAGE
> > EOF
> > }
> >
> > extsep(){
> >  for ext in $2 ; do
> >    rext=`echo $ext | sed  's|\.|\\\.|' `
> >    first=`echo $1 | sed "s/\.$rext\$//"`
> >    if test "x$first" != "x$1"; then
> >       PACKEXT=$ext
> >       PACKTYPE=$3
> >       PACKNOEXT=$first
> >       break
> >    fi
> >  done
> > }
> >
> > PROG_VERSION=0.1
> > PROG_LICENCE="AGPLv3+: GNU AGPL version 3 or later"
> > oneline=0
> > while test $# -gt 0  ; do
> >         case "$1" in
> >         -h|--help)
> >                 help
> >         ;;
> >         -v|-V|--version)
> >             version
> >                 ;;
> >             -u|--usage)
> >             usage
> >         ;;
> >             -o|--oneline)
> >             oneline=1
> >         ;;
> >         *)
> >                 FILES=$@
> >                 break
> >          ;;
> >         esac
> >     shift
> > done
> >
> >
> > if test x"$1" = x ; then
> >   usage
> >   exit
> > fi
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > anachar(){
> > local CADENA=$1
> > local char=$2
> >
> >  estext=`expr "$char" : '\([a-zA-Z0\.]\)'`
> >  if test x"$estext" != x ; then
> >     #echo CHAR $char
> >     ES=CHAR
> >     saca=$char
> >     nume= # no es necesario
> >    else
> >     nume=`expr "$CADENA" : '\([0-9]\+\)'`
> >     if test x"$nume" = x ; then
> >         saca=$char
> >         # lo pongo como char
> >         #ES=OTHER
> >          ES=CHAR
> >         #echo CHAR OTHER $char
> >         # es al vicio, solo preguntar por numeros
> >           #echo SEPARA $char
> >         #char=''
> >        else
> >          #echo NUM  $nume
> >          ES=NUMB
> >          saca=$nume
> >     fi
> >  fi
> >
> >
> > }
> >
> >
> > # ver caracter ~ en debian
> > order(){
> > # returns first as compared to second
> > CADENA1=$1
> > CADENA2=$2
> > #echo 1: $CADENA1 - 2: $CADENA2
> >
> > while true ; do
> >  char1=${CADENA1:0:1}
> >  char2=${CADENA2:0:1}
> >  #echo CHAR1: $char1 - CHAR2: $char2
> >  if test x"$char1" = x -a  x"$char2" = x ; then
> >   #echo SON IGUALES
> >   ORDER=0
> >   break
> >  elif test x"$char1" = x -a  x"$char2" != x ; then
> >   #echo CADENA1 PRIMERO T
> >   ORDER=-1
> >   break
> >  elif test x"$char1" != x -a  x"$char2" = x ; then
> >   #echo CADENA2 PRIMERO T
> >   ORDER=1
> >   break
> >  fi
> >
> >  anachar $CADENA1 $char1
> >  CADENA1=${CADENA1#$saca}
> >  ES1=$ES
> >  nume1=$nume
> >
> >  anachar $CADENA2 $char2
> >  CADENA2=${CADENA2#$saca}
> >  ES2=$ES
> >  nume2=$nume
> >  #RES="$ES1 - $ES2 - $char1 - $char2 - $nume1 - $nume2"
> >
> >  if test x"$ES1" = xNUMB -a x"$ES2" = xNUMB ; then
> >   if test x"$nume1" = x"$nume2" ; then
> >     #echo continue IGUALES NUMB: $RES
> >     continue
> >    elif test $nume1 -gt $nume2; then
> >     #echo "CADENA2 PRI 2        : $RES"
> >     ORDER=1
> >    else
> >     #echo "CADENA1 PRI 2        : $RES"
> >     ORDER=-1
> >    fi
> >   break
> >
> >  elif test x"$ES1" = xCHAR -a x"$ES2" = xCHAR ; then
> >   if test x"$char1" = x"$char2" ; then
> >    #echo continue IGUALES CHAR: $RES
> >    continue
> >   elif test $char1 > $char2; then
> >     #echo "CADENA1 PRI 3        : $RES"
> >     ORDER=-1
> >   else
> >     #echo "CADENA2 PRI 3        : $RES"
> >     ORDER=1
> >   fi
> >   break
> >
> > elif test x"$ES1" = xCHAR -a x"$ES2" = xNUMB ; then
> >  if test x"$char1" = x0 ; then
> >     #echo "CADENA1 PRI 4 0      : $RES"
> >     ORDER=-1
> >     break
> >    else
> >     #echo "CADENA2 PRI 4        : $RES"
> >     ORDER=1
> >   fi
> >   break
> > elif test x"$ES1" = xNUMB -a x"$ES2" = xCHAR ; then
> >  if test x"$char2" = x0 ; then
> >     #echo "CADENA2 PRI 4 0      : $RES"
> >     ORDER=1
> >    else
> >     #echo "CADENA1 PRI 4        : $RES"
> >     ORDER=-1
> >    fi
> >   break
> > fi
> >
> > #echo lll $char - $nume - $EST - $estext - $CADENA1
> > done
> > }
> >
> > #order apo1002300.001.45g.ui67 apo1002300.001.45g.ui68b
> >
> > #echo OOO $ORDER
> > #exit
> >
> >
> > PACK=$1
> > COMPPACK=$2
> >
> > #echo NNN $1 JJJ  $2 KKK
> > #PACKSTRING=`basename $PACK`
> > PACKSTRING=`echo $PACK | awk -F/ '{print $NF}'`
> > PACKDIRPRE=${PACK%${PACKSTRING}} # en dos pasos por si no tiene /
> >
> > if test x"$PACKDIRPRE" = x/ ; then
> >   PACKDIR=/
> >  else
> >   PACKDIR=${PACKDIRPRE%/}
> > fi
> >
> > # 4 kind: file list (lf), metapacks (ebuild ubuild suma), binary packs,
> > source packs
> > METAEXT="ebuild ubuild summa"
> > LISTEXT="lf can"
> > # esto no es asi, cambiar
> >
> > #KNOWN:
> > BINPKGEXT="tgz tbz2 deb rpm"
> > #SEE:
> > PKGEXT="tar.gz tgz tar.bz tar.bz2 tbz tbz2 ZIP sip jar gz Z z bz2 bz 7Z
> 7z
> > RAR rar LHa LHA lha lzh a deb lzma xz rpm"
> >
> > PACKTYPE=0 # EXIST EXTENSION
> > PACKEXT=""
> > # packtype
> > PACKNAMEVERS=$PACKSTRING
> >
> >
> > ########################################3 test sobre archivos reales, ver
> > que pasa si no se quiere esto
> > # o sea proveer
> >
> >
> > # basename?
> >
> > extsep $PACKSTRING "$BINPKGEXT" BINPKGEXT
> >
> > if test x"$PACKEXT" = x ; then
> >    extsep $PACKSTRING "$LISTEXT" LISTEXT
> > fi
> > if test x"$PACKEXT" = x ; then
> >    extsep $PACKSTRING "$METAEXT" METAEXT
> > fi
> >
> >
> > if test x"$PACKEXT" = x ; then
> >   PACKEXT=`echo $PACKSTRING | awk -F. '{print $NF}'`
> >   PACKNOEXT=${PACKSTRING%.${PACKEXT}}
> >   PACKTYPE=UNKNOWNPKGEXT
> > fi
> > if test x"$PACKEXT" = x ; then
> >     PACKNOEXT=$PACKSTRING
> >     PACKTYPE=NOEXT
> > fi
> >
> >
> > #echo mmmmmmmmmmmmmmm $PACKEXT
> > PACKERROR=''
> >
> >
> > case $PACKEXT in
> > can)
> >   `echo $PACKNOEXT| sed 's/\(.*\)_\(.*\)_\(.*\)_\(.*\)_\(.*\)$/export
> > PACKNAME\=\1 PACKSV\=\2 PACKRVORDER\=\3 PACKSYSTEM\=\4 PACKEXT\=\5'/`
> >
> > #echo CAN $PACKNAME $PACKSV $PACKRVORDER $PACKEXT
> > ;;
> > ebuild|ubuild|tbz2)
> > # en build info o ebuild  no parece haber info sobre nombre o version
> >
> >     #http://distfiles.gentoo.org/distfiles/pms-3.pdf
> >
> >     `echo $PACKNOEXT | sed -e
> >
> 's/\(.*\)-\(\([[:digit:]]\+\(\.[[:digit:]]\+\)*\+[a-z]\?\)\(\(_\(alpha\|beta\|pre\|rc\|p\)[[:digit:]]*\)*\(-r\([[:digit:]]\+\)\)\?\)\)$/export
> > PACKNAME=\1 PACKVERSION=\2 PACKSV=\3 PACKRVPRE=\5 PACKGENTOOPRE=\6
> > PACKGENTOORE=\8 PACKGENTOORENUM=\9/'`
> >
> > if test x"$PACKNAME" = x ; then
> >     echo ERROR, NO ES UN ARCHIVO GENTOO
> >     PACKERROR="No es Gentoo"
> > fi
> >
> > if test x"$PACKGENTOOPRE" = x ; then
> >   #PACKRV=${PACKRVPRE#-} # no porque a veces debbiera agregar _ y otras -
> >  PACKSRORDER=5
> >  else
> >   #PACKRV=$PACKRVPRE
> >  PACKSRORDERPRE=`echo $PACKGENTOOPRE| sed -r -e "s/_alpha/1./" \
> >  -e "s/_beta/2./" \
> >  -e "s/_pre/3./" \
> >  -e "s/_rc/4./" \
> >  -e "s/_p/6./" `
> >
> >  PACKSRORDER=`echo $PACKSRORDERPRE| sed  -e 's/\.$//' `
> >
> > fi
> >
> > PACKRV=$PACKRVPRE
> >
> > if test x"$PACKGENTOORE" = x ; then
> >     PACKRVORDER=$PACKSRORDER.0
> >   else
> >     PACKRVORDER=$PACKSRORDER.$PACKGENTOORENUM
> > fi
> >
> > #echo bbbbbbbbbbbbbbb $PACKGENTOOPRE  $PACKGENTOORE - $PACKGENTOORENUM -
> > $PACKSRORDER -  $PACKSRORDERPRE
> >
> >
> >     #PACKNAME=sed -e
> >
> 's/(.*\)\(-[[:digit:]]\+\(\.[[:digit:]]\+\)*\+[a-z]\?\(_\(alpha\|beta\|pre\|rc\|p\)[[:digit:]]*\)*\(-r[[:digit:]]\+\)\?\)$//'`
> >     #PACKVERSION=`echo $PACK|cut -d- -f2-`
> >     #if test x"$PACKVERSION" =  x"$PACKNAME" ; then  # esto es raro,
> >     #    PACKVERSION=''
> >     #    # que el cut ponga el primer campo si no hay segundo ver
> >     #    #PACKVERSION=0
> >     # fi
> >
> >     #sed 's/-[0-9]\{1,\}.*$//'
> >     ;;
> >
> > #Ebuild file names consist of four logical subsections:
> >
> > #pkg-ver{_suf{#}}{-r#}.ebuild
> >
> > #Note: The brackets ({}) delineate optional fields and do not appear in
> the
> > literal package name. # represents any non-zero positive integer.
> >
> > #The first subsection, pkg, is the package name, which should only
> contain
> > lowercase letters, the digits 0-9, and any number of single hyphen (-),
> > underscore (_) or plus (+) characters. Examples: util-linux, sysklogd and
> > gtk+. We have some packages in Portage that don't follow these rules, but
> > your packages should.
> >
> > #The second subsection, ver, is the version of the package, which should
> > normally be same as the version on the main source tarball. The version
> is
> > normally made up of two or three (or more) numbers separated by periods,
> > such as 1.2 or 4.5.2, and may have a single letter immediately following
> the
> > last digit; e.g., 1.4b or 2.6h. The package version is joined to the
> package
> > name with a hyphen. For example: foo-1.0, bar-2.4.6.
> >
> > #Important: If you're thinking of using a trailing letter in your version
> > string, note that the trailing letter should not be used to signify alpha
> or
> > beta status for the package, since alphas and betas are prereleases and
> > letter revisions are newer versions. This is an important distinction
> > because Portage uses an ebuild's version number to determine if it is
> newer
> > or older than other packages with the same category and name. It's very
> > important that version numbers faithfully represent the version of the
> > package so that Portage properly performs its dependency checking duties.
> >
> > #The third subsection, {_suf{#}}, is optional and may contain one of
> these
> > predefined suffixes, listed in least-recent to most-recent order:
> > #Suffix     Meaning
> > #_alpha     Alpha release
> > #_beta     Beta release
> > #_pre     Prerelease
> > #_rc     Release candidate
> > #(none)     Normal release
> > #_p     Patch level (normally accompanied by trailing integer)
> >
> > #Any of these suffixes may be immediately followed by a non-zero positive
> > integer, e.g., linux-2.4.0_pre10. Assuming identical version parts, the
> > suffixes are ordered as follows (lower means older): _alpha < _beta <
> _pre <
> > _rc < (no suffix) < _p.
> >
> > #When comparing identical suffixes with trailing integers, the one with
> the
> > larger integer will be considered most recent. Example: foo-1.0_alpha4 is
> > more recent than foo-1.0_alpha3.
> >
> > #The fourth subsection of the package name is the Gentoo Linux-specific
> > revision number ({-r#}). This subsection, like the suffix, is also
> optional.
> > # is a non-zero positive integer; e.g., package-4.5.3-r3.
> >
> > #This revision number is independent of the version of the source tarball
> > and is used to inform people that a new and improved Gentoo Linux
> revision
> > of a particular package is available. Initial releases of ebuilds must
> have
> > no revision number; e.g., package-4.5.3 and are considered by Portage to
> > have a revision number of zero. This means that counting goes as follows:
> > 1.0 (initial version), 1.0-r1, 1.0-r2, etc.
> >
> > #If you make non-trivial improvements to an existing ebuild file, you
> should
> > copy the ebuild file to a new file with the revision number incremented
> by
> > 1. Remember to always make mentions of your changes in the ChangeLog when
> > you bump a revision and in your CVS commit message; not doing so is
> against
> > policy.
> >
> > #... and I suppose that we actually have a fifth section of the ebuild
> name
> > as well -- the .ebuild extension itself.
> >
> > rpm)
> > # spec si hay nombre, version y release, verificar que esto funcione bien
> al
> > abrir cada paquete
> >
> > #    PACKNAME=`echo $PACKNOEXT |sed 's/-[^-]*-[^-]*$//'`
> >     PACKNAME=`echo $PACKNOEXT |sed 's/-[^-]*-.*$//'`
> >     PACKVERSIONPRE=${PACKNOEXT#${PACKNAME}} # primero el nombre por si es
> > todo
> >     PACKVERSIONSYS=${PACKVERSIONPRE#-}
> >
> > if test x"$PACKNAME" = x ; then
> >     echo ERROR, NO ES UN ARCHIVO RPM
> >     PACKERROR="No es RPM"
> > fi
> >
> >
> > PACKVERSION=`echo $PACKVERSIONSYS | sed
> >
> 's/\.\(\(darwin\|freebsd\|netbsd\|kfreebsd\|knetbsd\|openbsd\|hurd\|gnu\|linux\)-\)\?\(noarch\|src\|i486\|i586\|i686\|athlon\|ppc\|x86_64\|i386\|ia64\|alpha\|amd64\|armeb\|arm\|hppa\|m32r\|m68k\|mips\|mipsel\|powerpc\|ppc64\|s390\|s390x\|sh3\|sh3eb\|sh4\|sh4eb\|sparc\)$//'`
> >     PACKSYSTEMPRE=${PACKVERSIONSYS#${PACKVERSION}} # primero el nombre
> por
> > si es todo
> >     PACKSYSTEM=${PACKSYSTEMPRE#.}
> >
> >     PACKNOSYSTEM=$PACKNAME-$PACKVERSION
> >
> >     `echo $PACKVERSION| sed 's/\([^-]*\)-\(.*\)$/export PACKSV\=\1
> > PACKRV\=\2/'`
> >
> >
> >
> >
> >
> >
> > #    echo KKKK $PACKSV   KKKKK $PACKSYSTEM KKKKKK $PACKRV
> >
> >
> >
> >     # `echo $PACKNOEXT | sed -e
> >
> 's/\([a-zA-Z0-9_\-\+]*\)-\([a-zA-Z0-9_\.]*\)-\([a-zA-Z0-9_\.]*\)\.\(noarch\|src\|i386\|i686\|athlon\|ppc\|x86_64\)$/export
> > PACKNAME\="\1"  PACKVERSION\="\2-\3.\4"  PACKOV\="\2" PACKRV\="\3"
> > PACKARCH\="\4"/'`
> >
> >     #older systems do not have arch part, see
> >     #        my $name = $1;
> >     #        my $version = $2;
> >     #        my $release = $3;
> >     #        my $arch = $4;
> >
> >     #$ rpm -qp --qf '%{NAME}' some.rpm
> >
> >     #rpm -qa|sed 's/-[^-]*-[^-]*$//'
> >
> >     #RPM <name>-<version>-<release>.<architecture>.rpm
> nano-0.98-2.i386.rpm
> > libgnomeuimm-2.0-2.0.0-3.src.rpm
> >
> >     #A package label is contained within the file and does not
> necessarily
> >     #need to match the name of the file.
> >
> >     #Additionally, libraries are distributed in two separate packages for
> >     #each version. One contains the precompiled code, while the second
> one
> >     #contains the development files such as headers, static library
> files,
> >     #etc. for the library in question. Those packages have "-devel"
> appended
> > to their name field. Users need to carefully check so that
> >     #the version of the development package matches that of the binary
> >     #package, otherwise the library may not work very well.
> >     ;;
> >
> > deb)
> >
> > # en control parece haber info sobre el nombre, no sobre las versiones,
> usar
> > para verificar
> >
> >     #DEB
> > <foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
> >
> >     PACKNAME=`echo $PACKNOEXT | awk -F_ '{print $1}'`
> >     PACKVERSIONSYSPRE=${PACKNOEXT#${PACKNAME}}  # en dos pasos por si el
> > nombre debian esta mal y no usa _
> >     PACKVERSIONSYS=${PACKVERSIONSYSPRE#_}
> >
> > if test x"$PACKNAME" = x ; then
> >     echo ERROR, NO ES UN ARCHIVO DEB
> >     PACKERROR="No es deb"
> > fi
> >
> >     #echo MMMMM $PACKVERSION
> >     #igual que el rpm con _ en vez de .
> >     PACKVERSION=`echo $PACKVERSIONSYS | sed
> >
> 's/_\(\(darwin\|freebsd\|netbsd\|kfreebsd\|knetbsd\|openbsd\|hurd\|gnu\|linux\)-\)\?\(noarch\|src\|i486\|i586\|i686\|athlon\|ppc\|x86_64\|i386\|ia64\|alpha\|amd64\|armeb\|arm\|hppa\|m32r\|m68k\|mips\|mipsel\|powerpc\|ppc64\|s390\|s390x\|sh3\|sh3eb\|sh4\|sh4eb\|sparc\)$//'`
> >
> > if test x"$PACKVERSION" = x ; then
> >     echo ERROR, NO ES UN ARCHIVO DEB
> >     PACKERROR="No es deb"
> > fi
> >
> >     PACKNOSYSTEM=$PACKNAME_$PACKVERSION
> >   echo MMMMM $PACKVERSION  - $PACKNOSYSTEM
> >     PACKSYSTEMPRE=${PACKVERSIONSYS#${PACKVERSION}} # primero el nombre
> por
> > si es todo
> >     PACKSYSTEM=${PACKSYSTEMPRE#_}
> >
> >     `echo $PACKVERSION| sed 's/\([^-]*\)-\(.*\)$/export PACKSV\=\1
> > PACKRV\=\2/'`
> >
> > if test x"$PACKSV" = x ; then
> >     echo ERROR, NO ES UN ARCHIVO DEB
> >     PACKERROR="No es deb"
> > fi
> >
> >     # echo KKKK $PACKSV   KKKKK $PACKSYSTEM KKKKKK $PACKRV KKKK
> > $PACKNOSYSTEM
> >
> >
> >
> #\([a-z][a-z0-9\+\-\.]+\)_\([a-zA-Z0-9_\.]*\)-\([0-9a-zA-Z\+\.\~]+\)_\(noarch\|src\|noarch\|i386\|i686\|athlon\|ppc\|x86_64\)
> >
> >      #The name of the package itself (not the filename, just the name of
> the
> > package) can contain lowercase letters, numbers, and the "-" and "+"
> > characters.
> >      #debian_revision
> >
> >      #This part of the version number specifies the version of the Debian
> > package based on the upstream version.
> >      #It may contain only alphanumerics and the characters + . ~ (plus,
> full
> > stop, tilde) and is compared in the same way as the upstream_version is.
> >      #It is optional; if it isn't present then the upstream_version may
> not
> > contain a hyphen.
> >      #This format represents the case where a piece of software was
> written
> > specifically to be turned into a Debian package,
> >      #and so there is only one "debianisation" of it and therefore no
> > revision indication is required.
> >      #It is conventional to restart the debian_revision at 1 each time
> the
> > upstream_version is increased.
> >      #The package management system will break the version number apart
> at
> > the last hyphen in the string
> >      #(if there is one) to determine the upstream_version and
> > debian_revision. The absence of a debian_revision is equivalent to a
> > debian_revision of 0
> >
> >      #The VVV component is the version number specified by the upstream
> >      #developer. There are no standards in place here, so the version
> number
> >      #may have formats as different as "19990513" and "1.3.8pre1".
> >
> >      #The RRR component is the Debian revision number, and is specified
> by
> >      #the Debian developer (or an individual user if he chooses to build
> the
> >      #package himself). This number corresponds to the revision level of
> the
> >      #Debian package, thus, a new revision level usually signifies
> changes
> >      #in the Debian Makefile (debian/rules), the Debian control file
> >      #(debian/control), the installation or removal scripts (debian/p*),
> or
> >      #in the configuration files used with the package.
> >
> >      #The AAA component identifies the processor for which the package
> was
> >      #built. This is commonly i386, which refers to chips compatible to
> >      #Intel's 386 or later versions. For other possibilities review
> Debian's
> >      #FTP directory structure at What are all those directories at the
> >      #Debian FTP archives?, Section 6.7. For details, see the description
> of
> >      #"Debian architecture" in the manual page dpkg-architecture(1).
> >
> >      #
> >
> >      #i386 ia64 alpha amd64 armeb arm hppa m32r m68k mips mipsel powerpc
> > ppc64 s390 s390x sh3 sh3eb sh4 sh4eb sparc darwin-i386 darwin-ia64
> > darwin-alpha darwin-amd64 darwin-armeb darwin-arm darwin-hppa darwin-m32r
> > darwin-m68k darwin-mips darwin-mipsel darwin-powerpc darwin-ppc64
> > darwin-s390 darwin-s390x darwin-sh3 darwin-sh3eb darwin-sh4 darwin-sh4eb
> > darwin-sparc freebsd-i386 freebsd-ia64 freebsd-alpha freebsd-amd64
> > freebsd-armeb freebsd-arm freebsd-hppa freebsd-m32r freebsd-m68k
> > freebsd-mips freebsd-mipsel freebsd-powerpc freebsd-ppc64 freebsd-s390
> > freebsd-s390x freebsd-sh3 freebsd-sh3eb freebsd-sh4 freebsd-sh4eb
> > freebsd-sparc kfreebsd-i386 kfreebsd-ia64 kfreebsd-alpha kfreebsd-amd64
> > kfreebsd-armeb kfreebsd-arm kfreebsd-hppa kfreebsd-m32r kfreebsd-m68k
> > kfreebsd-mips kfreebsd-mipsel kfreebsd-powerpc kfreebsd-ppc64
> kfreebsd-s390
> > kfreebsd-s390x kfreebsd-sh3 kfreebsd-sh3eb kfreebsd-sh4 kfreebsd-sh4eb
> > kfreebsd-sparc knetbsd-i386 knetbsd-ia64 knetbsd-alpha knetbsd-amd64
> > knetbsd-armeb knetbsd-arm knetbsd-hppa knetbsd-m32r knetbsd-m68k
> > knetbsd-mips knetbsd-mipsel knetbsd-powerpc knetbsd-ppc64 knetbsd-s390
> > knetbsd-s390x knetbsd-sh3 knetbsd-sh3eb knetbsd-sh4 knetbsd-sh4eb
> > knetbsd-sparc netbsd-i386 netbsd-ia64 netbsd-alpha netbsd-amd64
> netbsd-armeb
> > netbsd-arm netbsd-hppa netbsd-m32r netbsd-m68k netbsd-mips netbsd-mipsel
> > netbsd-powerpc netbsd-ppc64 netbsd-s390 netbsd-s390x netbsd-sh3
> netbsd-sh3eb
> > netbsd-sh4 netbsd-sh4eb netbsd-sparc openbsd-i386 openbsd-ia64
> openbsd-alpha
> > openbsd-amd64 openbsd-armeb openbsd-arm openbsd-hppa openbsd-m32r
> > openbsd-m68k openbsd-mips openbsd-mipsel openbsd-powerpc openbsd-ppc64
> > openbsd-s390 openbsd-s390x openbsd-sh3 openbsd-sh3eb openbsd-sh4
> > openbsd-sh4eb openbsd-sparc hurd-i386 hurd-ia64 hurd-alpha hurd-amd64
> > hurd-armeb hurd-arm hurd-hppa hurd-m32r hurd-m68k hurd-mips hurd-mipsel
> > hurd-powerpc hurd-ppc64 hurd-s390 hurd-s390x hurd-sh3 hurd-sh3eb hurd-sh4
> > hurd-sh4eb hurd-sparc ;;
> >
> >
> >
> >     ;;
> >
> > esac
> >
> #\(\(darwin\|freebsd\|netbsd\|kfreebsd\|knetbsd\|openbsd\|hurd\|gnu\|linux\)-\)\?
> > ### aqui seguro tenemos PACKNOEXT
> >
> > ## si no tenemos PACKNOSYSTEM lo buscamos
> > if test x"$PACKSYSTEM" = x ; then
> >     PACKNOSYSTEM=`echo $PACKNOEXT | sed
> >
> 's/[\._-]\(noarch\|src\|i486\|i586\|i686\|athlon\|ppc\|x86_64\|i386\|ia64\|alpha\|amd64\|armeb\|arm\|hppa\|m32r\|m68k\|mips\|mipsel\|powerpc\|ppc64\|s390\|s390x\|sh3\|sh3eb\|sh4\|sh4eb\|sparc\)$//'`
> >
> > # if apears something identifing origin as ubuntu, ututo, pacman etc must
> be
> > extracted here
> >
> >
> >
> > #echo MMMM $PACKNAME - $PACKNOSYSTEM -$PACKNOEXT
> >     PACKSYSTEMPRE=${PACKNOEXT#${PACKNOSYSTEM}} # primero el nombre por si
> es
> > todo
> >     PACKSYSTEMPRE3=${PACKSYSTEMPRE#-}
> >     PACKSYSTEMPRE2=${PACKSYSTEMPRE3#_}
> >     PACKSYSTEM=${PACKSYSTEMPRE2#.}
> >
> >
> > fi
> >
> > if test x"$PACKNOSYSTEM" = x ; then
> >    PACKNOSYSTEM=$PACKNOEXT
> > fi
> >
> > # aqui seguro tenemos PACKNOSYSTEM
> > # si no tenemos PACKVERSION (PACKNONAME) lo buscamos
> >
> > #echo MMMM $PACKNAME - $PACKNOSYSTEM -$PACKNOEXT
> >
> >
> > if test x"$PACKNAME" = x ; then
> >    PACKVERSION=`echo $PACKNOSYSTEM | awk -F- '{print $NF}'`
> >     if test x"$PACKVERSION" = x"$PACKNOSYSTEM" ; then
> >        PACKVERSION=''
> >     fi
> >     PACKNAMEPRE=${PACKNOSYSTEM%${PACKVERSION}} # en dos pasos por si no
> > tiene -
> >     PACKNAME=${PACKNAMEPRE%-}
> >
> > #echo MMMM $PACKNAME
> > fi
> >
> > ## si no conseguimos una PACKNAME diferente la buscamos de nuevo
> > if test x"$PACKNAME" = x"$PACKNOSYSTEM" ; then
> >    PACKVERSION=`echo $PACKNOSYSTEM | awk -F- '{print $NF}'`
> >     if test x"$PACKVERSION" = x"$PACKNOSYSTEM" ; then
> >        PACKVERSION=''
> >     fi
> >     PACKNAMEPRE=${PACKNOSYSTEM%${PACKVERSION}} # en dos pasos por si no
> > tiene -
> >     PACKNAME=${PACKNAMEPRE%_}
> > fi
> >
> > #echo MMM $PACKSV
> > if test x"$PACKSV" = x -a x"$PACKVERSION" != x ; then
> >
> >     PACKRV=''
> >     PACKSV=`echo $PACKVERSION| sed 's/_\(.*\)$//'`
> >     if test x"$PACKVERSION" = x"$PACKSV" ; then
> >         ### PACKSV='' # no better to have this as VERSION if not RV
> >         :
> >        else
> >         PACKRVPRE=${PACKVERSION%$PACKSV}
> >         PACKRV=${PACKRVPRE%$_}
> >     fi
> >
> > fi
> >
> > if test x"$PACKRVORDER" = x ; then
> >      PACKRVORDER=$PACKRV
> > fi
> >
> >
> > SLASH=_
> > #if test x"$PACKSV" = x ; then
> > #   SLASH=''
> > #fi
> > SSLASH=_
> > #if test x"$PACKRVORDER" = x ; then
> > #   SSLASH=''
> > #fi
> >
> PACKCOMPLETENORMALIZEDNAME="$PACKNAME$SLASH$PACKSV$SSLASH${PACKRVORDER}_${PACKSYSTEM}_$PACKEXT"
> >
> > if test x"$COMPPACK" != x ; then
> >     `echo $COMPPACK| sed 's/\(.*\)_\(.*\)_\(.*\)_\(.*\)_\(.*\)$/export
> > COMPPN\=\1 COMPPV\=\2 COMPPR\=\3 COMPPS\=\4 COMPPE\=\5'/`
> >
> > #echo COMP $COMPPV  - $COMPPR
> > #echo PACK $PACKSV - $PACKRVORDER
> >
> > order ${PACKSV}_$PACKRVORDER ${COMPPV}_$COMPPR
> >
> > fi
> >
> >
> > if test x"$oneline" = x0 ; then
> >
> > echo "PACKSTRING='$PACKSTRING'"
> > echo "PACKDIR='$PACKDIR'"
> > echo "PACKNAME='$PACKNAME'"
> > echo "PACKVERSION='$PACKVERSION'" #version and release
> > # no: si no hay version , version debe ser 0
> > echo "PACKEXT='$PACKEXT'"
> > echo "PACKTYPE='$PACKTYPE'"
> > echo "PACKCOMPLETENAME='$PACKNOSYSTEM'" # without extension
> >
> >
> > echo "PACKSYSTEM='$PACKSYSTEM'"
> > echo "PACKSV='$PACKSV'"
> > echo "PACKRV='$PACKRV'"
> > echo "PACKERROR='$PACKERROR'"
> > echo "PACKRVORDER='$PACKRVORDER'"
> >
> > echo "PACKCOMPLETENORMALIZEDNAME='$PACKCOMPLETENORMALIZEDNAME'" # without
> > extension
> > echo "ORDER='$ORDER'"
> > echo "COMPPN='$COMPPN'"
> > echo "COMPPV='$COMPPV'"
> > echo "COMPPR='$COMPPR'"
> > echo "COMPPS='$COMPPS'"
> > echo "COMPPE='$COMPPE'"
> > else
> >
> > #echo "$PACKNAME:$PACKSV:$PACKRVORDER:$PACKTYPE"
> >  if test x"$ORDER" != x ; then
> >    echo "$PACKCOMPLETENORMALIZEDNAME $ORDER"
> >   else
> >    echo "$PACKCOMPLETENORMALIZEDNAME"
> >  fi
> > fi
> >
> >
> >
> >
> >
> > #No me fije en otros sistemas, pero los paquetes versionados al estilo
> > #gentoo tiene una dificultad cuando corresponden a releases,
> > #prereleases, betas, etc. Salvo por eso, se ordenarían fácilmente con
> > #ls -v , que compara versiones numéricas en los nombres de archivos.
> > #Pero cuando las versiones son cosas como paquete-0.3.7-alpha1 y
> > #paquete-0.3.7 allí falla.
> >
> > #Lo que hice para resolver eso es previamente hacer una lista de los
> > #archivos a ordenar, en la lista reemplazar esas cosas por números,
> > #para que el ls los pueda ordenar, así:
> >
> > #sed -r -e "s/(-[0-9.]+)_alpha/\1_000_/" \
> > # -e "s/(-[0-9.]+)_beta/\1_001_/" \
> > # -e "s/(-[0-9.]+)_pre/\1_002_/" \
> > # -e "s/(-[0-9.]+)_rc/\1_003_/" \
> > # -e "s/(-[0-9.]+)_p/\1_004_/")
> > #On Sunday 07 September 2008 08:28:11 Jim Meyering wrote:
> > #> IMHO, changing sort -V to produce more intuitively-correct results
> > #> is the way to go.
> > #>
> > #> With ls -v, I'm willing to make the change as well, *assuming*
> > #> no one produces a counterargument.
> > #>
> > #> The question is what ordering function to use.
> > #> The more generally-useful the better.  i.e., I hope
> > #> it can be compatible with both the rpm and deb version sorters.
> > #I made an investigation of existing functions which sort version
> strings:
> > #strverscmp - from glibc (now with its equivalent in gnulib)
> > #rpmvercmp - from rpm
> > #ververcmp - from dpkg##
> >
> > #The main problem of all these functions is dealing with suffixes. So I
> > #modified them to drop the suffixes. So it is 6 implementations together
> (3
> > #original + 3 modified).
> >
> > #Then I ran a few series of tests with all implementations. I think the
> > #modified version of ververcmp (from dpkg) gives the best results -
> consider
> > #attached results of an example - results.tar.bz2#
> >
> > #So I propose a new function filevercmp (attachment filevercmp.c) as the
> > #predicate function for new sort --version-sort.
> >
> > #In the attachment is also the whole "testing framework" which I used to
> > #compare these functions - strverscmp.tar.bz2 - follow the steps in
> README
> > #inside archive. It is developed a bit quickly but I hope it could be
> > #useful :-)#
> >
> >
> > #Kamil
> > #
> http://www.opensubscriber.com/message/[email protected]/10201323.html
> >
> > #http://old.nabble.com/Possible-bug-in-sort--V-td26804985.html
> >
> > #> cat a | /build/toolchain/lin32/coreutils-8.2/bin/sort -V
> > #> kernel-2.6.18-164.2.1.el5.x86_64.rpm
> > #> kernel-2.6.18-164.6.1.el5.x86_64.rpm
> > #> kernel-2.6.18-164.el5.x86_64.rpm
> > #>
> > #> The result should be
> > #> kernel-2.6.18-164.el5.x86_64.rpm
> > #> kernel-2.6.18-164.2.1.el5.x86_64.rpm
> > #> kernel-2.6.18-164.6.1.el5.x86_64.rpm
> > #>
> > #> Is it a bug is sort -V?
> >
> >
> > #I agree the behavior is pretty awkward. Nevertheless the behavior
> > #is well documented:
> >
> > #
> http://www.gnu.org/software/coreutils/manual/html_node/Details-about-version-sort.html
> >
> > #The "bug" is triggered by the underscore in "x86_64". It's not treated
> as
> > file
> > #suffix in that case. However it works fairly well when you replace
> "x86_64"
> > by
> > #"i686".
> > #From 3069d50b766a2db8b86406904b7327e5de5e315f Mon Sep 17 00:00:00 2001
> > #From: =?utf-8?q?P=C3=A1draig=20Brady?= <P en ...>
> > #Date: Thu, 17 Dec 2009 10:48:54 +0000
> > #Subject: [PATCH] doc: enhance and reference info about version
> comparison
> >
> > #* doc/coreutils.texi (sort invocation): Reference the additional
> > #info about filevercmp rather than the unused strverscmp.
> > #(Details about version sort): Add some examples that are not
> > #handled well by fileversmp.
> > #* src/ls.c: Change a comment referencing the now unused strverscmp.
> > #---
> > # doc/coreutils.texi |   33 ++++++++++++++++++++++++---------
> > # src/ls.c           |    2 +-
> > # 2 files changed, 25 insertions(+), 10 deletions(-)
> >
> > #-This functionality is implemented using gnulib's @code{filevercmp}
> > function.
> > #-One result of that implementation decision is that @samp{ls -v}
> > #-and @samp{sort -V} do not use the locale category, @env{LC_COLLATE},
> > #-which means non-numeric prefixes are sorted as if @env{LC_COLLATE} were
> > set
> > #-to @samp{C}.
> > #+This functionality is implemented using gnulib's @code{filevercmp}
> > function,
> > #+which has some caveats worth noting.
> > #+
> > #+ en itemize @bullet
> > #+ en item @env{LC_COLLATE} is ignored, which means @samp{ls -v} and
> @samp{sort
> > -V}
> > #+will sort non-numeric prefixes as if the @env{LC_COLLATE} locale
> category
> > #+was set to @samp{C}.
> > #+ en item Some suffixes will not be matched by the regular
> > #+expression mentioned above.  Consequently these examples may
> > #+not sort as you expect:
> > #+
> > #+ en example
> > #+abc-1.2.3.4.7z
> > #+abc-1.2.3.7z
> > #+ en end example
> > #+
> > #+ en example
> > #+abc-1.2.3.4.x86_64.rpm
> > #+abc-1.2.3.x86_64.rpm
> > #+ en end example
> > #+ en end itemize
> >
> > # @node General output formatting
> > # @subsection General output formatting
> > #diff --git a/src/ls.c b/src/ls.c
> > #index aeaa584..5c7f6aa 100644
> > #--- a/src/ls.c
> > #+++ b/src/ls.c
> > #@@ -3272,7 +3272,7 @@ DEFINE_SORT_FUNCTIONS (extension, cmp_extension)
> > #    All the other sort options, in fact, need xstrcoll and strcmp
> variants,
> > #    because they all use a string comparison (either as the primary or
> > secondary
> > #    sort key), and xstrcoll has the ability to do a longjmp if strcoll
> > fails for
> > #-   locale reasons.  Last, strverscmp is ALWAYS available in coreutils,
> > #+   locale reasons.  Last, filevercmp is ALWAYS available in coreutils,
> > #    thanks to the gnulib library. */
> > # static inline int
> > # cmp_version (struct fileinfo const *a, struct fileinfo const *b)
> > #--
> > #1.6.2.5
> >
> > #como compilar a partir de un ebuild, de un spec y de un control
> > #category no esta en ebuild, si en ubuild
> >
> > #http://www.redhat.com/archives/rpm-list/2003-January/msg00006.html
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > #RES1=`echo ".$CADENA1" |sed -e 's/[^0-9a-zA-Z]\+/./g'| sed -e
> > 's/\([a-zA-Z]\+\)/\1:./g' | sed -e 's/\([0-9]\+\)/\1;./g' | sed -e
> > 's/.\([0]\+\)/.\1:./g'`
> > #RES2=`echo ".$CADENA2" |sed -e 's/[^0-9a-zA-Z]\+/./g'| sed -e
> > 's/\([a-zA-Z]\+\)/\1:./g' | sed -e 's/\([0-9]\+\)/\1;./g' | sed -e
> > 's/.\([0]\+\)/.\1:./g'`
> > #echo $RES1
> > #echo $RES2
> >
> > #FIN=0
> > ##IFS=.
> >
> >
> >
> >
> >
> > #RES1=${RES1#.}
> > #RES2=${RES2#.}
> > #coma=`echo "$RES1" |sed -e 's/\..\+$//'`
> > #RES1=${RES1#$coma}
> >
> > #comb=`echo "$RES2" |sed -e 's/\..\+$//'`
> > #RES2=${RES2#$comb}
> >
> > #echo $coma $comb - $RES1 $RES2
> > #if test x"$coma" != x"$comb" ; then
> > #   echo SON DISTINTOS $coma $comb
> > #   FIN=1
> > #fi#
> >
> > #if test x"$RES1" = x -o x"$RES2" = x  ; then
> > # echo junto termino: $coma - $comb
> > #   FIN=1
> > #fi
> > #bbb=s
> > #
> > # if test x"$item" != x; then
> > # echo $item
> >
> > # fi
> >
> > #done
> >
> >
> >
> >
> >
> >
> > El 1 de julio de 2010 17:26, Pablo Manuel Rizzo <info en pablorizzo.com>
> > escribió:
> >>
> >> 2010/7/1 Diego Saravia <dsa en unsa.edu.ar>
> >>>
> >>>
> >>> hay que integrarlo con el programa que deduce las versiones, para eso
> lo
> >>> escribi
> >>>
> >>> no es mi idea generar un nuevo sort, con el tiempo el sort -V
> seguramente
> >>> andara
> >>>
> >>> solamente poder saber si un paquete es posterior o anterior a lo que ya
> >>> esta instalado.
> >>>
> >>> supongo que el programa que dado un paquete indica su nombre y
> versiones,
> >>> cuando le digas cual es la versin instalada de ese mismo paquete te
> dira
> >>> adicionalmente si es anterior o posterior
> >>>
> >>> esa es mi idea,
> >>>
> >>> se te ocurre algo mejor
> >>>
> >>
> >> Ah, está bien, había entendido otra cosa.
> >>
> >> --
> >> Pablo Manuel Rizzo
> >> -------------------------------
> >> http://pablorizzo.com
> >> -------------------------------
> >>
> >>
> >> ________________________________________________
> >>
> >>
> >> Solar-General es una lista abierta a toda la comunidad, sin ninguna
> >> moderación, por lo que se apela a la tolerancia y al respeto mutuo.
> >> Las opiniones expresadas son responsabilidad exclusiva de sus
> >> respectivos/as autores/as. La Asociación Solar no se hace responsable
> por
> >> los mensajes vertidos, ni representan necesariamente el punto de vista
> de la
> >> Asociación Solar.
> >>
> >> Solar-general en lists.ourproject.org
> >> https://lists.ourproject.org/cgi-bin/mailman/listinfo/solar-general
> >
> >
> >
> > --
> > Diego Saravia
> > Diego.Saravia en gmail.com
> > NO FUNCIONA->dsa en unsa.edu.ar
> >
> > ________________________________________________
> >
> >
> > Solar-General es una lista abierta a toda la comunidad, sin ninguna
> > moderación, por lo que se apela a la tolerancia y al respeto mutuo.
> > Las opiniones expresadas son responsabilidad exclusiva de sus
> respectivos/as
> > autores/as. La Asociación Solar no se hace responsable por los mensajes
> > vertidos, ni representan necesariamente el punto de vista de la
> Asociación
> > Solar.
> >
> > Solar-general en lists.ourproject.org
> > https://lists.ourproject.org/cgi-bin/mailman/listinfo/solar-general
> >
>
>
>
> --
> Pablo Manuel Rizzo
> -------------------------------
> http://pablorizzo.com
> -------------------------------
>
> ________________________________________________
>
>
> Solar-General es una lista abierta a toda la comunidad, sin ninguna
> moderación, por lo que se apela a la tolerancia y al respeto mutuo.
> Las opiniones expresadas son responsabilidad exclusiva de sus
> respectivos/as autores/as. La Asociación Solar no se hace responsable por
> los mensajes vertidos, ni representan necesariamente el punto de vista de la
> Asociación Solar.
>
> Solar-general en lists.ourproject.org
> https://lists.ourproject.org/cgi-bin/mailman/listinfo/solar-general
>



-- 
Diego Saravia
Diego.Saravia en gmail.com
NO FUNCIONA->dsa en unsa.edu.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: https://lists.ourproject.org/pipermail/solar-general/attachments/20100705/35a1a820/attachment.htm 


Más información sobre la lista de distribución Solar-general