OSDN Git Service

[fix] : version help
[alterlinux/aptpac.git] / aptpac
1 #!/usr/bin/env bash
2 #
3 #               __
4 #              /\ \__
5 #   __    _____\ \ ,_\ _____     __      ___
6 # /'__`\ /\ '__`\ \ \//\ '__`\ /'__`\   /'___\
7 #/\ \L\.\\ \ \L\ \ \ \\ \ \L\ /\ \L\.\_/\ \__/
8 #\ \__/.\_\ \ ,__/\ \__\ \ ,__\ \__/.\_\ \____\
9 # \/__/\/_/\ \ \/  \/__/\ \ \/ \/__/\/_/\/____/
10 #           \ \_\        \ \_\
11 #            \/_/         \/_/
12 # a pacman wrapper with syntax based on debian's apt
13 # (c) 2019-2020 Fascode Network.
14 # maintained by Yamada Hayao
15
16 APTPAC_VERSION="2.2.0"
17
18 set -e
19
20 PACMAN_OPTIONS=
21 AURHELPER=
22 HELPERS=(
23     "/usr/bin/yay"
24     "/usr/bin/yaourt"
25     "/usr/bin/aurman"
26     "/usr/bin/pikaur"
27     "/usr/bin/pacaur"
28 )
29
30 DEFAULT_PACMAN_COMMAND="pacman"
31
32 debug=false
33 PACMAN_COMMAND="${DEFAULT_PACMAN_COMMAND}"
34
35
36 _msg_error () {
37     echo -e "${@}" >&2
38 }
39
40 _msg_debug () {
41     if ${debug}; then
42         echo -e "${@}" >&1
43     fi
44 }
45
46 if [[ ! "${UID}" = 0 ]]; then
47     if [[ -z "${AURHELPER}" ]]; then
48         for AURHELPER in ${HELPERS[@]}; do
49             if [[ -f "${AURHELPER}" ]]; then
50                 PACMAN_COMMAND="${AURHELPER}"
51                 break
52             elif hash "$(basename "${AURHELPER}")" 2> /dev/null; then
53                 PACMAN_COMMAND="$(basename "${AURHELPER}")"
54                 break
55             fi
56         done
57         if [[ "${PACMAN_COMMAND}" == "${DEFAULT_PACMAN_COMMAND}" ]]; then
58             PACMAN_COMMAND="sudo ${DEFAULT_PACMAN_COMMAND}"
59         fi
60     else
61         if [[ -f "${AURHELPER}" ]]; then
62             PACMAN_COMMAND="${AURHELPER}"
63         elif hash "$(basename "${AURHELPER}")" 2> /dev/null; then
64             PACMAN_COMMAND="$(basename "${AURHELPER}")"
65         else
66             _msg_error "${AURHELPER} is not installed."
67             exit 1
68         fi
69     fi
70 fi
71
72
73 # List option
74 installed=false
75
76 _usage () {
77     echo "usage ${0} [options] [command] [packages]"
78     echo " commands:              "
79     echo "    install                       Install the specified package."
80     echo "    remove                        Remove the specified package."
81     echo "    purge                         Permanently remove the package."
82     echo "    update                        Update the package database."
83     echo "    upgrade                       Update the package."
84     echo "    search                        Search for a package."
85     echo "    autoremove                    Remove unnecessary packages."
86     echo "    clean                         Remove the package cache."
87     echo "    list                          Displays a list of packages."
88     echo
89     echo " general options:       "
90     echo "    -y | --yes  | --assume-yes    Do not check."
91     echo "    -d | --download-only          Only download the package."
92     echo "    -c <file>                     Config file for pacman."
93     echo "    -h | --help                   Display this help."
94     echo "    -v | --version                Displays the version of aptpac and pacman."
95     echo "    --purge                       Delete the entire configuration file."
96 }
97
98 _exit () {
99     exit ${1}
100 }
101
102 _version () {
103 cat << EOF
104 aptpac ${APTPAC_VERSION} - A pacman wrapper with syntax based on debian's apt
105 (c) 2019-2020 Fascode Network. Yamada Hayao
106 EOF
107 echo
108 pacman --version
109 }
110
111
112 ADD_OPTION () {
113     PACMAN_OPTIONS="${PACMAN_OPTIONS} ${@}"
114 }
115
116 # Argument analysis and processing
117 _opt_short="ydfc:hv"
118 _opt_long="yes,assume-yes,download-only,fix-broken,purse,installed,debug,help,version"
119 OPT=$(getopt -o ${_opt_short} -l ${_opt_long} -- "${@}")
120 if [[ ${?} != 0 ]]; then
121     exit 1
122 fi
123
124 eval set -- "${OPT}"
125 #echo "Argument is \"${OPT}\""
126 unset OPT _opt_short _opt_long
127
128 while true; do
129     case ${1} in
130         -y | --yes | --assume-yes)
131             ADD_OPTION "--noconfirm"
132             shift 1
133             ;;
134         -d | --download-only)
135             ADD_OPTION "-w"
136             shift 1
137             ;;
138         -f | --fix-broken)
139             shift 1
140             ;;
141         -c)
142             ADD_OPTION "--config ${2}"
143             shift 2
144             ;;
145         --purge)
146             ADD_OPTION "-n"
147             shift 1
148             ;;
149         --installed)
150             installed=true
151             shift 1
152             ;;
153         --debug)
154             debug=true
155             shift 1
156             ;;
157         -h | --help)
158             _usage
159             shift 1
160             exit 0
161             ;;
162         -v | --version)
163             _version
164             shift 1
165             exit 0
166             ;;
167         --)
168             shift 1
169             break
170             ;;
171         *)
172             _msg_error "Invalid argument '${1}'"
173             _help
174             exit 1
175             ;;
176     esac
177 done
178
179 if [[ $# -lt 1 ]]; then
180     _msg_error "No command specified"
181     _usage
182     _exit 1
183 fi
184 COMMAND="${1}"
185
186 shift 1
187
188 PACKAGE="${@}"
189
190 case "${COMMAND}" in
191     install) ADD_OPTION "-S" ;;
192     remove) ADD_OPTION "-Rsc" ;;
193     purge) ADD_OPTION "-Rsnc" ;;
194     update) ADD_OPTION "-Syy" ;;
195     upgrade) ADD_OPTION "-Syu" ;;
196     search) ADD_OPTION "-Ss" ;;
197     full-upgrade) ADD_OPTION "-Syu" ;;
198     edit-sources) sudo nano /etc/pacman.conf; _exit 0 ;;
199     dist-upgrade) ADD_OPTION "-Syu" ;;
200     huawei) 
201         if [[ "${LANG}" = "ja_JP.UTF-8" ]]; then
202             echo "(ง •ᴗ•)ว ⁾⁾ファーウェイでウェイウェイ"
203             _exit 0
204         else
205             _msg_error "Invalid comman '${COMMAND}'"
206             _exit 1
207         fi
208         ;;
209     moo)
210 cat << EOF
211          (__) 
212          (oo) 
213    /------\/ 
214   / |    ||   
215  *  /\---/\ 
216     ~~   ~~   
217 ...."Have you mooed today?"...
218 EOF
219     exit 0
220     ;;
221     clean)
222         ADD_OPTION "-Sccc"
223         ;;
224     autoremove) if [[ -n $(${PACMAN_COMMAND} -Qttdq) ]]; then
225                     ADD_OPTION "=Rsc"
226                     PACKAGE="$(${PACMAN_COMMAND} -Qttdq)"
227                 else
228                     echo "No packages to remove."
229                     exit 0
230                 fi
231                 ;;
232     list)
233         if ${installed}; then
234             ADD_OPTION "-Q | grep"
235         else
236             ADD_OPTION "-Ss"
237         fi
238         ;;
239     *)
240         _msg_error "Invalid comman '${COMMAND}'"
241         _exit 1
242         ;;
243 esac
244
245 if [[ ! "${PACMAN_COMMAND}" = "pacman" ]] && [[ ! "${PACMAN_COMMAND}" = "sudo pacman" ]]; then
246     _msg_debug "Use AUR helper ${PACMAN_COMMAND}."
247 fi
248
249 # echo "${PACMAN_COMMAND} ${PACMAN_OPTIONS} ${PACKAGE}"
250 ${PACMAN_COMMAND} ${PACMAN_OPTIONS} ${PACKAGE}