@@ -523,7 +523,7 @@ func (o *redhatBase) parseInstalledPackages(stdout string) (models.Packages, mod
523
523
case constant .Amazon :
524
524
switch strings .Fields (o .getDistro ().Release )[0 ] {
525
525
case "2" :
526
- switch len (strings .Fields (line )) {
526
+ switch len (strings .Split (line , " " )) {
527
527
case 6 :
528
528
binpkg , srcpkg , err = o .parseInstalledPackagesLine (line )
529
529
case 7 :
@@ -575,7 +575,7 @@ func (o *redhatBase) parseInstalledPackages(stdout string) (models.Packages, mod
575
575
}
576
576
577
577
func (o * redhatBase ) parseInstalledPackagesLine (line string ) (* models.Package , * models.SrcPackage , error ) {
578
- switch fields := strings .Fields (line ); len (fields ) {
578
+ switch fields := strings .Split (line , " " ); len (fields ) {
579
579
case 6 , 7 :
580
580
sp , err := func () (* models.SrcPackage , error ) {
581
581
switch fields [5 ] {
@@ -592,8 +592,14 @@ func (o *redhatBase) parseInstalledPackagesLine(line string) (*models.Package, *
592
592
Version : func () string {
593
593
switch fields [1 ] {
594
594
case "0" , "(none)" :
595
+ if r == "" {
596
+ return v
597
+ }
595
598
return fmt .Sprintf ("%s-%s" , v , r )
596
599
default :
600
+ if r == "" {
601
+ return fmt .Sprintf ("%s:%s" , fields [1 ], v )
602
+ }
597
603
return fmt .Sprintf ("%s:%s-%s" , fields [1 ], v , r )
598
604
}
599
605
}(),
@@ -631,7 +637,7 @@ func (o *redhatBase) parseInstalledPackagesLine(line string) (*models.Package, *
631
637
}
632
638
633
639
func (o * redhatBase ) parseInstalledPackagesLineFromRepoquery (line string ) (* models.Package , * models.SrcPackage , error ) {
634
- switch fields := strings .Fields (line ); len (fields ) {
640
+ switch fields := strings .Split (line , " " ); len (fields ) {
635
641
case 7 :
636
642
sp , err := func () (* models.SrcPackage , error ) {
637
643
switch fields [5 ] {
@@ -648,8 +654,14 @@ func (o *redhatBase) parseInstalledPackagesLineFromRepoquery(line string) (*mode
648
654
Version : func () string {
649
655
switch fields [1 ] {
650
656
case "0" , "(none)" :
657
+ if r == "" {
658
+ return v
659
+ }
651
660
return fmt .Sprintf ("%s-%s" , v , r )
652
661
default :
662
+ if r == "" {
663
+ return fmt .Sprintf ("%s:%s" , fields [1 ], v )
664
+ }
653
665
return fmt .Sprintf ("%s:%s-%s" , fields [1 ], v , r )
654
666
}
655
667
}(),
@@ -699,20 +711,27 @@ func splitFileName(filename string) (name, ver, rel, epoch, arch string, err err
699
711
basename := strings .TrimSuffix (filename , ".rpm" )
700
712
701
713
archIndex := strings .LastIndex (basename , "." )
714
+ // support not standard style rpm fullname
715
+ // e.g.
716
+ // baz-0-1-i386 => i386
717
+ // qux-0--i386 => i386
718
+ if i := strings .LastIndex (basename [archIndex + 1 :], "-" ); i > - 1 {
719
+ archIndex = archIndex + (i + 1 )
720
+ }
702
721
if archIndex == - 1 {
703
- return "" , "" , "" , "" , "" , xerrors .Errorf ("unexpected file name. expected: %q, actual: %q" , "< name>-<version>-<release>. <arch>.rpm" , fmt . Sprintf ( "%s.rpm" , filename ) )
722
+ return "" , "" , "" , "" , "" , xerrors .Errorf ("unexpected file name. expected: %q, actual: %q" , "(<epoch>:)< name>-<version>-( <release>)(.|-) <arch>.rpm" , filename )
704
723
}
705
724
arch = basename [archIndex + 1 :]
706
725
707
726
relIndex := strings .LastIndex (basename [:archIndex ], "-" )
708
727
if relIndex == - 1 {
709
- return "" , "" , "" , "" , "" , xerrors .Errorf ("unexpected file name. expected: %q, actual: %q" , "< name>-<version>-<release>. <arch>.rpm" , fmt . Sprintf ( "%s.rpm" , filename ) )
728
+ return "" , "" , "" , "" , "" , xerrors .Errorf ("unexpected file name. expected: %q, actual: %q" , "(<epoch>:)< name>-<version>-( <release>)(.|-) <arch>.rpm" , filename )
710
729
}
711
730
rel = basename [relIndex + 1 : archIndex ]
712
731
713
732
verIndex := strings .LastIndex (basename [:relIndex ], "-" )
714
733
if verIndex == - 1 {
715
- return "" , "" , "" , "" , "" , xerrors .Errorf ("unexpected file name. expected: %q, actual: %q" , "< name>-<version>-<release>. <arch>.rpm" , fmt . Sprintf ( "%s.rpm" , filename ) )
734
+ return "" , "" , "" , "" , "" , xerrors .Errorf ("unexpected file name. expected: %q, actual: %q" , "(<epoch>:)< name>-<version>-( <release>)(.|-) <arch>.rpm" , filename )
716
735
}
717
736
ver = basename [verIndex + 1 : relIndex ]
718
737
@@ -787,7 +806,7 @@ func (o *redhatBase) parseUpdatablePacksLines(stdout string) (models.Packages, e
787
806
}
788
807
789
808
func (o * redhatBase ) parseUpdatablePacksLine (line string ) (models.Package , error ) {
790
- fields := strings .Fields (line )
809
+ fields := strings .Split (line , " " )
791
810
if len (fields ) < 5 {
792
811
return models.Package {}, xerrors .Errorf ("Unknown format: %s, fields: %s" , line , fields )
793
812
}
0 commit comments