mirror of
https://git.mills.io/prologic/zs.git
synced 2024-11-08 03:07:57 -05:00
Add support for .zsignore (Fixes #3)
This commit is contained in:
parent
26c0bfad0b
commit
239d26a15a
1
go.mod
1
go.mod
@ -4,6 +4,7 @@ go 1.18
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/russross/blackfriday/v2 v2.1.0
|
github.com/russross/blackfriday/v2 v2.1.0
|
||||||
|
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06
|
||||||
github.com/sirupsen/logrus v1.9.0
|
github.com/sirupsen/logrus v1.9.0
|
||||||
github.com/spf13/cobra v1.6.1
|
github.com/spf13/cobra v1.6.1
|
||||||
go.mills.io/static v0.0.0-20230312034046-6dff09caed3b
|
go.mills.io/static v0.0.0-20230312034046-6dff09caed3b
|
||||||
|
3
go.sum
3
go.sum
@ -24,6 +24,8 @@ github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBO
|
|||||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI=
|
||||||
|
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs=
|
||||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||||
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
|
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
|
||||||
@ -34,6 +36,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
|||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
|
27
main.go
27
main.go
@ -17,6 +17,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/russross/blackfriday/v2"
|
"github.com/russross/blackfriday/v2"
|
||||||
|
ignore "github.com/sabhiram/go-gitignore"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"go.mills.io/static"
|
"go.mills.io/static"
|
||||||
@ -28,10 +29,16 @@ const (
|
|||||||
// ZSDIR is the default directory for storing layouts and extensions
|
// ZSDIR is the default directory for storing layouts and extensions
|
||||||
ZSDIR = ".zs"
|
ZSDIR = ".zs"
|
||||||
|
|
||||||
|
// ZSIGNORE is the default ignore file
|
||||||
|
ZSIGNORE = ".zsignore"
|
||||||
|
|
||||||
// PUBDIR is the default directory for publishing final built content
|
// PUBDIR is the default directory for publishing final built content
|
||||||
PUBDIR = ".pub"
|
PUBDIR = ".pub"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Ignore holds a set of patterns to ignore from parsing a .zsignore file
|
||||||
|
var Ignore *ignore.GitIgnore
|
||||||
|
|
||||||
// Vars holds a map of global variables
|
// Vars holds a map of global variables
|
||||||
type Vars map[string]string
|
type Vars map[string]string
|
||||||
|
|
||||||
@ -263,6 +270,10 @@ func run(vars Vars, cmd string, args ...string) (string, error) {
|
|||||||
// content by an empty line. Header can be either YAML or JSON.
|
// content by an empty line. Header can be either YAML or JSON.
|
||||||
// If no empty newline is found - file is treated as content-only.
|
// If no empty newline is found - file is treated as content-only.
|
||||||
func getVars(path string, globals Vars) (Vars, string, error) {
|
func getVars(path string, globals Vars) (Vars, string, error) {
|
||||||
|
if Ignore.MatchesPath(path) {
|
||||||
|
return nil, "", nil
|
||||||
|
}
|
||||||
|
|
||||||
b, err := ioutil.ReadFile(path)
|
b, err := ioutil.ReadFile(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
@ -421,6 +432,10 @@ func buildRaw(path string, w io.Writer) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func build(path string, w io.Writer, vars Vars) error {
|
func build(path string, w io.Writer, vars Vars) error {
|
||||||
|
if Ignore.MatchesPath(path) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
ext := filepath.Ext(path)
|
ext := filepath.Ext(path)
|
||||||
if ext == ".md" || ext == ".mkd" {
|
if ext == ".md" || ext == ".mkd" {
|
||||||
return buildMarkdown(path, w, vars)
|
return buildMarkdown(path, w, vars)
|
||||||
@ -446,10 +461,11 @@ func buildAll(ctx context.Context, watch bool) error {
|
|||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
os.Mkdir(PUBDIR, 0755)
|
os.Mkdir(PUBDIR, 0755)
|
||||||
filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
|
filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
|
||||||
// ignore hidden files and directories
|
// ignore hidden files and directories and ignored patterns
|
||||||
if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") {
|
if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") || Ignore.MatchesPath(path) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// inform user about fs walk errors, but continue iteration
|
// inform user about fs walk errors, but continue iteration
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithError(err).Warn("error walking directory")
|
log.WithError(err).Warn("error walking directory")
|
||||||
@ -545,6 +561,13 @@ func main() {
|
|||||||
w, _ := os.Getwd()
|
w, _ := os.Getwd()
|
||||||
ensureFirstPath(filepath.Join(w, ZSDIR))
|
ensureFirstPath(filepath.Join(w, ZSDIR))
|
||||||
|
|
||||||
|
// initialise Ignore (.zsignore) patterns
|
||||||
|
if ignoreObject, err := ignore.CompileIgnoreFile(ZSIGNORE); err == nil {
|
||||||
|
Ignore = ignoreObject
|
||||||
|
} else {
|
||||||
|
Ignore = ignore.CompileIgnoreLines("")
|
||||||
|
}
|
||||||
|
|
||||||
if err := RootCmd.Execute(); err != nil {
|
if err := RootCmd.Execute(); err != nil {
|
||||||
log.WithError(err).Error("error executing command")
|
log.WithError(err).Error("error executing command")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
6
testdata/ignore/.test/index.html
vendored
Normal file
6
testdata/ignore/.test/index.html
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<html>
|
||||||
|
<body><h1 id="simple">Simple</h1>
|
||||||
|
|
||||||
|
<p>Simple page</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
3
testdata/ignore/.zs/layout.html
vendored
Normal file
3
testdata/ignore/.zs/layout.html
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<html>
|
||||||
|
<body>{{ content }}</body>
|
||||||
|
</html>
|
1
testdata/ignore/.zsignore
vendored
Normal file
1
testdata/ignore/.zsignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/ignored.txt
|
1
testdata/ignore/ignored.txt
vendored
Normal file
1
testdata/ignore/ignored.txt
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
This file is ignored
|
3
testdata/ignore/index.md
vendored
Normal file
3
testdata/ignore/index.md
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Simple
|
||||||
|
|
||||||
|
Simple page
|
Loading…
Reference in New Issue
Block a user