diff mbox series

[bug#45004,shepherd] herd: Suggest alternatives when action and service are likely swapped.

Message ID 20201202092106.22770-1-leo.prikler@student.tugraz.at
State New
Headers show
Series [bug#45004,shepherd] herd: Suggest alternatives when action and service are likely swapped. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Leo Prikler Dec. 2, 2020, 9:21 a.m. UTC
* modules/shepherd/script/herd.scm (run-command)[reply error]: Report a more
descriptive error if service could reasonably have been an action.
---
 modules/shepherd/scripts/herd.scm | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Jonathan Brielmaier Dec. 2, 2020, 8:03 p.m. UTC | #1
On 02.12.20 10:21, Leo Prikler wrote:
> * modules/shepherd/script/herd.scm (run-command)[reply error]: Report a more
> descriptive error if service could reasonably have been an action.

I didn't test it, but it sounds like a good idea :)

It reminds me that I should maybe write bash completions files for
shepherd as it annoys me pretty hard ^^
Oleg Pykhalov Dec. 4, 2020, 5:18 p.m. UTC | #2
Jonathan Brielmaier <jonathan.brielmaier@web.de> writes:

[…]

> It reminds me that I should maybe write bash completions files for
> shepherd as it annoys me pretty hard ^^

You could take my, which probably should be improved before merging to
Shepherd IMHO, e.g. avoid 'awk'.

~/.local/share/bash-completion/completions/herd
_herd_complete_service(){
    local command="${COMP_WORDS[1]}"
    local services="$(sudo herd status | awk '/*/ || /^ +/ || /^ -/ { print $NF }' | sort -u)"
    COMPREPLY=($(compgen -W "$services" -- "${COMP_WORDS[$COMP_CWORD]}"))
}

_herd_is_command ()
{
    local word
    local result="false"
    for word in ${COMP_WORDS[*]}t
    do
	if [ "$word" = "$1" ]
	then
	    result=true
	    break
	fi
    done
    $result
}

_herd_complete()
{
    local word_count=${#COMP_WORDS[*]}
    local word_at_point="${COMP_WORDS[$COMP_CWORD]}"
    case $COMP_CWORD in
        1)
	    if [ -z "$_herd_subcommands" ]
	    then
		# Cache the list of subcommands to speed things up.
		_herd_subcommands="enable disable start status stop"
	    fi
            COMPREPLY=($(compgen -W "$_herd_subcommands" -- "${COMP_WORDS[$COMP_CWORD]}"))
            ;;
        *)
            case $COMP_CWORD in
		2) _herd_complete_service;;
	    esac
            ;;
    esac
}

complete -F _herd_complete herd
Ludovic Courtès June 2, 2023, 1:56 p.m. UTC | #3
Hi Oleg,

Oleg Pykhalov <go.wigust@gmail.com> skribis:

> You could take my, which probably should be improved before merging to
> Shepherd IMHO, e.g. avoid 'awk'.
>
> ~/.local/share/bash-completion/completions/herd
>
> _herd_complete_service(){
>     local command="${COMP_WORDS[1]}"
>     local services="$(sudo herd status | awk '/*/ || /^ +/ || /^ -/ { print $NF }' | sort -u)"
>     COMPREPLY=($(compgen -W "$services" -- "${COMP_WORDS[$COMP_CWORD]}"))
> }
>
> _herd_is_command ()
> {
>     local word
>     local result="false"
>     for word in ${COMP_WORDS[*]}t
>     do
> 	if [ "$word" = "$1" ]
> 	then
> 	    result=true
> 	    break
> 	fi
>     done
>     $result
> }
>
> _herd_complete()
> {
>     local word_count=${#COMP_WORDS[*]}
>     local word_at_point="${COMP_WORDS[$COMP_CWORD]}"
>     case $COMP_CWORD in
>         1)
> 	    if [ -z "$_herd_subcommands" ]
> 	    then
> 		# Cache the list of subcommands to speed things up.
> 		_herd_subcommands="enable disable start status stop"
> 	    fi
>             COMPREPLY=($(compgen -W "$_herd_subcommands" -- "${COMP_WORDS[$COMP_CWORD]}"))
>             ;;
>         *)
>             case $COMP_CWORD in
> 		2) _herd_complete_service;;
> 	    esac
>             ;;
>     esac
> }
>
> complete -F _herd_complete herd

Would you mind polishing a bit (as you see fit; perhaps use grep/sed
rather than Awk?) and submitting a patch for this?  I’d be happy to
apply it!

Thanks,
Ludo’.
Ludovic Courtès June 2, 2023, 2:04 p.m. UTC | #4
Hey Liliana,

> * modules/shepherd/script/herd.scm (run-command)[reply error]: Report a more
> descriptive error if service could reasonably have been an action.

I found this old patch of yours, which I find very useful.  So… finally
applied as Shepherd commit b9b15db9e5bda27287706b6727c462df686e7621!

Thanks,
Ludo’.
Oleg Pykhalov June 2, 2023, 10:23 p.m. UTC | #5
Hi Ludovic,

Ludovic Courtès <ludo@gnu.org> writes:

[…]

> Would you mind polishing a bit (as you see fit; perhaps use grep/sed
> rather than Awk?) and submitting a patch for this?  I’d be happy to
> apply it!

Done. Please check the 63860 issue.

Regards,
Oleg.
diff mbox series

Patch

diff --git a/modules/shepherd/scripts/herd.scm b/modules/shepherd/scripts/herd.scm
index 106de1e..a178f51 100644
--- a/modules/shepherd/scripts/herd.scm
+++ b/modules/shepherd/scripts/herd.scm
@@ -179,6 +179,15 @@  the daemon via SOCKET-FILE."
                 ('messages messages))
         (for-each display-line messages)
         (report-command-error error)
+        (match (list action service)
+          ((_ (or 'start 'stop 'status 'doc))
+           (report-error (l10n "did you mean 'herd ~a ~a'?")
+                         service action))
+          ((root (or 'help 'halt 'power-off 'load 'eval 'unload 'reload
+                     'daemonize 'persistency 'no-persistency 'cd 'restart))
+           (report-error (l10n "did you mean 'herd ~a ~a'?")
+                         service action))
+          ((_ _) *unspecified*))
         (exit 1))
        ((? eof-object?)
         ;; When stopping shepherd, we may get an EOF in lieu of a real reply,