set -eu
-msgdebug=false
-nocolor=false
-debug=false
+
+######################################################################################
+# ここから翻訳データ
+
+declare -A ja_JP=(
+ ["Undefined operation"]="未定義のオペレーションです"
+ ["only one operation may be used at a time"]="一度に使用できるオペレーションは1つだけです"
+ ["Failed to set the argument of %s"]="%sの引数の設定に失敗しました"
+ ["Setting that command is not currently supported"]="そのコマンドの設定は現在サポートされていません"
+ ["Install dependent packages..."]="依存パッケージをインストールします..."
+ ["No package with an exact name match was found"]="完全に一致する名前のパッケージが見つかりませんでした"
+ ["Select a package %s with an exact name match"]="名前が完全に一致するパッケージ %s を選択します"
+ ["Download PKGBUILD of %s"]="%s のPKGBUILDをダウンロード"
+ ["Get PKGBUILD from %s"]="%sからPKGBUILDを取得します"
+ ["PKGBUILD has already been downloaded"]="PKGBUILDは既にダウンロードされています"
+ ["Do you want to overwrite and download? [n] :"]="上書きダウンロードしますか? [n] :"
+ ["Unpacking the tarball of PKGBUILD ..."]="PKGBUILDを展開しています ..."
+)
+######################################################################################
+# ここからデフォルト設定の定義
+
+#-- wfa configs --#
+wfa_version="0.1"
+wfa_name="WFA"
+wfa_command="wfa"
+
+#-- options (int) --#
+option_y_count=0
+
+#-- options (str) --#
+aururl="https://aur.archlinux.org/"
operation="none"
+
+#-- options (bool) --#
+bash_debug=false
+debug=false
force_aur=false
+msgdebug=false
+nocolor=false
noconfirm=false
-wfa_version="0.1"
-aururl="https://aur.archlinux.org/"
+nodeps=false
nomakepkgconf=false
+sync_search=false
-
-makepkg_command="/usr/bin/makepkg"
+#-- makepkg --#
+# 実行ファイル
+makepkg_command="/usr/bin/makepkg"
+# 設定ファイル
makepkg_config="/etc/makepkg.conf"
+# 引数
makepkg_args=""
+#-- pacman --#
+# 実行ファイル
pacman_command="/usr/bin/pacman"
+# 設定ファイル
pacman_config="/etc/pacman.conf"
+# 引数
pacman_args=""
+#-- git --#
+# 実行ファイル
git_command="/usr/bin/git"
+# 引数
git_args=""
+#-- gpg --#
+# 実行ファイル
gpg_command="/usr/bin/gpg"
+# 引数
gpg_args=""
+#-- sudo --#
+# 実行ファイル
+sudo_command="/usr/bin/sudo"
+# 引数
+sudo_args=""
+
+
+
+######################################################################################
+# ここからメッセージ関連の関数定義
+
# メッセージ出力の制御
# https://github.com/FascodeNet/alterlinux/blob/dev/tools/msg.sh の変数名にアンダーバーを追加し関数化
done
}
+# テキストの翻訳
+#set -xv
+translate() {
+ local _msg_translate
+ _msg_translate() {
+ local _get_text
+ local _locale="$(echo "${LANG}" | cut -d "." -f 1)"
+
+ _get_text() {
+ set +eu
+ local _translated_text="$(eval echo '$'{${_locale}["${*}"]})"
+ set -eu
+ if [[ -z "${_translated_text}" ]]; then
+ echo "${*}"
+ else
+ echo "${_translated_text}"
+ fi
+ }
+
+ local _text _fulltext=() _main
+
+ if declare -p "${_locale}" 2> /dev/null 1>/dev/null; then
+ _main="$(_get_text ${1})"
+ else
+ _main="${1}"
+ fi
+ shift 1
+ echo "$(printf "${_main}" ${@})"
+ }
+ _msg_translate "${@}"
+}
+
+
+
# Show an INFO message
# $1: message string
msg_info() {
- local _msg_opts="-a WFA"
+ if [[ "${msgdebug}" = false ]]; then
+ set +xv
+ fi
+ local _msg_opts="-a ${wfa_name}"
if [[ "${1}" = "-n" ]]; then
_msg_opts="${_msg_opts} -o -n"
shift 1
fi
[[ "${msgdebug}" = true ]] && _msg_opts="${_msg_opts} -x"
[[ "${nocolor}" = true ]] && _msg_opts="${_msg_opts} -n"
- msg ${_msg_opts} info "${1}"
+ msg ${_msg_opts} info "$(translate "${@}")"
+ if [[ "${bash_debug}" = true ]]; then
+ set -xv
+ fi
}
# Show an Warning message
# $1: message string
msg_warn() {
- local _msg_opts="-a WFA"
+ if [[ "${msgdebug}" = false ]]; then
+ set +xv
+ fi
+ local _msg_opts="-a ${wfa_name}"
if [[ "${1}" = "-n" ]]; then
_msg_opts="${_msg_opts} -o -n"
shift 1
fi
[[ "${msgdebug}" = true ]] && _msg_opts="${_msg_opts} -x"
[[ "${nocolor}" = true ]] && _msg_opts="${_msg_opts} -n"
- msg ${_msg_opts} warn "${1}"
+ msg ${_msg_opts} warn "$(translate "${@}")"
+ if [[ "${bash_debug}" = true ]]; then
+ set -xv
+ fi
}
# Show an debug message
# $1: message string
msg_debug() {
+ if [[ "${msgdebug}" = false ]]; then
+ set +xv
+ fi
if [[ "${debug}" = true ]]; then
- local _msg_opts="-a WFA"
+ local _msg_opts="-a ${wfa_name}"
if [[ "${1}" = "-n" ]]; then
_msg_opts="${_msg_opts} -o -n"
shift 1
fi
[[ "${msgdebug}" = true ]] && _msg_opts="${_msg_opts} -x"
[[ "${nocolor}" = true ]] && _msg_opts="${_msg_opts} -n"
- msg ${_msg_opts} debug "${1}"
+ msg ${_msg_opts} debug "$(translate "${@}")"
+ fi
+ if [[ "${bash_debug}" = true ]]; then
+ set -xv
fi
}
# $1: message string
# $2: exit code number (with 0 does not exit)
msg_error() {
- local _msg_opts="-a WFA"
+ if [[ "${msgdebug}" = false ]]; then
+ set +xv
+ fi
+ local _msg_opts="-a ${wfa_name}"
if [[ "${1}" = "-n" ]]; then
_msg_opts="${_msg_opts} -o -n"
shift 1
fi
[[ "${msgdebug}" = true ]] && _msg_opts="${_msg_opts} -x"
[[ "${nocolor}" = true ]] && _msg_opts="${_msg_opts} -n"
- msg ${_msg_opts} error "${1}"
- if [[ -n "${2:-}" ]]; then
- exit ${2}
+ msg ${_msg_opts} error "$(translate "${@}")"
+ if [[ "${bash_debug}" = true ]]; then
+ set -xv
fi
}
+######################################################################################
+# ここから実際の処理開始
+# ここから下のメッセージは翻訳可能です
+
# rm helper
# Delete the file if it exists.
# For directories, rm -rf is used.
local _wfa_usage
_wfa_usage() {
echo "Usage:"
- echo "wfa"
- echo "wfa <operation> [...]"
+ echo "${wfa_command}"
+ echo "${wfa_command} <operation> [...]"
echo
echo "operations:"
- echo " wfa {-h --help}"
- echo " wfa {-V --version}"
- #echo " wfa {-D --database} <options> <package(s)>"
- #echo " wfa {-F --files} [options] [package(s)]"
- echo " wfa {-Q --query} [options] [package(s)]"
- echo " wfa {-R --remove} [options] <package(s)>"
- echo " wfa {-S --sync} [options] [package(s)]"
- #echo " wfa {-T --deptest} [options] [package(s)]"
- #echo " wfa {-U --upgrade} [options] <file(s)>"
+ echo " ${wfa_command} {-h --help}"
+ echo " ${wfa_command} {-V --version}"
+ #echo " ${wfa_command} {-D --database} <options> <package(s)>"
+ #echo " ${wfa_command} {-F --files} [options] [package(s)]"
+ echo " ${wfa_command} {-Q --query} [options] [package(s)]"
+ echo " ${wfa_command} {-R --remove} [options] <package(s)>"
+ echo " ${wfa_command} {-S --sync} [options] [package(s)]"
+ #echo " ${wfa_command} {-T --deptest} [options] [package(s)]"
+ #echo " ${wfa_command} {-U --upgrade} [options] <file(s)>"
#echo
#echo "New operations:"
- #echo " wfa {-P --show} [options]"
- #echo " wfa {-G --getpkgbuild} [package(s)]"
+ #echo " ${wfa_command} {-P --show} [options]"
+ #echo " ${wfa_command} {-G --getpkgbuild} [package(s)]"
echo
echo "New options:"
echo " --repo Assume targets are from the repositories"
local _wfa_usage_sync
_wfa_usage_sync() {
- echo "usage: wfa {-S --sync} [options] [package(s)]"
+ echo "usage: ${wfa_command} {-S --sync} [options] [package(s)]"
echo "options:"
echo " -b, --dbpath <path> set an alternate database location"
echo " --config <path> set an alternate configuration file"
elif [[ "$(type -t "_wfa_usage_${operation}" )" = "function" ]]; then
_wfa_usage_${operation}
else
- msg_error "Undefined operation." 1
+ msg_error "Undefined operation"
+ exit 1
fi
}
operation="${1}"
add_args pacman "--${operation}"
else
- msg_error "only one operation may be used at a time" 1
+ msg_error "only one operation may be used at a time"
+ exit 1
fi
}
_args_array=(${makepkg_args})
_args_array+=(${@})
makepkg_args=${_args_array[@]}
- msg_debug "MAKEPKG ARGS: ${makepkg_args}"
+ msg_debug "makepkg ARGS: ${makepkg_args}"
;;
"pacman")
_args_array=(${pacman_args})
_args_array+=(${@})
pacman_args=${_args_array[@]}
- msg_debug "PACMAN ARGS: ${pacman_args}"
+ msg_debug "pacman ARGS: ${pacman_args}"
+ ;;
+ "git")
+ _args_array=(${mpg_args})
+ _args_array+=(${@})
+ git_args=${_args_array[@]}
+ msg_debug "git ARGS: ${git_args}"
+ ;;
+ "gpg")
+ _args_array=(${gpg_args})
+ _args_array+=(${@})
+ gpg_args=${_args_array[@]}
+ msg_debug "gpg ARGS: ${gpg_args}"
+ ;;
+ "sudo")
+ _args_array=(${sudo_args})
+ _args_array+=(${@})
+ sudo_args=${_args_array[@]}
+ msg_debug "sudo ARGS: ${sudo_args}"
+ ;;
+ *)
+ msg_error "Failed to set the argument of %s" "${_target}"
+ msg_error "Setting that command is not currently supported"
+ exit 1
;;
esac
}
# AurJsonから値を取得
local _aur_json=$(curl -sL "https://aur.archlinux.org/rpc/?v=5&type=search&by=name&arg=${_package}" | jq -r)
if (( "$(echo "${_aur_json}" | jq -r ".resultcount")" == 0 )); then
- msg_error "Could not find all required packages:\n ${_package}" 1
+ msg_error "Could not find all required packages:\n ${_package}"
+ exit 1
fi
local _found_packages="$(echo "${_aur_json}" | jq -r --tab '.results[].Name')"
#msg_debug "Found package: $(echo ${_found_packages} | tr '\n' ' ')"
if [[ -n "$(echo "${_found_packages}" | grep -x "${_package}" )" ]]; then
- msg_debug "Select a package ${_package} with an exact name match"
+ msg_debug "Select a package %s with an exact name match" "${_package}"
else
- msg_error "No package with an exact name match was found." 1
+ msg_error "No package with an exact name match was found"
+ exit 1
fi
# PKGBUILDをダウンロード
- msg_info "Download PKGBUILD of ${_package}"
+ msg_info "Download PKGBUILD of %s" "${_package}"
_aur_json=$(echo "${_aur_json}" | jq -r ".results[] | select(.Name == \"${_package}\")" )
local _aur_snapshot_url="${aururl%/}$(echo "${_aur_json}" | jq -r ".URLPath")"
local _aur_version="$(echo "${_aur_json}" | jq -r ".Version")"
- msg_debug "Get PKGBUILD from ${_aur_snapshot_url}"
+ msg_debug "Get PKGBUILD from %s" "${_aur_snapshot_url}"
local _pkgbuild_archive_path="${wfa_cache_dir}/archive/${_package}-${_aur_version}"
local _download_pkgbuild=true
if [[ -f "${_pkgbuild_archive_path}" ]]; then
- msg_warn "PKGBUILD has already been downloaded."
+ msg_warn "PKGBUILD has already been downloaded"
msg_warn -n "Do you want to overwrite and download? [n] :"
local _yes_or_no
if [[ "${noconfirm}" = true ]]; then
fi
# PKGBUILDを展開
- msg_info "Unpacking the tarball of PKGBUILD ..."
+ msg_info "Unpacking the tarball of PKGBUILD ..." #ここまで翻訳
tar -xv -f "${_pkgbuild_archive_path}" -C "${wfa_cache_dir}/build/" > /dev/null 2>&1
# .SRCINFOを解析
_conflicts_found=true
fi
if [[ "${_conflicts_found}" = true ]]; then
- msg_error "A conflict was found." 1
+ msg_error "A conflict was found."
+ exit 1
fi
# 依存パッケージをインストール
- msg_info "Install dependent packages..."
- local _force_aur="${force_aur}"
- force_aur=false
- install_package "${_depends}"
- force_aur="${_force_aur}"
- unset _force_aur
+ if [[ "${nodeps}" = false ]]; then
+ msg_info "Install dependent packages..."
+ local _force_aur="${force_aur}"
+ force_aur=false
+ install_package "${_depends}"
+ force_aur="${_force_aur}"
+ unset _force_aur
+ fi
# ビルド準備
# srcdirの確認
# ビルド
- add_args "${makepkg_command}" "-sf"
+ add_args "makepkg" "-sf"
(
cd "${_build_dir}"
"${makepkg_command}" "${makepkg_args}"
# ビルド後のパッケージ一覧を生成
(
cd "${_build_dir}"
- makepkg --printsrcinfo > "${_build_dir}/.SRCINFO"
+ "${makepkg_command}" --printsrcinfo > "${_build_dir}/.SRCINFO"
)
local _pkgnames=($(get_srcinfo_data "${_build_dir}/.SRCINFO" ".packages | keys[]" | sed 's/ //g'))
local _pkgver="$(get_srcinfo_data "${_build_dir}/.SRCINFO" ".pkgver" | sed 's/ //g')"
run_pacman -U --noconfirm ${_pkgfilelist[@]}
}
+# AURのパッケージを検索
+search_aur_package() {
+ local _package="${1}"
+ local _aur_json=$(curl -sL "https://aur.archlinux.org/rpc/?v=5&type=search&by=name-desc&arg=${_package}" | jq -r )
+ local _found_result_count="$(echo "${_aur_json}" | jq -r ".resultcount")"
+ if (( "${_found_result_count}" == 0 )); then
+ msg_error "Could not find all required packages:\n ${_package}"
+ exit 1
+ fi
+ _aur_json=$(echo "${_aur_json}" | jq -r ".results[]")
+
+ #echo ${_aur_json}
+
+ local _found_pkgname=($(echo "${_aur_json}" | jq -r ".Name" ))
+
+
+
+
+ local _found_package __pkgver __popularity __vote __pkgdesc
+ for _found_package in ${_found_pkgname[@]}; do
+ _found_json="$(echo ${_aur_json} | jq "select(.Name == \"${_found_package}\")")"
+ __pkgver="$(echo "${_found_json}" | jq -r ".Version" )"
+ __popularity="$(echo "${_found_json}" | jq -r ".Popularity" )"
+ __vote="$(echo "${_found_json}" | jq -r ".NumVotes" )"
+ __pkgdesc="$(echo "${_found_json}" | jq -r ".Description" )"
+
+ echo "aur/${_found_package} ${__pkgver} (+${__vote} ${__popularity})"
+ echo " ${__pkgdesc}"
+ unset __pkgver __popularity __vote __pkgdesc _found_json
+ done
+}
+
# バージョンを表示して終了
operation_version() {
# Pyalpmからlibalpmの値を取得
else
# AUR上のパッケージの場合の処理
install_aur_package "${_package}"
- #msg_error "Getting the AUR package has not been implemented yet." 1
+ #msg_error "Getting the AUR package has not been implemented yet.
+ #exit 1
fi
fi
done
operation_sync(){
local _package
- for _package in ${specified_packages[@]}; do
- if ! check_aur_package "${_package}" && [[ "${force_aur}" = false ]]; then
- # 公式パッケージなのでpacmanでそのままインストール
- run_pacman ${pacman_args} "${_package}"
- else
- # AUR上のパッケージの場合の処理
- install_aur_package "${_package}"
- #msg_error "Getting the AUR package has not been implemented yet." 1
- fi
- done
+ if [[ "${sync_search}" = true ]]; then
+ for _package in ${specified_packages[@]}; do
+ search_aur_package "${_package}"
+ done
+ "${pacman_command}" ${pacman_args} ${specified_packages[@]}
+ else
+ for _package in ${specified_packages[@]}; do
+ if ! check_aur_package "${_package}" && [[ "${force_aur}" = false ]]; then
+ # 公式パッケージなのでpacmanでそのままインストール
+ run_pacman ${pacman_args} "${_package}"
+ else
+ # AUR上のパッケージの場合の処理
+ install_aur_package "${_package}"
+ #msg_error "Getting the AUR package has not been implemented yet."
+ #exit 1
+ fi
+ done
+ fi
}
# Parse options
ARGUMENT="${@}"
-_opt_short="QRShVdb:a"
-_opt_long="query,remove,sync,help,version,debug,dbpath:,aururl,aur,noconfirm,config:,makepkg:,mflags:,pacman:,git:,gitflags:,gpg:,gpgflags:,makepkgconf:,nomakepkgconf"
+_opt_short="QRShVdb:ays"
+_opt_long="query,remove,sync,help,version,debug,dbpath:,aururl,aur,noconfirm,config:,makepkg:,mflags:,pacman:,git:,gitflags:,gpg:,gpgflags:,makepkgconf:,nomakepkgconf,nodeps,refresh,bash-debug,msg-debug"
OPT=$(getopt -o ${_opt_short} -l ${_opt_long} -- ${ARGUMENT})
[[ ${?} != 0 ]] && exit 1
msg_debug "Assume targets are from the AUR"
shift 1
;;
- -d | --debug)
+ --debug)
debug=true
add_args pacman "--debug"
shift 1
;;
+ -d | --nodeps)
+ nodeps=true
+ add_args pacman "--nodeps"
+ shift 1
+ ;;
-b | --dbpath)
add_args pacman "--dbpath '${2}'"
shift 2
;;
+ -y | --refresh)
+ option_y_count=$(( option_y_count + 1 ))
+ shift 1
+ ;;
+ -s | --search)
+ add_args pacman "--search"
+ sync_search=true
+ shift 1
+ ;;
--aururl)
aururl="${2}"
shift 2
makepkg_config="${2}"
else
msg_warn "--nomakepkgconf is specified.\n--makepkgconf has been ignored."
+ fi
shift 2
;;
--nomakepkgconf)
nomakepkgconf=true
shift 1
;;
+ --bash-debug)
+ bash_debug=true
+ set -xv
+ shift 1
+ ;;
+ --msg-debug)
+ msgdebug=true
+ shift 1
+ ;;
-h | --help)
usage
shift 1
specified_packages=(${@})
+# Run database update
+if (( "${option_y_count}" == 1 )); then
+ run_pacman -Sy
+elif (( "${option_y_count}" >= 2 )); then
+ run_pacman -Syy
+fi
+
case "${operation}" in
"version")
operation_version
exit 0
;;
*)
- msg_error "Undefined operation." 1
+ msg_error "Undefined operation"
+ exit 1
;;
esac