subcommand review

Some commands have been moved to another group and thus having another
default name (old subcommands are still available...for now):

* daemon -> repo-daemon
* key-import -> service-key-import
* repo-clean -> service-clean
* repo-config -> service-config
* repo-config-validate -> service-config-validate
* repo-setup -> service-setup
* repo-shell -> service-shell
* version -> help-version
This commit is contained in:
Evgenii Alekseev 2023-01-10 19:42:03 +02:00
parent 5a05c8ce91
commit 00ca06ffab
15 changed files with 699 additions and 554 deletions

View File

@ -38,9 +38,9 @@ systemd-machine-id-setup
sed -i "s/handlers = syslog_handler/handlers = console_handler/g" /etc/ahriman.ini.d/logging.ini sed -i "s/handlers = syslog_handler/handlers = console_handler/g" /etc/ahriman.ini.d/logging.ini
# initial setup command as root # initial setup command as root
[[ -z $MINIMAL_INSTALL ]] && WEB_ARGS=("--web-port" "8080") [[ -z $MINIMAL_INSTALL ]] && WEB_ARGS=("--web-port" "8080")
ahriman -a x86_64 repo-setup --packager "ahriman bot <ahriman@example.com>" --repository "github" "${WEB_ARGS[@]}" ahriman -a x86_64 service-setup --packager "ahriman bot <ahriman@example.com>" --repository "github" "${WEB_ARGS[@]}"
# validate configuration # validate configuration
ahriman -a x86_64 repo-config-validate --exit-code ahriman -a x86_64 service-config-validate --exit-code
# enable services # enable services
systemctl enable ahriman-web@x86_64 systemctl enable ahriman-web@x86_64
systemctl enable ahriman@x86_64.timer systemctl enable ahriman@x86_64.timer

View File

@ -45,10 +45,10 @@ fi
if [ -n "$AHRIMAN_UNIX_SOCKET" ]; then if [ -n "$AHRIMAN_UNIX_SOCKET" ]; then
AHRIMAN_SETUP_ARGS+=("--web-unix-socket" "$AHRIMAN_UNIX_SOCKET") AHRIMAN_SETUP_ARGS+=("--web-unix-socket" "$AHRIMAN_UNIX_SOCKET")
fi fi
ahriman "${AHRIMAN_DEFAULT_ARGS[@]}" repo-setup "${AHRIMAN_SETUP_ARGS[@]}" ahriman "${AHRIMAN_DEFAULT_ARGS[@]}" service-setup "${AHRIMAN_SETUP_ARGS[@]}"
# validate configuration if set # validate configuration if set
[ -n "$AHRIMAN_VALIDATE_CONFIGURATION" ] && ahriman "${AHRIMAN_DEFAULT_ARGS[@]}" repo-config-validate --exit-code [ -n "$AHRIMAN_VALIDATE_CONFIGURATION" ] && ahriman "${AHRIMAN_DEFAULT_ARGS[@]}" service-config-validate --exit-code
# create machine-id which is required by build tools # create machine-id which is required by build tools
systemd-machine-id-setup &> /dev/null systemd-machine-id-setup &> /dev/null

View File

@ -1,9 +1,9 @@
.TH AHRIMAN "1" "2023\-01\-09" "ahriman" "Generated Python Manual" .TH AHRIMAN "1" "2023\-01\-11" "ahriman" "Generated Python Manual"
.SH NAME .SH NAME
ahriman ahriman
.SH SYNOPSIS .SH SYNOPSIS
.B ahriman .B ahriman
[-h] [-a ARCHITECTURE] [-c CONFIGURATION] [--force] [-l LOCK] [--report | --no-report] [-q] [--unsafe] [-V] {aur-search,search,daemon,help,help-commands-unsafe,key-import,package-add,add,package-update,package-remove,remove,package-status,status,package-status-remove,package-status-update,status-update,patch-add,patch-list,patch-remove,patch-set-add,repo-backup,repo-check,check,repo-clean,clean,repo-config,config,repo-config-validate,config-validate,repo-rebuild,rebuild,repo-remove-unknown,remove-unknown,repo-report,report,repo-restore,repo-setup,init,repo-init,setup,repo-sign,sign,repo-status-update,repo-sync,sync,repo-tree,repo-triggers,repo-update,update,shell,user-add,user-list,user-remove,version,web} ... [-h] [-a ARCHITECTURE] [-c CONFIGURATION] [--force] [-l LOCK] [--report | --no-report] [-q] [--unsafe] [-V] {aur-search,search,help,help-commands-unsafe,help-version,version,package-add,add,package-update,package-remove,remove,package-status,status,package-status-remove,package-status-update,status-update,patch-add,patch-list,patch-remove,patch-set-add,repo-backup,repo-check,check,repo-daemon,daemon,repo-rebuild,rebuild,repo-remove-unknown,remove-unknown,repo-report,report,repo-restore,repo-sign,sign,repo-status-update,repo-sync,sync,repo-tree,repo-triggers,repo-update,update,service-clean,clean,repo-clean,service-config,config,repo-config,service-config-validate,config-validate,repo-config-validate,service-key-import,key-import,service-setup,init,repo-init,repo-setup,setup,service-shell,shell,user-add,user-list,user-remove,web} ...
.SH DESCRIPTION .SH DESCRIPTION
ArcH linux ReposItory MANager ArcH linux ReposItory MANager
@ -46,17 +46,14 @@ COMMAND
\fBahriman\fR \fI\,aur\-search\/\fR \fBahriman\fR \fI\,aur\-search\/\fR
search for package search for package
.TP .TP
\fBahriman\fR \fI\,daemon\/\fR
run application as daemon
.TP
\fBahriman\fR \fI\,help\/\fR \fBahriman\fR \fI\,help\/\fR
show help message show help message
.TP .TP
\fBahriman\fR \fI\,help\-commands\-unsafe\/\fR \fBahriman\fR \fI\,help\-commands\-unsafe\/\fR
list unsafe commands list unsafe commands
.TP .TP
\fBahriman\fR \fI\,key\-import\/\fR \fBahriman\fR \fI\,help\-version\/\fR
import PGP key application version
.TP .TP
\fBahriman\fR \fI\,package\-add\/\fR \fBahriman\fR \fI\,package\-add\/\fR
add package add package
@ -91,14 +88,8 @@ backup repository data
\fBahriman\fR \fI\,repo\-check\/\fR \fBahriman\fR \fI\,repo\-check\/\fR
check for updates check for updates
.TP .TP
\fBahriman\fR \fI\,repo\-clean\/\fR \fBahriman\fR \fI\,repo\-daemon\/\fR
clean local caches run application as daemon
.TP
\fBahriman\fR \fI\,repo\-config\/\fR
dump configuration
.TP
\fBahriman\fR \fI\,repo\-config\-validate\/\fR
validate system configuration
.TP .TP
\fBahriman\fR \fI\,repo\-rebuild\/\fR \fBahriman\fR \fI\,repo\-rebuild\/\fR
rebuild repository rebuild repository
@ -112,9 +103,6 @@ generate report
\fBahriman\fR \fI\,repo\-restore\/\fR \fBahriman\fR \fI\,repo\-restore\/\fR
restore repository data restore repository data
.TP .TP
\fBahriman\fR \fI\,repo\-setup\/\fR
initial service configuration
.TP
\fBahriman\fR \fI\,repo\-sign\/\fR \fBahriman\fR \fI\,repo\-sign\/\fR
sign packages sign packages
.TP .TP
@ -133,7 +121,22 @@ run triggers
\fBahriman\fR \fI\,repo\-update\/\fR \fBahriman\fR \fI\,repo\-update\/\fR
update packages update packages
.TP .TP
\fBahriman\fR \fI\,shell\/\fR \fBahriman\fR \fI\,service\-clean\/\fR
clean local caches
.TP
\fBahriman\fR \fI\,service\-config\/\fR
dump configuration
.TP
\fBahriman\fR \fI\,service\-config\-validate\/\fR
validate system configuration
.TP
\fBahriman\fR \fI\,service\-key\-import\/\fR
import PGP key
.TP
\fBahriman\fR \fI\,service\-setup\/\fR
initial service configuration
.TP
\fBahriman\fR \fI\,service\-shell\/\fR
invoke python shell invoke python shell
.TP .TP
\fBahriman\fR \fI\,user\-add\/\fR \fBahriman\fR \fI\,user\-add\/\fR
@ -145,9 +148,6 @@ user known users and their access
\fBahriman\fR \fI\,user\-remove\/\fR \fBahriman\fR \fI\,user\-remove\/\fR
remove user remove user
.TP .TP
\fBahriman\fR \fI\,version\/\fR
application version
.TP
\fBahriman\fR \fI\,web\/\fR \fBahriman\fR \fI\,web\/\fR
web server web server
@ -176,37 +176,6 @@ show additional package information (default: False)
sort field by this field. In case if two packages have the same value of the specified field, they will be always sorted sort field by this field. In case if two packages have the same value of the specified field, they will be always sorted
by name by name
.SH COMMAND \fI\,'ahriman daemon'\/\fR
usage: ahriman daemon [\-h] [\-i INTERVAL] [\-\-aur | \-\-no\-aur] [\-\-local | \-\-no\-local] [\-\-manual | \-\-no\-manual]
[\-\-vcs | \-\-no\-vcs] [\-y]
start process which periodically will run update process
.SH OPTIONS \fI\,'ahriman daemon'\/\fR
.TP
\fB\-i\fR \fI\,INTERVAL\/\fR, \fB\-\-interval\fR \fI\,INTERVAL\/\fR
interval between runs in seconds
.TP
\fB\-\-aur\fR, \fB\-\-no\-aur\fR
enable or disable checking for AUR updates. Implies \-\-no\-vcs (default: True)
.TP
\fB\-\-local\fR, \fB\-\-no\-local\fR
enable or disable checking of local packages for updates (default: True)
.TP
\fB\-\-manual\fR, \fB\-\-no\-manual\fR
include or exclude manual updates (default: True)
.TP
\fB\-\-vcs\fR, \fB\-\-no\-vcs\fR
enable or disable checking of VCS packages (default: True)
.TP
\fB\-y\fR, \fB\-\-refresh\fR
download fresh package databases from the mirror before actions, \-yy to force refresh even if up to date
.SH COMMAND \fI\,'ahriman help'\/\fR .SH COMMAND \fI\,'ahriman help'\/\fR
usage: ahriman help [\-h] [command] usage: ahriman help [\-h] [command]
@ -227,19 +196,10 @@ list unsafe commands as defined in default args
instead of showing commands, just test command line for unsafe subcommand and return 0 in case if command is safe and 1 instead of showing commands, just test command line for unsafe subcommand and return 0 in case if command is safe and 1
otherwise otherwise
.SH COMMAND \fI\,'ahriman key\-import'\/\fR .SH COMMAND \fI\,'ahriman help\-version'\/\fR
usage: ahriman key\-import [\-h] [\-\-key\-server KEY_SERVER] key usage: ahriman help\-version [\-h]
import PGP key from public sources to the repository user print application and its dependencies versions
.TP
\fBkey\fR
PGP key to import from public server
.SH OPTIONS \fI\,'ahriman key\-import'\/\fR
.TP
\fB\-\-key\-server\fR \fI\,KEY_SERVER\/\fR
key server for key import
.SH COMMAND \fI\,'ahriman package\-add'\/\fR .SH COMMAND \fI\,'ahriman package\-add'\/\fR
usage: ahriman package\-add [\-h] [\-e] [\-n] [\-y] [\-s {auto,archive,aur,directory,local,remote,repository}] usage: ahriman package\-add [\-h] [\-e] [\-n] [\-y] [\-s {auto,archive,aur,directory,local,remote,repository}]
@ -427,47 +387,36 @@ enable or disable checking of VCS packages (default: True)
\fB\-y\fR, \fB\-\-refresh\fR \fB\-y\fR, \fB\-\-refresh\fR
download fresh package databases from the mirror before actions, \-yy to force refresh even if up to date download fresh package databases from the mirror before actions, \-yy to force refresh even if up to date
.SH COMMAND \fI\,'ahriman repo\-clean'\/\fR .SH COMMAND \fI\,'ahriman repo\-daemon'\/\fR
usage: ahriman repo\-clean [\-h] [\-\-cache | \-\-no\-cache] [\-\-chroot | \-\-no\-chroot] [\-\-manual | \-\-no\-manual] usage: ahriman repo\-daemon [\-h] [\-i INTERVAL] [\-\-aur | \-\-no\-aur] [\-\-local | \-\-no\-local] [\-\-manual | \-\-no\-manual]
[\-\-packages | \-\-no\-packages] [\-\-pacman | \-\-no\-pacman] [\-\-vcs | \-\-no\-vcs] [\-y]
remove local caches start process which periodically will run update process
.SH OPTIONS \fI\,'ahriman repo\-clean'\/\fR .SH OPTIONS \fI\,'ahriman repo\-daemon'\/\fR
.TP .TP
\fB\-\-cache\fR, \fB\-\-no\-cache\fR \fB\-i\fR \fI\,INTERVAL\/\fR, \fB\-\-interval\fR \fI\,INTERVAL\/\fR
clear directory with package caches (default: False) interval between runs in seconds
.TP .TP
\fB\-\-chroot\fR, \fB\-\-no\-chroot\fR \fB\-\-aur\fR, \fB\-\-no\-aur\fR
clear build chroot (default: False) enable or disable checking for AUR updates. Implies \-\-no\-vcs (default: True)
.TP
\fB\-\-local\fR, \fB\-\-no\-local\fR
enable or disable checking of local packages for updates (default: True)
.TP .TP
\fB\-\-manual\fR, \fB\-\-no\-manual\fR \fB\-\-manual\fR, \fB\-\-no\-manual\fR
clear manually added packages queue (default: False) include or exclude manual updates (default: True)
.TP .TP
\fB\-\-packages\fR, \fB\-\-no\-packages\fR \fB\-\-vcs\fR, \fB\-\-no\-vcs\fR
clear directory with built packages (default: False) enable or disable checking of VCS packages (default: True)
.TP .TP
\fB\-\-pacman\fR, \fB\-\-no\-pacman\fR \fB\-y\fR, \fB\-\-refresh\fR
clear directory with pacman local database cache (default: False) download fresh package databases from the mirror before actions, \-yy to force refresh even if up to date
.SH COMMAND \fI\,'ahriman repo\-config'\/\fR
usage: ahriman repo\-config [\-h]
dump configuration for the specified architecture
.SH COMMAND \fI\,'ahriman repo\-config\-validate'\/\fR
usage: ahriman repo\-config\-validate [\-h] [\-e]
validate configuration and print found errors
.SH OPTIONS \fI\,'ahriman repo\-config\-validate'\/\fR
.TP
\fB\-e\fR, \fB\-\-exit\-code\fR
return non\-zero exit status if configuration is invalid
.SH COMMAND \fI\,'ahriman repo\-rebuild'\/\fR .SH COMMAND \fI\,'ahriman repo\-rebuild'\/\fR
usage: ahriman repo\-rebuild [\-h] [\-\-depends\-on DEPENDS_ON] [\-\-dry\-run] [\-\-from\-database] [\-e] usage: ahriman repo\-rebuild [\-h] [\-\-depends\-on DEPENDS_ON] [\-\-dry\-run] [\-\-from\-database] [\-e]
@ -522,60 +471,6 @@ path of the input archive
\fB\-o\fR \fI\,OUTPUT\/\fR, \fB\-\-output\fR \fI\,OUTPUT\/\fR \fB\-o\fR \fI\,OUTPUT\/\fR, \fB\-\-output\fR \fI\,OUTPUT\/\fR
root path of the extracted files root path of the extracted files
.SH COMMAND \fI\,'ahriman repo\-setup'\/\fR
usage: ahriman repo\-setup [\-h] [\-\-build\-as\-user BUILD_AS_USER] [\-\-build\-command BUILD_COMMAND]
[\-\-from\-configuration FROM_CONFIGURATION] [\-\-makeflags\-jobs | \-\-no\-makeflags\-jobs]
[\-\-multilib | \-\-no\-multilib] \-\-packager PACKAGER \-\-repository REPOSITORY [\-\-sign\-key SIGN_KEY]
[\-\-sign\-target {disabled,packages,repository}] [\-\-web\-port WEB_PORT]
[\-\-web\-unix\-socket WEB_UNIX_SOCKET]
create initial service configuration, requires root
.SH OPTIONS \fI\,'ahriman repo\-setup'\/\fR
.TP
\fB\-\-build\-as\-user\fR \fI\,BUILD_AS_USER\/\fR
force makepkg user to the specific one
.TP
\fB\-\-build\-command\fR \fI\,BUILD_COMMAND\/\fR
build command prefix
.TP
\fB\-\-from\-configuration\fR \fI\,FROM_CONFIGURATION\/\fR
path to default devtools pacman configuration
.TP
\fB\-\-makeflags\-jobs\fR, \fB\-\-no\-makeflags\-jobs\fR
append MAKEFLAGS variable with parallelism set to number of cores (default: True)
.TP
\fB\-\-multilib\fR, \fB\-\-no\-multilib\fR
add or do not multilib repository (default: True)
.TP
\fB\-\-packager\fR \fI\,PACKAGER\/\fR
packager name and email
.TP
\fB\-\-repository\fR \fI\,REPOSITORY\/\fR
repository name
.TP
\fB\-\-sign\-key\fR \fI\,SIGN_KEY\/\fR
sign key id
.TP
\fB\-\-sign\-target\fR \fI\,{disabled,packages,repository}\/\fR
sign options
.TP
\fB\-\-web\-port\fR \fI\,WEB_PORT\/\fR
port of the web service
.TP
\fB\-\-web\-unix\-socket\fR \fI\,WEB_UNIX_SOCKET\/\fR
path to unix socket used for interprocess communications
.SH COMMAND \fI\,'ahriman repo\-sign'\/\fR .SH COMMAND \fI\,'ahriman repo\-sign'\/\fR
usage: ahriman repo\-sign [\-h] [package ...] usage: ahriman repo\-sign [\-h] [package ...]
@ -654,8 +549,118 @@ enable or disable checking of VCS packages (default: True)
\fB\-y\fR, \fB\-\-refresh\fR \fB\-y\fR, \fB\-\-refresh\fR
download fresh package databases from the mirror before actions, \-yy to force refresh even if up to date download fresh package databases from the mirror before actions, \-yy to force refresh even if up to date
.SH COMMAND \fI\,'ahriman shell'\/\fR .SH COMMAND \fI\,'ahriman service\-clean'\/\fR
usage: ahriman shell [\-h] [code] usage: ahriman service\-clean [\-h] [\-\-cache | \-\-no\-cache] [\-\-chroot | \-\-no\-chroot] [\-\-manual | \-\-no\-manual]
[\-\-packages | \-\-no\-packages] [\-\-pacman | \-\-no\-pacman]
remove local caches
.SH OPTIONS \fI\,'ahriman service\-clean'\/\fR
.TP
\fB\-\-cache\fR, \fB\-\-no\-cache\fR
clear directory with package caches (default: False)
.TP
\fB\-\-chroot\fR, \fB\-\-no\-chroot\fR
clear build chroot (default: False)
.TP
\fB\-\-manual\fR, \fB\-\-no\-manual\fR
clear manually added packages queue (default: False)
.TP
\fB\-\-packages\fR, \fB\-\-no\-packages\fR
clear directory with built packages (default: False)
.TP
\fB\-\-pacman\fR, \fB\-\-no\-pacman\fR
clear directory with pacman local database cache (default: False)
.SH COMMAND \fI\,'ahriman service\-config'\/\fR
usage: ahriman service\-config [\-h]
dump configuration for the specified architecture
.SH COMMAND \fI\,'ahriman service\-config\-validate'\/\fR
usage: ahriman service\-config\-validate [\-h] [\-e]
validate configuration and print found errors
.SH OPTIONS \fI\,'ahriman service\-config\-validate'\/\fR
.TP
\fB\-e\fR, \fB\-\-exit\-code\fR
return non\-zero exit status if configuration is invalid
.SH COMMAND \fI\,'ahriman service\-key\-import'\/\fR
usage: ahriman service\-key\-import [\-h] [\-\-key\-server KEY_SERVER] key
import PGP key from public sources to the repository user
.TP
\fBkey\fR
PGP key to import from public server
.SH OPTIONS \fI\,'ahriman service\-key\-import'\/\fR
.TP
\fB\-\-key\-server\fR \fI\,KEY_SERVER\/\fR
key server for key import
.SH COMMAND \fI\,'ahriman service\-setup'\/\fR
usage: ahriman service\-setup [\-h] [\-\-build\-as\-user BUILD_AS_USER] [\-\-build\-command BUILD_COMMAND]
[\-\-from\-configuration FROM_CONFIGURATION] [\-\-makeflags\-jobs | \-\-no\-makeflags\-jobs]
[\-\-multilib | \-\-no\-multilib] \-\-packager PACKAGER \-\-repository REPOSITORY
[\-\-sign\-key SIGN_KEY] [\-\-sign\-target {disabled,packages,repository}] [\-\-web\-port WEB_PORT]
[\-\-web\-unix\-socket WEB_UNIX_SOCKET]
create initial service configuration, requires root
.SH OPTIONS \fI\,'ahriman service\-setup'\/\fR
.TP
\fB\-\-build\-as\-user\fR \fI\,BUILD_AS_USER\/\fR
force makepkg user to the specific one
.TP
\fB\-\-build\-command\fR \fI\,BUILD_COMMAND\/\fR
build command prefix
.TP
\fB\-\-from\-configuration\fR \fI\,FROM_CONFIGURATION\/\fR
path to default devtools pacman configuration
.TP
\fB\-\-makeflags\-jobs\fR, \fB\-\-no\-makeflags\-jobs\fR
append MAKEFLAGS variable with parallelism set to number of cores (default: True)
.TP
\fB\-\-multilib\fR, \fB\-\-no\-multilib\fR
add or do not multilib repository (default: True)
.TP
\fB\-\-packager\fR \fI\,PACKAGER\/\fR
packager name and email
.TP
\fB\-\-repository\fR \fI\,REPOSITORY\/\fR
repository name
.TP
\fB\-\-sign\-key\fR \fI\,SIGN_KEY\/\fR
sign key id
.TP
\fB\-\-sign\-target\fR \fI\,{disabled,packages,repository}\/\fR
sign options
.TP
\fB\-\-web\-port\fR \fI\,WEB_PORT\/\fR
port of the web service
.TP
\fB\-\-web\-unix\-socket\fR \fI\,WEB_UNIX_SOCKET\/\fR
path to unix socket used for interprocess communications
.SH COMMAND \fI\,'ahriman service\-shell'\/\fR
usage: ahriman service\-shell [\-h] [code]
drop into python shell while having created application drop into python shell while having created application
@ -713,11 +718,6 @@ remove user from the user mapping and update the configuration
\fBusername\fR \fBusername\fR
username for web service username for web service
.SH COMMAND \fI\,'ahriman version'\/\fR
usage: ahriman version [\-h]
print application and its dependencies versions
.SH COMMAND \fI\,'ahriman web'\/\fR .SH COMMAND \fI\,'ahriman web'\/\fR
usage: ahriman web [\-h] usage: ahriman web [\-h]

