get package version in package list on Solaris
authorJamie Cameron <jcameron@webmin.com>
Wed, 27 May 2009 21:59:34 +0000 (21:59 +0000)
committerJamie Cameron <jcameron@webmin.com>
Wed, 27 May 2009 21:59:34 +0000 (21:59 +0000)
software/pkgadd-lib.pl
software/search.cgi
software/tree.cgi

index a2fbe17..9e417a0 100644 (file)
@@ -12,19 +12,46 @@ return ("pkginfo", "pkgadd", "pkgrm");
 # Fills the array %packages with a list of all packages
 sub list_packages
 {
-local($_, $list, $i); $i = 0;
-$list = join(' ', map { quotemeta($_) } @_);
-&open_execute_command(PKGINFO, "pkginfo $list", 1, 1);
+local $i = 0;
+local $list = join(' ', map { quotemeta($_) } @_);
+local $_;
+&open_execute_command(PKGINFO, "pkginfo -l $list", 1, 1);
 while(<PKGINFO>) {
-       last if (/The following software/i);
-       if (/^(\S+)\s+(\S+)\s+(.*)$/) {
-               $packages{$i,'name'} = $2;
-               $packages{$i,'class'} = $1;
-               $packages{$i,'desc'} = $3;
+       if (/^\s*PKGINST:\s*(\S+)/) {
+               # Start of new package
+               $packages{$i,'name'} = $1;
                $i++;
                }
+       elsif (/^\s*NAME:\s*(\S.*)/) {
+               $packages{($i-1),'desc'} = $1;
+               }
+       elsif (/^\s*CATEGORY:\s*([^\s,]+)/) {
+               $packages{($i-1),'class'} = $1;
+               }
+       elsif (/^\s*ARCH:\s*(\S+)/) {
+               $packages{($i-1),'arch'} = $1;
+               }
+       elsif (/^\s*VERSION:\s*(\S+)/) {
+               $packages{($i-1),'version'} = $1;
+               $packages{($i-1),'shortversion'} = $1;
+               $packages{($i-1),'shortversion'} =~ s/,REV=.*//;
+               }
        }
 close(PKGINFO);
+if (!$i) {
+       # Failed .. fall back to without -l
+       &open_execute_command(PKGINFO, "pkginfo $list", 1, 1);
+       while(<PKGINFO>) {
+               last if (/The following software/i);
+               if (/^(\S+)\s+(\S+)\s+(.*)$/) {
+                       $packages{$i,'name'} = $2;
+                       $packages{$i,'class'} = $1;
+                       $packages{$i,'desc'} = $3;
+                       $i++;
+                       }
+               }
+       close(PKGINFO);
+       }
 return $i;
 }
 
index bf07de4..14d9269 100755 (executable)
@@ -47,11 +47,12 @@ if (@match) {
                                  $text{'search_desc'} ], 100, 0, \@tds);
        foreach $i (@match) {
                local @cols;
+               local $v = $packages{$i,'shortversion'} ||
+                          $packages{$i,'version'};
                push(@cols, "<a href=\"edit_pack.cgi?search=$s&package=".
                      &urlize($packages{$i,'name'})."&version=".
                      &urlize($packages{$i,'version'})."\">".&html_escape(
-                       $packages{$i,'name'}.($packages{$i,'version'} ?
-                          " $packages{$i,'version'}" : ""))."</a>");
+                       $packages{$i,'name'}.($v ?  " $v" : ""))."</a>");
                $c = $packages{$i,'class'};
                push(@cols, $c ? &html_escape($c)
                                : $text{'search_none'});
index de4e104..a484e94 100755 (executable)
@@ -12,6 +12,8 @@ $n = &list_packages();
 for($i=0; $i<$n; $i++) {
        push(@pack, $packages{$i,'name'});
        push(@vers, $packages{$i,'version'});
+       push(@svers, $packages{$i,'shortversion'} ||
+                    $packages{$i,'version'});
        push(@class, $packages{$i,'class'});
        push(@desc, $packages{$i,'desc'});
        }
@@ -75,7 +77,7 @@ if ($heiropen{$_[0]}) {
                        print "<a href=\"edit_pack.cgi?package=",
                              &urlize($pack[$i]),"&version=",
                              &urlize($vers[$i]),"\">",&html_escape($pack[$i].
-                             ($vers[$i] ? " $vers[$i]" : "")),"</a></td>\n";
+                             ($svers[$i] ? " $svers[$i]" : "")),"</a></td>\n";
                        print "<td>",&html_escape($desc[$i]),"</td>\n";
                        print "</tr>\n";
                        }