Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: new completion for FreeBSD's bectl



Previously, a port of the Solaris beadm shell script was used but that's
been rewritten in C. When now using bectl, I missed the completion from
beadm so have taken that and adapted and improved it for bectl.

Oliver

diff --git a/Completion/BSD/Command/_bectl b/Completion/BSD/Command/_bectl
new file mode 100644
index 000000000..484fa0159
--- /dev/null
+++ b/Completion/BSD/Command/_bectl
@@ -0,0 +1,103 @@
+#compdef bectl
+
+local cmd curcontext="$curcontext" ret=1
+local -a state line expl args opts bectl=( $words[1] )
+local -A opt_args
+
+_arguments -C -s -A '-*' \
+  '-h[display usage information]' \
+  '-r+[specify boot environment root]:root:_zfs_dataset' \
+  '1:action:((
+    activate:"set the default boot environment"
+    check:"perform silent sanity check"
+    create:"create new boot environment or snapshot"
+    destroy:"destroy boot environment or snapshot"
+    export:"export boot environment to stdout"
+    import:"import boot environment from stdin"
+    jail:"create a jail of a boot environment"
+    list:"display all boot environments"
+    mount:"mount a boot environment"
+    rename:"rename a boot environment"
+    u{,n}jail:"destroy jail created from a boot environment"
+    u{,n}mount:"unmount a boot environment"
+  ))' \
+  '*:: :->args' && ret=0
+
+if [[ $state = args ]]; then
+  bectl+=( ${(kv)opt_args[(i)-r]} )
+  cmd="$words[1]"
+  curcontext="${curcontext%:*}-$cmd:"
+
+  case $cmd in
+    activate|create|destroy|(ex|im)port|jail|rename|(|u|un)mount)
+      args=( '1: :->boot-environs' )
+    ;|
+
+    activate)
+      args+=(
+        '(-T)-t[apply to the next boot only]'
+        '(-t)-T[remove temporary boot once configuration]'
+      )
+    ;;
+    create)
+      args+=(
+        '-r[create recursive boot environment]'
+        '-e+[clone specified boot environment]: :->boot-environs'
+      )
+    ;;
+    destroy)
+      args+=(
+        '-F[unmount without confirmation]'
+        '-o[destroy the origin as well]'
+      )
+    ;;
+    jail)
+      args+=(
+        '(-U)-b[enable batch mode]'
+        '(-b)-U[persistent jail]'
+        '*-o+[set a jail parameter]:jail parameter'
+        '*-u+[unset a jail parameter]:jail parameter'
+        '*::: : _normal -p $service'
+      )
+    ;;
+    list)
+      opts=( name creation origin used{,by{dataset,refreservation,snapshots}} )
+      args+=(
+        '(-D)-a[display all datasets]'
+        '(-a -s)-D[display full space usage]'
+        '-H[suppress printing of headers]'
+        '(-D)-s[include snapshots]'
+        "(-C)-c+[specify sort key (ascending)]:zfs property:($opts)"
+        "(-c)-C+[specify sort key (descending)]:zfs property:($opts)"
+      )
+    ;;
+    mount)
+      args+=( '2:mount point:_directories' )
+    ;;
+    rename)
+      args+=( '2:new boot environment' )
+    ;;
+    u(|n)jail)
+      args+=( '(*)1::jail:_jails' '*: :->boot-environs' )
+    ;;
+    u(|n)mount)
+      args+=( '-f[force unmount]' )
+    ;;
+  esac
+
+  if (( $#args )); then
+    _arguments -C -A '-*' -s $args
+  else
+    _default
+  fi && ret=0
+fi
+
+if [[ $state = boot-environs ]]; then
+  [[ -prefix *@ ]] && opts=( -s )
+
+  _wanted boot-environs expl "boot environment" \
+      compadd -r "@ \t\n\-" ${${${(f)"$(_call_program boot-environs
+          $bectl $beopts list $opts -H 2>/dev/null)"}#  }%%[[:blank:]]*} && ret=0
+fi
+
+return ret




Messages sorted by: Reverse Date, Date, Thread, Author