git-serve: Format usage text automatically

Remove the formatting of the usage text and add code to columnize it
automatically instead.

Also, add more strict tests for the usage output. These new tests ensure
that the usage header is printed, commands are indented properly and no
overly long lines are produced.

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
Lukas Fleischer 2016-09-17 16:02:42 +02:00
parent ab228fd3c3
commit e045069421
2 changed files with 27 additions and 9 deletions

View file

@ -117,6 +117,14 @@ def warn(msg):
sys.stderr.write("warning: {:s}\n".format(msg)) sys.stderr.write("warning: {:s}\n".format(msg))
def usage(cmds):
sys.stderr.write("Commands:\n")
colwidth = max([len(cmd) for cmd in cmds.keys()]) + 4
for key in sorted(cmds):
sys.stderr.write(" " + key.ljust(colwidth) + cmds[key] + "\n")
exit(0)
user = os.environ.get('AUR_USER') user = os.environ.get('AUR_USER')
privileged = (os.environ.get('AUR_PRIVILEGED', '0') == '1') privileged = (os.environ.get('AUR_PRIVILEGED', '0') == '1')
ssh_cmd = os.environ.get('SSH_ORIGINAL_COMMAND') ssh_cmd = os.environ.get('SSH_ORIGINAL_COMMAND')
@ -187,13 +195,15 @@ elif action == 'restore':
os.environ["AUR_PKGBASE"] = pkgbase os.environ["AUR_PKGBASE"] = pkgbase
os.execl(git_update_cmd, git_update_cmd, 'restore') os.execl(git_update_cmd, git_update_cmd, 'restore')
elif action == 'help': elif action == 'help':
die("Commands:\n" + cmds = {
" help Show this help message and exit.\n" + "help": "Show this help message and exit.",
" list-repos List all your repositories.\n" + "list-repos": "List all your repositories.",
" restore <name> Restore a deleted package base.\n" + "restore <name>": "Restore a deleted package base.",
" set-keywords <name> [...] Change package base keywords.\n" + "set-keywords <name> [...]": "Change package base keywords.",
" setup-repo <name> Create a repository (deprecated).\n" + "setup-repo <name>": "Create a repository (deprecated).",
" git-receive-pack Internal command used with Git.\n" + "git-receive-pack": "Internal command used with Git.",
" git-upload-pack Internal command used with Git.") "git-upload-pack": "Internal command used with Git.",
}
usage(cmds)
else: else:
die_with_help("invalid command: {:s}".format(action)) die_with_help("invalid command: {:s}".format(action))

View file

@ -9,7 +9,15 @@ test_expect_success 'Test interactive shell.' '
' '
test_expect_success 'Test help.' ' test_expect_success 'Test help.' '
SSH_ORIGINAL_COMMAND=help "$GIT_SERVE" 2>&1 | grep -q "^Commands:$" SSH_ORIGINAL_COMMAND=help "$GIT_SERVE" 2>actual &&
save_IFS=$IFS
IFS=
while read -r line; do
echo $line | grep -q "^Commands:$" && continue
echo $line | grep -q "^ [a-z]" || return 1
[ ${#line} -le 80 ] || return 1
done <actual
IFS=$save_IFS
' '
test_expect_success 'Test setup-repo and list-repos.' ' test_expect_success 'Test setup-repo and list-repos.' '