File: gclient_completion.sh

package info (click to toggle)
chromium 139.0.7258.127-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,122,156 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (76 lines) | stat: -rwxr-xr-x 2,322 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# gclient_completion.sh
#
# This adds completion to bash shells for gclient commands. It is
# meant for developers and not needed for inclusion by any automated
# processes that will, of course, specify the full command, not rely
# on or benefit from tab-completion.
#
# Requires:
#   bash-completion package for _get_comp_words_by_ref.
#   newer versions of sed for the improved regular expression handling.
#
# On Mac, this is accomplished by installing fink (www.finkproject.org)
# then doing sudo apt-get update ; sudo apt-get install sed
#
# Usage:
#   Put something like the following in your .bashrc:
#   . $PATH_TO_DEPOT_TOOLS/gclient_completion.sh
#


# Parses commands from gclient -h.
__gclient_commands () {
  gclient -h 2> /dev/null | sed -n 's/^\s*\x1b\[32m\(.*\)\x1b\[39m.*$/\1/p'
}

# Caches variables in __gclient_all_commands.
# Adds "update" command, which is not listed.
__gclient_compute_all_commands () {
  test -n "$__gclient_all_commands" ||
  __gclient_all_commands="$(__gclient_commands) update"
}

# Since gclient fetch is a passthrough to git, let the completions
# come from git's completion if it's defined.
if [[ -n _git_fetch ]]; then
    _gclient_fetch=_git_fetch
fi

# Completion callback for gclient cmdlines.
_gclient () {
  local cur prev words cword
  _get_comp_words_by_ref -n =: cur prev words cword

  # Find the command by ignoring flags.
  local i c=1 cword_adjust=0 command 
  while [ $c -lt $cword ]; do
    i="${words[$c]}"
    case "$i" in
      -*)
        ((cword_adjust++))
        : ignore options ;;
      *) command="$i"; break ;;
    esac
    ((c++))
  done

  # If there is a completion function for the command, use it and
  # return.
  local completion_func="_gclient_${command//-/_}"
  local -f $completion_func >/dev/null && $completion_func && return

  # If the command or hasn't been given, provide completions for all
  # commands. Also provide all commands as completion for the help
  # command.
  # echo "command=$command" >> /tmp/comp.log
  case "$command" in
    ""|help)
      if [[ "$command" != help || $((cword - cword_adjust)) -le 2 ]]; then
        __gclient_compute_all_commands
        COMPREPLY=($(compgen -W "$__gclient_all_commands" $cur))
      fi
      ;;
    *) : just use the default ;;
  esac
} &&
complete -F _gclient -o default gclient