github.com/advanderveer/restic@v0.8.1-0.20171209104529-42a8c19aaea6/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+=("--cacert=")
   273      flags+=("--cache-dir=")
   274      flags+=("--json")
   275      flags+=("--limit-download=")
   276      flags+=("--limit-upload=")
   277      flags+=("--no-cache")
   278      flags+=("--no-lock")
   279      flags+=("--option=")
   280      two_word_flags+=("-o")
   281      flags+=("--password-file=")
   282      two_word_flags+=("-p")
   283      flags+=("--quiet")
   284      flags+=("-q")
   285      flags+=("--repo=")
   286      two_word_flags+=("-r")
   287  
   288      must_have_one_flag=()
   289      must_have_one_noun=()
   290      noun_aliases=()
   291  }
   292  
   293  _restic_cat()
   294  {
   295      last_command="restic_cat"
   296      commands=()
   297  
   298      flags=()
   299      two_word_flags=()
   300      local_nonpersistent_flags=()
   301      flags_with_completion=()
   302      flags_completion=()
   303  
   304      flags+=("--help")
   305      flags+=("-h")
   306      local_nonpersistent_flags+=("--help")
   307      flags+=("--cacert=")
   308      flags+=("--cache-dir=")
   309      flags+=("--json")
   310      flags+=("--limit-download=")
   311      flags+=("--limit-upload=")
   312      flags+=("--no-cache")
   313      flags+=("--no-lock")
   314      flags+=("--option=")
   315      two_word_flags+=("-o")
   316      flags+=("--password-file=")
   317      two_word_flags+=("-p")
   318      flags+=("--quiet")
   319      flags+=("-q")
   320      flags+=("--repo=")
   321      two_word_flags+=("-r")
   322  
   323      must_have_one_flag=()
   324      must_have_one_noun=()
   325      noun_aliases=()
   326  }
   327  
   328  _restic_check()
   329  {
   330      last_command="restic_check"
   331      commands=()
   332  
   333      flags=()
   334      two_word_flags=()
   335      local_nonpersistent_flags=()
   336      flags_with_completion=()
   337      flags_completion=()
   338  
   339      flags+=("--check-unused")
   340      local_nonpersistent_flags+=("--check-unused")
   341      flags+=("--help")
   342      flags+=("-h")
   343      local_nonpersistent_flags+=("--help")
   344      flags+=("--read-data")
   345      local_nonpersistent_flags+=("--read-data")
   346      flags+=("--with-cache")
   347      local_nonpersistent_flags+=("--with-cache")
   348      flags+=("--cacert=")
   349      flags+=("--cache-dir=")
   350      flags+=("--json")
   351      flags+=("--limit-download=")
   352      flags+=("--limit-upload=")
   353      flags+=("--no-cache")
   354      flags+=("--no-lock")
   355      flags+=("--option=")
   356      two_word_flags+=("-o")
   357      flags+=("--password-file=")
   358      two_word_flags+=("-p")
   359      flags+=("--quiet")
   360      flags+=("-q")
   361      flags+=("--repo=")
   362      two_word_flags+=("-r")
   363  
   364      must_have_one_flag=()
   365      must_have_one_noun=()
   366      noun_aliases=()
   367  }
   368  
   369  _restic_dump()
   370  {
   371      last_command="restic_dump"
   372      commands=()
   373  
   374      flags=()
   375      two_word_flags=()
   376      local_nonpersistent_flags=()
   377      flags_with_completion=()
   378      flags_completion=()
   379  
   380      flags+=("--help")
   381      flags+=("-h")
   382      local_nonpersistent_flags+=("--help")
   383      flags+=("--host=")
   384      two_word_flags+=("-H")
   385      local_nonpersistent_flags+=("--host=")
   386      flags+=("--path=")
   387      local_nonpersistent_flags+=("--path=")
   388      flags+=("--tag=")
   389      local_nonpersistent_flags+=("--tag=")
   390      flags+=("--cacert=")
   391      flags+=("--cache-dir=")
   392      flags+=("--json")
   393      flags+=("--limit-download=")
   394      flags+=("--limit-upload=")
   395      flags+=("--no-cache")
   396      flags+=("--no-lock")
   397      flags+=("--option=")
   398      two_word_flags+=("-o")
   399      flags+=("--password-file=")
   400      two_word_flags+=("-p")
   401      flags+=("--quiet")
   402      flags+=("-q")
   403      flags+=("--repo=")
   404      two_word_flags+=("-r")
   405  
   406      must_have_one_flag=()
   407      must_have_one_noun=()
   408      noun_aliases=()
   409  }
   410  
   411  _restic_find()
   412  {
   413      last_command="restic_find"
   414      commands=()
   415  
   416      flags=()
   417      two_word_flags=()
   418      local_nonpersistent_flags=()
   419      flags_with_completion=()
   420      flags_completion=()
   421  
   422      flags+=("--help")
   423      flags+=("-h")
   424      local_nonpersistent_flags+=("--help")
   425      flags+=("--host=")
   426      two_word_flags+=("-H")
   427      local_nonpersistent_flags+=("--host=")
   428      flags+=("--ignore-case")
   429      flags+=("-i")
   430      local_nonpersistent_flags+=("--ignore-case")
   431      flags+=("--long")
   432      flags+=("-l")
   433      local_nonpersistent_flags+=("--long")
   434      flags+=("--newest=")
   435      two_word_flags+=("-N")
   436      local_nonpersistent_flags+=("--newest=")
   437      flags+=("--oldest=")
   438      two_word_flags+=("-O")
   439      local_nonpersistent_flags+=("--oldest=")
   440      flags+=("--path=")
   441      local_nonpersistent_flags+=("--path=")
   442      flags+=("--snapshot=")
   443      two_word_flags+=("-s")
   444      local_nonpersistent_flags+=("--snapshot=")
   445      flags+=("--tag=")
   446      local_nonpersistent_flags+=("--tag=")
   447      flags+=("--cacert=")
   448      flags+=("--cache-dir=")
   449      flags+=("--json")
   450      flags+=("--limit-download=")
   451      flags+=("--limit-upload=")
   452      flags+=("--no-cache")
   453      flags+=("--no-lock")
   454      flags+=("--option=")
   455      two_word_flags+=("-o")
   456      flags+=("--password-file=")
   457      two_word_flags+=("-p")
   458      flags+=("--quiet")
   459      flags+=("-q")
   460      flags+=("--repo=")
   461      two_word_flags+=("-r")
   462  
   463      must_have_one_flag=()
   464      must_have_one_noun=()
   465      noun_aliases=()
   466  }
   467  
   468  _restic_forget()
   469  {
   470      last_command="restic_forget"
   471      commands=()
   472  
   473      flags=()
   474      two_word_flags=()
   475      local_nonpersistent_flags=()
   476      flags_with_completion=()
   477      flags_completion=()
   478  
   479      flags+=("--keep-last=")
   480      two_word_flags+=("-l")
   481      local_nonpersistent_flags+=("--keep-last=")
   482      flags+=("--keep-hourly=")
   483      two_word_flags+=("-H")
   484      local_nonpersistent_flags+=("--keep-hourly=")
   485      flags+=("--keep-daily=")
   486      two_word_flags+=("-d")
   487      local_nonpersistent_flags+=("--keep-daily=")
   488      flags+=("--keep-weekly=")
   489      two_word_flags+=("-w")
   490      local_nonpersistent_flags+=("--keep-weekly=")
   491      flags+=("--keep-monthly=")
   492      two_word_flags+=("-m")
   493      local_nonpersistent_flags+=("--keep-monthly=")
   494      flags+=("--keep-yearly=")
   495      two_word_flags+=("-y")
   496      local_nonpersistent_flags+=("--keep-yearly=")
   497      flags+=("--keep-tag=")
   498      local_nonpersistent_flags+=("--keep-tag=")
   499      flags+=("--host=")
   500      local_nonpersistent_flags+=("--host=")
   501      flags+=("--hostname=")
   502      local_nonpersistent_flags+=("--hostname=")
   503      flags+=("--tag=")
   504      local_nonpersistent_flags+=("--tag=")
   505      flags+=("--path=")
   506      local_nonpersistent_flags+=("--path=")
   507      flags+=("--compact")
   508      flags+=("-c")
   509      local_nonpersistent_flags+=("--compact")
   510      flags+=("--group-by=")
   511      two_word_flags+=("-g")
   512      local_nonpersistent_flags+=("--group-by=")
   513      flags+=("--dry-run")
   514      flags+=("-n")
   515      local_nonpersistent_flags+=("--dry-run")
   516      flags+=("--prune")
   517      local_nonpersistent_flags+=("--prune")
   518      flags+=("--help")
   519      flags+=("-h")
   520      local_nonpersistent_flags+=("--help")
   521      flags+=("--cacert=")
   522      flags+=("--cache-dir=")
   523      flags+=("--json")
   524      flags+=("--limit-download=")
   525      flags+=("--limit-upload=")
   526      flags+=("--no-cache")
   527      flags+=("--no-lock")
   528      flags+=("--option=")
   529      two_word_flags+=("-o")
   530      flags+=("--password-file=")
   531      two_word_flags+=("-p")
   532      flags+=("--quiet")
   533      flags+=("-q")
   534      flags+=("--repo=")
   535      two_word_flags+=("-r")
   536  
   537      must_have_one_flag=()
   538      must_have_one_noun=()
   539      noun_aliases=()
   540  }
   541  
   542  _restic_generate()
   543  {
   544      last_command="restic_generate"
   545      commands=()
   546  
   547      flags=()
   548      two_word_flags=()
   549      local_nonpersistent_flags=()
   550      flags_with_completion=()
   551      flags_completion=()
   552  
   553      flags+=("--bash-completion=")
   554      local_nonpersistent_flags+=("--bash-completion=")
   555      flags+=("--help")
   556      flags+=("-h")
   557      local_nonpersistent_flags+=("--help")
   558      flags+=("--man=")
   559      local_nonpersistent_flags+=("--man=")
   560      flags+=("--zsh-completion=")
   561      local_nonpersistent_flags+=("--zsh-completion=")
   562      flags+=("--cacert=")
   563      flags+=("--cache-dir=")
   564      flags+=("--json")
   565      flags+=("--limit-download=")
   566      flags+=("--limit-upload=")
   567      flags+=("--no-cache")
   568      flags+=("--no-lock")
   569      flags+=("--option=")
   570      two_word_flags+=("-o")
   571      flags+=("--password-file=")
   572      two_word_flags+=("-p")
   573      flags+=("--quiet")
   574      flags+=("-q")
   575      flags+=("--repo=")
   576      two_word_flags+=("-r")
   577  
   578      must_have_one_flag=()
   579      must_have_one_noun=()
   580      noun_aliases=()
   581  }
   582  
   583  _restic_init()
   584  {
   585      last_command="restic_init"
   586      commands=()
   587  
   588      flags=()
   589      two_word_flags=()
   590      local_nonpersistent_flags=()
   591      flags_with_completion=()
   592      flags_completion=()
   593  
   594      flags+=("--help")
   595      flags+=("-h")
   596      local_nonpersistent_flags+=("--help")
   597      flags+=("--cacert=")
   598      flags+=("--cache-dir=")
   599      flags+=("--json")
   600      flags+=("--limit-download=")
   601      flags+=("--limit-upload=")
   602      flags+=("--no-cache")
   603      flags+=("--no-lock")
   604      flags+=("--option=")
   605      two_word_flags+=("-o")
   606      flags+=("--password-file=")
   607      two_word_flags+=("-p")
   608      flags+=("--quiet")
   609      flags+=("-q")
   610      flags+=("--repo=")
   611      two_word_flags+=("-r")
   612  
   613      must_have_one_flag=()
   614      must_have_one_noun=()
   615      noun_aliases=()
   616  }
   617  
   618  _restic_key()
   619  {
   620      last_command="restic_key"
   621      commands=()
   622  
   623      flags=()
   624      two_word_flags=()
   625      local_nonpersistent_flags=()
   626      flags_with_completion=()
   627      flags_completion=()
   628  
   629      flags+=("--help")
   630      flags+=("-h")
   631      local_nonpersistent_flags+=("--help")
   632      flags+=("--cacert=")
   633      flags+=("--cache-dir=")
   634      flags+=("--json")
   635      flags+=("--limit-download=")
   636      flags+=("--limit-upload=")
   637      flags+=("--no-cache")
   638      flags+=("--no-lock")
   639      flags+=("--option=")
   640      two_word_flags+=("-o")
   641      flags+=("--password-file=")
   642      two_word_flags+=("-p")
   643      flags+=("--quiet")
   644      flags+=("-q")
   645      flags+=("--repo=")
   646      two_word_flags+=("-r")
   647  
   648      must_have_one_flag=()
   649      must_have_one_noun=()
   650      noun_aliases=()
   651  }
   652  
   653  _restic_list()
   654  {
   655      last_command="restic_list"
   656      commands=()
   657  
   658      flags=()
   659      two_word_flags=()
   660      local_nonpersistent_flags=()
   661      flags_with_completion=()
   662      flags_completion=()
   663  
   664      flags+=("--help")
   665      flags+=("-h")
   666      local_nonpersistent_flags+=("--help")
   667      flags+=("--cacert=")
   668      flags+=("--cache-dir=")
   669      flags+=("--json")
   670      flags+=("--limit-download=")
   671      flags+=("--limit-upload=")
   672      flags+=("--no-cache")
   673      flags+=("--no-lock")
   674      flags+=("--option=")
   675      two_word_flags+=("-o")
   676      flags+=("--password-file=")
   677      two_word_flags+=("-p")
   678      flags+=("--quiet")
   679      flags+=("-q")
   680      flags+=("--repo=")
   681      two_word_flags+=("-r")
   682  
   683      must_have_one_flag=()
   684      must_have_one_noun=()
   685      noun_aliases=()
   686  }
   687  
   688  _restic_ls()
   689  {
   690      last_command="restic_ls"
   691      commands=()
   692  
   693      flags=()
   694      two_word_flags=()
   695      local_nonpersistent_flags=()
   696      flags_with_completion=()
   697      flags_completion=()
   698  
   699      flags+=("--help")
   700      flags+=("-h")
   701      local_nonpersistent_flags+=("--help")
   702      flags+=("--host=")
   703      two_word_flags+=("-H")
   704      local_nonpersistent_flags+=("--host=")
   705      flags+=("--long")
   706      flags+=("-l")
   707      local_nonpersistent_flags+=("--long")
   708      flags+=("--path=")
   709      local_nonpersistent_flags+=("--path=")
   710      flags+=("--tag=")
   711      local_nonpersistent_flags+=("--tag=")
   712      flags+=("--cacert=")
   713      flags+=("--cache-dir=")
   714      flags+=("--json")
   715      flags+=("--limit-download=")
   716      flags+=("--limit-upload=")
   717      flags+=("--no-cache")
   718      flags+=("--no-lock")
   719      flags+=("--option=")
   720      two_word_flags+=("-o")
   721      flags+=("--password-file=")
   722      two_word_flags+=("-p")
   723      flags+=("--quiet")
   724      flags+=("-q")
   725      flags+=("--repo=")
   726      two_word_flags+=("-r")
   727  
   728      must_have_one_flag=()
   729      must_have_one_noun=()
   730      noun_aliases=()
   731  }
   732  
   733  _restic_migrate()
   734  {
   735      last_command="restic_migrate"
   736      commands=()
   737  
   738      flags=()
   739      two_word_flags=()
   740      local_nonpersistent_flags=()
   741      flags_with_completion=()
   742      flags_completion=()
   743  
   744      flags+=("--force")
   745      flags+=("-f")
   746      local_nonpersistent_flags+=("--force")
   747      flags+=("--help")
   748      flags+=("-h")
   749      local_nonpersistent_flags+=("--help")
   750      flags+=("--cacert=")
   751      flags+=("--cache-dir=")
   752      flags+=("--json")
   753      flags+=("--limit-download=")
   754      flags+=("--limit-upload=")
   755      flags+=("--no-cache")
   756      flags+=("--no-lock")
   757      flags+=("--option=")
   758      two_word_flags+=("-o")
   759      flags+=("--password-file=")
   760      two_word_flags+=("-p")
   761      flags+=("--quiet")
   762      flags+=("-q")
   763      flags+=("--repo=")
   764      two_word_flags+=("-r")
   765  
   766      must_have_one_flag=()
   767      must_have_one_noun=()
   768      noun_aliases=()
   769  }
   770  
   771  _restic_mount()
   772  {
   773      last_command="restic_mount"
   774      commands=()
   775  
   776      flags=()
   777      two_word_flags=()
   778      local_nonpersistent_flags=()
   779      flags_with_completion=()
   780      flags_completion=()
   781  
   782      flags+=("--allow-other")
   783      local_nonpersistent_flags+=("--allow-other")
   784      flags+=("--allow-root")
   785      local_nonpersistent_flags+=("--allow-root")
   786      flags+=("--help")
   787      flags+=("-h")
   788      local_nonpersistent_flags+=("--help")
   789      flags+=("--host=")
   790      two_word_flags+=("-H")
   791      local_nonpersistent_flags+=("--host=")
   792      flags+=("--owner-root")
   793      local_nonpersistent_flags+=("--owner-root")
   794      flags+=("--path=")
   795      local_nonpersistent_flags+=("--path=")
   796      flags+=("--tag=")
   797      local_nonpersistent_flags+=("--tag=")
   798      flags+=("--cacert=")
   799      flags+=("--cache-dir=")
   800      flags+=("--json")
   801      flags+=("--limit-download=")
   802      flags+=("--limit-upload=")
   803      flags+=("--no-cache")
   804      flags+=("--no-lock")
   805      flags+=("--option=")
   806      two_word_flags+=("-o")
   807      flags+=("--password-file=")
   808      two_word_flags+=("-p")
   809      flags+=("--quiet")
   810      flags+=("-q")
   811      flags+=("--repo=")
   812      two_word_flags+=("-r")
   813  
   814      must_have_one_flag=()
   815      must_have_one_noun=()
   816      noun_aliases=()
   817  }
   818  
   819  _restic_prune()
   820  {
   821      last_command="restic_prune"
   822      commands=()
   823  
   824      flags=()
   825      two_word_flags=()
   826      local_nonpersistent_flags=()
   827      flags_with_completion=()
   828      flags_completion=()
   829  
   830      flags+=("--help")
   831      flags+=("-h")
   832      local_nonpersistent_flags+=("--help")
   833      flags+=("--cacert=")
   834      flags+=("--cache-dir=")
   835      flags+=("--json")
   836      flags+=("--limit-download=")
   837      flags+=("--limit-upload=")
   838      flags+=("--no-cache")
   839      flags+=("--no-lock")
   840      flags+=("--option=")
   841      two_word_flags+=("-o")
   842      flags+=("--password-file=")
   843      two_word_flags+=("-p")
   844      flags+=("--quiet")
   845      flags+=("-q")
   846      flags+=("--repo=")
   847      two_word_flags+=("-r")
   848  
   849      must_have_one_flag=()
   850      must_have_one_noun=()
   851      noun_aliases=()
   852  }
   853  
   854  _restic_rebuild-index()
   855  {
   856      last_command="restic_rebuild-index"
   857      commands=()
   858  
   859      flags=()
   860      two_word_flags=()
   861      local_nonpersistent_flags=()
   862      flags_with_completion=()
   863      flags_completion=()
   864  
   865      flags+=("--help")
   866      flags+=("-h")
   867      local_nonpersistent_flags+=("--help")
   868      flags+=("--cacert=")
   869      flags+=("--cache-dir=")
   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  
   884      must_have_one_flag=()
   885      must_have_one_noun=()
   886      noun_aliases=()
   887  }
   888  
   889  _restic_restore()
   890  {
   891      last_command="restic_restore"
   892      commands=()
   893  
   894      flags=()
   895      two_word_flags=()
   896      local_nonpersistent_flags=()
   897      flags_with_completion=()
   898      flags_completion=()
   899  
   900      flags+=("--exclude=")
   901      two_word_flags+=("-e")
   902      local_nonpersistent_flags+=("--exclude=")
   903      flags+=("--help")
   904      flags+=("-h")
   905      local_nonpersistent_flags+=("--help")
   906      flags+=("--host=")
   907      two_word_flags+=("-H")
   908      local_nonpersistent_flags+=("--host=")
   909      flags+=("--include=")
   910      two_word_flags+=("-i")
   911      local_nonpersistent_flags+=("--include=")
   912      flags+=("--path=")
   913      local_nonpersistent_flags+=("--path=")
   914      flags+=("--tag=")
   915      local_nonpersistent_flags+=("--tag=")
   916      flags+=("--target=")
   917      two_word_flags+=("-t")
   918      local_nonpersistent_flags+=("--target=")
   919      flags+=("--cacert=")
   920      flags+=("--cache-dir=")
   921      flags+=("--json")
   922      flags+=("--limit-download=")
   923      flags+=("--limit-upload=")
   924      flags+=("--no-cache")
   925      flags+=("--no-lock")
   926      flags+=("--option=")
   927      two_word_flags+=("-o")
   928      flags+=("--password-file=")
   929      two_word_flags+=("-p")
   930      flags+=("--quiet")
   931      flags+=("-q")
   932      flags+=("--repo=")
   933      two_word_flags+=("-r")
   934  
   935      must_have_one_flag=()
   936      must_have_one_noun=()
   937      noun_aliases=()
   938  }
   939  
   940  _restic_snapshots()
   941  {
   942      last_command="restic_snapshots"
   943      commands=()
   944  
   945      flags=()
   946      two_word_flags=()
   947      local_nonpersistent_flags=()
   948      flags_with_completion=()
   949      flags_completion=()
   950  
   951      flags+=("--compact")
   952      flags+=("-c")
   953      local_nonpersistent_flags+=("--compact")
   954      flags+=("--help")
   955      flags+=("-h")
   956      local_nonpersistent_flags+=("--help")
   957      flags+=("--host=")
   958      two_word_flags+=("-H")
   959      local_nonpersistent_flags+=("--host=")
   960      flags+=("--last")
   961      local_nonpersistent_flags+=("--last")
   962      flags+=("--path=")
   963      local_nonpersistent_flags+=("--path=")
   964      flags+=("--tag=")
   965      local_nonpersistent_flags+=("--tag=")
   966      flags+=("--cacert=")
   967      flags+=("--cache-dir=")
   968      flags+=("--json")
   969      flags+=("--limit-download=")
   970      flags+=("--limit-upload=")
   971      flags+=("--no-cache")
   972      flags+=("--no-lock")
   973      flags+=("--option=")
   974      two_word_flags+=("-o")
   975      flags+=("--password-file=")
   976      two_word_flags+=("-p")
   977      flags+=("--quiet")
   978      flags+=("-q")
   979      flags+=("--repo=")
   980      two_word_flags+=("-r")
   981  
   982      must_have_one_flag=()
   983      must_have_one_noun=()
   984      noun_aliases=()
   985  }
   986  
   987  _restic_tag()
   988  {
   989      last_command="restic_tag"
   990      commands=()
   991  
   992      flags=()
   993      two_word_flags=()
   994      local_nonpersistent_flags=()
   995      flags_with_completion=()
   996      flags_completion=()
   997  
   998      flags+=("--add=")
   999      local_nonpersistent_flags+=("--add=")
  1000      flags+=("--help")
  1001      flags+=("-h")
  1002      local_nonpersistent_flags+=("--help")
  1003      flags+=("--host=")
  1004      two_word_flags+=("-H")
  1005      local_nonpersistent_flags+=("--host=")
  1006      flags+=("--path=")
  1007      local_nonpersistent_flags+=("--path=")
  1008      flags+=("--remove=")
  1009      local_nonpersistent_flags+=("--remove=")
  1010      flags+=("--set=")
  1011      local_nonpersistent_flags+=("--set=")
  1012      flags+=("--tag=")
  1013      local_nonpersistent_flags+=("--tag=")
  1014      flags+=("--cacert=")
  1015      flags+=("--cache-dir=")
  1016      flags+=("--json")
  1017      flags+=("--limit-download=")
  1018      flags+=("--limit-upload=")
  1019      flags+=("--no-cache")
  1020      flags+=("--no-lock")
  1021      flags+=("--option=")
  1022      two_word_flags+=("-o")
  1023      flags+=("--password-file=")
  1024      two_word_flags+=("-p")
  1025      flags+=("--quiet")
  1026      flags+=("-q")
  1027      flags+=("--repo=")
  1028      two_word_flags+=("-r")
  1029  
  1030      must_have_one_flag=()
  1031      must_have_one_noun=()
  1032      noun_aliases=()
  1033  }
  1034  
  1035  _restic_unlock()
  1036  {
  1037      last_command="restic_unlock"
  1038      commands=()
  1039  
  1040      flags=()
  1041      two_word_flags=()
  1042      local_nonpersistent_flags=()
  1043      flags_with_completion=()
  1044      flags_completion=()
  1045  
  1046      flags+=("--help")
  1047      flags+=("-h")
  1048      local_nonpersistent_flags+=("--help")
  1049      flags+=("--remove-all")
  1050      local_nonpersistent_flags+=("--remove-all")
  1051      flags+=("--cacert=")
  1052      flags+=("--cache-dir=")
  1053      flags+=("--json")
  1054      flags+=("--limit-download=")
  1055      flags+=("--limit-upload=")
  1056      flags+=("--no-cache")
  1057      flags+=("--no-lock")
  1058      flags+=("--option=")
  1059      two_word_flags+=("-o")
  1060      flags+=("--password-file=")
  1061      two_word_flags+=("-p")
  1062      flags+=("--quiet")
  1063      flags+=("-q")
  1064      flags+=("--repo=")
  1065      two_word_flags+=("-r")
  1066  
  1067      must_have_one_flag=()
  1068      must_have_one_noun=()
  1069      noun_aliases=()
  1070  }
  1071  
  1072  _restic_version()
  1073  {
  1074      last_command="restic_version"
  1075      commands=()
  1076  
  1077      flags=()
  1078      two_word_flags=()
  1079      local_nonpersistent_flags=()
  1080      flags_with_completion=()
  1081      flags_completion=()
  1082  
  1083      flags+=("--help")
  1084      flags+=("-h")
  1085      local_nonpersistent_flags+=("--help")
  1086      flags+=("--cacert=")
  1087      flags+=("--cache-dir=")
  1088      flags+=("--json")
  1089      flags+=("--limit-download=")
  1090      flags+=("--limit-upload=")
  1091      flags+=("--no-cache")
  1092      flags+=("--no-lock")
  1093      flags+=("--option=")
  1094      two_word_flags+=("-o")
  1095      flags+=("--password-file=")
  1096      two_word_flags+=("-p")
  1097      flags+=("--quiet")
  1098      flags+=("-q")
  1099      flags+=("--repo=")
  1100      two_word_flags+=("-r")
  1101  
  1102      must_have_one_flag=()
  1103      must_have_one_noun=()
  1104      noun_aliases=()
  1105  }
  1106  
  1107  _restic()
  1108  {
  1109      last_command="restic"
  1110      commands=()
  1111      commands+=("backup")
  1112      commands+=("cat")
  1113      commands+=("check")
  1114      commands+=("dump")
  1115      commands+=("find")
  1116      commands+=("forget")
  1117      commands+=("generate")
  1118      commands+=("init")
  1119      commands+=("key")
  1120      commands+=("list")
  1121      commands+=("ls")
  1122      commands+=("migrate")
  1123      commands+=("mount")
  1124      commands+=("prune")
  1125      commands+=("rebuild-index")
  1126      commands+=("restore")
  1127      commands+=("snapshots")
  1128      commands+=("tag")
  1129      commands+=("unlock")
  1130      commands+=("version")
  1131  
  1132      flags=()
  1133      two_word_flags=()
  1134      local_nonpersistent_flags=()
  1135      flags_with_completion=()
  1136      flags_completion=()
  1137  
  1138      flags+=("--cacert=")
  1139      flags+=("--cache-dir=")
  1140      flags+=("--help")
  1141      flags+=("-h")
  1142      local_nonpersistent_flags+=("--help")
  1143      flags+=("--json")
  1144      flags+=("--limit-download=")
  1145      flags+=("--limit-upload=")
  1146      flags+=("--no-cache")
  1147      flags+=("--no-lock")
  1148      flags+=("--option=")
  1149      two_word_flags+=("-o")
  1150      flags+=("--password-file=")
  1151      two_word_flags+=("-p")
  1152      flags+=("--quiet")
  1153      flags+=("-q")
  1154      flags+=("--repo=")
  1155      two_word_flags+=("-r")
  1156  
  1157      must_have_one_flag=()
  1158      must_have_one_noun=()
  1159      noun_aliases=()
  1160  }
  1161  
  1162  __start_restic()
  1163  {
  1164      local cur prev words cword
  1165      declare -A flaghash 2>/dev/null || :
  1166      if declare -F _init_completion >/dev/null 2>&1; then
  1167          _init_completion -s || return
  1168      else
  1169          __my_init_completion -n "=" || return
  1170      fi
  1171  
  1172      local c=0
  1173      local flags=()
  1174      local two_word_flags=()
  1175      local local_nonpersistent_flags=()
  1176      local flags_with_completion=()
  1177      local flags_completion=()
  1178      local commands=("restic")
  1179      local must_have_one_flag=()
  1180      local must_have_one_noun=()
  1181      local last_command
  1182      local nouns=()
  1183  
  1184      __handle_word
  1185  }
  1186  
  1187  if [[ $(type -t compopt) = "builtin" ]]; then
  1188      complete -o default -F __start_restic restic
  1189  else
  1190      complete -o default -o nospace -F __start_restic restic
  1191  fi
  1192  
  1193  # ex: ts=4 sw=4 et filetype=sh