rgb-cln/tools/check-manpage.sh

50 lines
1.3 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Needs bash for process substitition, ie <(
if [ $# != 2 ]; then
echo "Usage $0 <command> <markdown.md>" >&2
exit 1
fi
get_cmd_opts()
{
# Trim out -- after first one (--option mentioned in help!)
doc: format markdown correctly. There are no definition lists in Markdown, and lists get mangled if they follow immediately: they need a line between them. So use bullets for options, and use an indent so the text gets in the line below. Here's a before-and-after example: ```diff --- /tmp/after 2022-07-20 21:55:54.355487769 +0930 +++ /tmp/after2 2022-07-20 21:58:17.305642576 +0930 @@ -10,38 +10,71 @@ lightning-cli sends commands to the lightning daemon. OPTIONS - --lightning-dir=DIR Set the directory for the lightning daemon we're talking to; defaults to $HOME/.lightning. + • --lightning-dir=DIR - --conf=PATH Sets configuration file (default: lightning-dir/config ). + Set the directory for the lightning daemon we're talking to; defaults to $HOME/.lightning. - --network=network --mainnet --testnet --signet Sets network explicitly. + • --conf=PATH - --rpc-file=FILE Named pipe to use to talk to lightning daemon: default is lightning-rpc in the lightning directory. + Sets configuration file (default: lightning-dir/config ). - --keywords/-k Use format key=value for parameters in any order + • --network=network - --order/-o Follow strictly the order of parameters for the command + • --mainnet - --json/-J Return result in JSON format (default unless help command, or result contains a format-hint field). + • --testnet - --raw/-R Return raw JSON directly as lightningd replies; this can be faster for large requests. + • --signet - --human-readable/-H Return result in human-readable output. + Sets network explicitly. - --flat/-F Return JSON result in flattened one-per-line output, e.g. { "help": [ { "command": "check" } ] } would become + • --rpc-file=FILE + + Named pipe to use to talk to lightning daemon: default is lightning-rpc in the lightning directory. + + • --keywords/-k + + Use format key=value for parameters in any order + + • --order/-o + + Follow strictly the order of parameters for the command + + • --json/-J + + Return result in JSON format (default unless help command, or result contains a format-hint field). + + • --raw/-R + + Return raw JSON directly as lightningd replies; this can be faster for large requests. + + • --human-readable/-H + + Return result in human-readable output. + + • --flat/-F + + Return JSON result in flattened one-per-line output, e.g. { "help": [ { "command": "check" } ] } would become help[0].command=check. This is useful for simple scripts which want to find a specific output field without parsing JSON. - --notifications/-N=LEVEL If LEVEL is 'none', then never print out notifications. Otherwise, print out notifications of - LEVEL or above (one of io, debug, info (the default), unusual or broken: they are prefixed with # . + • --notifications/-N=LEVEL + + If LEVEL is 'none', then never print out notifications. Otherwise, print out notifications of LEVEL or above (one of + io, debug, info (the default), unusual or broken: they are prefixed with # . + + • --help/-h + + Pretty-print summary of options to standard output and exit. The format can be changed using -F, -R, -J, -H etc. + + • --version/-V - --help/-h Pretty-print summary of options to standard output and exit. The format can be changed using -F, -R, -J, -H - etc. + Print version number to standard output and exit. - --version/-V Print version number to standard output and exit. + • allow-deprecated-apis=BOOL - allow-deprecated-apis=BOOL Enable deprecated options. It defaults to true, but you should set it to false when testing to - ensure that an upgrade won't break your configuration. + Enable deprecated options. It defaults to true, but you should set it to false when testing to ensure that an upgrade + won't break your configuration. COMMANDS lightning-cli simply uses the JSON RPC interface to talk to lightningd, and prints the results. Thus the commands avail‐ @@ -60,13 +93,13 @@ this is not encouraged. EXAMPLES - 1. List commands + 1. List commands: - lightning-cli help + • lightning-cli help - 2. Fund a 10k sat channel using uncomfirmed outputs + 2. Fund a 10k sat channel using uncomfirmed outputs: - lightning-cli --keywords fundchannel id=028f...ae7d amount=10000sat minconf=0 + • lightning-cli --keywords fundchannel id=028f...ae7d amount=10000sat minconf=0 BUGS This manpage documents how it should work, not how it does work. The pretty printing of results isn't pretty. ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2022-09-05 22:32:09 +01:00
$1 --help | grep '^\*' | sed 's/[ ].*--.*//' | while IFS=$'\n' read -r opt; do
case "$opt" in
# We don't document dev options.
--dev*)
;;
--*=*|--*' <arg>'*)
echo "${opt%%[ =]*}=" | cut -c3-
;;
--*)
echo "${opt%%[ |]*}" | cut -c3-
;;
-*\|--*)
opt=${opt##*|}
echo "${opt%%[ |]*}" | cut -c3-
esac
done
}
CMD_OPTNAMES=$(get_cmd_opts "$1" | sort)
# Now, gather (long) opt names from man page, make sure they match.
MAN_OPTNAMES=$(sed -E -n 's/^ \*\*(--)?([^*/]*)\*\*(=?).*/\2\3/p' < "$2" | sort)
# Remove undocumented proprieties, usually these proprieties are
# under experimental phases.
for flag in $(jq '.flags[]' <doc/undoc-flags.json) ; do
# Remove the quotes from the string, so the code will remove
# the first and last char in the string.
FLAG=$(sed 's/.//;s/.$//' <(echo "$flag"))
CMD_OPTNAMES=$(sed "/$FLAG=/d" <(echo "$CMD_OPTNAMES"))
done
if [ "$CMD_OPTNAMES" != "$MAN_OPTNAMES" ]; then
echo "diff of command names vs manpage names":
diff -u <(echo "$CMD_OPTNAMES") <(echo "$MAN_OPTNAMES")
exit 2
fi