filelist/hookfiles: encapsulate dir searching out of slurpFiles

Move the directory searching / globbing code out of slurpFiles and into
the filelist module so it can be used elsewhere.
This commit is contained in:
Caleb Connolly
2023-04-07 02:51:57 +01:00
parent 8fac3004a6
commit f0544999db
2 changed files with 33 additions and 17 deletions

View File

@@ -1,6 +1,12 @@
package filelist package filelist
import "sync" import (
"fmt"
"path/filepath"
"sync"
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/misc"
)
type FileLister interface { type FileLister interface {
List() (*FileList, error) List() (*FileList, error)
@@ -45,6 +51,26 @@ func (f *FileList) Import(src *FileList) {
} }
} }
func (f *FileList) AddGlobbed(src string, dest string) (error) {
fFiles, err := misc.GetFiles([]string{src}, true)
if err != nil {
return fmt.Errorf("unable to add %q: %w", src, err)
}
// loop over all returned files from GetFile
for _, file := range fFiles {
if len(fFiles) > 1 {
// Glob with arbitrary subdirectories, so we need to
// remove the src path and prepend the dest path
f.Add(file, filepath.Join(dest, file[len(src):]))
} else {
// dest path specified, and only 1 file
f.Add(file, dest)
}
}
return nil
}
// iterate through the list and and send each one as a new File over the // iterate through the list and and send each one as a new File over the
// returned channel // returned channel
func (f *FileList) IterItems() <-chan File { func (f *FileList) IterItems() <-chan File {

View File

@@ -10,7 +10,6 @@ import (
"strings" "strings"
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist" "gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist"
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/misc"
) )
type HookFiles struct { type HookFiles struct {
@@ -60,22 +59,13 @@ func slurpFiles(fd io.Reader) (*filelist.FileList, error) {
for s.Scan() { for s.Scan() {
src, dest, has_dest := strings.Cut(s.Text(), ":") src, dest, has_dest := strings.Cut(s.Text(), ":")
fFiles, err := misc.GetFiles([]string{src}, true) if !has_dest {
if err != nil { dest = src
return nil, fmt.Errorf("unable to add %q: %w", src, err)
} }
// loop over all returned files from GetFile
for _, file := range fFiles { err := files.AddGlobbed(src, dest)
if !has_dest { if err != nil {
files.Add(file, file) return nil, err
} else if len(fFiles) > 1 {
// Don't support specifying dest if src was a glob
// NOTE: this could support this later...
files.Add(file, file)
} else {
// dest path specified, and only 1 file
files.Add(file, dest)
}
} }
} }