From 206e75c597bba13fee22da14bc850cf5f6954d12 Mon Sep 17 00:00:00 2001 From: Johannes Marbach Date: Mon, 6 Dec 2021 21:09:49 +0100 Subject: [PATCH] get(Hook)Files: Use getFile, handle globs and dirs (MR 14) This commit includes three changes: 1. Use getFile in getHookFiles to add the contents of file hooks 2. Within getFile, first attempted a glob expansion on the specified file expression. This allows specifying e.g. /lib/udev/rules.d/*.rules. 3. Within getFile, next if the path points to a directory, add all files including those from subdirectories. This allows specifying e.g. /usr/share/X11/xkb. Relates to: postmarketOS/pmaports#1309 --- main.go | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index e24994d..2ca353b 100644 --- a/main.go +++ b/main.go @@ -156,10 +156,9 @@ func getHookFiles(filesdir string) misc.StringSet { defer f.Close() s := bufio.NewScanner(f) for s.Scan() { - if !exists(s.Text()) { + if err := getFile(files, s.Text(), true); err != nil { log.Fatalf("Unable to find file %q required by %q", s.Text(), path) } - files[s.Text()] = false } if err := s.Err(); err != nil { log.Fatal(err) @@ -243,13 +242,42 @@ func getFiles(files misc.StringSet, newFiles misc.StringSet, required bool) erro } func getFile(files misc.StringSet, file string, required bool) error { - if !exists(file) { + // Expand glob expression + expanded, _ := filepath.Glob(file) + if len(expanded) > 0 && expanded[0] != file { + for _, path := range expanded { + if err := getFile(files, path, required); err != nil { + return err + } + } + return nil + } + + fileInfo, err := os.Stat(file) + if err != nil { if required { return errors.New("getFile: File does not exist :" + file) } return nil } + if fileInfo.IsDir() { + // Recurse over directory contents + err := filepath.Walk(file, func(path string, f os.FileInfo, err error) error { + if err != nil { + return err + } + if f.IsDir() { + return nil + } + return getFile(files, path, required) + }) + if err != nil { + return err + } + return nil + } + files[file] = false // get dependencies for binaries @@ -258,8 +286,7 @@ func getFile(files misc.StringSet, file string, required bool) error { return nil } - err := getBinaryDeps(files, file) - if err != nil { + if err := getBinaryDeps(files, file); err != nil { return err }