aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2022-12-05 13:55:41 +0100
committerAleksandr Nogikh <wp32pw@gmail.com>2022-12-05 14:43:35 +0100
commit64eb5abeff73f290c3b76aa97c6acd7ed627fa2d (patch)
treee2bf2339b133543a2950fcc2eb0e9c25904bd3d5 /pkg
parentdff7de3a521bb4e0538796e8c96e380270f5bfc9 (diff)
pkg/email: refactor ParsePatch
Currently the function returns the values that are not being used anywhere. Refactor it.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/email/parser.go4
-rw-r--r--pkg/email/patch.go42
-rw-r--r--pkg/email/patch_test.go18
3 files changed, 18 insertions, 46 deletions
diff --git a/pkg/email/parser.go b/pkg/email/parser.go
index 796f0f7c2..6974f66d5 100644
--- a/pkg/email/parser.go
+++ b/pkg/email/parser.go
@@ -131,13 +131,13 @@ func Parse(r io.Reader, ownEmails []string, goodLists []string) (*Email, error)
patch, cmdStr, cmdArgs := "", "", ""
if !fromMe {
for _, a := range attachments {
- _, patch, _ = ParsePatch(string(a))
+ patch = ParsePatch(a)
if patch != "" {
break
}
}
if patch == "" {
- _, patch, _ = ParsePatch(bodyStr)
+ patch = ParsePatch(body)
}
cmd, cmdStr, cmdArgs = extractCommand(subject + "\n" + bodyStr)
}
diff --git a/pkg/email/patch.go b/pkg/email/patch.go
index 80fac6097..c77d19bed 100644
--- a/pkg/email/patch.go
+++ b/pkg/email/patch.go
@@ -5,23 +5,19 @@ package email
import (
"bufio"
- "fmt"
+ "bytes"
"regexp"
"strings"
)
-func ParsePatch(text string) (title, diff string, err error) {
- s := bufio.NewScanner(strings.NewReader(text))
- lastLine := ""
+func ParsePatch(message []byte) (diff string) {
+ s := bufio.NewScanner(bytes.NewReader(message))
diffStarted := false
for s.Scan() {
ln := s.Text()
if lineMatchesDiffStart(ln) {
diffStarted = true
diff += ln + "\n"
- if title == "" {
- title = lastLine
- }
continue
}
if diffStarted {
@@ -36,37 +32,9 @@ func ParsePatch(text string) (title, diff string, err error) {
continue
}
}
- if strings.HasPrefix(ln, "Subject: ") {
- title = ln[len("Subject: "):]
- continue
- }
- if ln == "" || title != "" || diffStarted {
- continue
- }
- lastLine = ln
- if strings.HasPrefix(ln, " ") {
- title = ln[4:]
- }
- }
- if err = s.Err(); err != nil {
- return
- }
- if strings.Contains(strings.ToLower(title), "[patch") {
- pos := strings.IndexByte(title, ']')
- if pos == -1 {
- err = fmt.Errorf("title contains '[patch' but not ']'")
- return
- }
- title = title[pos+1:]
- }
- title = strings.TrimSpace(title)
- if title == "" {
- err = fmt.Errorf("failed to extract title")
- return
}
- if diff == "" {
- err = fmt.Errorf("failed to extract diff")
- return
+ if err := s.Err(); err != nil {
+ panic("error while scanning from memory: " + err.Error())
}
return
}
diff --git a/pkg/email/patch_test.go b/pkg/email/patch_test.go
index 0919db9ca..a2be0d6c9 100644
--- a/pkg/email/patch_test.go
+++ b/pkg/email/patch_test.go
@@ -10,13 +10,7 @@ import (
func TestParsePatch(t *testing.T) {
for _, test := range tests {
t.Run(test.title, func(t *testing.T) {
- title, diff, err := ParsePatch(test.text)
- if err != nil {
- t.Fatalf("failed to parse patch: %v", err)
- }
- if test.title != title {
- t.Fatalf("title mismatch, want:\n%v\ngot:\n%v", test.title, title)
- }
+ diff := ParsePatch([]byte(test.text))
if test.diff != diff {
t.Fatalf("diff mismatch, want:\n%v\ngot:\n%v", test.diff, diff)
}
@@ -478,4 +472,14 @@ Index: usb-devel/drivers/usb/core/hub.c
dev_err(hub->intfdev, "activate --> %d\n", status);
`,
},
+ {
+ text: `Some
+Text
+Without
+Any
+Diff
+`,
+ diff: "",
+ title: "test empty patch",
+ },
}