aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/email/parser.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2023-09-01 12:11:42 +0200
committerAleksandr Nogikh <nogikh@google.com>2023-09-06 10:29:02 +0000
commit8c6013de89e4280c27344f6180db06ae27b7749f (patch)
tree237fca72b2999e8b8917bbbeb4de8c3c8f76703e /pkg/email/parser.go
parent736a3c37c74cb6da919ca7d68f3c1e2a2d2b62a7 (diff)
dashboard: auto-guess kernel and repo for #syz test
We used to support this only for external reportings, but let's auto-guess these parameters for all incoming patch testing commands.
Diffstat (limited to 'pkg/email/parser.go')
-rw-r--r--pkg/email/parser.go23
1 files changed, 16 insertions, 7 deletions
diff --git a/pkg/email/parser.go b/pkg/email/parser.go
index 2ed9495fd..efc63391b 100644
--- a/pkg/email/parser.go
+++ b/pkg/email/parser.go
@@ -296,13 +296,21 @@ func extractCommand(body string) (*SingleCommand, int) {
// For "fix:"/"dup:" we need a whole non-empty line of text.
switch cmd {
case CmdTest:
- args = extractArgsTokens(body[cmdPos+cmdEnd:], 2)
+ if strings.HasSuffix(str, ":") {
+ // For "#syz test:", we do want to query 2 arguments.
+ args = extractArgsTokens(body[cmdPos+cmdEnd:], 2)
+ } else {
+ // For "#syz test", it's likely there won't be anything else, so let's only parse
+ // the first line.
+ fmt.Printf("line: %s", body[cmdPos+cmdEnd:])
+ args = extractArgsLine(body[cmdPos+cmdEnd:], false)
+ }
case CmdSet, CmdUnset:
- args = extractArgsLine(body[cmdPos+cmdEnd:])
+ args = extractArgsLine(body[cmdPos+cmdEnd:], true)
case cmdTest5:
args = extractArgsTokens(body[cmdPos+cmdEnd:], 5)
case CmdFix, CmdDup:
- args = extractArgsLine(body[cmdPos+cmdEnd:])
+ args = extractArgsLine(body[cmdPos+cmdEnd:], true)
}
return &SingleCommand{
Command: cmd,
@@ -365,11 +373,12 @@ func extractArgsTokens(body string, num int) string {
return strings.TrimSpace(strings.Join(args, " "))
}
-func extractArgsLine(body string) string {
+func extractArgsLine(body string, skipWs bool) string {
pos := 0
- for pos < len(body) && (body[pos] == ' ' || body[pos] == '\t' ||
- body[pos] == '\n' || body[pos] == '\r') {
- pos++
+ if skipWs {
+ for pos < len(body) && unicode.IsSpace(rune(body[pos])) {
+ pos++
+ }
}
lineEnd := strings.IndexByte(body[pos:], '\n')
if lineEnd == -1 {