Skip to content

Commit 4aa82b7

Browse files
authored
Feature: Use concurrent workers for deb driver (#322)
1 parent b7c013c commit 4aa82b7

2 files changed

Lines changed: 20 additions & 16 deletions

File tree

internal/origins/drivers/deb/parser.go

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1415
func 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

4346
func parseStatusBlock(

internal/origins/drivers/opkg/parser.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"qp/internal/origins/worker"
1212
"qp/internal/pkgdata"
1313
"strconv"
14+
"strings"
1415
)
1516

1617
func parseStatusFile(data []byte, origin string) ([]*pkgdata.PkgInfo, error) {
@@ -23,7 +24,7 @@ func parseStatusFile(data []byte, origin string) ([]*pkgdata.PkgInfo, error) {
2324
}
2425

2526
fields := debstyle.ParseStatusFields(block)
26-
if fields[fieldStatus] == "install ok installed" {
27+
if strings.Contains(fields[fieldStatus], "installed") {
2728
continue
2829
}
2930

0 commit comments

Comments
 (0)