View File

@ -81,6 +81,22 @@ In the most cases handlers spawn god class ``ahriman.application.application.App
Application is designed to run from ``systemd`` services and provides parametrized by architecture timer and service file for that. Application is designed to run from ``systemd`` services and provides parametrized by architecture timer and service file for that.
Subcommand design
^^^^^^^^^^^^^^^^^
All subcommands are divided into several groups depending on the role they are doing:
* ``aur`` (``aur-search``) group is for AUR operations.
* ``help`` (e.g. ``help``) are system commands.
* ``package`` subcommands (e.g. ``package-add``) allow to perform single package actions.
* ``patch`` subcommands (e.g. ``pacth-list``) are the special case of ``package`` subcommands introduced in order to control patches for packages.
* ``repo`` subcommands (e.g. ``repo-check``) usually perform actions on whole repository.
* ``service`` subcommands (e.g. ``service-setup``) perform actions which are related to whole service managing: create repository, show configuration.
* ``user`` subcommands (``user-add``) are intended for user management.
* ``web`` subcommands are related to web service management.
For historical reasons and in order to keep backward compatibility some subcommands have aliases to their shorter forms or even other groups, but the service doesn't guarantee that they will remain unchanged.
Database Database
-------- --------

View File

@ -1,14 +1,14 @@
# AUTOMATICALLY GENERATED by `shtab` # AUTOMATICALLY GENERATED by `shtab`
_shtab_ahriman_subparsers=('aur-search' 'search' 'daemon' 'help' 'help-commands-unsafe' 'key-import' 'package-add' 'add' 'package-update' 'package-remove' 'remove' 'package-status' 'status' 'package-status-remove' 'package-status-update' 'status-update' 'patch-add' 'patch-list' 'patch-remove' 'patch-set-add' 'repo-backup' 'repo-check' 'check' 'repo-clean' 'clean' 'repo-config' 'config' 'repo-config-validate' 'config-validate' 'repo-rebuild' 'rebuild' 'repo-remove-unknown' 'remove-unknown' 'repo-report' 'report' 'repo-restore' 'repo-setup' 'init' 'repo-init' 'setup' 'repo-sign' 'sign' 'repo-status-update' 'repo-sync' 'sync' 'repo-tree' 'repo-triggers' 'repo-update' 'update' 'shell' 'user-add' 'user-list' 'user-remove' 'version' 'web') _shtab_ahriman_subparsers=('aur-search' 'search' 'help' 'help-commands-unsafe' 'help-version' 'version' 'package-add' 'add' 'package-update' 'package-remove' 'remove' 'package-status' 'status' 'package-status-remove' 'package-status-update' 'status-update' 'patch-add' 'patch-list' 'patch-remove' 'patch-set-add' 'repo-backup' 'repo-check' 'check' 'repo-daemon' 'daemon' 'repo-rebuild' 'rebuild' 'repo-remove-unknown' 'remove-unknown' 'repo-report' 'report' 'repo-restore' 'repo-sign' 'sign' 'repo-status-update' 'repo-sync' 'sync' 'repo-tree' 'repo-triggers' 'repo-update' 'update' 'service-clean' 'clean' 'repo-clean' 'service-config' 'config' 'repo-config' 'service-config-validate' 'config-validate' 'repo-config-validate' 'service-key-import' 'key-import' 'service-setup' 'init' 'repo-init' 'repo-setup' 'setup' 'service-shell' 'shell' 'user-add' 'user-list' 'user-remove' 'web')
_shtab_ahriman_option_strings=('-h' '--help' '-a' '--architecture' '-c' '--configuration' '--force' '-l' '--lock' '--report' '--no-report' '-q' '--quiet' '--unsafe' '-V' '--version') _shtab_ahriman_option_strings=('-h' '--help' '-a' '--architecture' '-c' '--configuration' '--force' '-l' '--lock' '--report' '--no-report' '-q' '--quiet' '--unsafe' '-V' '--version')
_shtab_ahriman_aur_search_option_strings=('-h' '--help' '-e' '--exit-code' '--info' '--no-info' '--sort-by') _shtab_ahriman_aur_search_option_strings=('-h' '--help' '-e' '--exit-code' '--info' '--no-info' '--sort-by')
_shtab_ahriman_search_option_strings=('-h' '--help' '-e' '--exit-code' '--info' '--no-info' '--sort-by') _shtab_ahriman_search_option_strings=('-h' '--help' '-e' '--exit-code' '--info' '--no-info' '--sort-by')
_shtab_ahriman_daemon_option_strings=('-h' '--help' '-i' '--interval' '--aur' '--no-aur' '--local' '--no-local' '--manual' '--no-manual' '--vcs' '--no-vcs' '-y' '--refresh')
_shtab_ahriman_help_option_strings=('-h' '--help') _shtab_ahriman_help_option_strings=('-h' '--help')
_shtab_ahriman_help_commands_unsafe_option_strings=('-h' '--help' '--command') _shtab_ahriman_help_commands_unsafe_option_strings=('-h' '--help' '--command')
_shtab_ahriman_key_import_option_strings=('-h' '--help' '--key-server') _shtab_ahriman_help_version_option_strings=('-h' '--help')
_shtab_ahriman_version_option_strings=('-h' '--help')
_shtab_ahriman_package_add_option_strings=('-h' '--help' '-e' '--exit-code' '-n' '--now' '-y' '--refresh' '-s' '--source' '--without-dependencies') _shtab_ahriman_package_add_option_strings=('-h' '--help' '-e' '--exit-code' '-n' '--now' '-y' '--refresh' '-s' '--source' '--without-dependencies')
_shtab_ahriman_add_option_strings=('-h' '--help' '-e' '--exit-code' '-n' '--now' '-y' '--refresh' '-s' '--source' '--without-dependencies') _shtab_ahriman_add_option_strings=('-h' '--help' '-e' '--exit-code' '-n' '--now' '-y' '--refresh' '-s' '--source' '--without-dependencies')
_shtab_ahriman_package_update_option_strings=('-h' '--help' '-e' '--exit-code' '-n' '--now' '-y' '--refresh' '-s' '--source' '--without-dependencies') _shtab_ahriman_package_update_option_strings=('-h' '--help' '-e' '--exit-code' '-n' '--now' '-y' '--refresh' '-s' '--source' '--without-dependencies')
@ -26,12 +26,8 @@ _shtab_ahriman_patch_set_add_option_strings=('-h' '--help' '-t' '--track')
_shtab_ahriman_repo_backup_option_strings=('-h' '--help') _shtab_ahriman_repo_backup_option_strings=('-h' '--help')
_shtab_ahriman_repo_check_option_strings=('-h' '--help' '-e' '--exit-code' '--vcs' '--no-vcs' '-y' '--refresh') _shtab_ahriman_repo_check_option_strings=('-h' '--help' '-e' '--exit-code' '--vcs' '--no-vcs' '-y' '--refresh')
_shtab_ahriman_check_option_strings=('-h' '--help' '-e' '--exit-code' '--vcs' '--no-vcs' '-y' '--refresh') _shtab_ahriman_check_option_strings=('-h' '--help' '-e' '--exit-code' '--vcs' '--no-vcs' '-y' '--refresh')
_shtab_ahriman_repo_clean_option_strings=('-h' '--help' '--cache' '--no-cache' '--chroot' '--no-chroot' '--manual' '--no-manual' '--packages' '--no-packages' '--pacman' '--no-pacman') _shtab_ahriman_repo_daemon_option_strings=('-h' '--help' '-i' '--interval' '--aur' '--no-aur' '--local' '--no-local' '--manual' '--no-manual' '--vcs' '--no-vcs' '-y' '--refresh')
_shtab_ahriman_clean_option_strings=('-h' '--help' '--cache' '--no-cache' '--chroot' '--no-chroot' '--manual' '--no-manual' '--packages' '--no-packages' '--pacman' '--no-pacman') _shtab_ahriman_daemon_option_strings=('-h' '--help' '-i' '--interval' '--aur' '--no-aur' '--local' '--no-local' '--manual' '--no-manual' '--vcs' '--no-vcs' '-y' '--refresh')
_shtab_ahriman_repo_config_option_strings=('-h' '--help')
_shtab_ahriman_config_option_strings=('-h' '--help')
_shtab_ahriman_repo_config_validate_option_strings=('-h' '--help' '-e' '--exit-code')
_shtab_ahriman_config_validate_option_strings=('-h' '--help' '-e' '--exit-code')
_shtab_ahriman_repo_rebuild_option_strings=('-h' '--help' '--depends-on' '--dry-run' '--from-database' '-e' '--exit-code') _shtab_ahriman_repo_rebuild_option_strings=('-h' '--help' '--depends-on' '--dry-run' '--from-database' '-e' '--exit-code')
_shtab_ahriman_rebuild_option_strings=('-h' '--help' '--depends-on' '--dry-run' '--from-database' '-e' '--exit-code') _shtab_ahriman_rebuild_option_strings=('-h' '--help' '--depends-on' '--dry-run' '--from-database' '-e' '--exit-code')
_shtab_ahriman_repo_remove_unknown_option_strings=('-h' '--help' '--dry-run') _shtab_ahriman_repo_remove_unknown_option_strings=('-h' '--help' '--dry-run')
@ -39,10 +35,6 @@ _shtab_ahriman_remove_unknown_option_strings=('-h' '--help' '--dry-run')
_shtab_ahriman_repo_report_option_strings=('-h' '--help') _shtab_ahriman_repo_report_option_strings=('-h' '--help')
_shtab_ahriman_report_option_strings=('-h' '--help') _shtab_ahriman_report_option_strings=('-h' '--help')
_shtab_ahriman_repo_restore_option_strings=('-h' '--help' '-o' '--output') _shtab_ahriman_repo_restore_option_strings=('-h' '--help' '-o' '--output')
_shtab_ahriman_repo_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
_shtab_ahriman_init_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
_shtab_ahriman_repo_init_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
_shtab_ahriman_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
_shtab_ahriman_repo_sign_option_strings=('-h' '--help') _shtab_ahriman_repo_sign_option_strings=('-h' '--help')
_shtab_ahriman_sign_option_strings=('-h' '--help') _shtab_ahriman_sign_option_strings=('-h' '--help')
_shtab_ahriman_repo_status_update_option_strings=('-h' '--help' '-s' '--status') _shtab_ahriman_repo_status_update_option_strings=('-h' '--help' '-s' '--status')
@ -52,16 +44,32 @@ _shtab_ahriman_repo_tree_option_strings=('-h' '--help')
_shtab_ahriman_repo_triggers_option_strings=('-h' '--help') _shtab_ahriman_repo_triggers_option_strings=('-h' '--help')
_shtab_ahriman_repo_update_option_strings=('-h' '--help' '--dry-run' '-e' '--exit-code' '--aur' '--no-aur' '--local' '--no-local' '--manual' '--no-manual' '--vcs' '--no-vcs' '-y' '--refresh') _shtab_ahriman_repo_update_option_strings=('-h' '--help' '--dry-run' '-e' '--exit-code' '--aur' '--no-aur' '--local' '--no-local' '--manual' '--no-manual' '--vcs' '--no-vcs' '-y' '--refresh')
_shtab_ahriman_update_option_strings=('-h' '--help' '--dry-run' '-e' '--exit-code' '--aur' '--no-aur' '--local' '--no-local' '--manual' '--no-manual' '--vcs' '--no-vcs' '-y' '--refresh') _shtab_ahriman_update_option_strings=('-h' '--help' '--dry-run' '-e' '--exit-code' '--aur' '--no-aur' '--local' '--no-local' '--manual' '--no-manual' '--vcs' '--no-vcs' '-y' '--refresh')
_shtab_ahriman_service_clean_option_strings=('-h' '--help' '--cache' '--no-cache' '--chroot' '--no-chroot' '--manual' '--no-manual' '--packages' '--no-packages' '--pacman' '--no-pacman')
_shtab_ahriman_clean_option_strings=('-h' '--help' '--cache' '--no-cache' '--chroot' '--no-chroot' '--manual' '--no-manual' '--packages' '--no-packages' '--pacman' '--no-pacman')
_shtab_ahriman_repo_clean_option_strings=('-h' '--help' '--cache' '--no-cache' '--chroot' '--no-chroot' '--manual' '--no-manual' '--packages' '--no-packages' '--pacman' '--no-pacman')
_shtab_ahriman_service_config_option_strings=('-h' '--help')
_shtab_ahriman_config_option_strings=('-h' '--help')
_shtab_ahriman_repo_config_option_strings=('-h' '--help')
_shtab_ahriman_service_config_validate_option_strings=('-h' '--help' '-e' '--exit-code')
_shtab_ahriman_config_validate_option_strings=('-h' '--help' '-e' '--exit-code')
_shtab_ahriman_repo_config_validate_option_strings=('-h' '--help' '-e' '--exit-code')
_shtab_ahriman_service_key_import_option_strings=('-h' '--help' '--key-server')
_shtab_ahriman_key_import_option_strings=('-h' '--help' '--key-server')
_shtab_ahriman_service_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
_shtab_ahriman_init_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
_shtab_ahriman_repo_init_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
_shtab_ahriman_repo_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
_shtab_ahriman_setup_option_strings=('-h' '--help' '--build-as-user' '--build-command' '--from-configuration' '--makeflags-jobs' '--no-makeflags-jobs' '--multilib' '--no-multilib' '--packager' '--repository' '--sign-key' '--sign-target' '--web-port' '--web-unix-socket')
_shtab_ahriman_service_shell_option_strings=('-h' '--help')
_shtab_ahriman_shell_option_strings=('-h' '--help') _shtab_ahriman_shell_option_strings=('-h' '--help')
_shtab_ahriman_user_add_option_strings=('-h' '--help' '-p' '--password' '-r' '--role' '-s' '--secure') _shtab_ahriman_user_add_option_strings=('-h' '--help' '-p' '--password' '-r' '--role' '-s' '--secure')
_shtab_ahriman_user_list_option_strings=('-h' '--help' '-e' '--exit-code' '-r' '--role') _shtab_ahriman_user_list_option_strings=('-h' '--help' '-e' '--exit-code' '-r' '--role')
_shtab_ahriman_user_remove_option_strings=('-h' '--help') _shtab_ahriman_user_remove_option_strings=('-h' '--help')
_shtab_ahriman_version_option_strings=('-h' '--help')
_shtab_ahriman_web_option_strings=('-h' '--help') _shtab_ahriman_web_option_strings=('-h' '--help')
_shtab_ahriman_pos_0_choices=('aur-search' 'search' 'daemon' 'help' 'help-commands-unsafe' 'key-import' 'package-add' 'add' 'package-update' 'package-remove' 'remove' 'package-status' 'status' 'package-status-remove' 'package-status-update' 'status-update' 'patch-add' 'patch-list' 'patch-remove' 'patch-set-add' 'repo-backup' 'repo-check' 'check' 'repo-clean' 'clean' 'repo-config' 'config' 'repo-config-validate' 'config-validate' 'repo-rebuild' 'rebuild' 'repo-remove-unknown' 'remove-unknown' 'repo-report' 'report' 'repo-restore' 'repo-setup' 'init' 'repo-init' 'setup' 'repo-sign' 'sign' 'repo-status-update' 'repo-sync' 'sync' 'repo-tree' 'repo-triggers' 'repo-update' 'update' 'shell' 'user-add' 'user-list' 'user-remove' 'version' 'web') _shtab_ahriman_pos_0_choices=('aur-search' 'search' 'help' 'help-commands-unsafe' 'help-version' 'version' 'package-add' 'add' 'package-update' 'package-remove' 'remove' 'package-status' 'status' 'package-status-remove' 'package-status-update' 'status-update' 'patch-add' 'patch-list' 'patch-remove' 'patch-set-add' 'repo-backup' 'repo-check' 'check' 'repo-daemon' 'daemon' 'repo-rebuild' 'rebuild' 'repo-remove-unknown' 'remove-unknown' 'repo-report' 'report' 'repo-restore' 'repo-sign' 'sign' 'repo-status-update' 'repo-sync' 'sync' 'repo-tree' 'repo-triggers' 'repo-update' 'update' 'service-clean' 'clean' 'repo-clean' 'service-config' 'config' 'repo-config' 'service-config-validate' 'config-validate' 'repo-config-validate' 'service-key-import' 'key-import' 'service-setup' 'init' 'repo-init' 'repo-setup' 'setup' 'service-shell' 'shell' 'user-add' 'user-list' 'user-remove' 'web')
_shtab_ahriman_aur_search___sort_by_choices=('description' 'first_submitted' 'id' 'last_modified' 'maintainer' 'name' 'num_votes' 'out_of_date' 'package_base' 'package_base_id' 'popularity' 'repository' 'url' 'url_path' 'version') _shtab_ahriman_aur_search___sort_by_choices=('description' 'first_submitted' 'id' 'last_modified' 'maintainer' 'name' 'num_votes' 'out_of_date' 'package_base' 'package_base_id' 'popularity' 'repository' 'url' 'url_path' 'version')
_shtab_ahriman_search___sort_by_choices=('description' 'first_submitted' 'id' 'last_modified' 'maintainer' 'name' 'num_votes' 'out_of_date' 'package_base' 'package_base_id' 'popularity' 'repository' 'url' 'url_path' 'version') _shtab_ahriman_search___sort_by_choices=('description' 'first_submitted' 'id' 'last_modified' 'maintainer' 'name' 'num_votes' 'out_of_date' 'package_base' 'package_base_id' 'popularity' 'repository' 'url' 'url_path' 'version')
_shtab_ahriman_package_add__s_choices=('auto' 'archive' 'aur' 'directory' 'local' 'remote' 'repository') _shtab_ahriman_package_add__s_choices=('auto' 'archive' 'aur' 'directory' 'local' 'remote' 'repository')
@ -78,12 +86,13 @@ _shtab_ahriman_package_status_update__s_choices=('unknown' 'pending' 'building'
_shtab_ahriman_package_status_update___status_choices=('unknown' 'pending' 'building' 'failed' 'success') _shtab_ahriman_package_status_update___status_choices=('unknown' 'pending' 'building' 'failed' 'success')
_shtab_ahriman_status_update__s_choices=('unknown' 'pending' 'building' 'failed' 'success') _shtab_ahriman_status_update__s_choices=('unknown' 'pending' 'building' 'failed' 'success')
_shtab_ahriman_status_update___status_choices=('unknown' 'pending' 'building' 'failed' 'success') _shtab_ahriman_status_update___status_choices=('unknown' 'pending' 'building' 'failed' 'success')
_shtab_ahriman_repo_setup___sign_target_choices=('disabled' 'packages' 'repository')
_shtab_ahriman_init___sign_target_choices=('disabled' 'packages' 'repository')
_shtab_ahriman_repo_init___sign_target_choices=('disabled' 'packages' 'repository')
_shtab_ahriman_setup___sign_target_choices=('disabled' 'packages' 'repository')
_shtab_ahriman_repo_status_update__s_choices=('unknown' 'pending' 'building' 'failed' 'success') _shtab_ahriman_repo_status_update__s_choices=('unknown' 'pending' 'building' 'failed' 'success')
_shtab_ahriman_repo_status_update___status_choices=('unknown' 'pending' 'building' 'failed' 'success') _shtab_ahriman_repo_status_update___status_choices=('unknown' 'pending' 'building' 'failed' 'success')
_shtab_ahriman_service_setup___sign_target_choices=('disabled' 'packages' 'repository')
_shtab_ahriman_init___sign_target_choices=('disabled' 'packages' 'repository')
_shtab_ahriman_repo_init___sign_target_choices=('disabled' 'packages' 'repository')
_shtab_ahriman_repo_setup___sign_target_choices=('disabled' 'packages' 'repository')
_shtab_ahriman_setup___sign_target_choices=('disabled' 'packages' 'repository')
_shtab_ahriman_user_add__r_choices=('unauthorized' 'read' 'reporter' 'full') _shtab_ahriman_user_add__r_choices=('unauthorized' 'read' 'reporter' 'full')
_shtab_ahriman_user_add___role_choices=('unauthorized' 'read' 'reporter' 'full') _shtab_ahriman_user_add___role_choices=('unauthorized' 'read' 'reporter' 'full')
_shtab_ahriman_user_list__r_choices=('unauthorized' 'read' 'reporter' 'full') _shtab_ahriman_user_list__r_choices=('unauthorized' 'read' 'reporter' 'full')
@ -114,24 +123,14 @@ _shtab_ahriman_search__e_nargs=0
_shtab_ahriman_search___exit_code_nargs=0 _shtab_ahriman_search___exit_code_nargs=0
_shtab_ahriman_search___info_nargs=0 _shtab_ahriman_search___info_nargs=0
_shtab_ahriman_search___no_info_nargs=0 _shtab_ahriman_search___no_info_nargs=0
_shtab_ahriman_daemon__h_nargs=0
_shtab_ahriman_daemon___help_nargs=0
_shtab_ahriman_daemon___aur_nargs=0
_shtab_ahriman_daemon___no_aur_nargs=0
_shtab_ahriman_daemon___local_nargs=0
_shtab_ahriman_daemon___no_local_nargs=0
_shtab_ahriman_daemon___manual_nargs=0
_shtab_ahriman_daemon___no_manual_nargs=0
_shtab_ahriman_daemon___vcs_nargs=0
_shtab_ahriman_daemon___no_vcs_nargs=0
_shtab_ahriman_daemon__y_nargs=0
_shtab_ahriman_daemon___refresh_nargs=0
_shtab_ahriman_help__h_nargs=0 _shtab_ahriman_help__h_nargs=0
_shtab_ahriman_help___help_nargs=0 _shtab_ahriman_help___help_nargs=0
_shtab_ahriman_help_commands_unsafe__h_nargs=0 _shtab_ahriman_help_commands_unsafe__h_nargs=0
_shtab_ahriman_help_commands_unsafe___help_nargs=0 _shtab_ahriman_help_commands_unsafe___help_nargs=0
_shtab_ahriman_key_import__h_nargs=0 _shtab_ahriman_help_version__h_nargs=0
_shtab_ahriman_key_import___help_nargs=0 _shtab_ahriman_help_version___help_nargs=0
_shtab_ahriman_version__h_nargs=0
_shtab_ahriman_version___help_nargs=0
_shtab_ahriman_package_add_pos_0_nargs=+ _shtab_ahriman_package_add_pos_0_nargs=+
_shtab_ahriman_package_add__h_nargs=0 _shtab_ahriman_package_add__h_nargs=0
_shtab_ahriman_package_add___help_nargs=0 _shtab_ahriman_package_add___help_nargs=0
@ -223,42 +222,30 @@ _shtab_ahriman_check___vcs_nargs=0
_shtab_ahriman_check___no_vcs_nargs=0 _shtab_ahriman_check___no_vcs_nargs=0
_shtab_ahriman_check__y_nargs=0 _shtab_ahriman_check__y_nargs=0
_shtab_ahriman_check___refresh_nargs=0 _shtab_ahriman_check___refresh_nargs=0
_shtab_ahriman_repo_clean__h_nargs=0 _shtab_ahriman_repo_daemon__h_nargs=0
_shtab_ahriman_repo_clean___help_nargs=0 _shtab_ahriman_repo_daemon___help_nargs=0
_shtab_ahriman_repo_clean___cache_nargs=0 _shtab_ahriman_repo_daemon___aur_nargs=0
_shtab_ahriman_repo_clean___no_cache_nargs=0 _shtab_ahriman_repo_daemon___no_aur_nargs=0
_shtab_ahriman_repo_clean___chroot_nargs=0 _shtab_ahriman_repo_daemon___local_nargs=0
_shtab_ahriman_repo_clean___no_chroot_nargs=0 _shtab_ahriman_repo_daemon___no_local_nargs=0
_shtab_ahriman_repo_clean___manual_nargs=0 _shtab_ahriman_repo_daemon___manual_nargs=0
_shtab_ahriman_repo_clean___no_manual_nargs=0 _shtab_ahriman_repo_daemon___no_manual_nargs=0
_shtab_ahriman_repo_clean___packages_nargs=0 _shtab_ahriman_repo_daemon___vcs_nargs=0
_shtab_ahriman_repo_clean___no_packages_nargs=0 _shtab_ahriman_repo_daemon___no_vcs_nargs=0
_shtab_ahriman_repo_clean___pacman_nargs=0 _shtab_ahriman_repo_daemon__y_nargs=0
_shtab_ahriman_repo_clean___no_pacman_nargs=0 _shtab_ahriman_repo_daemon___refresh_nargs=0
_shtab_ahriman_clean__h_nargs=0 _shtab_ahriman_daemon__h_nargs=0
_shtab_ahriman_clean___help_nargs=0 _shtab_ahriman_daemon___help_nargs=0
_shtab_ahriman_clean___cache_nargs=0 _shtab_ahriman_daemon___aur_nargs=0
_shtab_ahriman_clean___no_cache_nargs=0 _shtab_ahriman_daemon___no_aur_nargs=0
_shtab_ahriman_clean___chroot_nargs=0 _shtab_ahriman_daemon___local_nargs=0
_shtab_ahriman_clean___no_chroot_nargs=0 _shtab_ahriman_daemon___no_local_nargs=0
_shtab_ahriman_clean___manual_nargs=0 _shtab_ahriman_daemon___manual_nargs=0
_shtab_ahriman_clean___no_manual_nargs=0 _shtab_ahriman_daemon___no_manual_nargs=0
_shtab_ahriman_clean___packages_nargs=0 _shtab_ahriman_daemon___vcs_nargs=0
_shtab_ahriman_clean___no_packages_nargs=0 _shtab_ahriman_daemon___no_vcs_nargs=0
_shtab_ahriman_clean___pacman_nargs=0 _shtab_ahriman_daemon__y_nargs=0
_shtab_ahriman_clean___no_pacman_nargs=0 _shtab_ahriman_daemon___refresh_nargs=0
_shtab_ahriman_repo_config__h_nargs=0
_shtab_ahriman_repo_config___help_nargs=0
_shtab_ahriman_config__h_nargs=0
_shtab_ahriman_config___help_nargs=0
_shtab_ahriman_repo_config_validate__h_nargs=0
_shtab_ahriman_repo_config_validate___help_nargs=0
_shtab_ahriman_repo_config_validate__e_nargs=0
_shtab_ahriman_repo_config_validate___exit_code_nargs=0
_shtab_ahriman_config_validate__h_nargs=0
_shtab_ahriman_config_validate___help_nargs=0
_shtab_ahriman_config_validate__e_nargs=0
_shtab_ahriman_config_validate___exit_code_nargs=0
_shtab_ahriman_repo_rebuild__h_nargs=0 _shtab_ahriman_repo_rebuild__h_nargs=0
_shtab_ahriman_repo_rebuild___help_nargs=0 _shtab_ahriman_repo_rebuild___help_nargs=0
_shtab_ahriman_repo_rebuild___dry_run_nargs=0 _shtab_ahriman_repo_rebuild___dry_run_nargs=0
@ -283,30 +270,6 @@ _shtab_ahriman_report__h_nargs=0
_shtab_ahriman_report___help_nargs=0 _shtab_ahriman_report___help_nargs=0
_shtab_ahriman_repo_restore__h_nargs=0 _shtab_ahriman_repo_restore__h_nargs=0
_shtab_ahriman_repo_restore___help_nargs=0 _shtab_ahriman_repo_restore___help_nargs=0
_shtab_ahriman_repo_setup__h_nargs=0
_shtab_ahriman_repo_setup___help_nargs=0
_shtab_ahriman_repo_setup___makeflags_jobs_nargs=0
_shtab_ahriman_repo_setup___no_makeflags_jobs_nargs=0
_shtab_ahriman_repo_setup___multilib_nargs=0
_shtab_ahriman_repo_setup___no_multilib_nargs=0
_shtab_ahriman_init__h_nargs=0
_shtab_ahriman_init___help_nargs=0
_shtab_ahriman_init___makeflags_jobs_nargs=0
_shtab_ahriman_init___no_makeflags_jobs_nargs=0
_shtab_ahriman_init___multilib_nargs=0
_shtab_ahriman_init___no_multilib_nargs=0
_shtab_ahriman_repo_init__h_nargs=0
_shtab_ahriman_repo_init___help_nargs=0
_shtab_ahriman_repo_init___makeflags_jobs_nargs=0
_shtab_ahriman_repo_init___no_makeflags_jobs_nargs=0
_shtab_ahriman_repo_init___multilib_nargs=0
_shtab_ahriman_repo_init___no_multilib_nargs=0
_shtab_ahriman_setup__h_nargs=0
_shtab_ahriman_setup___help_nargs=0
_shtab_ahriman_setup___makeflags_jobs_nargs=0
_shtab_ahriman_setup___no_makeflags_jobs_nargs=0
_shtab_ahriman_setup___multilib_nargs=0
_shtab_ahriman_setup___no_multilib_nargs=0
_shtab_ahriman_repo_sign_pos_0_nargs=* _shtab_ahriman_repo_sign_pos_0_nargs=*
_shtab_ahriman_repo_sign__h_nargs=0 _shtab_ahriman_repo_sign__h_nargs=0
_shtab_ahriman_repo_sign___help_nargs=0 _shtab_ahriman_repo_sign___help_nargs=0
@ -356,6 +319,98 @@ _shtab_ahriman_update___vcs_nargs=0
_shtab_ahriman_update___no_vcs_nargs=0 _shtab_ahriman_update___no_vcs_nargs=0
_shtab_ahriman_update__y_nargs=0 _shtab_ahriman_update__y_nargs=0
_shtab_ahriman_update___refresh_nargs=0 _shtab_ahriman_update___refresh_nargs=0
_shtab_ahriman_service_clean__h_nargs=0
_shtab_ahriman_service_clean___help_nargs=0
_shtab_ahriman_service_clean___cache_nargs=0
_shtab_ahriman_service_clean___no_cache_nargs=0
_shtab_ahriman_service_clean___chroot_nargs=0
_shtab_ahriman_service_clean___no_chroot_nargs=0
_shtab_ahriman_service_clean___manual_nargs=0
_shtab_ahriman_service_clean___no_manual_nargs=0
_shtab_ahriman_service_clean___packages_nargs=0
_shtab_ahriman_service_clean___no_packages_nargs=0
_shtab_ahriman_service_clean___pacman_nargs=0
_shtab_ahriman_service_clean___no_pacman_nargs=0
_shtab_ahriman_clean__h_nargs=0
_shtab_ahriman_clean___help_nargs=0
_shtab_ahriman_clean___cache_nargs=0
_shtab_ahriman_clean___no_cache_nargs=0
_shtab_ahriman_clean___chroot_nargs=0
_shtab_ahriman_clean___no_chroot_nargs=0
_shtab_ahriman_clean___manual_nargs=0
_shtab_ahriman_clean___no_manual_nargs=0
_shtab_ahriman_clean___packages_nargs=0
_shtab_ahriman_clean___no_packages_nargs=0
_shtab_ahriman_clean___pacman_nargs=0
_shtab_ahriman_clean___no_pacman_nargs=0
_shtab_ahriman_repo_clean__h_nargs=0
_shtab_ahriman_repo_clean___help_nargs=0
_shtab_ahriman_repo_clean___cache_nargs=0
_shtab_ahriman_repo_clean___no_cache_nargs=0
_shtab_ahriman_repo_clean___chroot_nargs=0
_shtab_ahriman_repo_clean___no_chroot_nargs=0
_shtab_ahriman_repo_clean___manual_nargs=0
_shtab_ahriman_repo_clean___no_manual_nargs=0
_shtab_ahriman_repo_clean___packages_nargs=0
_shtab_ahriman_repo_clean___no_packages_nargs=0
_shtab_ahriman_repo_clean___pacman_nargs=0
_shtab_ahriman_repo_clean___no_pacman_nargs=0
_shtab_ahriman_service_config__h_nargs=0
_shtab_ahriman_service_config___help_nargs=0
_shtab_ahriman_config__h_nargs=0
_shtab_ahriman_config___help_nargs=0
_shtab_ahriman_repo_config__h_nargs=0
_shtab_ahriman_repo_config___help_nargs=0
_shtab_ahriman_service_config_validate__h_nargs=0
_shtab_ahriman_service_config_validate___help_nargs=0
_shtab_ahriman_service_config_validate__e_nargs=0
_shtab_ahriman_service_config_validate___exit_code_nargs=0
_shtab_ahriman_config_validate__h_nargs=0
_shtab_ahriman_config_validate___help_nargs=0
_shtab_ahriman_config_validate__e_nargs=0
_shtab_ahriman_config_validate___exit_code_nargs=0
_shtab_ahriman_repo_config_validate__h_nargs=0
_shtab_ahriman_repo_config_validate___help_nargs=0
_shtab_ahriman_repo_config_validate__e_nargs=0
_shtab_ahriman_repo_config_validate___exit_code_nargs=0
_shtab_ahriman_service_key_import__h_nargs=0
_shtab_ahriman_service_key_import___help_nargs=0
_shtab_ahriman_key_import__h_nargs=0
_shtab_ahriman_key_import___help_nargs=0
_shtab_ahriman_service_setup__h_nargs=0
_shtab_ahriman_service_setup___help_nargs=0
_shtab_ahriman_service_setup___makeflags_jobs_nargs=0
_shtab_ahriman_service_setup___no_makeflags_jobs_nargs=0
_shtab_ahriman_service_setup___multilib_nargs=0
_shtab_ahriman_service_setup___no_multilib_nargs=0
_shtab_ahriman_init__h_nargs=0
_shtab_ahriman_init___help_nargs=0
_shtab_ahriman_init___makeflags_jobs_nargs=0
_shtab_ahriman_init___no_makeflags_jobs_nargs=0
_shtab_ahriman_init___multilib_nargs=0
_shtab_ahriman_init___no_multilib_nargs=0
_shtab_ahriman_repo_init__h_nargs=0
_shtab_ahriman_repo_init___help_nargs=0
_shtab_ahriman_repo_init___makeflags_jobs_nargs=0
_shtab_ahriman_repo_init___no_makeflags_jobs_nargs=0
_shtab_ahriman_repo_init___multilib_nargs=0
_shtab_ahriman_repo_init___no_multilib_nargs=0
_shtab_ahriman_repo_setup__h_nargs=0
_shtab_ahriman_repo_setup___help_nargs=0
_shtab_ahriman_repo_setup___makeflags_jobs_nargs=0
_shtab_ahriman_repo_setup___no_makeflags_jobs_nargs=0
_shtab_ahriman_repo_setup___multilib_nargs=0
_shtab_ahriman_repo_setup___no_multilib_nargs=0
_shtab_ahriman_setup__h_nargs=0
_shtab_ahriman_setup___help_nargs=0
_shtab_ahriman_setup___makeflags_jobs_nargs=0
_shtab_ahriman_setup___no_makeflags_jobs_nargs=0
_shtab_ahriman_setup___multilib_nargs=0
_shtab_ahriman_setup___no_multilib_nargs=0
_shtab_ahriman_service_shell__h_nargs=0
_shtab_ahriman_service_shell___help_nargs=0
_shtab_ahriman_service_shell__v_nargs=0
_shtab_ahriman_service_shell___verbose_nargs=0
_shtab_ahriman_shell__h_nargs=0 _shtab_ahriman_shell__h_nargs=0
_shtab_ahriman_shell___help_nargs=0 _shtab_ahriman_shell___help_nargs=0
_shtab_ahriman_shell__v_nargs=0 _shtab_ahriman_shell__v_nargs=0
@ -370,8 +425,6 @@ _shtab_ahriman_user_list__e_nargs=0
_shtab_ahriman_user_list___exit_code_nargs=0 _shtab_ahriman_user_list___exit_code_nargs=0
_shtab_ahriman_user_remove__h_nargs=0 _shtab_ahriman_user_remove__h_nargs=0
_shtab_ahriman_user_remove___help_nargs=0 _shtab_ahriman_user_remove___help_nargs=0
_shtab_ahriman_version__h_nargs=0
_shtab_ahriman_version___help_nargs=0
_shtab_ahriman_web__h_nargs=0 _shtab_ahriman_web__h_nargs=0
_shtab_ahriman_web___help_nargs=0 _shtab_ahriman_web___help_nargs=0

View File

@ -14,6 +14,7 @@ _shtab_ahriman_commands() {
"daemon:start process which periodically will run update process" "daemon:start process which periodically will run update process"
"help:show help message for application or command and exit" "help:show help message for application or command and exit"
"help-commands-unsafe:list unsafe commands as defined in default args" "help-commands-unsafe:list unsafe commands as defined in default args"
"help-version:print application and its dependencies versions"
"init:create initial service configuration, requires root" "init:create initial service configuration, requires root"
"key-import:import PGP key from public sources to the repository user" "key-import:import PGP key from public sources to the repository user"
"package-add:add existing or new package to the build queue" "package-add:add existing or new package to the build queue"
@ -34,6 +35,7 @@ _shtab_ahriman_commands() {
"repo-clean:remove local caches" "repo-clean:remove local caches"
"repo-config:dump configuration for the specified architecture" "repo-config:dump configuration for the specified architecture"
"repo-config-validate:validate configuration and print found errors" "repo-config-validate:validate configuration and print found errors"
"repo-daemon:start process which periodically will run update process"
"repo-init:create initial service configuration, requires root" "repo-init:create initial service configuration, requires root"
"repo-rebuild:force rebuild whole repository" "repo-rebuild:force rebuild whole repository"
"repo-remove-unknown:remove packages which are missing in AUR and do not have local PKGBUILDs" "repo-remove-unknown:remove packages which are missing in AUR and do not have local PKGBUILDs"
@ -48,6 +50,12 @@ _shtab_ahriman_commands() {
"repo-update:check for packages updates and run build process if requested" "repo-update:check for packages updates and run build process if requested"
"report:generate repository report according to current settings" "report:generate repository report according to current settings"
"search:search for package in AUR using API" "search:search for package in AUR using API"
"service-clean:remove local caches"
"service-config:dump configuration for the specified architecture"
"service-config-validate:validate configuration and print found errors"
"service-key-import:import PGP key from public sources to the repository user"
"service-setup:create initial service configuration, requires root"
"service-shell:drop into python shell while having created application"
"setup:create initial service configuration, requires root" "setup:create initial service configuration, requires root"
"shell:drop into python shell while having created application" "shell:drop into python shell while having created application"
"sign:(re-)sign packages and repository database according to current settings" "sign:(re-)sign packages and repository database according to current settings"
@ -140,6 +148,10 @@ _shtab_ahriman_help_commands_unsafe_options=(
"--command[instead of showing commands, just test command line for unsafe subcommand and return 0 in case if command is safe and 1 otherwise]:command:" "--command[instead of showing commands, just test command line for unsafe subcommand and return 0 in case if command is safe and 1 otherwise]:command:"
) )
_shtab_ahriman_help_version_options=(
"(- : *)"{-h,--help}"[show this help message and exit]"
)
_shtab_ahriman_init_options=( _shtab_ahriman_init_options=(
"(- : *)"{-h,--help}"[show this help message and exit]" "(- : *)"{-h,--help}"[show this help message and exit]"
"--build-as-user[force makepkg user to the specific one]:build_as_user:" "--build-as-user[force makepkg user to the specific one]:build_as_user:"
@ -281,6 +293,16 @@ _shtab_ahriman_repo_config_validate_options=(
{-e,--exit-code}"[return non-zero exit status if configuration is invalid]" {-e,--exit-code}"[return non-zero exit status if configuration is invalid]"
) )
_shtab_ahriman_repo_daemon_options=(
"(- : *)"{-h,--help}"[show this help message and exit]"
{-i,--interval}"[interval between runs in seconds]:interval:"
{--aur,--no-aur}"[enable or disable checking for AUR updates. Implies --no-vcs (default\: \%(default)s)]:aur:"
{--local,--no-local}"[enable or disable checking of local packages for updates (default\: \%(default)s)]:local:"
{--manual,--no-manual}"[include or exclude manual updates (default\: \%(default)s)]:manual:"
{--vcs,--no-vcs}"[enable or disable checking of VCS packages (default\: \%(default)s)]:vcs:"
"*"{-y,--refresh}"[download fresh package databases from the mirror before actions, -yy to force refresh even if up to date]"
)
_shtab_ahriman_repo_init_options=( _shtab_ahriman_repo_init_options=(
"(- : *)"{-h,--help}"[show this help message and exit]" "(- : *)"{-h,--help}"[show this help message and exit]"
"--build-as-user[force makepkg user to the specific one]:build_as_user:" "--build-as-user[force makepkg user to the specific one]:build_as_user:"
@ -381,6 +403,50 @@ _shtab_ahriman_search_options=(
"(*):search terms, can be specified multiple times, the result will match all terms:" "(*):search terms, can be specified multiple times, the result will match all terms:"
) )
_shtab_ahriman_service_clean_options=(
"(- : *)"{-h,--help}"[show this help message and exit]"
{--cache,--no-cache}"[clear directory with package caches (default\: \%(default)s)]:cache:"
{--chroot,--no-chroot}"[clear build chroot (default\: \%(default)s)]:chroot:"
{--manual,--no-manual}"[clear manually added packages queue (default\: \%(default)s)]:manual:"
{--packages,--no-packages}"[clear directory with built packages (default\: \%(default)s)]:packages:"
{--pacman,--no-pacman}"[clear directory with pacman local database cache (default\: \%(default)s)]:pacman:"
)
_shtab_ahriman_service_config_options=(
"(- : *)"{-h,--help}"[show this help message and exit]"
)
_shtab_ahriman_service_config_validate_options=(
"(- : *)"{-h,--help}"[show this help message and exit]"
{-e,--exit-code}"[return non-zero exit status if configuration is invalid]"
)
_shtab_ahriman_service_key_import_options=(
"(- : *)"{-h,--help}"[show this help message and exit]"
"--key-server[key server for key import]:key_server:"
":PGP key to import from public server:"
)
_shtab_ahriman_service_setup_options=(
"(- : *)"{-h,--help}"[show this help message and exit]"
"--build-as-user[force makepkg user to the specific one]:build_as_user:"
"--build-command[build command prefix]:build_command:"
"--from-configuration[path to default devtools pacman configuration]:from_configuration:"
{--makeflags-jobs,--no-makeflags-jobs}"[append MAKEFLAGS variable with parallelism set to number of cores (default\: \%(default)s)]:makeflags_jobs:"
{--multilib,--no-multilib}"[add or do not multilib repository (default\: \%(default)s)]:multilib:"
"--packager[packager name and email]:packager:"
"--repository[repository name]:repository:"
"--sign-key[sign key id]:sign_key:"
"*--sign-target[sign options]:sign_target:(disabled packages repository)"
"--web-port[port of the web service]:web_port:"
"--web-unix-socket[path to unix socket used for interprocess communications]:web_unix_socket:"
)
_shtab_ahriman_service_shell_options=(
"(- : *)"{-h,--help}"[show this help message and exit]"
":instead of dropping into shell, just execute the specified code:"
)
_shtab_ahriman_setup_options=( _shtab_ahriman_setup_options=(
"(- : *)"{-h,--help}"[show this help message and exit]" "(- : *)"{-h,--help}"[show this help message and exit]"
"--build-as-user[force makepkg user to the specific one]:build_as_user:" "--build-as-user[force makepkg user to the specific one]:build_as_user:"
@ -489,6 +555,7 @@ _shtab_ahriman() {
daemon) _arguments -C $_shtab_ahriman_daemon_options ;; daemon) _arguments -C $_shtab_ahriman_daemon_options ;;
help) _arguments -C $_shtab_ahriman_help_options ;; help) _arguments -C $_shtab_ahriman_help_options ;;
help-commands-unsafe) _arguments -C $_shtab_ahriman_help_commands_unsafe_options ;; help-commands-unsafe) _arguments -C $_shtab_ahriman_help_commands_unsafe_options ;;
help-version) _arguments -C $_shtab_ahriman_help_version_options ;;
init) _arguments -C $_shtab_ahriman_init_options ;; init) _arguments -C $_shtab_ahriman_init_options ;;
key-import) _arguments -C $_shtab_ahriman_key_import_options ;; key-import) _arguments -C $_shtab_ahriman_key_import_options ;;
package-add) _arguments -C $_shtab_ahriman_package_add_options ;; package-add) _arguments -C $_shtab_ahriman_package_add_options ;;
@ -509,6 +576,7 @@ _shtab_ahriman() {
repo-clean) _arguments -C $_shtab_ahriman_repo_clean_options ;; repo-clean) _arguments -C $_shtab_ahriman_repo_clean_options ;;
repo-config) _arguments -C $_shtab_ahriman_repo_config_options ;; repo-config) _arguments -C $_shtab_ahriman_repo_config_options ;;
repo-config-validate) _arguments -C $_shtab_ahriman_repo_config_validate_options ;; repo-config-validate) _arguments -C $_shtab_ahriman_repo_config_validate_options ;;
repo-daemon) _arguments -C $_shtab_ahriman_repo_daemon_options ;;
repo-init) _arguments -C $_shtab_ahriman_repo_init_options ;; repo-init) _arguments -C $_shtab_ahriman_repo_init_options ;;
repo-rebuild) _arguments -C $_shtab_ahriman_repo_rebuild_options ;; repo-rebuild) _arguments -C $_shtab_ahriman_repo_rebuild_options ;;
repo-remove-unknown) _arguments -C $_shtab_ahriman_repo_remove_unknown_options ;; repo-remove-unknown) _arguments -C $_shtab_ahriman_repo_remove_unknown_options ;;
@ -523,6 +591,12 @@ _shtab_ahriman() {
repo-update) _arguments -C $_shtab_ahriman_repo_update_options ;; repo-update) _arguments -C $_shtab_ahriman_repo_update_options ;;
report) _arguments -C $_shtab_ahriman_report_options ;; report) _arguments -C $_shtab_ahriman_report_options ;;
search) _arguments -C $_shtab_ahriman_search_options ;; search) _arguments -C $_shtab_ahriman_search_options ;;
service-clean) _arguments -C $_shtab_ahriman_service_clean_options ;;
service-config) _arguments -C $_shtab_ahriman_service_config_options ;;
service-config-validate) _arguments -C $_shtab_ahriman_service_config_validate_options ;;
service-key-import) _arguments -C $_shtab_ahriman_service_key_import_options ;;
service-setup) _arguments -C $_shtab_ahriman_service_setup_options ;;
service-shell) _arguments -C $_shtab_ahriman_service_shell_options ;;
setup) _arguments -C $_shtab_ahriman_setup_options ;; setup) _arguments -C $_shtab_ahriman_setup_options ;;
shell) _arguments -C $_shtab_ahriman_shell_options ;; shell) _arguments -C $_shtab_ahriman_shell_options ;;
sign) _arguments -C $_shtab_ahriman_sign_options ;; sign) _arguments -C $_shtab_ahriman_sign_options ;;

