diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2022-12-05 13:55:41 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <wp32pw@gmail.com> | 2022-12-05 14:43:35 +0100 |
| commit | 64eb5abeff73f290c3b76aa97c6acd7ed627fa2d (patch) | |
| tree | e2bf2339b133543a2950fcc2eb0e9c25904bd3d5 | |
| parent | dff7de3a521bb4e0538796e8c96e380270f5bfc9 (diff) | |
pkg/email: refactor ParsePatch
Currently the function returns the values that are not being used
anywhere. Refactor it.
| -rw-r--r-- | pkg/email/parser.go | 4 | ||||
| -rw-r--r-- | pkg/email/patch.go | 42 | ||||
| -rw-r--r-- | pkg/email/patch_test.go | 18 |
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", + }, } |
