forked from slackjeff/bananapkg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbanana
executable file
·232 lines (198 loc) · 8.8 KB
/
banana
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#!/usr/bin/env bash
######################################################################
# AUTOR : Jefferson 'slackjeff' Rocha <[email protected]> #
# LICENÇA : MIT #
# MUDANÇAS : changelog.txt #
# VERSIONAMENTO: versions.txt #
# SITE : https://bananapkg.github.io #
# #
# VELOCIDADE, SEGURANÇA, FINO. #
######################################################################
# ====================================================================
# VARIÁVEIS ESPECIAIS
# ====================================================================
# Desabilitando suporte a unicode
# Para melhor performance.
export LC_ALL=C
export LANG=C
export PRG='banana'
export VERSION='2.2.4.7'
export format_pkg='mz' # Extensão do pacote
export descme='info/desc' # Descrição do pacote
# Caso o usuário deixou nulo vamos
# inicializar as variáveis de configurações em modo default.
AUTO_YES="${AUTO_YES:=0}" # Desligado
GPG_SIGN="${GPG_SIGN:=1}" # Ligado
# Cores
readonly red='\033[31;1m'
readonly yellow='\033[33;1m'
readonly blue='\033[34;1m'
readonly pink='\033[35;1m'
readonly cyan='\033[36;1m'
readonly white='\033[37;1m'
readonly end='\033[m'
# ====================================================================
# Bibliotecas
# ====================================================================
# Carregando bibliotecas necessárias
# para o funcionamento do banana
heart_archives=(
'/etc/banana/banana.conf'
'/usr/libexec/banana/core.sh'
'/usr/libexec/banana/help.sh'
)
for heart_load in "${heart_archives[@]}"; do
source "$heart_load" || { echo "ERROR ON LOAD \"$heart_load\", ABORT"; exit 1 ;}
done
# ====================================================================
# Diretórios Especiais
# ====================================================================
dirlist='/var/lib/banana/list' # Lista do pacote 'pack.list'
dirdesc='/var/lib/banana/desc' # Descrição do pacote 'pack.desc'
dirremove='/var/lib/banana/remove' # Script de remoção do pacote 'rm.sh'
# ====================================================================
# Testes
# ====================================================================
# Sem root não vai amiguinho.
[[ "$UID" -ne '0' ]] && { echo "Root is required."; exit 1 ;}
# Verificando quais argumentos passados pelo usuário
# para pegar as variáveis necessárias
for entry_parameter; do
if [[ "$entry_parameter" = '-y' ]]; then
AUTO_YES='1'
elif [[ "$entry_parameter" = '-ol' ]] || [[ "$entry_parameter" = 'one-line' ]]; then
ONE_LINE='1'
else
new_argument+=("$entry_parameter")
fi
done
set -- "${new_argument[@]}" # definindo novos argumentos sem opções =)
# ====================================================================
# Inicio
# ====================================================================
case "$1" in
-c|create)
shift # Rebaixando
_INPUT_NULL_PARAMETER "$1" # Se ta nulo o help precisa ser chamado =)
# Se nome do pacote ter espaços não deve continuar
if [[ "$@" =~ .*[[:space:]]+.*-.* ]]; then
echo -e "${red}[Error!]${end} Unexpected character."
echo -e "Perfect Format name is: ${blue}Name-Version-Build.mz${end}"
echo -e "${red}DONT USE${end} symbols, space, tab etc.. in name of package."
echo "If you need more HELP, use -h or --help"
exit 1
fi
# Se nome do pacote não for letras ou se tiver
# espaços entre outras coisas, não pode continuar.
_NAME_FORMAT_PKG "$1" || exit 1
# Verificando quantos '-' existem e fazendo contagem
# com _WC
check_var="$(printf '%s\n' ${1//[a-zA-Z0-9._|\\()@#\!~%;:]/ })"
check_var="$(_WC ${check_var})"
if [[ "$check_var" -lt '2' || "$check_var" -gt '2' ]]; then
echo -e "${red}[Error!]${end} Unexpected ' - ' Count."
echo -e "USE ONLY TWO ' ${red}-${end} ' In the name of your package."
echo -e "EXAMPLE the perfect format: ${blue}leafpad${end}-${blue}2.6.8${end}-${blue}3${end}.${blue}mz${end}"
echo -e "If you need separate name of package prefer use ' ${red}_${end} '"
echo -e "EXAMPLE: firefox_quantum${blue}-${end}54.8.9${blue}-${end}1.mz"
echo "If you need more HELP, use -h or --help"
exit 1
else
# Verificação de tudo está aonde deveria estar, como diretório
# (info) e o arquivo de descrição (desc)
_VERIFY_ON "$1"
# Iniciando processo de criação do pacote
_CREATE_PKG "$1" || exit 1
fi
unset check_var
;;
-g|generate)
shift
# Verificando se tem traços '-' a mais
# E dando um sermão ;D
check_var="$(printf '%s\n' ${1//[a-zA-Z0-9._|\\()@#\!~%;:]/ })"
check_var="$(_WC ${check_var})"
if [[ -n "$1" ]] && [[ "$check_var" -lt '2' || "$check_var" -gt '2' ]]; then
echo -e "${red}[ERROR]${end} OPS! Could not generate file desc..."
echo -e "The Perfect Format name is: banana -g ${blue}name-version-build${end}"
echo "EXAMPLES:"
echo -e "[1] banana -g ${blue}firefox_quantum${end}-${blue}57.8.9${end}-${blue}1${end}"
echo -e "[2] banana -g ${blue}nano${end}-${blue}4.0${end}-${blue}2${end}"
echo -e "[3] banana -g ${blue}utox${end}-${blue}10.1.4.0bc${end}-${blue}2${end}"
echo "For more Details, man banana"
exit 1
elif [[ "$1" =~ .*-$ ]]; then # Termino com - ?
echo -e "${red}[ERROR]${end} Finish with numbers."
exit 1
fi
# Pegando os campos com delimitador ' - ' =)
inc='0' # Var incremento
for take in 'field_one' 'field_two' 'field_three'; do
inc=$(($inc + 1))
eval $take="$(echo "$1" | cut -d '-' -f ${inc})" # Expanda e pegue o seu devido valor
done
_GENERATE_DESC "$field_one" "$field_two" "$field_three" || exit 1
unset check_var
;;
-i|install) # Instalação de pacotes
shift # Rebaixe baby
_INPUT_NULL_PARAMETER "$1" # Se ta nulo o help precisa ser chamado =)
while [[ -n "$1" ]]; do
_NAME_FORMAT_PKG "$1" || exit 1 # Função de configuração de entrada!
[[ ! -e "$1" ]] && { echo -e "${red}[ERROR]${end} Do not cheat me! This Package dont exist."; exit 1 ;}
_INSTALL_PKG "$1" || exit 1
shift
done
;;
-u|upgrade) # Upgrade de pacotes
shift
_INPUT_NULL_PARAMETER "$1" # Se ta nulo o help precisa ser chamado =)
while [[ -n "$1" ]]; do
_NAME_FORMAT_PKG "$1" || exit 1 # Função de configuração de entrada!
_UPGRADE "$1" || exit 1
shift
done
;;
update) # Update do banana
_UPDATE_BANANA && exit 0 || exit 1
;;
-r|remove)
shift # Rebaixa baby
_INPUT_NULL_PARAMETER "$1" # Se ta nulo o help precisa ser chamado =)
# Se contiver um dos caracteres da lista, não poderá continuar.
[[ "$1" =~ .*(\*|@|\#|,).* ]] && { echo 'Dont Use * or @ or #'; exit 1 ;}
while [[ -n "$1" ]]; do
_PRE_REMOVE "$1" || exit 1
shift
done
exit 0
;;
-s|search)
shift # elaia, rebaixamos.
_INPUT_NULL_PARAMETER "$1" # Se ta nulo o help precisa ser chamado =)
while [[ -n "$1" ]]; do
_SEARCH_PKG "$1" # Chamando função de check
shift
done
;;
-pl|print)
shift # rebaixo
_INPUT_NULL_PARAMETER "$1"
_PRINT_LIST "$1" || exit 1
;;
-l|list)
pacotes="$(cd ${dirdesc};echo * | uniq)"
echo -e "\n==================================================================================="
echo -e " ${yellow}Name${end} \t ${pink}Version${end} \t ${blue}Description${end}"
echo "==================================================================================="
for pacote in ${pacotes[@]}; do
PKGNAME=$(grep 'pkgname=' ${dirdesc}/${pacote} 2>/dev/null | cut -d "'" -f2)
VERSION=$(grep 'version=' ${dirdesc}/${pacote} 2>/dev/null | cut -d "'" -f2)
DESC=$(grep 'desc=' ${dirdesc}/${pacote} 2>/dev/null | cut -d '"' -f2)
echo -e " ${yellow}${PKGNAME}${end} ${pink}${VERSION}${end} ${blue}${DESC:0:60}${end}"
done
;;
-V|version) echo "$PRG Version $VERSION" ;;
-h|help) _HELP_US ;;
*) _HELP_US ;;
esac