View File

@ -12,11 +12,11 @@ There are two variable types which have been added to default ones, they are pat
Path values, except for casting to ``pathlib.Path`` type, will be also expanded to absolute paths relative to the configuration path. E.g. if path is set to ``ahriman.ini.d/logging.ini`` and root configuration path is ``/etc/ahriman.ini``, the value will be expanded to ``/etc/ahriman.ini.d/logging.ini``. In order to disable path expand, use the full path, e.g. ``/etc/ahriman.ini.d/logging.ini``. Path values, except for casting to ``pathlib.Path`` type, will be also expanded to absolute paths relative to the configuration path. E.g. if path is set to ``ahriman.ini.d/logging.ini`` and root configuration path is ``/etc/ahriman.ini``, the value will be expanded to ``/etc/ahriman.ini.d/logging.ini``. In order to disable path expand, use the full path, e.g. ``/etc/ahriman.ini.d/logging.ini``.
There is also additional subcommand which will allow to validate configuration and print found errors. In order to do so, run ``repo-config-validate`` subcommand, e.g.: There is also additional subcommand which will allow to validate configuration and print found errors. In order to do so, run ``service-config-validate`` subcommand, e.g.:
.. code-block:: shell .. code-block:: shell
ahriman -a x86_64 repo-config-validate ahriman -a x86_64 service-config-validate
It will check current settings on common errors and compare configuration with known schema. It will check current settings on common errors and compare configuration with known schema.

