On Tue, Aug 23, 2011 at 11:05:56AM +0200, Sebastien Luttringer wrote:
> list command can take new arguments auto/noauto.
> list command can take a list of daemon to list.
> 
> All kind of arguments can be mixed to obtain the proper output.
> 
> zsh and bash completion are updated
> 
> /daemon allow to call named dameon like /auto call daemon auto
> 
> Signed-off-by: Sebastien Luttringer <[email protected]>
> ---
>  bash-completion |    2 +-
>  rc.d            |   77 ++++++++++++++++++++++++++++++++++++++----------------
>  zsh-completion  |    2 +-
>  3 files changed, 56 insertions(+), 25 deletions(-)
> 
> diff --git a/bash-completion b/bash-completion
> index d78484e..718df6d 100644
> --- a/bash-completion
> +++ b/bash-completion
> @@ -10,7 +10,7 @@ _rc_d()
>       elif [[ "$prev" == help ]]; then
>               COMPREPLY=()
>       elif [[ "$prev" == list ]]; then
> -             ((COMP_CWORD == 2)) && COMPREPLY=($(compgen -W "started 
> stopped" -- "$cur")) || COMPREPLY=()
> +             COMPREPLY=($(compgen -W "started stopped auto noauto $(cd 
> /etc/rc.d && compgen -f -X 'functions*')" -- "$cur"))
>       elif [[ "$prev" == start ]]; then
>               COMPREPLY=($(comm -23 <(cd /etc/rc.d && compgen -f -X 
> 'functions*' "$cur"|sort) <(cd /run/daemons/ && compgen -f "$cur"|sort)))
>       elif [[ "$prev" =~ stop|restart|reload ]]; then
> diff --git a/rc.d b/rc.d
> index 9b0f092..9417e90 100755
> --- a/rc.d
> +++ b/rc.d
> @@ -4,11 +4,12 @@ NEED_ROOT=0 # this script can be run without be root
>  . /etc/rc.conf
>  . /etc/rc.d/functions
>  
> +# print usage and exit
>  usage() {
>       local name=${0##*/}
>       cat >&2 << EOF
>  usage: $name <action> <daemon> [daemon] ...
> -       $name list [started|stopped]
> +       $name list [started|stopped|auto|noauto|daemon]
>         $name help
>  
>  <daemon> is the name of a script in /etc/rc.d
> @@ -16,41 +17,71 @@ usage: $name <action> <daemon> [daemon] ...
>  WARNING: initscripts are free to implement or not the above actions.
>  
>  e.g: $name list
> -     $name list started
> -     $name help
> +     $name list sshd gpm
> +     $name list started #all started daemons
> +     $name list /started #daemon nammed started

Eeeeew. Don't do that.. Please! Three suggestions:

* Just be okay with "started" being ambiguous. There probably won't be
  any daemon called {started,stopped,auto,noauto} in the next 100 years.
  This is all about doing it "right". If Tom and you are fine with
  ambiguity, keep the way you did it in the first submission.

* Do what I suggested in my first reply to the first version of this
  patch and introduce a separate keyword.

* Use some separator like "--" to specify that there won't be any
  further commands. `rc.d list started` will list all started daemons.
  `rc.d list -- started auto` will list daemons called "started" and
  "auto".

... but for the sake of god, please don't use "/" as some weird kind of
escape character.

>       $name start sshd gpm
> +     $name help
>  EOF
>       exit 1
>  }
>  
> +# list action
> +list() {
> +     local mode s_status s_auto
> +     local -a daemons
> +     # parse arguments
> +     for p; do
> +             case "$p" in
> +                     started) mode=started;;
> +                     stopped) mode=stopped;;
> +                     auto)            mode=auto;;
> +                     noauto)  mode=noauto;;
> +                     /*)                      daemons+=("${p:1}");;
> +                     *)                       daemons+=("$p");;

This is still screwed up. Use some tab width != 2 to see what I mean.

> +             esac
> +     done
> +     # if no daemon are specified take all executable file in /etc/rc.d
> +     if [[ ! $daemons ]]; then

:)

> +             cd /etc/rc.d
> +             for d in *; do
> +                     [[ -x "$d" && ! -d "$d" ]] && daemons+=("$d")

Yeah, this looks way better now.

> +             done
> +     fi
> +     # building string to display
> +     for d in "${daemons[@]}"; do
> +             # check if d is a valid daemon name
> +             have_daemon "$d" || continue
> +             # print running / stopped satus
> +             if ! ck_daemon "$d"; then
> +                     [[ $mode == stopped ]] && continue
> +                     s_status="${C_OTHER}[${C_DONE}STARTED${C_OTHER}]"
> +             else
> +                     [[ $mode == started ]] && continue
> +                     s_status="${C_OTHER}[${C_FAIL}STOPPED${C_OTHER}]"
> +             fi
> +             # print auto / manual status
> +             if ! ck_autostart "$d"; then
> +                     [[ $mode == noauto ]] && continue
> +                     s_auto="${C_OTHER}[${C_DONE}AUTO${C_OTHER}]"
> +             else
> +                     [[ $mode == auto ]] && continue
> +                     s_auto="${C_OTHER}[${C_FAIL}    ${C_OTHER}]"
> +             fi
> +             printf "$s_status$s_auto${C_CLEAR} $d\n"
> +     done
> +}
> +
>  (( $# < 1 )) && usage
>  
>  declare -i ret=0
>  case $1 in
>       help)
>               usage
> -             ;;
> +     ;;
>       list)
>               shift
> -             cd /etc/rc.d/
> -             for d in *; do
> -                     have_daemon "$d" || continue
> -                     # print running / stopped satus
> -                     if ! ck_daemon "$d"; then
> -                             [[ "$1" == stopped ]] && continue
> -                             printf "${C_OTHER}[${C_DONE}STARTED${C_OTHER}]"
> -                     else
> -                             [[ "$1" == started ]] && continue
> -                             printf "${C_OTHER}[${C_FAIL}STOPPED${C_OTHER}]"
> -                     fi
> -                     # print auto / manual status
> -                     if ! ck_autostart "$d"; then
> -                             printf "${C_OTHER}[${C_DONE}AUTO${C_OTHER}]"
> -                     else
> -                             printf "${C_OTHER}[${C_FAIL}    ${C_OTHER}]"
> -                     fi
> -                     printf " ${C_CLEAR}$d\n"
> -             done
> +             list "$@"
>       ;;
>       *)
>               # check min args count
> diff --git a/zsh-completion b/zsh-completion
> index e5c2850..27af29c 100644
> --- a/zsh-completion
> +++ b/zsh-completion
> @@ -19,7 +19,7 @@ _rc.d () {
>                                       _arguments "*: :"
>                                       ;;
>                               list)
> -                                     _arguments "2: :(started stopped)"
> +                                     _arguments "*: :(started stopped auto 
> noauto /etc/rc.d/*(N-*:t))"
>                                       ;;
>                               start)
>                                       _arguments "*: :($(comm -23 <(echo 
> /etc/rc.d/*(N-*:t)|tr ' ' '\n') <(echo /run/daemons/*(N:t)|tr ' ' '\n')))"
> -- 
> Sebastien "Seblu" Luttringer

Reply via email to