[PATCH 00 of 17 v3] Introduction of kallithea-cli command
Mads Kiilerich
mads at kiilerich.com
Sun Oct 21 23:11:36 UTC 2018
On 10/18/2018 10:49 PM, Thomas De Schampheleire wrote:
> This series introduces a kallithea-cli command to replace our custom gearbox
> commands.
> At the end of this series, the help text will show:
>
>
> Usage: kallithea-cli [OPTIONS] COMMAND [ARGS]...
>
> Various commands to set up a Kallithea instance.
>
> Options:
> --help Show this message and exit.
>
> Commands:
> cache-cleanup-keys Clean up existing cache keys.
> cache-show-keys Show existing cache keys with their status.
These two commands are really not so much about some kind of "keys".
They are about database entries that indicate that some worker process
has a repo cached in memory, so the cache can be invalidated and flushed
when necessary. It would thus perhaps be better to name these commands
so they are grouped with other repo commands, like:
repo-cache-cleanup Flush in-memory repository caches.
repo-cache-show Show current in-memory repository caches.
> celery-run Start Celery worker(s) for asynchronous tasks.
> config-create Create a new configuration file.
> db-create Initialize the database.
> extensions-create Write template file for extending Kallithea in Python.
> front-end-create Create the front-end.
The "create" naming consistency is generally nice, but for this one,
"build" seems much more descriptive and correct.
> iis-install Install into IIS using isapi-wsgi.
> index-create Create or update full text search index
> ishell-run Interactive shell for Kallithea.
> repo-purge-deleted Purge backups of deleted repositories.
> repo-scan Scan filesystem for repositories.
> repo-update-cache Update repo cache after external modification.
This one is perhaps better described as: Update database cache of latest
repository change.
> Some notes:
> - In v1 and v2, each topic was a separate word in the CLI, e.g. 'repo
> update-cache' rather than 'repo-update-cache'. There were two problems
> with that approach:
> 1. to know which commands are available, you'd use 'kallithea-cli --help'
> to discover the topics, then 'kallithea-cli topic --help', and then
> you'd still need another 'kallithea-cli topic command --help' to
> get a list of the actual options.
Hmm. I see. Good point. Annoying how it seems to force us to use a
not-so-elegant solution with the "object" and the "method" tied together
in the command name. But it also gives a more flat namespace that is
more explorable ...
In a way, it could perhaps be more elegant with more specific top level
command names, something like
kallithea-repo update-cache my.ini foorepo barrepo
but that would have some of the same problems ... and perhaps give too
many commands, which might be a problem or a solution ...
Also related to that: when thinking about a consistent solution, we
should perhaps also consider where the existing kallithea_api.py
kallithea_backup.py kallithea_gist.py could fit in.
> 2. some command-lines would become quite long, and distinction between
> elements of the command itself, and its arguments, were hard to see. For
> example, to update repository caches:
> kallithea-cli repo update-cache my.ini foorepo barrepo
> vs.
> kallithea-cli repo-update-cache my.ini foorepo barrepo
Also, looking at the examples (both commands in this patch series an
examples from other tools), it seems less elegant when commands have
different "positional parameters", like how parameter 1 is the .ini file
and parameter 2 and up are repository names. I kind of like how the
gearbox solution consistently use -c for these config files. The general
rule for command line design might be that un-named parameters only
should be used to name the main things we operate on.
> - We need to find a better place for template.ini.mako which is now the sole
> inhabitant of kallithea/lib/paster_commands/.
kallithea/templates/ is mostly html templates for the front-end, but we
also have kallithea/templates/email_templates/ , so perhaps this one
could be placed as something like kallithea/templates/config.ini .
soooo ...
With these nice experiments and overviews, it is interesting to take a
step back and look at them and other complex and more or less elegant
commands with sub-commands. Here are some I know about:
https://docs.docker.com/engine/reference/commandline/cli/
https://docs.docker.com/engine/reference/commandline/docker/
https://docs.ansible.com/ansible/2.4/command_line_tools.html
https://dnf.readthedocs.io/en/latest/command_ref.html
https://linux.die.net/man/1/fedpkg
https://www.mercurial-scm.org/doc/hg.1.html
http://man7.org/linux/man-pages/man1/git.1.html
https://www.openssl.org/docs/man1.1.1/man1/openssl.html
One thing I conclude is that it indeed only is common to use one level
of sub commands. But it varies whether sub-sub commands are implemented
by having verbose sub command names (seems quite common for example in
git) or using additional flags and having other options that only works
together with some flags (for example like openssl or hg). I agree with
the longer sub-command names without nesting here in v3.
I do however think that the config file as first unnamed parameter was
another thing that contribute equally much to the hard-to-read commands
from v2. That remains. What are your thoughts about re-introducing -c as
a (mandatory) parameter?
Another observation from looking for examples, is a concern whether my
preference for "kallithea-cli" over just "kallithea" is justified. I
would still say a vague "yes", but I am less confident. (For the
examples I listed above, the command line tool comes closer to being the
tool itself. For Kallithea, the tool is only for admin stuff - it is not
Kalllithea itself.)
/Mads
More information about the kallithea-general
mailing list