View File

@ -18,7 +18,7 @@ TL;DR
.. code-block:: shell .. code-block:: shell
yay -S ahriman yay -S ahriman
sudo ahriman -a x86_64 repo-setup --packager "ahriman bot <ahriman@example.com>" --repository "repository" sudo ahriman -a x86_64 service-setup --packager "ahriman bot <ahriman@example.com>" --repository "repository"
systemctl enable --now ahriman@x86_64.timer systemctl enable --now ahriman@x86_64.timer
Long answer Long answer
@ -33,7 +33,7 @@ There is special command which can be used in order to validate current configur
.. code-block:: shell .. code-block:: shell
ahriman -a x86_64 repo-config-validate --exit-code ahriman -a x86_64 service-config-validate --exit-code
This command will print found errors, based on `cerberus <https://docs.python-cerberus.org/>`_, e.g.: This command will print found errors, based on `cerberus <https://docs.python-cerberus.org/>`_, e.g.:
@ -219,7 +219,7 @@ TL;DR
.. code-block:: shell .. code-block:: shell
sudo -u ahriman ahriman key-import ... sudo -u ahriman ahriman service-key-import ...
How to update VCS packages How to update VCS packages
^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -409,11 +409,11 @@ You can pass any of these variables by using ``-e`` argument, e.g.:
Daemon service Daemon service
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
There is special ``daemon`` subcommand which emulates systemd timer and will perform repository update periodically: There is special ``repo-daemon`` subcommand which emulates systemd timer and will perform repository update periodically:
.. code-block:: shell .. code-block:: shell
docker run --privileged -v /path/to/local/repo:/var/lib/ahriman arcan1s/ahriman:latest daemon docker run --privileged -v /path/to/local/repo:/var/lib/ahriman arcan1s/ahriman:latest repo-daemon
This command uses same rules as ``repo-update``, thus, e.g. requires ``--privileged`` flag. This command uses same rules as ``repo-update``, thus, e.g. requires ``--privileged`` flag.

