@@ -6,16 +6,17 @@ import (
66 "fmt"
77 "qp/internal/consts"
88 "qp/internal/origins/formats/debstyle"
9+ "qp/internal/origins/worker"
910 "qp/internal/pkgdata"
1011 "strconv"
1112 "strings"
1213)
1314
1415func parseStatusFile (data []byte , origin string , reasonMap map [string ]string ) ([]* pkgdata.PkgInfo , error ) {
15- var collectedErrors [] error
16- pkgs := [] * pkgdata. PkgInfo {}
16+ blocks := bytes . Split ( data , [] byte ( " \n \n " ))
17+ inputChan := make ( chan map [ string ] string , len ( blocks ))
1718
18- for block := range bytes . SplitSeq ( data , [] byte ( " \n \n " )) {
19+ for _ , block := range blocks {
1920 if len (block ) < 1 {
2021 continue
2122 }
@@ -25,19 +26,21 @@ func parseStatusFile(data []byte, origin string, reasonMap map[string]string) ([
2526 continue
2627 }
2728
28- pkg , err := parseStatusBlock (fields , reasonMap , origin )
29- if err != nil {
30- collectedErrors = append (collectedErrors , err )
31- }
32-
33- pkgs = append (pkgs , pkg )
29+ inputChan <- fields
3430 }
35-
36- if len (collectedErrors ) > 0 {
37- return pkgs , errors .Join (collectedErrors ... )
38- }
39-
40- return pkgs , nil
31+ close (inputChan )
32+
33+ resultChan , errorChan := worker .RunWorkers (
34+ inputChan ,
35+ func (fields map [string ]string ) (* pkgdata.PkgInfo , error ) {
36+ pkg , err := parseStatusBlock (fields , reasonMap , origin )
37+ return pkg , err
38+ },
39+ 0 ,
40+ len (blocks ),
41+ )
42+
43+ return worker .CollectOutput (resultChan , errorChan )
4144}
4245
4346func parseStatusBlock (
0 commit comments