version2 (#1)
Co-authored-by: u80864958 <niklas.breitenstein@bit.admin.ch> Reviewed-on: #1
This commit is contained in:
61
pkg/cat/cater.go
Normal file
61
pkg/cat/cater.go
Normal file
@ -0,0 +1,61 @@
|
||||
package cat
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Cater map[string]string
|
||||
|
||||
func Path(paths ...string) (c Cater, err error) {
|
||||
c = make(Cater)
|
||||
var p os.FileInfo
|
||||
|
||||
for _, path := range paths {
|
||||
p, err = os.Stat(path)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if p.IsDir() {
|
||||
err = c.dir(path)
|
||||
} else {
|
||||
err = c.file(path)
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (c Cater) Ignored(ignore ignorer) Cater {
|
||||
cat := make(Cater)
|
||||
|
||||
for name, content := range c {
|
||||
if ignore.Ignore(name) {
|
||||
continue
|
||||
}
|
||||
cat[name] = content
|
||||
}
|
||||
|
||||
return cat
|
||||
}
|
||||
|
||||
func (c Cater) ToString(delemiter string) string {
|
||||
var sb strings.Builder
|
||||
|
||||
for name, content := range c {
|
||||
sb.WriteString(fmt.Sprintf(delemiter, name))
|
||||
sb.WriteString(content)
|
||||
}
|
||||
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
type ignorer interface {
|
||||
// Ignore() returns true when the given path shall be Ignored.
|
||||
Ignore(path string) bool
|
||||
}
|
58
pkg/cat/internal.go
Normal file
58
pkg/cat/internal.go
Normal file
@ -0,0 +1,58 @@
|
||||
package cat
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (c Cater) dir(dir string) error {
|
||||
files, err := os.ReadDir(dir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
i, err := file.Info()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
path := path.Join(dir, i.Name())
|
||||
|
||||
if !file.IsDir() {
|
||||
c.file(path)
|
||||
} else {
|
||||
c.dir(path)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c Cater) file(filePath string) error {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// read file into strings.Builder
|
||||
var sb strings.Builder
|
||||
reader := bufio.NewReader(file)
|
||||
|
||||
for {
|
||||
line, err := reader.ReadString('\n')
|
||||
if err != nil && err != io.EOF {
|
||||
return err
|
||||
}
|
||||
sb.WriteString(line)
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
c[filePath] = sb.String()
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user