View File

@ -10,9 +10,9 @@ Initial setup
.. code-block:: shell .. code-block:: shell
sudo ahriman -a x86_64 repo-setup ... sudo ahriman -a x86_64 service-setup ...
``repo-setup`` literally does the following steps: ``service-setup`` literally does the following steps:
#. #.
Create ``/var/lib/ahriman/.makepkg.conf`` with ``makepkg.conf`` overrides if required (at least you might want to set ``PACKAGER``): Create ``/var/lib/ahriman/.makepkg.conf`` with ``makepkg.conf`` overrides if required (at least you might want to set ``PACKAGER``):

View File

@ -84,10 +84,9 @@ def _parser() -> argparse.ArgumentParser:
subparsers = parser.add_subparsers(title="command", help="command to run", dest="command", required=True) subparsers = parser.add_subparsers(title="command", help="command to run", dest="command", required=True)
_set_aur_search_parser(subparsers) _set_aur_search_parser(subparsers)
_set_daemon_parser(subparsers)
_set_help_parser(subparsers) _set_help_parser(subparsers)
_set_help_commands_unsafe_parser(subparsers) _set_help_commands_unsafe_parser(subparsers)
_set_key_import_parser(subparsers) _set_help_version_parser(subparsers)
_set_package_add_parser(subparsers) _set_package_add_parser(subparsers)
_set_package_remove_parser(subparsers) _set_package_remove_parser(subparsers)
_set_package_status_parser(subparsers) _set_package_status_parser(subparsers)
@ -99,25 +98,26 @@ def _parser() -> argparse.ArgumentParser:
_set_patch_set_add_parser(subparsers) _set_patch_set_add_parser(subparsers)
_set_repo_backup_parser(subparsers) _set_repo_backup_parser(subparsers)
_set_repo_check_parser(subparsers) _set_repo_check_parser(subparsers)
_set_repo_clean_parser(subparsers) _set_repo_daemon_parser(subparsers)
_set_repo_config_parser(subparsers)
_set_repo_config_validate_parser(subparsers)
_set_repo_rebuild_parser(subparsers) _set_repo_rebuild_parser(subparsers)
_set_repo_remove_unknown_parser(subparsers) _set_repo_remove_unknown_parser(subparsers)
_set_repo_report_parser(subparsers) _set_repo_report_parser(subparsers)
_set_repo_restore_parser(subparsers) _set_repo_restore_parser(subparsers)
_set_repo_setup_parser(subparsers)
_set_repo_sign_parser(subparsers) _set_repo_sign_parser(subparsers)
_set_repo_status_update_parser(subparsers) _set_repo_status_update_parser(subparsers)
_set_repo_sync_parser(subparsers) _set_repo_sync_parser(subparsers)
_set_repo_tree_parser(subparsers) _set_repo_tree_parser(subparsers)
_set_repo_triggers_parser(subparsers) _set_repo_triggers_parser(subparsers)
_set_repo_update_parser(subparsers) _set_repo_update_parser(subparsers)
_set_shell_parser(subparsers) _set_service_clean_parser(subparsers)
_set_service_config_parser(subparsers)
_set_service_config_validate_parser(subparsers)
_set_service_key_import_parser(subparsers)
_set_service_setup_parser(subparsers)
_set_service_shell_parser(subparsers)
_set_user_add_parser(subparsers) _set_user_add_parser(subparsers)
_set_user_list_parser(subparsers) _set_user_list_parser(subparsers)
_set_user_remove_parser(subparsers) _set_user_remove_parser(subparsers)
_set_version_parser(subparsers)
_set_web_parser(subparsers) _set_web_parser(subparsers)
return parser return parser
@ -147,35 +147,6 @@ def _set_aur_search_parser(root: SubParserAction) -> argparse.ArgumentParser:
return parser return parser
def _set_daemon_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for daemon subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("daemon", help="run application as daemon",
description="start process which periodically will run update process",
formatter_class=_formatter)
parser.add_argument("-i", "--interval", help="interval between runs in seconds", type=int, default=60 * 60 * 12)
parser.add_argument("--aur", help="enable or disable checking for AUR updates. Implies --no-vcs",
action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--local", help="enable or disable checking of local packages for updates",
action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--manual", help="include or exclude manual updates",
action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--vcs", help="enable or disable checking of VCS packages",
action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("-y", "--refresh", help="download fresh package databases from the mirror before actions, "
"-yy to force refresh even if up to date",
action="count", default=False)
parser.set_defaults(handler=handlers.Daemon, dry_run=False, exit_code=False, package=[])
return parser
def _set_help_parser(root: SubParserAction) -> argparse.ArgumentParser: def _set_help_parser(root: SubParserAction) -> argparse.ArgumentParser:
""" """
add parser for listing help subcommand add parser for listing help subcommand
@ -214,9 +185,9 @@ def _set_help_commands_unsafe_parser(root: SubParserAction) -> argparse.Argument
return parser return parser
def _set_key_import_parser(root: SubParserAction) -> argparse.ArgumentParser: def _set_help_version_parser(root: SubParserAction) -> argparse.ArgumentParser:
""" """
add parser for key import subcommand add parser for version subcommand
Args: Args:
root(SubParserAction): subparsers for the commands root(SubParserAction): subparsers for the commands
@ -224,16 +195,10 @@ def _set_key_import_parser(root: SubParserAction) -> argparse.ArgumentParser:
Returns: Returns:
argparse.ArgumentParser: created argument parser argparse.ArgumentParser: created argument parser
""" """
parser = root.add_parser("key-import", help="import PGP key", parser = root.add_parser("help-version", aliases=["version"], help="application version",
description="import PGP key from public sources to the repository user", description="print application and its dependencies versions", formatter_class=_formatter)
epilog="By default ahriman runs build process with package sources validation " parser.set_defaults(handler=handlers.Versions, architecture=[""], lock=None, report=False, quiet=True,
"(in case if signature and keys are available in PKGBUILD). This process will " unsafe=True)
"fail in case if key is not known for build user. This subcommand can be used "
"in order to import the PGP key to user keychain.",
formatter_class=_formatter)
parser.add_argument("--key-server", help="key server for key import", default="keyserver.ubuntu.com")
parser.add_argument("key", help="PGP key to import from public server")
parser.set_defaults(handler=handlers.KeyImport, architecture=[""], lock=None, report=False)
return parser return parser
@ -492,9 +457,9 @@ def _set_repo_check_parser(root: SubParserAction) -> argparse.ArgumentParser:
return parser return parser
def _set_repo_clean_parser(root: SubParserAction) -> argparse.ArgumentParser: def _set_repo_daemon_parser(root: SubParserAction) -> argparse.ArgumentParser:
""" """
add parser for repository clean subcommand add parser for daemon subcommand
Args: Args:
root(SubParserAction): subparsers for the commands root(SubParserAction): subparsers for the commands
@ -502,58 +467,22 @@ def _set_repo_clean_parser(root: SubParserAction) -> argparse.ArgumentParser:
Returns: Returns:
argparse.ArgumentParser: created argument parser argparse.ArgumentParser: created argument parser
""" """
parser = root.add_parser("repo-clean", aliases=["clean"], help="clean local caches", parser = root.add_parser("repo-daemon", aliases=["daemon"], help="run application as daemon",
description="remove local caches", description="start process which periodically will run update process",
epilog="The subcommand clears every temporary directories (builds, caches etc). Normally "
"you should not run this command manually. Also in case if you are going to clear "
"the chroot directories you will need root privileges.",
formatter_class=_formatter) formatter_class=_formatter)
parser.add_argument("--cache", help="clear directory with package caches", parser.add_argument("-i", "--interval", help="interval between runs in seconds", type=int, default=60 * 60 * 12)
action=argparse.BooleanOptionalAction, default=False) parser.add_argument("--aur", help="enable or disable checking for AUR updates. Implies --no-vcs",
parser.add_argument("--chroot", help="clear build chroot", action=argparse.BooleanOptionalAction, default=False) action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--manual", help="clear manually added packages queue", parser.add_argument("--local", help="enable or disable checking of local packages for updates",
action=argparse.BooleanOptionalAction, default=False) action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--packages", help="clear directory with built packages", parser.add_argument("--manual", help="include or exclude manual updates",
action=argparse.BooleanOptionalAction, default=False) action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--pacman", help="clear directory with pacman local database cache", parser.add_argument("--vcs", help="enable or disable checking of VCS packages",
action=argparse.BooleanOptionalAction, default=False) action=argparse.BooleanOptionalAction, default=True)
parser.set_defaults(handler=handlers.Clean, quiet=True, unsafe=True) parser.add_argument("-y", "--refresh", help="download fresh package databases from the mirror before actions, "
return parser "-yy to force refresh even if up to date",
action="count", default=False)
parser.set_defaults(handler=handlers.Daemon, dry_run=False, exit_code=False, package=[])
def _set_repo_config_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for config subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("repo-config", aliases=["config"], help="dump configuration",
description="dump configuration for the specified architecture",
formatter_class=_formatter)
parser.set_defaults(handler=handlers.Dump, lock=None, report=False, quiet=True, unsafe=True)
return parser
def _set_repo_config_validate_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for config validation subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("repo-config-validate", aliases=["config-validate"], help="validate system configuration",
description="validate configuration and print found errors",
formatter_class=_formatter)
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if configuration is invalid",
action="store_true")
parser.set_defaults(handler=handlers.Validate, lock=None, report=False, quiet=True, unsafe=True)
return parser return parser
@ -637,39 +566,6 @@ def _set_repo_restore_parser(root: SubParserAction) -> argparse.ArgumentParser:
return parser return parser
def _set_repo_setup_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for setup subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("repo-setup", aliases=["init", "repo-init", "setup"], help="initial service configuration",
description="create initial service configuration, requires root",
epilog="Create _minimal_ configuration for the service according to provided options.",
formatter_class=_formatter)
parser.add_argument("--build-as-user", help="force makepkg user to the specific one")
parser.add_argument("--build-command", help="build command prefix", default="ahriman")
parser.add_argument("--from-configuration", help="path to default devtools pacman configuration",
type=Path, default=Path("/usr/share/devtools/pacman-extra.conf"))
parser.add_argument("--makeflags-jobs", help="append MAKEFLAGS variable with parallelism set to number of cores",
action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--multilib", help="add or do not multilib repository",
action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--packager", help="packager name and email", required=True)
parser.add_argument("--repository", help="repository name", required=True)
parser.add_argument("--sign-key", help="sign key id")
parser.add_argument("--sign-target", help="sign options", action="append",
type=SignSettings.from_option, choices=enum_values(SignSettings))
parser.add_argument("--web-port", help="port of the web service", type=int)
parser.add_argument("--web-unix-socket", help="path to unix socket used for interprocess communications", type=Path)
parser.set_defaults(handler=handlers.Setup, lock=None, report=False, quiet=True, unsafe=True)
return parser
def _set_repo_sign_parser(root: SubParserAction) -> argparse.ArgumentParser: def _set_repo_sign_parser(root: SubParserAction) -> argparse.ArgumentParser:
""" """
add parser for sign subcommand add parser for sign subcommand
@ -793,7 +689,130 @@ def _set_repo_update_parser(root: SubParserAction) -> argparse.ArgumentParser:
return parser return parser
def _set_shell_parser(root: SubParserAction) -> argparse.ArgumentParser: def _set_service_clean_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for repository clean subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("service-clean", aliases=["clean", "repo-clean"], help="clean local caches",
description="remove local caches",
epilog="The subcommand clears every temporary directories (builds, caches etc). Normally "
"you should not run this command manually. Also in case if you are going to clear "
"the chroot directories you will need root privileges.",
formatter_class=_formatter)
parser.add_argument("--cache", help="clear directory with package caches",
action=argparse.BooleanOptionalAction, default=False)
parser.add_argument("--chroot", help="clear build chroot", action=argparse.BooleanOptionalAction, default=False)
parser.add_argument("--manual", help="clear manually added packages queue",
action=argparse.BooleanOptionalAction, default=False)
parser.add_argument("--packages", help="clear directory with built packages",
action=argparse.BooleanOptionalAction, default=False)
parser.add_argument("--pacman", help="clear directory with pacman local database cache",
action=argparse.BooleanOptionalAction, default=False)
parser.set_defaults(handler=handlers.Clean, quiet=True, unsafe=True)
return parser
def _set_service_config_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for config subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("service-config", aliases=["config", "repo-config"], help="dump configuration",
description="dump configuration for the specified architecture",
formatter_class=_formatter)
parser.set_defaults(handler=handlers.Dump, lock=None, report=False, quiet=True, unsafe=True)
return parser
def _set_service_config_validate_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for config validation subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("service-config-validate", aliases=["config-validate", "repo-config-validate"],
help="validate system configuration",
description="validate configuration and print found errors",
formatter_class=_formatter)
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if configuration is invalid",
action="store_true")
parser.set_defaults(handler=handlers.Validate, lock=None, report=False, quiet=True, unsafe=True)
return parser
def _set_service_key_import_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for key import subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("service-key-import", aliases=["key-import"], help="import PGP key",
description="import PGP key from public sources to the repository user",
epilog="By default ahriman runs build process with package sources validation "
"(in case if signature and keys are available in PKGBUILD). This process will "
"fail in case if key is not known for build user. This subcommand can be used "
"in order to import the PGP key to user keychain.",
formatter_class=_formatter)
parser.add_argument("--key-server", help="key server for key import", default="keyserver.ubuntu.com")
parser.add_argument("key", help="PGP key to import from public server")
parser.set_defaults(handler=handlers.KeyImport, architecture=[""], lock=None, report=False)
return parser
def _set_service_setup_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for setup subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("service-setup", aliases=["init", "repo-init", "repo-setup", "setup"],
help="initial service configuration",
description="create initial service configuration, requires root",
epilog="Create _minimal_ configuration for the service according to provided options.",
formatter_class=_formatter)
parser.add_argument("--build-as-user", help="force makepkg user to the specific one")
parser.add_argument("--build-command", help="build command prefix", default="ahriman")
parser.add_argument("--from-configuration", help="path to default devtools pacman configuration",
type=Path, default=Path("/usr/share/devtools/pacman-extra.conf"))
parser.add_argument("--makeflags-jobs", help="append MAKEFLAGS variable with parallelism set to number of cores",
action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--multilib", help="add or do not multilib repository",
action=argparse.BooleanOptionalAction, default=True)
parser.add_argument("--packager", help="packager name and email", required=True)
parser.add_argument("--repository", help="repository name", required=True)
parser.add_argument("--sign-key", help="sign key id")
parser.add_argument("--sign-target", help="sign options", action="append",
type=SignSettings.from_option, choices=enum_values(SignSettings))
parser.add_argument("--web-port", help="port of the web service", type=int)
parser.add_argument("--web-unix-socket", help="path to unix socket used for interprocess communications", type=Path)
parser.set_defaults(handler=handlers.Setup, lock=None, report=False, quiet=True, unsafe=True)
return parser
def _set_service_shell_parser(root: SubParserAction) -> argparse.ArgumentParser:
""" """
add parser for shell subcommand add parser for shell subcommand
@ -803,7 +822,7 @@ def _set_shell_parser(root: SubParserAction) -> argparse.ArgumentParser:
Returns: Returns:
argparse.ArgumentParser: created argument parser argparse.ArgumentParser: created argument parser
""" """
parser = root.add_parser("shell", help="invoke python shell", parser = root.add_parser("service-shell", aliases=["shell"], help="invoke python shell",
description="drop into python shell while having created application", description="drop into python shell while having created application",
formatter_class=_formatter) formatter_class=_formatter)
parser.add_argument("code", help="instead of dropping into shell, just execute the specified code", nargs="?") parser.add_argument("code", help="instead of dropping into shell, just execute the specified code", nargs="?")
@ -879,23 +898,6 @@ def _set_user_remove_parser(root: SubParserAction) -> argparse.ArgumentParser:
return parser return parser
def _set_version_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for version subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("version", help="application version",
description="print application and its dependencies versions", formatter_class=_formatter)
parser.set_defaults(handler=handlers.Versions, architecture=[""], lock=None, report=False, quiet=True,
unsafe=True)
return parser
def _set_web_parser(root: SubParserAction) -> argparse.ArgumentParser: def _set_web_parser(root: SubParserAction) -> argparse.ArgumentParser:
""" """
add parser for web subcommand add parser for web subcommand

