-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfiles.bash
executable file
·113 lines (87 loc) · 2.18 KB
/
files.bash
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
#!/usr/bin/env bash
#===============================================================================
#NAME
# files.bash
#
#DESCRIPTION
# Handle files in checkbox
#===============================================================================
command=""
get_items() {
local git_status="$( git status -su )"
local items
while IFS= read item; do
if handle_status "$item"; then
items+="|$item"
fi
done <<< "$git_status"
echo "${items:1}"
}
handle_status() {
local item="$1"
case $command in
add)
[[ ${item:1:1} != " " ]];;
reset)
[[ ${item:0:1} != " " && ${item:0:1} != "?" ]];;
diff)
[[ ${item:0:2} != "??" ]];;
rm)
[[ ${item:1:1} != " " ]];;
esac
}
get_selected_items() {
local items="$1"
IFS="|" read -r -a items <<< "$1"
local selected="$2"
local selected_items
for index in ${selected[@]}; do
selected_items+=" ${items[index]:3}"
done
echo "$selected_items"
}
gs_rm() {
local items="$1"
IFS="|" read -r -a items <<< "$1"
local selected="$2"
local tracked=()
local untracked=()
for index in ${selected[@]}; do
local item="${items[index]}"
if [[ ${item:0:2} == "??" ]]; then
untracked+=("${item:3}")
elif [[ ${item:1:1} == " " && ${item:1:1} != "??" ]]; then
a
else
tracked+=("${item:3}")
fi
done
[[ -n ${untracked[*]} ]] && rm ${untracked[*]}
[[ -n ${tracked[*]} ]] && git checkout ${tracked[*]}
}
execute_git() {
local items="$1"
local selected="$2"
if [[ $command == "rm" ]]; then
gs_rm "$items" "$selected"
else
local selected_items=$( get_selected_items "$items" "$selected" )
git $command $selected_items
fi
git status -su
}
run() {
command="$1"
local items=("$( get_items )")
[[ $items == "" ]] && echo "No more files to $command" && return
local checkbox_sh="$( dirname $BASH_SOURCE )/checkbox.bash"
source $checkbox_sh --message="gs $command" --options="$items" --multiple --index
clear
local selected="$checkbox_output"
case $selected in
"Exit") echo "gs $command canceled" && return;;
"None selected") echo "Select files to $command" && return;;
esac
execute_git "$items" "$selected"
}
run "$@"