aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/email/lore/read.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-12-17 15:38:19 +0100
committerAleksandr Nogikh <nogikh@google.com>2025-01-13 08:44:57 +0000
commit249ceea9b77a9eda26fb696c50b673d6f295d7f4 (patch)
treec2236298dc0b9b07f5450c63b5bad0f3a35f19f3 /pkg/email/lore/read.go
parent6dbc6a9bc76e06852841ed5c5bdbb78409b17f53 (diff)
pkg/email/lore: extract patch series
Refactor the code to make it more reusable. Add a method to extract specifically the list of new patch series.
Diffstat (limited to 'pkg/email/lore/read.go')
-rw-r--r--pkg/email/lore/read.go37
1 files changed, 28 insertions, 9 deletions
diff --git a/pkg/email/lore/read.go b/pkg/email/lore/read.go
index 7489f750f..ef0a0faa0 100644
--- a/pkg/email/lore/read.go
+++ b/pkg/email/lore/read.go
@@ -4,30 +4,49 @@
package lore
import (
+ "bytes"
"fmt"
"time"
+ "github.com/google/syzkaller/pkg/email"
"github.com/google/syzkaller/pkg/vcs"
)
type EmailReader struct {
- Extract func() ([]byte, error)
+ Read func() ([]byte, error)
}
// ReadArchive queries the parsed messages from a single LKML message archive.
-func ReadArchive(dir string, messages chan<- *EmailReader) error {
- repo := vcs.NewLKMLRepo(dir)
- commits, err := repo.ListCommitHashes("HEAD", time.Time{})
+func ReadArchive(repo vcs.Repo, fromTime time.Time) ([]EmailReader, error) {
+ commits, err := repo.ListCommitHashes("HEAD", fromTime)
if err != nil {
- return fmt.Errorf("failed to get recent commits: %w", err)
+ return nil, fmt.Errorf("failed to get recent commits: %w", err)
}
+ var ret []EmailReader
for _, iterCommit := range commits {
commit := iterCommit
- messages <- &EmailReader{
- Extract: func() ([]byte, error) {
+ ret = append(ret, EmailReader{
+ Read: func() ([]byte, error) {
return repo.Object("m", commit)
},
- }
+ })
}
- return nil
+ return ret, nil
+}
+
+func (er *EmailReader) Parse(emails, domains []string) (*email.Email, error) {
+ body, err := er.Read()
+ if err != nil {
+ return nil, err
+ }
+ msg, err := email.Parse(bytes.NewReader(body), emails, nil, domains)
+ if err != nil {
+ return nil, err
+ }
+ // Keep memory consumption low.
+ msg.Body = ""
+ msg.Patch = ""
+ // TODO: We definitely don't care about the patch here. Add an option to avoid extracting it?
+ // TODO: If emails/domains are nil, we also don't need to parse the body at all.
+ return msg, nil
}