View File

@ -87,7 +87,7 @@ class Spawn(Thread, LazyLogging):
server(str): PGP key server server(str): PGP key server
""" """
kwargs = {} if server is None else {"key-server": server} kwargs = {} if server is None else {"key-server": server}
self.spawn_process("key-import", key, **kwargs) self.spawn_process("service-key-import", key, **kwargs)
def packages_add(self, packages: Iterable[str], *, now: bool) -> None: def packages_add(self, packages: Iterable[str], *, now: bool) -> None:
""" """

View File

@ -57,7 +57,7 @@ def test_check_unsafe(mocker: MockerFixture) -> None:
must check if command is unsafe must check if command is unsafe
""" """
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty") check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
UnsafeCommands.check_unsafe("repo-clean", ["repo-clean"], _parser()) UnsafeCommands.check_unsafe("service-clean", ["service-clean"], _parser())
check_mock.assert_called_once_with(True, True) check_mock.assert_called_once_with(True, True)
@ -66,7 +66,7 @@ def test_check_unsafe_safe(mocker: MockerFixture) -> None:
must check if command is safe must check if command is safe
""" """
check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty") check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty")
UnsafeCommands.check_unsafe("package-status", ["repo-clean"], _parser()) UnsafeCommands.check_unsafe("package-status", ["service-clean"], _parser())
check_mock.assert_called_once_with(True, False) check_mock.assert_called_once_with(True, False)

