github.com/mckael/restic@v0.8.3/doc/bash-completion.sh (about)

     1  # bash completion for restic                               -*- shell-script -*-
     2  
     3  __debug()
     4  {
     5      if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then
     6          echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
     7      fi
     8  }
     9  
    10  # Homebrew on Macs have version 1.3 of bash-completion which doesn't include
    11  # _init_completion. This is a very minimal version of that function.
    12  __my_init_completion()
    13  {
    14      COMPREPLY=()
    15      _get_comp_words_by_ref "$@" cur prev words cword
    16  }
    17  
    18  __index_of_word()
    19  {
    20      local w word=$1
    21      shift
    22      index=0
    23      for w in "$@"; do
    24          [[ $w = "$word" ]] && return
    25          index=$((index+1))
    26      done
    27      index=-1
    28  }
    29  
    30  __contains_word()
    31  {
    32      local w word=$1; shift
    33      for w in "$@"; do
    34          [[ $w = "$word" ]] && return
    35      done
    36      return 1
    37  }
    38  
    39  __handle_reply()
    40  {
    41      __debug "${FUNCNAME[0]}"
    42      case $cur in
    43          -*)
    44              if [[ $(type -t compopt) = "builtin" ]]; then
    45                  compopt -o nospace
    46              fi
    47              local allflags
    48              if [ ${#must_have_one_flag[@]} -ne 0 ]; then
    49                  allflags=("${must_have_one_flag[@]}")
    50              else
    51                  allflags=("${flags[*]} ${two_word_flags[*]}")
    52              fi
    53              COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") )
    54              if [[ $(type -t compopt) = "builtin" ]]; then
    55                  [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
    56              fi
    57  
    58              # complete after --flag=abc
    59              if [[ $cur == *=* ]]; then
    60                  if [[ $(type -t compopt) = "builtin" ]]; then
    61                      compopt +o nospace
    62                  fi
    63  
    64                  local index flag
    65                  flag="${cur%%=*}"
    66                  __index_of_word "${flag}" "${flags_with_completion[@]}"
    67                  COMPREPLY=()
    68                  if [[ ${index} -ge 0 ]]; then
    69                      PREFIX=""
    70                      cur="${cur#*=}"
    71                      ${flags_completion[${index}]}
    72                      if [ -n "${ZSH_VERSION}" ]; then
    73                          # zsh completion needs --flag= prefix
    74                          eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
    75                      fi
    76                  fi
    77              fi
    78              return 0;
    79              ;;
    80      esac
    81  
    82      # check if we are handling a flag with special work handling
    83      local index
    84      __index_of_word "${prev}" "${flags_with_completion[@]}"
    85      if [[ ${index} -ge 0 ]]; then
    86          ${flags_completion[${index}]}
    87          return
    88      fi
    89  
    90      # we are parsing a flag and don't have a special handler, no completion
    91      if [[ ${cur} != "${words[cword]}" ]]; then
    92          return
    93      fi
    94  
    95      local completions
    96      completions=("${commands[@]}")
    97      if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
    98          completions=("${must_have_one_noun[@]}")
    99      fi
   100      if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
   101          completions+=("${must_have_one_flag[@]}")
   102      fi
   103      COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") )
   104  
   105      if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
   106          COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") )
   107      fi
   108  
   109      if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
   110          declare -F __custom_func >/dev/null && __custom_func
   111      fi
   112  
   113      # available in bash-completion >= 2, not always present on macOS
   114      if declare -F __ltrim_colon_completions >/dev/null; then
   115          __ltrim_colon_completions "$cur"
   116      fi
   117  }
   118  
   119  # The arguments should be in the form "ext1|ext2|extn"
   120  __handle_filename_extension_flag()
   121  {
   122      local ext="$1"
   123      _filedir "@(${ext})"
   124  }
   125  
   126  __handle_subdirs_in_dir_flag()
   127  {
   128      local dir="$1"
   129      pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1
   130  }
   131  
   132  __handle_flag()
   133  {
   134      __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   135  
   136      # if a command required a flag, and we found it, unset must_have_one_flag()
   137      local flagname=${words[c]}
   138      local flagvalue
   139      # if the word contained an =
   140      if [[ ${words[c]} == *"="* ]]; then
   141          flagvalue=${flagname#*=} # take in as flagvalue after the =
   142          flagname=${flagname%%=*} # strip everything after the =
   143          flagname="${flagname}=" # but put the = back
   144      fi
   145      __debug "${FUNCNAME[0]}: looking for ${flagname}"
   146      if __contains_word "${flagname}" "${must_have_one_flag[@]}"; then
   147          must_have_one_flag=()
   148      fi
   149  
   150      # if you set a flag which only applies to this command, don't show subcommands
   151      if __contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
   152        commands=()
   153      fi
   154  
   155      # keep flag value with flagname as flaghash
   156      if [ -n "${flagvalue}" ] ; then
   157          flaghash[${flagname}]=${flagvalue}
   158      elif [ -n "${words[ $((c+1)) ]}" ] ; then
   159          flaghash[${flagname}]=${words[ $((c+1)) ]}
   160      else
   161          flaghash[${flagname}]="true" # pad "true" for bool flag
   162      fi
   163  
   164      # skip the argument to a two word flag
   165      if __contains_word "${words[c]}" "${two_word_flags[@]}"; then
   166          c=$((c+1))
   167          # if we are looking for a flags value, don't show commands
   168          if [[ $c -eq $cword ]]; then
   169              commands=()
   170          fi
   171      fi
   172  
   173      c=$((c+1))
   174  
   175  }
   176  
   177  __handle_noun()
   178  {
   179      __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   180  
   181      if __contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
   182          must_have_one_noun=()
   183      elif __contains_word "${words[c]}" "${noun_aliases[@]}"; then
   184          must_have_one_noun=()
   185      fi
   186  
   187      nouns+=("${words[c]}")
   188      c=$((c+1))
   189  }
   190  
   191  __handle_command()
   192  {
   193      __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   194  
   195      local next_command
   196      if [[ -n ${last_command} ]]; then
   197          next_command="_${last_command}_${words[c]//:/__}"
   198      else
   199          if [[ $c -eq 0 ]]; then
   200              next_command="_$(basename "${words[c]//:/__}")"
   201          else
   202              next_command="_${words[c]//:/__}"
   203          fi
   204      fi
   205      c=$((c+1))
   206      __debug "${FUNCNAME[0]}: looking for ${next_command}"
   207      declare -F "$next_command" >/dev/null && $next_command
   208  }
   209  
   210  __handle_word()
   211  {
   212      if [[ $c -ge $cword ]]; then
   213          __handle_reply
   214          return
   215      fi
   216      __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   217      if [[ "${words[c]}" == -* ]]; then
   218          __handle_flag
   219      elif __contains_word "${words[c]}" "${commands[@]}"; then
   220          __handle_command
   221      elif [[ $c -eq 0 ]] && __contains_word "$(basename "${words[c]}")" "${commands[@]}"; then
   222          __handle_command
   223      else
   224          __handle_noun
   225      fi
   226      __handle_word
   227  }
   228  
   229  _restic_backup()
   230  {
   231      last_command="restic_backup"
   232      commands=()
   233  
   234      flags=()
   235      two_word_flags=()
   236      local_nonpersistent_flags=()
   237      flags_with_completion=()
   238      flags_completion=()
   239  
   240      flags+=("--exclude=")
   241      two_word_flags+=("-e")
   242      local_nonpersistent_flags+=("--exclude=")
   243      flags+=("--exclude-caches")
   244      local_nonpersistent_flags+=("--exclude-caches")
   245      flags+=("--exclude-file=")
   246      local_nonpersistent_flags+=("--exclude-file=")
   247      flags+=("--exclude-if-present=")
   248      local_nonpersistent_flags+=("--exclude-if-present=")
   249      flags+=("--files-from=")
   250      local_nonpersistent_flags+=("--files-from=")
   251      flags+=("--force")
   252      flags+=("-f")
   253      local_nonpersistent_flags+=("--force")
   254      flags+=("--help")
   255      flags+=("-h")
   256      local_nonpersistent_flags+=("--help")
   257      flags+=("--hostname=")
   258      local_nonpersistent_flags+=("--hostname=")
   259      flags+=("--one-file-system")
   260      flags+=("-x")
   261      local_nonpersistent_flags+=("--one-file-system")
   262      flags+=("--parent=")
   263      local_nonpersistent_flags+=("--parent=")
   264      flags+=("--stdin")
   265      local_nonpersistent_flags+=("--stdin")
   266      flags+=("--stdin-filename=")
   267      local_nonpersistent_flags+=("--stdin-filename=")
   268      flags+=("--tag=")
   269      local_nonpersistent_flags+=("--tag=")
   270      flags+=("--time=")
   271      local_nonpersistent_flags+=("--time=")
   272      flags+=("--with-atime")
   273      local_nonpersistent_flags+=("--with-atime")
   274      flags+=("--cacert=")
   275      flags+=("--cache-dir=")
   276      flags+=("--cleanup-cache")
   277      flags+=("--json")
   278      flags+=("--limit-download=")
   279      flags+=("--limit-upload=")
   280      flags+=("--no-cache")
   281      flags+=("--no-lock")
   282      flags+=("--option=")
   283      two_word_flags+=("-o")
   284      flags+=("--password-file=")
   285      two_word_flags+=("-p")
   286      flags+=("--quiet")
   287      flags+=("-q")
   288      flags+=("--repo=")
   289      two_word_flags+=("-r")
   290      flags+=("--tls-client-cert=")
   291  
   292      must_have_one_flag=()
   293      must_have_one_noun=()
   294      noun_aliases=()
   295  }
   296  
   297  _restic_cat()
   298  {
   299      last_command="restic_cat"
   300      commands=()
   301  
   302      flags=()
   303      two_word_flags=()
   304      local_nonpersistent_flags=()
   305      flags_with_completion=()
   306      flags_completion=()
   307  
   308      flags+=("--help")
   309      flags+=("-h")
   310      local_nonpersistent_flags+=("--help")
   311      flags+=("--cacert=")
   312      flags+=("--cache-dir=")
   313      flags+=("--cleanup-cache")
   314      flags+=("--json")
   315      flags+=("--limit-download=")
   316      flags+=("--limit-upload=")
   317      flags+=("--no-cache")
   318      flags+=("--no-lock")
   319      flags+=("--option=")
   320      two_word_flags+=("-o")
   321      flags+=("--password-file=")
   322      two_word_flags+=("-p")
   323      flags+=("--quiet")
   324      flags+=("-q")
   325      flags+=("--repo=")
   326      two_word_flags+=("-r")
   327      flags+=("--tls-client-cert=")
   328  
   329      must_have_one_flag=()
   330      must_have_one_noun=()
   331      noun_aliases=()
   332  }
   333  
   334  _restic_check()
   335  {
   336      last_command="restic_check"
   337      commands=()
   338  
   339      flags=()
   340      two_word_flags=()
   341      local_nonpersistent_flags=()
   342      flags_with_completion=()
   343      flags_completion=()
   344  
   345      flags+=("--check-unused")
   346      local_nonpersistent_flags+=("--check-unused")
   347      flags+=("--help")
   348      flags+=("-h")
   349      local_nonpersistent_flags+=("--help")
   350      flags+=("--read-data")
   351      local_nonpersistent_flags+=("--read-data")
   352      flags+=("--read-data-subset=")
   353      local_nonpersistent_flags+=("--read-data-subset=")
   354      flags+=("--with-cache")
   355      local_nonpersistent_flags+=("--with-cache")
   356      flags+=("--cacert=")
   357      flags+=("--cache-dir=")
   358      flags+=("--cleanup-cache")
   359      flags+=("--json")
   360      flags+=("--limit-download=")
   361      flags+=("--limit-upload=")
   362      flags+=("--no-cache")
   363      flags+=("--no-lock")
   364      flags+=("--option=")
   365      two_word_flags+=("-o")
   366      flags+=("--password-file=")
   367      two_word_flags+=("-p")
   368      flags+=("--quiet")
   369      flags+=("-q")
   370      flags+=("--repo=")
   371      two_word_flags+=("-r")
   372      flags+=("--tls-client-cert=")
   373  
   374      must_have_one_flag=()
   375      must_have_one_noun=()
   376      noun_aliases=()
   377  }
   378  
   379  _restic_diff()
   380  {
   381      last_command="restic_diff"
   382      commands=()
   383  
   384      flags=()
   385      two_word_flags=()
   386      local_nonpersistent_flags=()
   387      flags_with_completion=()
   388      flags_completion=()
   389  
   390      flags+=("--help")
   391      flags+=("-h")
   392      local_nonpersistent_flags+=("--help")
   393      flags+=("--metadata")
   394      local_nonpersistent_flags+=("--metadata")
   395      flags+=("--cacert=")
   396      flags+=("--cache-dir=")
   397      flags+=("--cleanup-cache")
   398      flags+=("--json")
   399      flags+=("--limit-download=")
   400      flags+=("--limit-upload=")
   401      flags+=("--no-cache")
   402      flags+=("--no-lock")
   403      flags+=("--option=")
   404      two_word_flags+=("-o")
   405      flags+=("--password-file=")
   406      two_word_flags+=("-p")
   407      flags+=("--quiet")
   408      flags+=("-q")
   409      flags+=("--repo=")
   410      two_word_flags+=("-r")
   411      flags+=("--tls-client-cert=")
   412  
   413      must_have_one_flag=()
   414      must_have_one_noun=()
   415      noun_aliases=()
   416  }
   417  
   418  _restic_dump()
   419  {
   420      last_command="restic_dump"
   421      commands=()
   422  
   423      flags=()
   424      two_word_flags=()
   425      local_nonpersistent_flags=()
   426      flags_with_completion=()
   427      flags_completion=()
   428  
   429      flags+=("--help")
   430      flags+=("-h")
   431      local_nonpersistent_flags+=("--help")
   432      flags+=("--host=")
   433      two_word_flags+=("-H")
   434      local_nonpersistent_flags+=("--host=")
   435      flags+=("--path=")
   436      local_nonpersistent_flags+=("--path=")
   437      flags+=("--tag=")
   438      local_nonpersistent_flags+=("--tag=")
   439      flags+=("--cacert=")
   440      flags+=("--cache-dir=")
   441      flags+=("--cleanup-cache")
   442      flags+=("--json")
   443      flags+=("--limit-download=")
   444      flags+=("--limit-upload=")
   445      flags+=("--no-cache")
   446      flags+=("--no-lock")
   447      flags+=("--option=")
   448      two_word_flags+=("-o")
   449      flags+=("--password-file=")
   450      two_word_flags+=("-p")
   451      flags+=("--quiet")
   452      flags+=("-q")
   453      flags+=("--repo=")
   454      two_word_flags+=("-r")
   455      flags+=("--tls-client-cert=")
   456  
   457      must_have_one_flag=()
   458      must_have_one_noun=()
   459      noun_aliases=()
   460  }
   461  
   462  _restic_find()
   463  {
   464      last_command="restic_find"
   465      commands=()
   466  
   467      flags=()
   468      two_word_flags=()
   469      local_nonpersistent_flags=()
   470      flags_with_completion=()
   471      flags_completion=()
   472  
   473      flags+=("--help")
   474      flags+=("-h")
   475      local_nonpersistent_flags+=("--help")
   476      flags+=("--host=")
   477      two_word_flags+=("-H")
   478      local_nonpersistent_flags+=("--host=")
   479      flags+=("--ignore-case")
   480      flags+=("-i")
   481      local_nonpersistent_flags+=("--ignore-case")
   482      flags+=("--long")
   483      flags+=("-l")
   484      local_nonpersistent_flags+=("--long")
   485      flags+=("--newest=")
   486      two_word_flags+=("-N")
   487      local_nonpersistent_flags+=("--newest=")
   488      flags+=("--oldest=")
   489      two_word_flags+=("-O")
   490      local_nonpersistent_flags+=("--oldest=")
   491      flags+=("--path=")
   492      local_nonpersistent_flags+=("--path=")
   493      flags+=("--snapshot=")
   494      two_word_flags+=("-s")
   495      local_nonpersistent_flags+=("--snapshot=")
   496      flags+=("--tag=")
   497      local_nonpersistent_flags+=("--tag=")
   498      flags+=("--cacert=")
   499      flags+=("--cache-dir=")
   500      flags+=("--cleanup-cache")
   501      flags+=("--json")
   502      flags+=("--limit-download=")
   503      flags+=("--limit-upload=")
   504      flags+=("--no-cache")
   505      flags+=("--no-lock")
   506      flags+=("--option=")
   507      two_word_flags+=("-o")
   508      flags+=("--password-file=")
   509      two_word_flags+=("-p")
   510      flags+=("--quiet")
   511      flags+=("-q")
   512      flags+=("--repo=")
   513      two_word_flags+=("-r")
   514      flags+=("--tls-client-cert=")
   515  
   516      must_have_one_flag=()
   517      must_have_one_noun=()
   518      noun_aliases=()
   519  }
   520  
   521  _restic_forget()
   522  {
   523      last_command="restic_forget"
   524      commands=()
   525  
   526      flags=()
   527      two_word_flags=()
   528      local_nonpersistent_flags=()
   529      flags_with_completion=()
   530      flags_completion=()
   531  
   532      flags+=("--keep-last=")
   533      two_word_flags+=("-l")
   534      local_nonpersistent_flags+=("--keep-last=")
   535      flags+=("--keep-hourly=")
   536      two_word_flags+=("-H")
   537      local_nonpersistent_flags+=("--keep-hourly=")
   538      flags+=("--keep-daily=")
   539      two_word_flags+=("-d")
   540      local_nonpersistent_flags+=("--keep-daily=")
   541      flags+=("--keep-weekly=")
   542      two_word_flags+=("-w")
   543      local_nonpersistent_flags+=("--keep-weekly=")
   544      flags+=("--keep-monthly=")
   545      two_word_flags+=("-m")
   546      local_nonpersistent_flags+=("--keep-monthly=")
   547      flags+=("--keep-yearly=")
   548      two_word_flags+=("-y")
   549      local_nonpersistent_flags+=("--keep-yearly=")
   550      flags+=("--keep-tag=")
   551      local_nonpersistent_flags+=("--keep-tag=")
   552      flags+=("--host=")
   553      local_nonpersistent_flags+=("--host=")
   554      flags+=("--hostname=")
   555      local_nonpersistent_flags+=("--hostname=")
   556      flags+=("--tag=")
   557      local_nonpersistent_flags+=("--tag=")
   558      flags+=("--path=")
   559      local_nonpersistent_flags+=("--path=")
   560      flags+=("--compact")
   561      flags+=("-c")
   562      local_nonpersistent_flags+=("--compact")
   563      flags+=("--group-by=")
   564      two_word_flags+=("-g")
   565      local_nonpersistent_flags+=("--group-by=")
   566      flags+=("--dry-run")
   567      flags+=("-n")
   568      local_nonpersistent_flags+=("--dry-run")
   569      flags+=("--prune")
   570      local_nonpersistent_flags+=("--prune")
   571      flags+=("--help")
   572      flags+=("-h")
   573      local_nonpersistent_flags+=("--help")
   574      flags+=("--cacert=")
   575      flags+=("--cache-dir=")
   576      flags+=("--cleanup-cache")
   577      flags+=("--json")
   578      flags+=("--limit-download=")
   579      flags+=("--limit-upload=")
   580      flags+=("--no-cache")
   581      flags+=("--no-lock")
   582      flags+=("--option=")
   583      two_word_flags+=("-o")
   584      flags+=("--password-file=")
   585      two_word_flags+=("-p")
   586      flags+=("--quiet")
   587      flags+=("-q")
   588      flags+=("--repo=")
   589      two_word_flags+=("-r")
   590      flags+=("--tls-client-cert=")
   591  
   592      must_have_one_flag=()
   593      must_have_one_noun=()
   594      noun_aliases=()
   595  }
   596  
   597  _restic_generate()
   598  {
   599      last_command="restic_generate"
   600      commands=()
   601  
   602      flags=()
   603      two_word_flags=()
   604      local_nonpersistent_flags=()
   605      flags_with_completion=()
   606      flags_completion=()
   607  
   608      flags+=("--bash-completion=")
   609      local_nonpersistent_flags+=("--bash-completion=")
   610      flags+=("--help")
   611      flags+=("-h")
   612      local_nonpersistent_flags+=("--help")
   613      flags+=("--man=")
   614      local_nonpersistent_flags+=("--man=")
   615      flags+=("--zsh-completion=")
   616      local_nonpersistent_flags+=("--zsh-completion=")
   617      flags+=("--cacert=")
   618      flags+=("--cache-dir=")
   619      flags+=("--cleanup-cache")
   620      flags+=("--json")
   621      flags+=("--limit-download=")
   622      flags+=("--limit-upload=")
   623      flags+=("--no-cache")
   624      flags+=("--no-lock")
   625      flags+=("--option=")
   626      two_word_flags+=("-o")
   627      flags+=("--password-file=")
   628      two_word_flags+=("-p")
   629      flags+=("--quiet")
   630      flags+=("-q")
   631      flags+=("--repo=")
   632      two_word_flags+=("-r")
   633      flags+=("--tls-client-cert=")
   634  
   635      must_have_one_flag=()
   636      must_have_one_noun=()
   637      noun_aliases=()
   638  }
   639  
   640  _restic_init()
   641  {
   642      last_command="restic_init"
   643      commands=()
   644  
   645      flags=()
   646      two_word_flags=()
   647      local_nonpersistent_flags=()
   648      flags_with_completion=()
   649      flags_completion=()
   650  
   651      flags+=("--help")
   652      flags+=("-h")
   653      local_nonpersistent_flags+=("--help")
   654      flags+=("--cacert=")
   655      flags+=("--cache-dir=")
   656      flags+=("--cleanup-cache")
   657      flags+=("--json")
   658      flags+=("--limit-download=")
   659      flags+=("--limit-upload=")
   660      flags+=("--no-cache")
   661      flags+=("--no-lock")
   662      flags+=("--option=")
   663      two_word_flags+=("-o")
   664      flags+=("--password-file=")
   665      two_word_flags+=("-p")
   666      flags+=("--quiet")
   667      flags+=("-q")
   668      flags+=("--repo=")
   669      two_word_flags+=("-r")
   670      flags+=("--tls-client-cert=")
   671  
   672      must_have_one_flag=()
   673      must_have_one_noun=()
   674      noun_aliases=()
   675  }
   676  
   677  _restic_key()
   678  {
   679      last_command="restic_key"
   680      commands=()
   681  
   682      flags=()
   683      two_word_flags=()
   684      local_nonpersistent_flags=()
   685      flags_with_completion=()
   686      flags_completion=()
   687  
   688      flags+=("--help")
   689      flags+=("-h")
   690      local_nonpersistent_flags+=("--help")
   691      flags+=("--cacert=")
   692      flags+=("--cache-dir=")
   693      flags+=("--cleanup-cache")
   694      flags+=("--json")
   695      flags+=("--limit-download=")
   696      flags+=("--limit-upload=")
   697      flags+=("--no-cache")
   698      flags+=("--no-lock")
   699      flags+=("--option=")
   700      two_word_flags+=("-o")
   701      flags+=("--password-file=")
   702      two_word_flags+=("-p")
   703      flags+=("--quiet")
   704      flags+=("-q")
   705      flags+=("--repo=")
   706      two_word_flags+=("-r")
   707      flags+=("--tls-client-cert=")
   708  
   709      must_have_one_flag=()
   710      must_have_one_noun=()
   711      noun_aliases=()
   712  }
   713  
   714  _restic_list()
   715  {
   716      last_command="restic_list"
   717      commands=()
   718  
   719      flags=()
   720      two_word_flags=()
   721      local_nonpersistent_flags=()
   722      flags_with_completion=()
   723      flags_completion=()
   724  
   725      flags+=("--help")
   726      flags+=("-h")
   727      local_nonpersistent_flags+=("--help")
   728      flags+=("--cacert=")
   729      flags+=("--cache-dir=")
   730      flags+=("--cleanup-cache")
   731      flags+=("--json")
   732      flags+=("--limit-download=")
   733      flags+=("--limit-upload=")
   734      flags+=("--no-cache")
   735      flags+=("--no-lock")
   736      flags+=("--option=")
   737      two_word_flags+=("-o")
   738      flags+=("--password-file=")
   739      two_word_flags+=("-p")
   740      flags+=("--quiet")
   741      flags+=("-q")
   742      flags+=("--repo=")
   743      two_word_flags+=("-r")
   744      flags+=("--tls-client-cert=")
   745  
   746      must_have_one_flag=()
   747      must_have_one_noun=()
   748      noun_aliases=()
   749  }
   750  
   751  _restic_ls()
   752  {
   753      last_command="restic_ls"
   754      commands=()
   755  
   756      flags=()
   757      two_word_flags=()
   758      local_nonpersistent_flags=()
   759      flags_with_completion=()
   760      flags_completion=()
   761  
   762      flags+=("--help")
   763      flags+=("-h")
   764      local_nonpersistent_flags+=("--help")
   765      flags+=("--host=")
   766      two_word_flags+=("-H")
   767      local_nonpersistent_flags+=("--host=")
   768      flags+=("--long")
   769      flags+=("-l")
   770      local_nonpersistent_flags+=("--long")
   771      flags+=("--path=")
   772      local_nonpersistent_flags+=("--path=")
   773      flags+=("--tag=")
   774      local_nonpersistent_flags+=("--tag=")
   775      flags+=("--cacert=")
   776      flags+=("--cache-dir=")
   777      flags+=("--cleanup-cache")
   778      flags+=("--json")
   779      flags+=("--limit-download=")
   780      flags+=("--limit-upload=")
   781      flags+=("--no-cache")
   782      flags+=("--no-lock")
   783      flags+=("--option=")
   784      two_word_flags+=("-o")
   785      flags+=("--password-file=")
   786      two_word_flags+=("-p")
   787      flags+=("--quiet")
   788      flags+=("-q")
   789      flags+=("--repo=")
   790      two_word_flags+=("-r")
   791      flags+=("--tls-client-cert=")
   792  
   793      must_have_one_flag=()
   794      must_have_one_noun=()
   795      noun_aliases=()
   796  }
   797  
   798  _restic_migrate()
   799  {
   800      last_command="restic_migrate"
   801      commands=()
   802  
   803      flags=()
   804      two_word_flags=()
   805      local_nonpersistent_flags=()
   806      flags_with_completion=()
   807      flags_completion=()
   808  
   809      flags+=("--force")
   810      flags+=("-f")
   811      local_nonpersistent_flags+=("--force")
   812      flags+=("--help")
   813      flags+=("-h")
   814      local_nonpersistent_flags+=("--help")
   815      flags+=("--cacert=")
   816      flags+=("--cache-dir=")
   817      flags+=("--cleanup-cache")
   818      flags+=("--json")
   819      flags+=("--limit-download=")
   820      flags+=("--limit-upload=")
   821      flags+=("--no-cache")
   822      flags+=("--no-lock")
   823      flags+=("--option=")
   824      two_word_flags+=("-o")
   825      flags+=("--password-file=")
   826      two_word_flags+=("-p")
   827      flags+=("--quiet")
   828      flags+=("-q")
   829      flags+=("--repo=")
   830      two_word_flags+=("-r")
   831      flags+=("--tls-client-cert=")
   832  
   833      must_have_one_flag=()
   834      must_have_one_noun=()
   835      noun_aliases=()
   836  }
   837  
   838  _restic_mount()
   839  {
   840      last_command="restic_mount"
   841      commands=()
   842  
   843      flags=()
   844      two_word_flags=()
   845      local_nonpersistent_flags=()
   846      flags_with_completion=()
   847      flags_completion=()
   848  
   849      flags+=("--allow-other")
   850      local_nonpersistent_flags+=("--allow-other")
   851      flags+=("--allow-root")
   852      local_nonpersistent_flags+=("--allow-root")
   853      flags+=("--help")
   854      flags+=("-h")
   855      local_nonpersistent_flags+=("--help")
   856      flags+=("--host=")
   857      two_word_flags+=("-H")
   858      local_nonpersistent_flags+=("--host=")
   859      flags+=("--owner-root")
   860      local_nonpersistent_flags+=("--owner-root")
   861      flags+=("--path=")
   862      local_nonpersistent_flags+=("--path=")
   863      flags+=("--snapshot-template=")
   864      local_nonpersistent_flags+=("--snapshot-template=")
   865      flags+=("--tag=")
   866      local_nonpersistent_flags+=("--tag=")
   867      flags+=("--cacert=")
   868      flags+=("--cache-dir=")
   869      flags+=("--cleanup-cache")
   870      flags+=("--json")
   871      flags+=("--limit-download=")
   872      flags+=("--limit-upload=")
   873      flags+=("--no-cache")
   874      flags+=("--no-lock")
   875      flags+=("--option=")
   876      two_word_flags+=("-o")
   877      flags+=("--password-file=")
   878      two_word_flags+=("-p")
   879      flags+=("--quiet")
   880      flags+=("-q")
   881      flags+=("--repo=")
   882      two_word_flags+=("-r")
   883      flags+=("--tls-client-cert=")
   884  
   885      must_have_one_flag=()
   886      must_have_one_noun=()
   887      noun_aliases=()
   888  }
   889  
   890  _restic_prune()
   891  {
   892      last_command="restic_prune"
   893      commands=()
   894  
   895      flags=()
   896      two_word_flags=()
   897      local_nonpersistent_flags=()
   898      flags_with_completion=()
   899      flags_completion=()
   900  
   901      flags+=("--help")
   902      flags+=("-h")
   903      local_nonpersistent_flags+=("--help")
   904      flags+=("--cacert=")
   905      flags+=("--cache-dir=")
   906      flags+=("--cleanup-cache")
   907      flags+=("--json")
   908      flags+=("--limit-download=")
   909      flags+=("--limit-upload=")
   910      flags+=("--no-cache")
   911      flags+=("--no-lock")
   912      flags+=("--option=")
   913      two_word_flags+=("-o")
   914      flags+=("--password-file=")
   915      two_word_flags+=("-p")
   916      flags+=("--quiet")
   917      flags+=("-q")
   918      flags+=("--repo=")
   919      two_word_flags+=("-r")
   920      flags+=("--tls-client-cert=")
   921  
   922      must_have_one_flag=()
   923      must_have_one_noun=()
   924      noun_aliases=()
   925  }
   926  
   927  _restic_rebuild-index()
   928  {
   929      last_command="restic_rebuild-index"
   930      commands=()
   931  
   932      flags=()
   933      two_word_flags=()
   934      local_nonpersistent_flags=()
   935      flags_with_completion=()
   936      flags_completion=()
   937  
   938      flags+=("--help")
   939      flags+=("-h")
   940      local_nonpersistent_flags+=("--help")
   941      flags+=("--cacert=")
   942      flags+=("--cache-dir=")
   943      flags+=("--cleanup-cache")
   944      flags+=("--json")
   945      flags+=("--limit-download=")
   946      flags+=("--limit-upload=")
   947      flags+=("--no-cache")
   948      flags+=("--no-lock")
   949      flags+=("--option=")
   950      two_word_flags+=("-o")
   951      flags+=("--password-file=")
   952      two_word_flags+=("-p")
   953      flags+=("--quiet")
   954      flags+=("-q")
   955      flags+=("--repo=")
   956      two_word_flags+=("-r")
   957      flags+=("--tls-client-cert=")
   958  
   959      must_have_one_flag=()
   960      must_have_one_noun=()
   961      noun_aliases=()
   962  }
   963  
   964  _restic_restore()
   965  {
   966      last_command="restic_restore"
   967      commands=()
   968  
   969      flags=()
   970      two_word_flags=()
   971      local_nonpersistent_flags=()
   972      flags_with_completion=()
   973      flags_completion=()
   974  
   975      flags+=("--exclude=")
   976      two_word_flags+=("-e")
   977      local_nonpersistent_flags+=("--exclude=")
   978      flags+=("--help")
   979      flags+=("-h")
   980      local_nonpersistent_flags+=("--help")
   981      flags+=("--host=")
   982      two_word_flags+=("-H")
   983      local_nonpersistent_flags+=("--host=")
   984      flags+=("--include=")
   985      two_word_flags+=("-i")
   986      local_nonpersistent_flags+=("--include=")
   987      flags+=("--path=")
   988      local_nonpersistent_flags+=("--path=")
   989      flags+=("--tag=")
   990      local_nonpersistent_flags+=("--tag=")
   991      flags+=("--target=")
   992      two_word_flags+=("-t")
   993      local_nonpersistent_flags+=("--target=")
   994      flags+=("--cacert=")
   995      flags+=("--cache-dir=")
   996      flags+=("--cleanup-cache")
   997      flags+=("--json")
   998      flags+=("--limit-download=")
   999      flags+=("--limit-upload=")
  1000      flags+=("--no-cache")
  1001      flags+=("--no-lock")
  1002      flags+=("--option=")
  1003      two_word_flags+=("-o")
  1004      flags+=("--password-file=")
  1005      two_word_flags+=("-p")
  1006      flags+=("--quiet")
  1007      flags+=("-q")
  1008      flags+=("--repo=")
  1009      two_word_flags+=("-r")
  1010      flags+=("--tls-client-cert=")
  1011  
  1012      must_have_one_flag=()
  1013      must_have_one_noun=()
  1014      noun_aliases=()
  1015  }
  1016  
  1017  _restic_snapshots()
  1018  {
  1019      last_command="restic_snapshots"
  1020      commands=()
  1021  
  1022      flags=()
  1023      two_word_flags=()
  1024      local_nonpersistent_flags=()
  1025      flags_with_completion=()
  1026      flags_completion=()
  1027  
  1028      flags+=("--compact")
  1029      flags+=("-c")
  1030      local_nonpersistent_flags+=("--compact")
  1031      flags+=("--help")
  1032      flags+=("-h")
  1033      local_nonpersistent_flags+=("--help")
  1034      flags+=("--host=")
  1035      two_word_flags+=("-H")
  1036      local_nonpersistent_flags+=("--host=")
  1037      flags+=("--last")
  1038      local_nonpersistent_flags+=("--last")
  1039      flags+=("--path=")
  1040      local_nonpersistent_flags+=("--path=")
  1041      flags+=("--tag=")
  1042      local_nonpersistent_flags+=("--tag=")
  1043      flags+=("--cacert=")
  1044      flags+=("--cache-dir=")
  1045      flags+=("--cleanup-cache")
  1046      flags+=("--json")
  1047      flags+=("--limit-download=")
  1048      flags+=("--limit-upload=")
  1049      flags+=("--no-cache")
  1050      flags+=("--no-lock")
  1051      flags+=("--option=")
  1052      two_word_flags+=("-o")
  1053      flags+=("--password-file=")
  1054      two_word_flags+=("-p")
  1055      flags+=("--quiet")
  1056      flags+=("-q")
  1057      flags+=("--repo=")
  1058      two_word_flags+=("-r")
  1059      flags+=("--tls-client-cert=")
  1060  
  1061      must_have_one_flag=()
  1062      must_have_one_noun=()
  1063      noun_aliases=()
  1064  }
  1065  
  1066  _restic_tag()
  1067  {
  1068      last_command="restic_tag"
  1069      commands=()
  1070  
  1071      flags=()
  1072      two_word_flags=()
  1073      local_nonpersistent_flags=()
  1074      flags_with_completion=()
  1075      flags_completion=()
  1076  
  1077      flags+=("--add=")
  1078      local_nonpersistent_flags+=("--add=")
  1079      flags+=("--help")
  1080      flags+=("-h")
  1081      local_nonpersistent_flags+=("--help")
  1082      flags+=("--host=")
  1083      two_word_flags+=("-H")
  1084      local_nonpersistent_flags+=("--host=")
  1085      flags+=("--path=")
  1086      local_nonpersistent_flags+=("--path=")
  1087      flags+=("--remove=")
  1088      local_nonpersistent_flags+=("--remove=")
  1089      flags+=("--set=")
  1090      local_nonpersistent_flags+=("--set=")
  1091      flags+=("--tag=")
  1092      local_nonpersistent_flags+=("--tag=")
  1093      flags+=("--cacert=")
  1094      flags+=("--cache-dir=")
  1095      flags+=("--cleanup-cache")
  1096      flags+=("--json")
  1097      flags+=("--limit-download=")
  1098      flags+=("--limit-upload=")
  1099      flags+=("--no-cache")
  1100      flags+=("--no-lock")
  1101      flags+=("--option=")
  1102      two_word_flags+=("-o")
  1103      flags+=("--password-file=")
  1104      two_word_flags+=("-p")
  1105      flags+=("--quiet")
  1106      flags+=("-q")
  1107      flags+=("--repo=")
  1108      two_word_flags+=("-r")
  1109      flags+=("--tls-client-cert=")
  1110  
  1111      must_have_one_flag=()
  1112      must_have_one_noun=()
  1113      noun_aliases=()
  1114  }
  1115  
  1116  _restic_unlock()
  1117  {
  1118      last_command="restic_unlock"
  1119      commands=()
  1120  
  1121      flags=()
  1122      two_word_flags=()
  1123      local_nonpersistent_flags=()
  1124      flags_with_completion=()
  1125      flags_completion=()
  1126  
  1127      flags+=("--help")
  1128      flags+=("-h")
  1129      local_nonpersistent_flags+=("--help")
  1130      flags+=("--remove-all")
  1131      local_nonpersistent_flags+=("--remove-all")
  1132      flags+=("--cacert=")
  1133      flags+=("--cache-dir=")
  1134      flags+=("--cleanup-cache")
  1135      flags+=("--json")
  1136      flags+=("--limit-download=")
  1137      flags+=("--limit-upload=")
  1138      flags+=("--no-cache")
  1139      flags+=("--no-lock")
  1140      flags+=("--option=")
  1141      two_word_flags+=("-o")
  1142      flags+=("--password-file=")
  1143      two_word_flags+=("-p")
  1144      flags+=("--quiet")
  1145      flags+=("-q")
  1146      flags+=("--repo=")
  1147      two_word_flags+=("-r")
  1148      flags+=("--tls-client-cert=")
  1149  
  1150      must_have_one_flag=()
  1151      must_have_one_noun=()
  1152      noun_aliases=()
  1153  }
  1154  
  1155  _restic_version()
  1156  {
  1157      last_command="restic_version"
  1158      commands=()
  1159  
  1160      flags=()
  1161      two_word_flags=()
  1162      local_nonpersistent_flags=()
  1163      flags_with_completion=()
  1164      flags_completion=()
  1165  
  1166      flags+=("--help")
  1167      flags+=("-h")
  1168      local_nonpersistent_flags+=("--help")
  1169      flags+=("--cacert=")
  1170      flags+=("--cache-dir=")
  1171      flags+=("--cleanup-cache")
  1172      flags+=("--json")
  1173      flags+=("--limit-download=")
  1174      flags+=("--limit-upload=")
  1175      flags+=("--no-cache")
  1176      flags+=("--no-lock")
  1177      flags+=("--option=")
  1178      two_word_flags+=("-o")
  1179      flags+=("--password-file=")
  1180      two_word_flags+=("-p")
  1181      flags+=("--quiet")
  1182      flags+=("-q")
  1183      flags+=("--repo=")
  1184      two_word_flags+=("-r")
  1185      flags+=("--tls-client-cert=")
  1186  
  1187      must_have_one_flag=()
  1188      must_have_one_noun=()
  1189      noun_aliases=()
  1190  }
  1191  
  1192  _restic()
  1193  {
  1194      last_command="restic"
  1195      commands=()
  1196      commands+=("backup")
  1197      commands+=("cat")
  1198      commands+=("check")
  1199      commands+=("diff")
  1200      commands+=("dump")
  1201      commands+=("find")
  1202      commands+=("forget")
  1203      commands+=("generate")
  1204      commands+=("init")
  1205      commands+=("key")
  1206      commands+=("list")
  1207      commands+=("ls")
  1208      commands+=("migrate")
  1209      commands+=("mount")
  1210      commands+=("prune")
  1211      commands+=("rebuild-index")
  1212      commands+=("restore")
  1213      commands+=("snapshots")
  1214      commands+=("tag")
  1215      commands+=("unlock")
  1216      commands+=("version")
  1217  
  1218      flags=()
  1219      two_word_flags=()
  1220      local_nonpersistent_flags=()
  1221      flags_with_completion=()
  1222      flags_completion=()
  1223  
  1224      flags+=("--cacert=")
  1225      flags+=("--cache-dir=")
  1226      flags+=("--cleanup-cache")
  1227      flags+=("--help")
  1228      flags+=("-h")
  1229      local_nonpersistent_flags+=("--help")
  1230      flags+=("--json")
  1231      flags+=("--limit-download=")
  1232      flags+=("--limit-upload=")
  1233      flags+=("--no-cache")
  1234      flags+=("--no-lock")
  1235      flags+=("--option=")
  1236      two_word_flags+=("-o")
  1237      flags+=("--password-file=")
  1238      two_word_flags+=("-p")
  1239      flags+=("--quiet")
  1240      flags+=("-q")
  1241      flags+=("--repo=")
  1242      two_word_flags+=("-r")
  1243      flags+=("--tls-client-cert=")
  1244  
  1245      must_have_one_flag=()
  1246      must_have_one_noun=()
  1247      noun_aliases=()
  1248  }
  1249  
  1250  __start_restic()
  1251  {
  1252      local cur prev words cword
  1253      declare -A flaghash 2>/dev/null || :
  1254      if declare -F _init_completion >/dev/null 2>&1; then
  1255          _init_completion -s || return
  1256      else
  1257          __my_init_completion -n "=" || return
  1258      fi
  1259  
  1260      local c=0
  1261      local flags=()
  1262      local two_word_flags=()
  1263      local local_nonpersistent_flags=()
  1264      local flags_with_completion=()
  1265      local flags_completion=()
  1266      local commands=("restic")
  1267      local must_have_one_flag=()
  1268      local must_have_one_noun=()
  1269      local last_command
  1270      local nouns=()
  1271  
  1272      __handle_word
  1273  }
  1274  
  1275  if [[ $(type -t compopt) = "builtin" ]]; then
  1276      complete -o default -F __start_restic restic
  1277  else
  1278      complete -o default -o nospace -F __start_restic restic
  1279  fi
  1280  
  1281  # ex: ts=4 sw=4 et filetype=sh