diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-12-17 15:38:19 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-01-13 08:44:57 +0000 |
| commit | 249ceea9b77a9eda26fb696c50b673d6f295d7f4 (patch) | |
| tree | c2236298dc0b9b07f5450c63b5bad0f3a35f19f3 /pkg/email/lore/read.go | |
| parent | 6dbc6a9bc76e06852841ed5c5bdbb78409b17f53 (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.go | 37 |
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 } |
