OSDN Git Service

[update] : Supported muitiple package in show command
[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 # License: Do What The Fuck You Want To Public License
15 # maintained by Yamada Hayao
16
17 # Enter the path to the AUR helper you want to use here. 
18 # If it is empty, the corresponding AUR helper will be searched automatically.
19 #AURHELPER=
20
21
22 set -e
23 APTPAC_VERSION="3.2.1"
24 PACMAN_OPTIONS=
25 HELPERS=(
26     "/usr/bin/yay"
27     "/usr/bin/paru"
28     "/usr/bin/yaourt"
29     "/usr/bin/aurman"
30     "/usr/bin/pikaur"
31     "/usr/bin/pacaur"
32     "/usr/bin/aura"
33     "/usr/bin/wfa"
34 )
35 DEFAULT_PACMAN_COMMAND="/usr/bin/pacman"
36 PACMAN_COMMAND="${DEFAULT_PACMAN_COMMAND}"
37 PACMAN_CONFIG="/etc/pacman.conf"
38
39 direct_option=false
40 debug=false
41 autoremove=false
42
43 _msg_error () {
44     echo -e "${@}" >&2
45 }
46
47 _msg_debug () {
48     if ${debug}; then
49         echo -e "${@}" >&1
50     fi
51 }
52
53 if [[ ! "${UID}" = 0 ]]; then
54     if [[ -z "${AURHELPER+SET}" ]]; then
55         for AURHELPER in ${HELPERS[@]}; do
56             if [[ -f "${AURHELPER}" ]]; then
57                 PACMAN_COMMAND="${AURHELPER}"
58                 break
59             elif hash "$(basename "${AURHELPER}")" 2> /dev/null; then
60                 PACMAN_COMMAND="$(basename "${AURHELPER}")"
61                 break
62             fi
63         done
64         if [[ "${PACMAN_COMMAND}" == "${DEFAULT_PACMAN_COMMAND}" ]]; then
65             PACMAN_COMMAND="sudo ${DEFAULT_PACMAN_COMMAND}"
66         fi
67     else
68         if [[ -f "${AURHELPER}" ]]; then
69             PACMAN_COMMAND="${AURHELPER}"
70         elif hash "$(basename "${AURHELPER}")" 2> /dev/null; then
71             PACMAN_COMMAND="$(basename "${AURHELPER}")"
72         else
73             _msg_error "${AURHELPER} is not installed"
74             exit 1
75         fi
76     fi
77 fi
78
79
80 # List option
81 installed=false
82
83 _usage () {
84     echo "usage ${0} [options] [command] [packages]"
85     echo
86     echo " apt commands:"
87     echo "    install                              Install the specified package"
88     echo "    remove                               Remove the specified package"
89     echo "    purge                                Permanently remove the package"
90     echo "    update                               Update package database"
91     echo "    upgrade | full-upgrade               Update packages"
92     echo "    edit-sources                         Edit config file of pacman"
93     echo "    search                               Search for a package"
94     echo "    autoremove                           Remove unnecessary packages"
95     echo "    clean                                Remove the package cache"
96     echo "    list                                 Displays a list of packages"
97     echo "    show                                 Displays the package records"
98     echo
99     echo " apt options:"
100     echo "    -y | --yes  | --assume-yes           Do not check"
101     echo "    -d | --download-only                 Only download the package"
102     echo "    -c | --config-file <file>            Config file for pacman"
103     echo "    -h | --help                          Display this help"
104     echo "    -v | --version                       Displays the version of aptpac and pacman"
105     echo "         --auto-remove | --autoremove    Remove unnecessary packages with other command"
106     echo "         --purge                         Delete the entire configuration file"
107     echo
108     echo " pacapt options:"
109     echo "         --aur-helper <command>          Specifies the command to use as the AUR helper"
110     echo "                                         Ignored if pacapt is run as root"
111     echo "                                         Specify AUR helper that supports common command line options with pacman"
112     echo
113     echo " aptpac supports not only above options but also options of pacman"
114 }
115
116 _exit () {
117     exit ${1}
118 }
119
120 _version () {
121 cat << EOF
122 aptpac ${APTPAC_VERSION} - A pacman wrapper with syntax based on debian's apt
123 License: Do What The Fuck You Want To Public License
124 (c) 2019-2020 Fascode Network. Yamada Hayao
125 EOF
126 echo
127 pacman --version
128 }
129
130
131 ADD_OPTION () {
132     PACMAN_OPTIONS="${PACMAN_OPTIONS} ${@}"
133 }
134
135 # Argument analysis and processing
136 set +e
137 PACAPT_ARGUMENTS="${@}"
138 _opt_short="ydfc:hvVDFQRSTU"
139 _opt_long="yes,assume-yes,download-only,fix-broken,purse,installed,debug,help,version,config-file:,auto-remove,autoremove,aur-helper:"
140 OPT=$(getopt -o ${_opt_short} -l ${_opt_long} -- "${@}" 2> /dev/null)
141 set -e
142 #if [[ ${?} != 0 ]]; then
143 #    exit 1
144 #fi
145
146 eval set -- "${OPT}"
147 #echo "Argument is \"${OPT}\""
148 unset OPT _opt_short _opt_long
149
150 while true; do
151     case ${1} in
152         -y | --yes | --assume-yes)
153             ADD_OPTION "--noconfirm"
154             shift 1
155             ;;
156         -d | --download-only)
157             ADD_OPTION "-w"
158             shift 1
159             ;;
160         -f | --fix-broken)
161             shift 1
162             ;;
163         -c | --config-file)
164             PACMAN_CONFIG="${2}"
165             shift 2
166             ;;
167         --purge)
168             ADD_OPTION "-n"
169             shift 1
170             ;;
171         --installed)
172             installed=true
173             shift 1
174             ;;
175         --debug)
176             debug=true
177             shift 1
178             ;;
179         -h | --help)
180             _usage
181             shift 1
182             exit 0
183             ;;
184         -v | --version)
185             _version
186             shift 1
187             exit 0
188             ;;
189         --autoremove | --auto-remove)
190             autoremove=true
191             shift 1
192             ;;
193         --aur-helper)
194             if [[ ! "${UID}" = 0 ]] && [[ -f "${2}" ]]; then
195                 PACMAN_COMMAND="${2}"
196             elif [[ "${UID}" = 0 ]]; then
197                 _msg_warn "The specified AUR helper is not used because pacapt is running on the root."
198             elif hash "$(basename "${2}")" 2> /dev/null; then
199                 PACMAN_COMMAND="$(basename "${2}")"
200             else
201                 _msg_error "${2} is not installed"
202                 exit 1
203             fi
204             shift 2
205             ;;
206         -V | -D | -F | -Q | -R | -S | -T | -U)
207             direct_option=true
208             ADD_OPTION "${PACAPT_ARGUMENTS}"
209             break
210             ;;
211         --)
212             shift 1
213             break
214             ;;
215         *)
216             _msg_error "Invalid argument '${1}'"
217             _help
218             exit 1
219             ;;
220     esac
221 done
222
223 if [[ "${direct_option}" = false ]]; then
224     if [[ $# -lt 1 ]]; then
225         _msg_error "No command specified"
226         _usage
227         _exit 1
228     fi
229     COMMAND="${1}"
230
231     shift 1
232
233     PACKAGE=("${@}")
234
235     case "${COMMAND}" in
236         install)
237             ADD_OPTION "-S"
238             ;;
239         remove)
240             ADD_OPTION "-Rsc"
241             ;;
242         purge)
243             ADD_OPTION "-Rsnc"
244             ;;
245         update)
246             ADD_OPTION "-Syy"
247             ;;
248         upgrade)
249             ADD_OPTION "-Syu"
250             ;;
251         search)
252             ADD_OPTION "-Ss"
253             ;;
254         full-upgrade)
255             ADD_OPTION "-Syu"
256             ;;
257         clean)
258             ADD_OPTION "-Sccc"
259             ;;
260         dist-upgrade)
261             ADD_OPTION "-Syu"
262             ;;
263         edit-sources)
264             if [[ -n "${EDITOR}" ]]; then
265                 sudo ${EDITOR} "${PACMAN_CONFIG}"
266             else
267                 sudo nano "${PACMAN_CONFIG}"
268             fi
269             _exit 0
270             ;;
271         huawei) 
272             if [[ "$(source "/etc/locale.conf" 2> /dev/null; echo -n "${LANG}")" = "ja_JP.UTF-8" ]]; then
273                 echo "(ง •ᴗ•)ว ⁾⁾ファーウェイでウェイウェイ"
274                 _exit 0
275             else
276                 _msg_error "Invalid command '${COMMAND}'"
277                 _exit 1
278             fi
279             ;;
280         moo)
281             echo "         (__) "
282             echo "         (oo) "
283             echo "   /------\/ "
284             echo "  / |    ||   "
285             echo " *  /\---/\ "
286             echo "    ~~   ~~   "
287             echo "...."Have you mooed today?"..."
288             exit 0
289             ;;
290         autoremove) 
291             if [[ -n "$(${PACMAN_COMMAND} -Qttdq)" ]]; then
292                 ADD_OPTION "-Rsc"
293                 PACKAGE=($(${PACMAN_COMMAND} -Qttdq))
294             else
295                 echo "No packages to remove"
296                 exit 0
297             fi
298             ;;
299         list)
300             if ${installed}; then
301                 ADD_OPTION "-Q | grep"
302             else
303                 ADD_OPTION "-Ss"
304             fi
305             ;;
306         show)
307             for pkg in "${PACKAGE[@]}"; do
308                 if pacman -Qq "${pkg}" 2> /dev/null 1>&2; then
309                     ${PACMAN_COMMAND} ${PACMAN_OPTIONS} -Qi --config "${PACMAN_CONFIG}" "${pkg}"
310                 else
311                     ${PACMAN_COMMAND} ${PACMAN_OPTIONS} -Si --config "${PACMAN_CONFIG}" "${pkg}"
312                 fi
313             done
314             _exit 0
315             ;;
316         *)
317             _msg_error "Invalid command '${COMMAND}'"
318             _exit 1
319             ;;
320     esac
321 fi
322
323 if [[ ! "${PACMAN_COMMAND}" = "pacman" ]] && [[ ! "${PACMAN_COMMAND}" = "sudo pacman" ]]; then
324     _msg_debug "Use AUR helper ${PACMAN_COMMAND}"
325 fi
326
327 # echo "${PACMAN_COMMAND} ${PACMAN_OPTIONS} ${PACKAGE}"
328 ${PACMAN_COMMAND} ${PACMAN_OPTIONS} --config "${PACMAN_CONFIG}" "${PACKAGE[@]}"
329
330 if ${autoremove}; then
331     if [[ -n $(${PACMAN_COMMAND} -Qttdq) ]]; then
332         ${PACMAN_COMMAND} -Rsc --config "${PACMAN_CONFIG}" $(${PACMAN_COMMAND} -Qttdq)
333     else
334         echo "No packages to remove"
335         exit 0
336     fi
337 fi