-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathgit-checkout
More file actions
executable file
·123 lines (104 loc) · 3.12 KB
/
git-checkout
File metadata and controls
executable file
·123 lines (104 loc) · 3.12 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/usr/bin/env bash
__SOURCE__="${BASH_SOURCE[0]}"
while [[ -h "${__SOURCE__}" ]]; do
__SOURCE__="$(find "${__SOURCE__}" -type l -ls | sed -n 's@^.* -> \(.*\)@\1@p')"
done
__DIR__="$(cd -P "$(dirname "${__SOURCE__}")" && pwd)"
__NAME__="${__SOURCE__##*/}"
__AUTHOR__='S0AndS0'
__DESCRIPTION__='Short-cut to "git checkout" for named repository'
## Provides 'failure'
source "${__DIR__}/shared_functions/modules/trap-failure/failure.sh"
trap 'failure "LINENO" "BASH_LINENO" "${BASH_COMMAND}" "${?}"' ERR
## Provides: argument_parser <arg-array-reference> <acceptable-arg-reference>
source "${__DIR__}/shared_functions/modules/argument-parser/argument-parser.sh"
## Provides: __license__ <description> <author>
source "${__DIR__}/shared_functions/license"
usage(){
_message="${1}"
_repo_name="${_repo_name:-repository-name}"
_branch="${_branch:-new-branch-name}"
_branch_name="${_branch_name:-existing-branch-name}"
cat <<EOF
## Usage
# ssh ${USER}@host-or-ip ${__NAME__} ${_git_args[@]:-$_repo_name}
#
# ${__DESCRIPTION__}
#
# --branch -b="new-branch-name"
# Check out new branch within ${_repo_name} with: git checkout -b ${_branch}
#
# ${_branch_name}
# Check out exsisting branch within ${_repo_name} with: git checkout ${_branch_name}
#
# ${_repo_name}
# Name of repository to initialize
#
# -l --license
# Shows script or project license then exits
#
# -h --help help
# Display this message and exit
EOF
(("${#_message}")) && [[ "${_message}" != '0' ]] && {
printf >&2 'Error - %s\n' "${_message}"
}
}
_args=("${@:?# No arguments provided try: ${__NAME__} help}")
_valid_args=('--help|-h|help:bool'
'--license|-l|license:bool'
'--branch|-b:posix'
'--branch-name:posix-nil'
'--repo-name:posix-nil')
argument_parser '_args' '_valid_args'
_exit_status="$?"
## Catch --branch <name> <repo>
(("${#_branch}")) && {
_repo_name="${_branch_name}"
_branch_name=''
}
if ((_help)) || ((_exit_status)); then
usage "${_exit_status}"
exit "${_exit_status}"
elif ((_license)); then
__license__ "${__DESCRIPTION__}" "${__AUTHOR__}"
exit 0
fi
(("${#_repo_name}")) || {
usage 'missing repository name argument!'
exit "1"
}
! (("${#_branch}")) && ! (("${#_branch_name}")) && {
usage 'missing "--branch" or "--branch-name" argument!'
exit "1"
}
_git_path="${HOME}/git/${_repo_name:?# No repository name provided}"
[[ -d "${_git_path}" ]] || {
usage "no repository found with ${_repo_name}"
exit "1"
}
[[ -d "${_git_path}/.git" ]] || {
usage "directory found with ${_repo_name} but not initialized correctly"
exit "1"
}
_git_args=()
if (("${#_branch}")); then
_git_args+=('-b' "${_branch}")
elif (("${#_branch_name}")); then
_git_args+=("${_branch_name}")
else
usage 'missing "--branch" or "--branch-name" argument!'
exit 1
fi
_old_PWD="${PWD}"
cd "${_git_path}" || exit 1
git checkout ${_git_args[@]}
_git_exit_status="${?}"
[[ "${_old_PWD}" == "${_git_path}" ]] || {
cd "${_old_PWD}"
}
((_git_exit_status)) && {
printf >&2 '%s encountered errors!\n' "${__NAME__}"
exit 1
}
printf '%s finished!\n' "${__NAME__}"