File: git-magic

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 (87 lines) | stat: -rwxr-xr-x 1,520 bytes parent folder | download | duplicates (2)
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
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env bash


# Bash unofficial strict mode
set -eo pipefail
IFS=$'\n\t'

cd "$(git rev-parse --show-toplevel)"

USAGE='git-magic [-a] [-m msg] [-e] [-p] [-f]'

ALL=false
PUSH=false
FORCE=''
ARGS=()

while getopts "m:eapfh" arg; do
  case "${arg}" in
    m)
      ARGS+=("-m")
      ARGS+=("${OPTARG}")
      ;;
    e)
      ARGS+=("-e")
      ;;
    a)
      ALL=true
      ;;
    p)
      PUSH=true
      ;;
    f)
      FORCE='-f'
      ;;
    h)
      echo "$USAGE"
      exit 0
      ;;
    ?)
      echo "${USAGE}"
      exit 1
      ;;
  esac
done

shift $((OPTIND-1))

if [[ $# != 0 ]]; then
  echo "Unknown arguments: $*"
  echo "${USAGE}"
  exit 1
fi

set -- "${ARGS[@]}" # restore positional parameters

if [[ $ALL == true ]]; then

  # Check if there is no changes to stage
  if [[ -z $(git status --porcelain) ]]; then
    echo "No changes to commit"
    exit 0
  fi

  # Get confirmation from user
  git status
  echo "Everything will be added"
  read -rp "Press enter to continue"

  # Restore staging area so that, for example,
  # add and modify will not be separate entries in status
  git restore --staged . || true
  git add .
fi

# Commit with generated message
git commit --no-edit "$@" -m "$(git status --porcelain -uno)"

if [[ $PUSH == true ]]; then
  git push $FORCE
fi

# --no-edit by default. use option -e to override this

# Arguments are passed with quoted "$@" to avoid misparsing

# Generated message comes after user provided arguments
# so that user can insert title before it