File: git-repl

package info (click to toggle)
git-extras 7.4.0-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 2,120 kB
  • sloc: sh: 4,312; python: 994; makefile: 146
file content (58 lines) | stat: -rwxr-xr-x 1,317 bytes parent folder | download
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
#!/usr/bin/env bash

git version
echo "git-extras version ""$(git-extras -v)"
echo "Type 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl."

while true; do
  # Current branch
  cur=$(git symbolic-ref HEAD 2> /dev/null | cut -d/ -f3-)

  # Prompt
  if test -n "$cur"; then
    cur_string=" ($cur)"
  else
    cur_string=""
  fi
  if test -n "$exit_status" && test "$exit_status" -ne 0; then
    es_string=$' \e[31m['"$exit_status"$']\e[0m'
  else
    es_string=""
  fi
  prompt="git$cur_string$es_string> "

  # Use arguments as a command if any are provided.
  if [ $# -ne 0 ]; then
    cmd=$*
    set --
    echo "$prompt" "$cmd" # It is as though you had entered a command.
  else
    # Readline
    read -e -r -p "$prompt" cmd
    # Check for EOF, and end the program if so (handles ^D).
    test $? -ne 0 && break
  fi

  # History
  history -s "$cmd"

  # Built-in commands
  case $cmd in
    ls) cmd=ls-files;;
    "") continue;;
    quit|exit|q) break;;
  esac

  if [[ $cmd == !*  ]]; then
    # shellcheck disable=SC2086
    eval ${cmd:1}
  elif [[ $cmd == git* ]]; then
    # shellcheck disable=SC2086
    eval $cmd
  else
    eval git "$cmd"
  fi
  exit_status=$?
done

echo