From e0450694216e5e88df6f48aaa9f7adc91e3f23f3 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Sat, 17 Sep 2016 16:02:42 +0200 Subject: 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 --- git-interface/git-serve.py | 26 ++++++++++++++++++-------- git-interface/test/t0002-serve.sh | 10 +++++++++- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/git-interface/git-serve.py b/git-interface/git-serve.py index 38048c9..0187de9 100755 --- a/git-interface/git-serve.py +++ b/git-interface/git-serve.py @@ -117,6 +117,14 @@ def warn(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') privileged = (os.environ.get('AUR_PRIVILEGED', '0') == '1') ssh_cmd = os.environ.get('SSH_ORIGINAL_COMMAND') @@ -187,13 +195,15 @@ elif action == 'restore': os.environ["AUR_PKGBASE"] = pkgbase os.execl(git_update_cmd, git_update_cmd, 'restore') elif action == 'help': - die("Commands:\n" + - " help Show this help message and exit.\n" + - " list-repos List all your repositories.\n" + - " restore Restore a deleted package base.\n" + - " set-keywords [...] Change package base keywords.\n" + - " setup-repo Create a repository (deprecated).\n" + - " git-receive-pack Internal command used with Git.\n" + - " git-upload-pack Internal command used with Git.") + cmds = { + "help": "Show this help message and exit.", + "list-repos": "List all your repositories.", + "restore ": "Restore a deleted package base.", + "set-keywords [...]": "Change package base keywords.", + "setup-repo ": "Create a repository (deprecated).", + "git-receive-pack": "Internal command used with Git.", + "git-upload-pack": "Internal command used with Git.", + } + usage(cmds) else: die_with_help("invalid command: {:s}".format(action)) diff --git a/git-interface/test/t0002-serve.sh b/git-interface/test/t0002-serve.sh index 52fdcd1..ce8340e 100755 --- a/git-interface/test/t0002-serve.sh +++ b/git-interface/test/t0002-serve.sh @@ -9,7 +9,15 @@ test_expect_success 'Test interactive shell.' ' ' 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