[coreboot-gerrit] Change in coreboot[master]: util/scripts/maintainers.go: Use a full glob parser
Patrick Georgi (Code Review)
gerrit at coreboot.org
Mon Nov 12 17:34:28 CET 2018
Patrick Georgi has uploaded this change for review. ( https://review.coreboot.org/29603
Change subject: util/scripts/maintainers.go: Use a full glob parser
......................................................................
util/scripts/maintainers.go: Use a full glob parser
Instead of checking only for three cases, just use a glob parser.
This requires to download the parser first, using:
$ go get github.com/gobwas/glob # It's MIT licensed
After that, maintainers src/arch/x86/memlayout.h emits:
src/arch/x86/memlayout.h is in subsystem X86 ARCHITECTURE
Maintainers: []
src/arch/x86/memlayout.h is in subsystem MEMLAYOUT
Maintainers: [Julius Werner <jwerner at chromium.org>]
The latter entry was invisible to the maintainers tool because its path
description wasn't in one of the supported formats.
Change-Id: I7e5cf4269415269552e35f2c73952ce3dff487e1
Signed-off-by: Patrick Georgi <pgeorgi at google.com>
---
M util/scripts/maintainers.go
1 file changed, 22 insertions(+), 71 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/03/29603/1
diff --git a/util/scripts/maintainers.go b/util/scripts/maintainers.go
index 352d0a1..f99dc37 100644
--- a/util/scripts/maintainers.go
+++ b/util/scripts/maintainers.go
@@ -19,13 +19,15 @@
"log"
"os"
"os/exec"
- "path/filepath"
+
+ "github.com/gobwas/glob"
)
type subsystem struct {
name string
maintainer []string
- file []string
+ paths []string
+ globs []glob.Glob
}
var subsystems []subsystem
@@ -84,6 +86,14 @@
return maintainers, nil
}
+func path_to_glob(path string) glob.Glob {
+ // if prefix, allow all subdirectories
+ if path[len(path)-1] == '/' {
+ path += "**"
+ }
+ return glob.MustCompile(path)
+}
+
func build_maintainers(maintainers []string) {
var current *subsystem
for _, line := range maintainers {
@@ -119,9 +129,8 @@
case 'F':
{
// add files
- current.file =
- append(current.file,
- line[3:len(line)])
+ current.paths = append(current.paths, line[3:len(line)])
+ current.globs = append(current.globs, path_to_glob(line[3:len(line)]))
break
}
case 'W':
@@ -142,77 +151,23 @@
for _, subsystem := range subsystems {
fmt.Println(subsystem.name)
fmt.Println(" ", subsystem.maintainer)
- fmt.Println(" ", subsystem.file)
+ fmt.Println(" ", subsystem.paths)
}
}
-func match_file(fname string, files []string) (bool, error) {
- var matched bool
- var err error
-
- for _, file := range files {
- /* Direct match */
- matched, err = filepath.Match(file, fname)
- if err != nil {
- return false, err
- }
- if matched {
- return true, nil
- }
-
- /* There are three cases that match_file can handle:
- *
- * dirname/filename
- * dirname/*
- * dirname/
- *
- * The first case is an exact match, the second case is a
- * direct match of everything in that directory, and the third
- * is a direct match of everything in that directory and its
- * subdirectories.
- *
- * The first two cases are handled above, the code below is
- * only for that latter case, so if file doesn't end in /,
- * skip to the next file.
- */
- if file[len(file)-1] != '/' {
- continue
- }
-
- /* Remove / because we add it again below */
- file = file[:len(file)-1]
-
- /* Maximum tree depth, as calculated by
- * $(( `git ls-files | tr -d "[a-z][A-Z][0-9]\-\_\." | \
- * sort -u | tail -1 | wc -c` - 1 ))
- * 11
- */
- max_depth := 11
-
- for i := 0; i < max_depth; i++ {
- /* Subdirectory match */
- file += "/*"
-
- if matched, err = filepath.Match(file, fname); err != nil {
- return false, err
- }
- if matched {
- return true, nil
- }
-
+func match_file(fname string, component subsystem) bool {
+ for _, glob := range component.globs {
+ if glob.Match(fname) {
+ return true
}
}
- return false, nil
+ return false
}
func find_maintainer(fname string) {
success := false
for _, subsystem := range subsystems {
- matched, err := match_file(fname, subsystem.file)
- if err != nil {
- log.Fatalf("match_file failed: %v", err)
- return
- }
+ matched := match_file(fname, subsystem)
if matched && subsystem.name != "THE REST" {
success = true
fmt.Println(fname, "is in subsystem",
@@ -228,11 +183,7 @@
func find_unmaintained(fname string) {
success := false
for _, subsystem := range subsystems {
- matched, err := match_file(fname, subsystem.file)
- if err != nil {
- log.Fatalf("match_file failed: %v", err)
- return
- }
+ matched := match_file(fname, subsystem)
if matched && subsystem.name != "THE REST" {
success = true
fmt.Println(fname, "is in subsystem",
--
To view, visit https://review.coreboot.org/29603
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7e5cf4269415269552e35f2c73952ce3dff487e1
Gerrit-Change-Number: 29603
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Georgi <pgeorgi at google.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20181112/919fdf22/attachment-0001.html>
More information about the coreboot-gerrit
mailing list