View File

@ -14,16 +14,16 @@ def test_parser(parser: argparse.ArgumentParser) -> None:
""" """
must parse valid command line must parse valid command line
""" """
parser.parse_args(["-a", "x86_64", "repo-config"]) parser.parse_args(["-a", "x86_64", "service-config"])
def test_parser_option_configuration(parser: argparse.ArgumentParser) -> None: def test_parser_option_configuration(parser: argparse.ArgumentParser) -> None:
""" """
must convert configuration option to Path instance must convert configuration option to Path instance
""" """
args = parser.parse_args(["-a", "x86_64", "repo-config"]) args = parser.parse_args(["-a", "x86_64", "service-config"])
assert isinstance(args.configuration, Path) assert isinstance(args.configuration, Path)
args = parser.parse_args(["-a", "x86_64", "-c", "ahriman.ini", "repo-config"]) args = parser.parse_args(["-a", "x86_64", "-c", "ahriman.ini", "service-config"])
assert isinstance(args.configuration, Path) assert isinstance(args.configuration, Path)
@ -41,7 +41,7 @@ def test_multiple_architectures(parser: argparse.ArgumentParser) -> None:
""" """
must accept multiple architectures must accept multiple architectures
""" """
args = parser.parse_args(["-a", "x86_64", "-a", "i686", "repo-config"]) args = parser.parse_args(["-a", "x86_64", "-a", "i686", "service-config"])
assert args.architecture == ["x86_64", "i686"] assert args.architecture == ["x86_64", "i686"]
@ -65,38 +65,6 @@ def test_subparsers_aur_search_architecture(parser: argparse.ArgumentParser) ->
assert args.architecture == [""] assert args.architecture == [""]
def test_subparsers_daemon(parser: argparse.ArgumentParser) -> None:
"""
daemon command must imply dry run, exit code and package
"""
args = parser.parse_args(["daemon"])
assert not args.dry_run
assert not args.exit_code
assert args.package == []
def test_subparsers_daemon_option_refresh(parser: argparse.ArgumentParser) -> None:
"""
daemon command must count refresh options
"""
args = parser.parse_args(["daemon"])
assert args.refresh == 0
args = parser.parse_args(["daemon", "-y"])
assert args.refresh == 1
args = parser.parse_args(["daemon", "-yy"])
assert args.refresh == 2
def test_subparsers_daemon_option_interval(parser: argparse.ArgumentParser) -> None:
"""
daemon command must convert interval option to int instance
"""
args = parser.parse_args(["daemon"])
assert isinstance(args.interval, int)
args = parser.parse_args(["daemon", "--interval", "10"])
assert isinstance(args.interval, int)
def test_subparsers_help(parser: argparse.ArgumentParser) -> None: def test_subparsers_help(parser: argparse.ArgumentParser) -> None:
""" """
help command must imply architecture list, lock, report, quiet, unsafe and parser help command must imply architecture list, lock, report, quiet, unsafe and parser
@ -139,21 +107,23 @@ def test_subparsers_help_commands_unsafe_architecture(parser: argparse.ArgumentP
assert args.architecture == [""] assert args.architecture == [""]
def test_subparsers_key_import(parser: argparse.ArgumentParser) -> None: def test_subparsers_help_version(parser: argparse.ArgumentParser) -> None:
""" """
key-import command must imply architecture list, lock and report help-version command must imply architecture, lock, report, quiet and unsafe
""" """
args = parser.parse_args(["key-import", "key"]) args = parser.parse_args(["help-version"])
assert args.architecture == [""] assert args.architecture == [""]
assert args.lock is None assert args.lock is None
assert not args.report assert not args.report
assert args.quiet
assert args.unsafe
def test_subparsers_key_import_architecture(parser: argparse.ArgumentParser) -> None: def test_subparsers_help_version_architecture(parser: argparse.ArgumentParser) -> None:
""" """
key-import command must correctly parse architecture list help-version command must correctly parse architecture list
""" """
args = parser.parse_args(["-a", "x86_64", "key-import", "key"]) args = parser.parse_args(["-a", "x86_64", "help-version"])
assert args.architecture == [""] assert args.architecture == [""]
@ -382,47 +352,36 @@ def test_subparsers_repo_check_option_refresh(parser: argparse.ArgumentParser) -
assert args.refresh == 2 assert args.refresh == 2
def test_subparsers_repo_clean(parser: argparse.ArgumentParser) -> None: def test_subparsers_repo_daemon(parser: argparse.ArgumentParser) -> None:
""" """
repo-clean command must imply quiet and unsafe repo-daemon command must imply dry run, exit code and package
""" """
args = parser.parse_args(["repo-clean"]) args = parser.parse_args(["repo-daemon"])
assert args.quiet assert not args.dry_run
assert args.unsafe assert not args.exit_code
assert args.package == []
def test_subparsers_repo_clean_architecture(parser: argparse.ArgumentParser) -> None: def test_subparsers_repo_daemon_option_refresh(parser: argparse.ArgumentParser) -> None:
""" """
repo-clean command must correctly parse architecture list repo-daemon command must count refresh options
""" """
args = parser.parse_args(["repo-clean"]) args = parser.parse_args(["repo-daemon"])
assert args.architecture is None assert args.refresh == 0
args = parser.parse_args(["-a", "x86_64", "repo-clean"]) args = parser.parse_args(["repo-daemon", "-y"])
assert args.architecture == ["x86_64"] assert args.refresh == 1
args = parser.parse_args(["repo-daemon", "-yy"])
assert args.refresh == 2
def test_subparsers_repo_config(parser: argparse.ArgumentParser) -> None: def test_subparsers_repo_daemon_option_interval(parser: argparse.ArgumentParser) -> None:
""" """
repo-config command must imply lock, report, quiet and unsafe repo-daemon command must convert interval option to int instance
""" """
args = parser.parse_args(["-a", "x86_64", "repo-config"]) args = parser.parse_args(["repo-daemon"])
assert args.architecture == ["x86_64"] assert isinstance(args.interval, int)
assert args.lock is None args = parser.parse_args(["repo-daemon", "--interval", "10"])
assert not args.report assert isinstance(args.interval, int)
assert args.quiet
assert args.unsafe
def test_subparsers_repo_config_validate(parser: argparse.ArgumentParser) -> None:
"""
repo-config-validate command must imply lock, report, quiet and unsafe
"""
args = parser.parse_args(["-a", "x86_64", "repo-config-validate"])
assert args.architecture == ["x86_64"]
assert args.lock is None
assert not args.report
assert args.quiet
assert args.unsafe
def test_subparsers_repo_rebuild_architecture(parser: argparse.ArgumentParser) -> None: def test_subparsers_repo_rebuild_architecture(parser: argparse.ArgumentParser) -> None:
@ -482,41 +441,6 @@ def test_subparsers_repo_restore_architecture(parser: argparse.ArgumentParser) -
assert args.architecture == [""] assert args.architecture == [""]
def test_subparsers_repo_setup(parser: argparse.ArgumentParser) -> None:
"""
repo-setup command must imply lock, report, quiet and unsafe
"""
args = parser.parse_args(["-a", "x86_64", "repo-setup", "--packager", "John Doe <john@doe.com>",
"--repository", "aur-clone"])
assert args.architecture == ["x86_64"]
assert args.lock is None
assert not args.report
assert args.quiet
assert args.unsafe
def test_subparsers_repo_setup_option_from_configuration(parser: argparse.ArgumentParser) -> None:
"""
repo-setup command must convert from-configuration option to path instance
"""
args = parser.parse_args(["-a", "x86_64", "repo-setup", "--packager", "John Doe <john@doe.com>",
"--repository", "aur-clone"])
assert isinstance(args.from_configuration, Path)
args = parser.parse_args(["-a", "x86_64", "repo-setup", "--packager", "John Doe <john@doe.com>",
"--repository", "aur-clone", "--from-configuration", "path"])
assert isinstance(args.from_configuration, Path)
def test_subparsers_repo_setup_option_sign_target(parser: argparse.ArgumentParser) -> None:
"""
repo-setup command must convert sign-target option to signsettings instance
"""
args = parser.parse_args(["-a", "x86_64", "repo-setup", "--packager", "John Doe <john@doe.com>",
"--repository", "aur-clone", "--sign-target", "packages"])
assert args.sign_target
assert all(isinstance(target, SignSettings) for target in args.sign_target)
def test_subparsers_repo_sign_architecture(parser: argparse.ArgumentParser) -> None: def test_subparsers_repo_sign_architecture(parser: argparse.ArgumentParser) -> None:
""" """
repo-sign command must correctly parse architecture list repo-sign command must correctly parse architecture list
@ -622,11 +546,107 @@ def test_subparsers_repo_update_option_refresh(parser: argparse.ArgumentParser)
assert args.refresh == 2 assert args.refresh == 2
def test_subparsers_shell(parser: argparse.ArgumentParser) -> None: def test_subparsers_service_clean(parser: argparse.ArgumentParser) -> None:
""" """
shell command must imply lock and report service-clean command must imply quiet and unsafe
""" """
args = parser.parse_args(["shell"]) args = parser.parse_args(["service-clean"])
assert args.quiet
assert args.unsafe
def test_subparsers_service_clean_architecture(parser: argparse.ArgumentParser) -> None:
"""
service-clean command must correctly parse architecture list
"""
args = parser.parse_args(["service-clean"])
assert args.architecture is None
args = parser.parse_args(["-a", "x86_64", "service-clean"])
assert args.architecture == ["x86_64"]
def test_subparsers_service_config(parser: argparse.ArgumentParser) -> None:
"""
service-config command must imply lock, report, quiet and unsafe
"""
args = parser.parse_args(["-a", "x86_64", "service-config"])
assert args.architecture == ["x86_64"]
assert args.lock is None
assert not args.report
assert args.quiet
assert args.unsafe
def test_subparsers_service_config_validate(parser: argparse.ArgumentParser) -> None:
"""
service-config-validate command must imply lock, report, quiet and unsafe
"""
args = parser.parse_args(["-a", "x86_64", "service-config-validate"])
assert args.architecture == ["x86_64"]
assert args.lock is None
assert not args.report
assert args.quiet
assert args.unsafe
def test_subparsers_service_key_import(parser: argparse.ArgumentParser) -> None:
"""
service-key-import command must imply architecture list, lock and report
"""
args = parser.parse_args(["service-key-import", "key"])
assert args.architecture == [""]
assert args.lock is None
assert not args.report
def test_subparsers_service_key_import_architecture(parser: argparse.ArgumentParser) -> None:
"""
service-key-import command must correctly parse architecture list
"""
args = parser.parse_args(["-a", "x86_64", "service-key-import", "key"])
assert args.architecture == [""]
def test_subparsers_service_setup(parser: argparse.ArgumentParser) -> None:
"""
service-setup command must imply lock, report, quiet and unsafe
"""
args = parser.parse_args(["-a", "x86_64", "service-setup", "--packager", "John Doe <john@doe.com>",
"--repository", "aur-clone"])
assert args.architecture == ["x86_64"]
assert args.lock is None
assert not args.report
assert args.quiet
assert args.unsafe
def test_subparsers_service_setup_option_from_configuration(parser: argparse.ArgumentParser) -> None:
"""
service-setup command must convert from-configuration option to path instance
"""
args = parser.parse_args(["-a", "x86_64", "service-setup", "--packager", "John Doe <john@doe.com>",
"--repository", "aur-clone"])
assert isinstance(args.from_configuration, Path)
args = parser.parse_args(["-a", "x86_64", "service-setup", "--packager", "John Doe <john@doe.com>",
"--repository", "aur-clone", "--from-configuration", "path"])
assert isinstance(args.from_configuration, Path)
def test_subparsers_service_setup_option_sign_target(parser: argparse.ArgumentParser) -> None:
"""
service-setup command must convert sign-target option to signsettings instance
"""
args = parser.parse_args(["-a", "x86_64", "service-setup", "--packager", "John Doe <john@doe.com>",
"--repository", "aur-clone", "--sign-target", "packages"])
assert args.sign_target
assert all(isinstance(target, SignSettings) for target in args.sign_target)
def test_subparsers_service_shell(parser: argparse.ArgumentParser) -> None:
"""
service-shell command must imply lock and report
"""
args = parser.parse_args(["service-shell"])
assert args.lock is None assert args.lock is None
assert not args.report assert not args.report
@ -712,26 +732,6 @@ def test_subparsers_user_remove_architecture(parser: argparse.ArgumentParser) ->
assert args.architecture == [""] assert args.architecture == [""]
def test_subparsers_version(parser: argparse.ArgumentParser) -> None:
"""
version command must imply architecture, lock, report, quiet and unsafe
"""
args = parser.parse_args(["version"])
assert args.architecture == [""]
assert args.lock is None
assert not args.report
assert args.quiet
assert args.unsafe
def test_subparsers_version_architecture(parser: argparse.ArgumentParser) -> None:
"""
version command must correctly parse architecture list
"""
args = parser.parse_args(["-a", "x86_64", "version"])
assert args.architecture == [""]
def test_subparsers_web(parser: argparse.ArgumentParser) -> None: def test_subparsers_web(parser: argparse.ArgumentParser) -> None:
""" """
web command must imply lock, report and parser web command must imply lock, report and parser

View File

@ -42,7 +42,7 @@ def test_key_import(spawner: Spawn, mocker: MockerFixture) -> None:
""" """
spawn_mock = mocker.patch("ahriman.core.spawn.Spawn.spawn_process") spawn_mock = mocker.patch("ahriman.core.spawn.Spawn.spawn_process")
spawner.key_import("0xdeadbeaf", None) spawner.key_import("0xdeadbeaf", None)
spawn_mock.assert_called_once_with("key-import", "0xdeadbeaf") spawn_mock.assert_called_once_with("service-key-import", "0xdeadbeaf")
def test_key_import_with_server(spawner: Spawn, mocker: MockerFixture) -> None: def test_key_import_with_server(spawner: Spawn, mocker: MockerFixture) -> None:
@ -51,7 +51,7 @@ def test_key_import_with_server(spawner: Spawn, mocker: MockerFixture) -> None:
""" """
spawn_mock = mocker.patch("ahriman.core.spawn.Spawn.spawn_process") spawn_mock = mocker.patch("ahriman.core.spawn.Spawn.spawn_process")
spawner.key_import("0xdeadbeaf", "keyserver.ubuntu.com") spawner.key_import("0xdeadbeaf", "keyserver.ubuntu.com")
spawn_mock.assert_called_once_with("key-import", "0xdeadbeaf", **{"key-server": "keyserver.ubuntu.com"}) spawn_mock.assert_called_once_with("service-key-import", "0xdeadbeaf", **{"key-server": "keyserver.ubuntu.com"})
def test_packages_add(spawner: Spawn, mocker: MockerFixture) -> None: def test_packages_add(spawner: Spawn, mocker: MockerFixture) -> None: