From 8156fd2d3be280112378dcc3afebbff6bf7c5435 Mon Sep 17 00:00:00 2001 From: Izuru Yakumo Date: Fri, 21 Apr 2023 20:06:28 -0300 Subject: [PATCH] Add serve function, update documentation accordingly Signed-off-by: Izuru Yakumo --- README.md | 10 ++++++---- aya.1 | 29 +++++++++++++++-------------- cmd/aya/main.go | 25 +++++++++++++++++-------- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 0d61b73..18c65c3 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ This crow tengu stands for 'the fastest one in Gensokyo' and yes this is also a Build it manually assuming you have Go installed: - $ go install marisa.chaotic.ninja/aya@latest + $ go install marisa.chaotic.ninja/aya/cmd/aya@latest ## Ideology @@ -66,10 +66,10 @@ for f in ./blog/*.md ; do echo $timestamp \ "" \ "$title" \ - "http://ayaerge.com/$url" \ + "http://zserge.com/$url" \ "$descr" \ "$(date --date @$timestamp -R)" \ - "http://ayaerge.com/$url" \ + "http://zserge.com/$url" \ "" fi done | sort -r -n | cut -d' ' -f2- @@ -93,12 +93,14 @@ content generation, or additional commands, like LESS to CSS conversion: `aya build ` re-builds one file and prints resulting content to stdout. -`aya watch` rebuilds your site every time you modify any file. +`aya serve` serves your site over HTTP. `aya var [var1 var2...]` prints a list of variables defined in the header of a given markdown file, or the values of certain variables (even if it's an empty string). +`aya watch` rebuilds your site every time you modify any file. + ## License The software is distributed under the MIT license. diff --git a/aya.1 b/aya.1 index 33e2b08..b9b7661 100644 --- a/aya.1 +++ b/aya.1 @@ -16,21 +16,22 @@ Does it need one? .It Fast (of course) .El .Sh USAGE -.Ss (Re-)build your site. -.Nm -.Cm build -.Ss (Re-)build one file and prints resulting content to standard output. +.Bl -tag +.It build +(Re-)build a site or a file in particular +.It serve +Serve generated site over HTTP +.It var +Print a list of variables defined in a given markdown file. +.It watch +(Re-)build a site if any file changed +.Sh HISTORY .Nm -.Cm build -.Ar -.Ss (Re-)build your site every time you modify any file. -.Nm -.Cm watch -.Ss Print a list of variables defined in the header of a given markdown file. -.Nm -.Cm var -.Ar -.Ar ... +was originally forked from prologic/zs by Izuru +out of disgust with the latest revision, so he +used a earlier commit as a base, and then +eventually reimplemented older features from +zserge's original project. .Sh AUTHORS .Nm is maintained by Izuru Yakumo diff --git a/cmd/aya/main.go b/cmd/aya/main.go index d440d3f..cb2a5a6 100644 --- a/cmd/aya/main.go +++ b/cmd/aya/main.go @@ -4,7 +4,7 @@ import ( "bytes" "fmt" "io" - "io/ioutil" + "net/http" "os" "os/exec" "path/filepath" @@ -59,7 +59,7 @@ func globals() Vars { // stderr is printed to aya stderr, command output is returned as a string. func run(vars Vars, cmd string, args ...string) (string, error) { // First check if partial exists (.html) - if b, err := ioutil.ReadFile(filepath.Join(AYADIR, cmd+".html")); err == nil { + if b, err := os.ReadFile(filepath.Join(AYADIR, cmd+".html")); err == nil { return string(b), nil } @@ -90,7 +90,7 @@ func run(vars Vars, cmd string, args ...string) (string, error) { // content by an empty line. Header can be either YAML or JSON. // If no empty newline is found - file is treated as content-only. func getVars(path string, globals Vars) (Vars, string, error) { - b, err := ioutil.ReadFile(path) + b, err := os.ReadFile(path) if err != nil { return nil, "", err } @@ -359,6 +359,12 @@ func buildAll(watch bool) { time.Sleep(1 * time.Second) } } +// Serve the public directory over HTTP +func servePubDir() { + rootdir := http.Dir(PUBDIR) + http.Handle("/", http.FileServer(rootdir)) + log.Fatal(http.ListenAndServe(":8000", nil)) +} func init() { // prepend .aya to $PATH, so plugins will be found before OS commands @@ -372,9 +378,10 @@ func printUsage() { fmt.Printf("\n") fmt.Printf("Where is:\n") fmt.Printf("\tbuild\tGenerate site\n") + fmt.Printf("\tserve\tServe %v over HTTP\n", PUBDIR) + fmt.Printf("\tvar\tQuery variable(s) from a markdown file\n") + fmt.Printf("\tversion\tPrint program version and exit\n") fmt.Printf("\twatch\t(Re)generate site while looking for changes\n") - fmt.Printf("\tvar\tQuery a variable from a markdown file\n") - fmt.Printf("\tversion\tPrint version and exit\n") fmt.Printf("\n") fmt.Printf("Other commands may be dynamically added by plugins found in %v\n", AYADIR) os.Exit(0) @@ -397,8 +404,8 @@ func main() { } else { fmt.Println("ERROR: too many arguments") } - case "watch": - buildAll(true) + case "serve": + servePubDir() case "var": if len(args) == 0 { fmt.Println("var: filename expected") @@ -420,8 +427,10 @@ func main() { fmt.Println(strings.TrimSpace(s)) } case "version": - fmt.Printf("%v\n", aya.Version) + fmt.Printf("%v\n", aya.FullVersion()) os.Exit(0) + case "watch": + buildAll(true) default: if s, err := run(globals(), cmd, args...); err != nil { fmt.Println(err) -- 2.43.0