diff --git a/Services/AutoMaintainer/definition.go b/Services/AutoMaintainer/definition.go index d854cec9920bfac69835f0a406c32e7be5b206f2..56c51424e50e0bf06fce3be2e1430d88ccc2364c 100644 --- a/Services/AutoMaintainer/definition.go +++ b/Services/AutoMaintainer/definition.go @@ -58,7 +58,7 @@ func hasUser(gitlabClient *gitlab.Client, email string) (*gitlab.User, error) { } // ExtractMaintainer takes a ProjectID and a filename and tries to extract the user name -// and email address of the '# Maintainer:' field +// and email address of the '# Maintainer:' field, or the 'maintainer=' variable func ExtractMaintainer(gitlabClient *gitlab.Client, projectID interface{}, filename, ref string) (*[2]Maintainer, error) { maintainerSlice := [2]Maintainer{} @@ -72,15 +72,16 @@ func ExtractMaintainer(gitlabClient *gitlab.Client, projectID interface{}, filen } // Run over every line of the received raw file, we will check the first - // occurrence of '# Maintainer' + // occurrence of '# Maintainer' or 'maintainer=' scanner := bufio.NewScanner(bytes.NewReader(file)) for scanner.Scan() { scannedLine := scanner.Text() - if strings.HasPrefix(scannedLine, "# Maintainer:") { - // Strip the # Maintainer: and pass everything else - line := strings.ReplaceAll(scannedLine, "# Maintainer:", "") + if strings.HasPrefix(scannedLine, "maintainer=") || strings.HasPrefix(scannedLine, "# Maintainer:") { + line := strings.TrimPrefix(scannedLine, "maintainer=") + line = strings.TrimPrefix(line, "# Maintainer:") line = strings.TrimSpace(line) + line = strings.Trim(line, "\"") address, err := mail.ParseAddress(line) if err != nil { diff --git a/Services/AutoMaintainer/definition_test.go b/Services/AutoMaintainer/definition_test.go index 6be01671dfb6c4b50acf65e44e71fd6d99a6b6c9..d068aa3b8bca18320f5af9663052fad8699114f4 100644 --- a/Services/AutoMaintainer/definition_test.go +++ b/Services/AutoMaintainer/definition_test.go @@ -31,6 +31,7 @@ func Test_hasUserSimple(t *testing.T) { user, err := hasUser(client, "foo@bar.org") if err != nil { t.Errorf("expected error = nil, got = %s", err) + return } assertEqStr(t, "foo", user.Username) } @@ -42,6 +43,7 @@ func Test_hasUserNoMatch(t *testing.T) { mux.HandleFunc("/api/v4/users", func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, "[]"); err != nil { t.Fatalf("error writing response: %v", err) + return } }) @@ -84,6 +86,29 @@ func Test_ExtractMaintainerSimple(t *testing.T) { maintainerSlice, err := ExtractMaintainer(client, 1, "APKBUILD", "master") if err != nil { t.Errorf("got unexpected error: %v", err) + return + } + assertEqStr(t, "foo@bar.org", maintainerSlice[0].GetEmail()) + assertEqStr(t, "Foo", maintainerSlice[0].GetName()) + assertEqStr(t, "foo@bar.org", maintainerSlice[1].GetEmail()) + assertEqStr(t, "Foo", maintainerSlice[1].GetName()) +} + +func Test_ExtractMaintainerVar(t *testing.T) { + mux, server, client := mocklab.Setup(t) + defer mocklab.Teardown(server) + + mux.HandleFunc("/api/v4/projects/1/repository/files/APKBUILD/raw", func(w http.ResponseWriter, r *http.Request) { + if _, err := io.WriteString(w, "maintainer=\"Foo <foo@bar.org>\""); err != nil { + t.Fatalf("error writing response: %v", err) + return + } + }) + + maintainerSlice, err := ExtractMaintainer(client, 1, "APKBUILD", "master") + if err != nil { + t.Errorf("got unexpected error: %v", err) + return } assertEqStr(t, "foo@bar.org", maintainerSlice[0].GetEmail()) assertEqStr(t, "Foo", maintainerSlice[0].GetName()) @@ -98,12 +123,14 @@ func Test_ExtractMaintainerTeam(t *testing.T) { mux.HandleFunc("/api/v4/projects/1/repository/files/APKBUILD/raw", func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, "# Maintainer: team/X <foo@bar.org>"); err != nil { t.Fatalf("error writing response: %v", err) + return } }) maintainerSlice, err := ExtractMaintainer(client, 1, "APKBUILD", "master") if err != nil { t.Errorf("got unexpected error: %v", err) + return } assertEqStr(t, "foo@bar.org", maintainerSlice[0].GetEmail()) assertEqStr(t, "team/X", maintainerSlice[0].GetName()) @@ -118,12 +145,14 @@ func Test_ExtractMaintainerSimpleNoName(t *testing.T) { mux.HandleFunc("/api/v4/projects/1/repository/files/APKBUILD/raw", func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, "# Maintainer: <foo@bar.org>"); err != nil { t.Fatalf("error writing response: %v", err) + return } }) maintainerSlice, err := ExtractMaintainer(client, 1, "APKBUILD", "master") if err != nil { t.Errorf("got unexpected error: %v", err) + return } assertEqStr(t, "foo@bar.org", maintainerSlice[0].GetEmail()) assertEqStr(t, "", maintainerSlice[0].GetName()) @@ -138,6 +167,7 @@ func Test_ExtractMaintainerNoMaintainer(t *testing.T) { mux.HandleFunc("/api/v4/projects/1/repository/files/APKBUILD/raw", func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, ""); err != nil { t.Fatalf("error writing response: %v", err) + return } }) @@ -157,6 +187,7 @@ func Test_ExtractMaintainerBadFormatUnclosedAngleAddr(t *testing.T) { mux.HandleFunc("/api/v4/projects/1/repository/files/APKBUILD/raw", func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, "# Maintainer: Foo <foo@bar.org"); err != nil { t.Fatalf("error writing response: %v", err) + return } }) @@ -176,6 +207,7 @@ func Test_ExtractMaintainerMissingAddress(t *testing.T) { mux.HandleFunc("/api/v4/projects/1/repository/files/APKBUILD/raw", func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, "# Maintainer: Foo"); err != nil { t.Fatalf("error writing response: %v", err) + return } }) @@ -195,6 +227,7 @@ func Test_ExtractMaintainerEmpty(t *testing.T) { mux.HandleFunc("/api/v4/projects/1/repository/files/APKBUILD/raw", func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, "# Maintainer:"); err != nil { t.Fatalf("error writing response: %v", err) + return } }) @@ -214,12 +247,14 @@ func Test_ExtractMaintainerTag(t *testing.T) { mux.HandleFunc("/api/v4/projects/1/repository/files/APKBUILD/raw", func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, "# Maintainer: Foo <foo+alpine@bar.org>"); err != nil { t.Fatalf("error writing response: %v", err) + return } }) maintainerSlice, err := ExtractMaintainer(client, 1, "APKBUILD", "master") if err != nil { t.Errorf("got unexpected error: %v", err) + return } assertEqStr(t, "foo+alpine@bar.org", maintainerSlice[0].GetEmail()) @@ -235,12 +270,14 @@ func Test_ExtractMaintainerMultipleTags(t *testing.T) { mux.HandleFunc("/api/v4/projects/1/repository/files/APKBUILD/raw", func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, "# Maintainer: Foo <foo+alpine+aports@bar.org>"); err != nil { t.Fatalf("error writing response: %v", err) + return } }) maintainerSlice, err := ExtractMaintainer(client, 1, "APKBUILD", "master") if err != nil { t.Errorf("got unexpected error: %v", err) + return } assertEqStr(t, "foo+alpine+aports@bar.org", maintainerSlice[0].GetEmail()) assertEqStr(t, "Foo", maintainerSlice[0].GetName())