diff --git a/.gitignore b/.gitignore index f27a43f3..4d9f94f2 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ gdb.txt # Generated docs _docs/ +/man/ diff --git a/CHANGELOG.md b/CHANGELOG.md index affd5c4e..91f1ef57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * GitRepo: filter by repo * BuildLog: filter by start & end date, repo, exit code & arch * CLI flags to take advantage of above API improvements +* Added CLI command to generate all man pages +* PKGBUILDs now install man pages ### Changed diff --git a/Makefile b/Makefile index 199b99e6..7eb35472 100644 --- a/Makefile +++ b/Makefile @@ -60,6 +60,11 @@ api-docs: rm -rf '$(SRC_DIR)/_docs' cd '$(SRC_DIR)' && v doc -all -f html -m -readme . +.PHONY: man +man: vieter + rm -rf man + ./vieter man man + # =====OTHER===== .PHONY: lint diff --git a/PKGBUILD b/PKGBUILD index 49fcf548..0296dbd6 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -24,4 +24,7 @@ package() { install -dm755 "$pkgdir/usr/bin" install -Dm755 "$pkgname/pvieter" "$pkgdir/usr/bin/vieter" + + install -dm755 "$pkgdir/usr/share/man/man1" + ./vieter man "$pkgdir/usr/share/man/man1" } diff --git a/PKGBUILD.dev b/PKGBUILD.dev index d0176d86..6d95136a 100644 --- a/PKGBUILD.dev +++ b/PKGBUILD.dev @@ -32,4 +32,7 @@ package() { install -dm755 "$pkgdir/usr/bin" install -Dm755 "$pkgname/pvieter" "$pkgdir/usr/bin/vieter" + + install -dm755 "$pkgdir/usr/share/man/man1" + ./vieter man "$pkgdir/usr/share/man/man1" } diff --git a/src/console/console.v b/src/console/console.v index dfb2fac8..7d782bac 100644 --- a/src/console/console.v +++ b/src/console/console.v @@ -2,6 +2,8 @@ module console import arrays import strings +import cli +import os // pretty_table converts a list of string data into a pretty table. Many thanks // to @hungrybluedev in the Vlang Discord for providing this code! @@ -54,3 +56,15 @@ pub fn pretty_table(header []string, data [][]string) ?string { return buffer.str() } + +// export_man_pages recursively generates all man pages for the given +// cli.Command & writes them to the given directory. +pub fn export_man_pages(cmd cli.Command, path string) ? { + man := cmd.manpage() + os.write_file(os.join_path_single(path, cmd.full_name().replace(' ', '-') + '.1'), + man)? + + for sub_cmd in cmd.commands { + export_man_pages(sub_cmd, path)? + } +} diff --git a/src/console/man/man.v b/src/console/man/man.v new file mode 100644 index 00000000..d91a140f --- /dev/null +++ b/src/console/man/man.v @@ -0,0 +1,21 @@ +module man + +import cli +import console +import os + +// cmd returns the cli submodule that handles generating man pages. +pub fn cmd() cli.Command { + return cli.Command{ + name: 'man' + description: 'Generate all man pages & save them in the given directory.' + usage: 'dir' + required_args: 1 + execute: fn (cmd cli.Command) ? { + root := cmd.root() + os.mkdir_all(cmd.args[0])? + + console.export_man_pages(root, cmd.args[0])? + } + } +} diff --git a/src/main.v b/src/main.v index 885e0f32..80c19556 100644 --- a/src/main.v +++ b/src/main.v @@ -6,6 +6,7 @@ import cli import console.git import console.logs import console.schedule +import console.man import cron fn main() { @@ -29,6 +30,7 @@ fn main() { cron.cmd(), logs.cmd(), schedule.cmd(), + man.cmd(), ] } app.setup()