diff options
author | e5ten <e5ten.arch@gmail.com> | 2019-04-22 05:10:54 -0400 |
---|---|---|
committer | e5ten <e5ten.arch@gmail.com> | 2019-05-03 14:03:02 -0400 |
commit | 3b1d087991c8453d1ec9cf54b7927040ee8582cc (patch) | |
tree | 73c1cbf9528c0d84a1260b2274ce5ee924c5a965 | |
parent | c50a90dcbfb4d93329ad5d0ca3a5ad81bdcd7c61 (diff) |
remove unused function for array duplicates, assign variables with versioning wihout for loops
-rwxr-xr-x | pacaur | 273 |
1 files changed, 116 insertions, 157 deletions
@@ -33,8 +33,8 @@ usercachedir="${XDG_CACHE_HOME:-${HOME}/.cache}/pacaur" tmpdir="${XDG_RUNTIME_DIR:-/tmp}" # preserve environment variables -vars=('PACMAN' 'PKGDEST' 'SRCDEST' 'SRCPKGDEST' 'LOGDEST' 'BUILDDIR' 'PKGEXT' 'SRCEXT' 'GPGKEY' - 'PACKAGER' 'CARCH') +vars=('PACMAN' 'PKGDEST' 'SRCDEST' 'SRCPKGDEST' 'LOGDEST' 'BUILDDIR' 'PKGEXT' 'SRCEXT' + 'GPGKEY' 'PACKAGER' 'CARCH') for i in "${vars[@]}"; do [[ "${!i}" ]] && declare _"$i"="${!i}" done @@ -66,14 +66,14 @@ sudoloop=true # prevent sudo timeout # set variables pacmanbin="${PACMAN:-pacman}" # pacman binary -clonedir="${AURDEST:-$usercachedir}" # clone directory +clonedir="${AURDEST:-${usercachedir:?}}" # clone directory # source xdg config [[ -r "$configdir/config" ]] && source "$configdir/config" [[ -r "$userconfigdir/config" ]] && source "$userconfigdir/config" # set up directories -[[ ! -d "$clonedir" ]] && install -dm700 "$clonedir" +[[ -d "$clonedir" ]] || install -dm700 "$clonedir" # source makepkg libraries source /usr/share/makepkg/util/parseopts.sh @@ -88,7 +88,7 @@ if ! type -p gettext >/dev/null; then fi # define vcs packages -vcs="-(cvs|svn|git|hg|bzr|darcs|daily.*|nightly.*)$" +vcs='-(cvs|svn|git|hg|bzr|darcs|daily.*|nightly.*)$' # # Functions @@ -111,10 +111,12 @@ ClassifyPkgs() { noaurpkgs+=("$i") done [[ "${noaurpkgs[*]}" ]] && - norepopkgs=($(LC_ALL=C "$pacmanbin" -Sp -- "${noaurpkgs[@]}" 2>&1 >/dev/null | - awk '{print $NF}')) + mapfile -t norepopkgs <<< "$(expac -Sv '' -- "${noaurpkgs[@]}" 2>&1 >/dev/null)" && + norepopkgs=("${norepopkgs[@]#error: package \`}") && + norepopkgs=("${norepopkgs[@]%\' not found}") for i in "${norepopkgs[@]}"; do - [[ ! " ${noaurpkgs[*]} " =~ [a-zA-Z0-9\.\+-]+\/"$i"[^a-zA-Z0-9\.\+-] ]] && + # do not search repo/pkgs in AUR + [[ " ${noaurpkgs[*]} " =~ [a-zA-Z0-9\.\+-]+\/"$i"[^a-zA-Z0-9\.\+-] ]] || aurpkgs+=("$i") # do not search repo/pkgs in AUR done repopkgs=($(DiffArr 'aurpkgs' 'noaurpkgs' -v)) @@ -138,18 +140,12 @@ Core() { } UpgradeAur() { - local foreignpkgs allaurpkgs allaurpkgsAver allaurpkgsQver aurforeignpkgs i json + local foreignpkgs allaurpkgs aurforeignpkgs i json # global aurpkgs Note "i" $"${colorW}Starting AUR upgrade...${reset}" foreignpkgs=($("$pacmanbin" -Qmq)) SetJson "${foreignpkgs[@]}" allaurpkgs=($(GetJson "$json" "Name")) - allaurpkgsAver=($(GetJson "$json" "Version")) - allaurpkgsQver=($(expac -Q '%v' "${allaurpkgs[@]}")) - for i in "${!allaurpkgs[@]}"; do - [[ "$(vercmp "${allaurpkgsAver[$i]}" "${allaurpkgsQver[$i]}")" -gt 0 ]] && - aurpkgs+=("${allaurpkgs[$i]}"); - done # foreign packages check aurforeignpkgs=($(DiffArr 'allaurpkgs' 'foreignpkgs' -v)) @@ -157,14 +153,18 @@ UpgradeAur() { Note "w" $"${colorW}$i${reset} is ${colorY}not present${reset} in AUR -- skipping" done + # use auracle to find out of date AUR packages + mapfile -t aurpkgs <<< "$(auracle sync -q)" + # add devel packages if [[ "$devel" ]]; then for i in "${allaurpkgs[@]}"; do - [[ "$i" =~ $vcs ]] && aurpkgs+=("$i") + [[ "$i" =~ $vcs && ! " ${aurpkgs[*]} " =~ " $i " ]] && aurpkgs+=("$i") done fi # avoid possible duplicate + # TODO: unnecessary now that devel packages are only added if they aren't already there? aurpkgs=($(printf '%s\n' "${aurpkgs[@]}" | sort -u)) NothingToDo "${aurpkgs[@]}" @@ -173,12 +173,10 @@ UpgradeAur() { IgnoreChecks() { local checkaurpkgs checkaurpkgsAver checkaurpkgsQver checkaurpkgsgrp i json # global aurpkgs rmaurpkgs - [[ ! "${ignoredpkgs[*]}" && ! "${ignoredgrps[*]}" ]] && return + [[ "${ignoredpkgs[*]}" || "${ignoredgrps[*]}" ]] || return # remove AUR pkgs versioning - for i in "${!aurpkgs[@]}"; do - aurpkgsnover[$i]="${aurpkgs[$i]%%[><=]*}" - done + aurpkgsnover=("${aurpkgs[@]%%[><=]*}") # check targets SetJson "${aurpkgsnover[@]}" @@ -238,9 +236,7 @@ DepsSolver() { Note "i" $"resolving dependencies..." # remove AUR pkgs versioning - for i in "${!aurpkgs[@]}"; do - aurpkgsnover[$i]="${aurpkgs[$i]%%[><=]*}" - done + aurpkgsnover=("${aurpkgs[@]%%[><=]*}") # set unversioned json SetJson "${aurpkgsnover[@]}" @@ -248,22 +244,16 @@ DepsSolver() { # set targets providers aurpkgsproviders=("${aurpkgsnover[@]}") aurpkgsproviders+=($(GetJson "$json" "Provides")) - for i in "${!aurpkgsproviders[@]}"; do - aurpkgsproviders[$i]="${aurpkgsproviders[$i]%%[><=]*}" - done + aurpkgsproviders=("${aurpkgsproviders[@]%%[><=]*}") # check targets conflicts aurpkgsconflicts=($(GetJson "$json" "Conflicts")) if [[ "${aurpkgsconflicts[*]}" ]]; then - for i in "${!aurpkgsconflicts[@]}"; do - aurpkgsconflicts[$i]="${aurpkgsconflicts[$i]%%[><=]*}" - done - + aurpkgsconflicts=("${aurpkgsconflicts[@]%%[><=]*}") aurpkgsconflicts=($(DiffArr 'aurpkgsproviders' 'aurpkgsconflicts')) - aurpkgsconflicts=($(printf '%s\n' "${aurpkgsconflicts[@]}" | sort -u)) - + aurpkgsconflicts=($(sort -u <<< "$(printf '%s\n' "${aurpkgsconflicts[@]}")")) for i in "${aurpkgsconflicts[@]}"; do - [[ ! " ${aurpkgsnover[*]} " =~ " $i " ]] && continue + [[ " ${aurpkgsnover[*]} " =~ " $i " ]] || continue [[ " $(GetJson "$json" "Conflicts" "$i") " =~ " $i " ]] && continue Note "f" $"unresolvable package conflicts detected" Note "e" $"failed to prepare transaction (conflicting dependencies: $i)" @@ -272,7 +262,7 @@ DepsSolver() { deps=("${aurpkgsnover[@]}") - [[ ! "${foreignpkgs[*]}" ]] && foreignpkgs=($("$pacmanbin" -Qmq)) + [[ "${foreignpkgs[*]}" ]] || foreignpkgs=($("$pacmanbin" -Qmq)) FindDepsAur "${aurpkgsnover[@]}" # avoid possible duplicate @@ -305,7 +295,7 @@ DepsSolver() { # find relevant tsorted deps chain for j in "${deps[@]}"; do tsorterrdeps+=("$j") - [[ " $j " = " ${errdepsnover[$i]} " ]] && break + [[ "$j" = "${errdepsnover[$i]}" ]] && break done # reverse deps order tsorterrdeps=($(awk '{for (i=NF;i>=1;i--) print $i}' <<< "${tsorterrdeps[@]}" | @@ -335,12 +325,12 @@ FindDepsAur() { # set json unset aurversionpkgs - if [[ ! "${depspkgsaur[*]}" ]]; then - SetJson "${aurpkgsnover[@]}" - aurversionpkgs=("${aurpkgs[@]}") - else + if [[ "${depspkgsaur[*]}" ]]; then SetJson "${depspkgsaur[@]}" aurversionpkgs=("${prevdepspkgsaur[@]}") + else + SetJson "${aurpkgsnover[@]}" + aurversionpkgs=("${aurpkgs[@]}") fi # versioning check @@ -366,9 +356,8 @@ FindDepsAur() { *"<"*) [[ "$aurversionpkgsverdiff" -lt 0 ]] && continue;; *"="*) [[ "$aurversionpkgsverdiff" -eq 0 ]] && continue;; esac - [[ ! " ${errdeps[*]} " =~ " ${aurversionpkgs[$i]} " ]] && - errdeps+=("${aurversionpkgs[$i]}") - ;; + [[ " ${errdeps[*]} " =~ " ${aurversionpkgs[$i]} " ]] || + errdeps+=("${aurversionpkgs[$i]}");; *) continue;; esac done @@ -399,7 +388,7 @@ FindDepsAur() { [[ "${aurpkgsproviders[*]}" ]] && depspkgs=($(DiffArr 'aurpkgsproviders' 'depspkgs' -v)) # workaround for limited RPC support of architecture dependent fields - if [[ "${CARCH}" == 'i686' ]]; then + if [[ "${CARCH}" = 'i686' ]]; then depspkgstmp=("${depspkgs[@]}") for i in "${!depspkgstmp[@]}"; do [[ "${depspkgstmp[$i]}" =~ ^(lib32-|gcc-multilib) ]] && @@ -425,22 +414,19 @@ FindDepsAur() { fi done # reorder devel - if [[ "$devel" ]]; then - depspkgs=($("$pacmanbin" -T -- "${depspkgs[@]}" | sort -u)) - depspkgstmp=($(DiffArr 'depspkgs' 'vcsdepspkgs' -v)) - depspkgstmp+=($(DiffArr 'vcsdepspkgs' 'depspkgs' -v)) - depspkgs=($(printf '%s\n' "${depspkgstmp[@]}" | sort -u)) - fi + # TODO: this can probably be replaced by deptesting {,vcs}depspkgs and sorting at once + depspkgs=($("$pacmanbin" -T -- "${depspkgs[@]}" | sort -u)) + depspkgstmp=($(DiffArr 'depspkgs' 'vcsdepspkgs' -v)) + depspkgstmp+=($(DiffArr 'vcsdepspkgs' 'depspkgs' -v)) + depspkgs=($(printf '%s\n' "${depspkgstmp[@]}" | sort -u)) fi - # split binary and AUR depends pkgs + # split repo and AUR depends pkgs unset depspkgsaur if [[ "${depspkgs[*]}" ]]; then # remove all pkgs versioning if [[ "$nodeps" && "$dcount" -eq 1 ]]; then - for i in "${!depspkgs[@]}"; do - depspkgs[$i]="${depspkgs[$i]%%[><=]*}" - done + depspkgs=("${depspkgs[@]%%[><=]*}") # assume installed deps elif [[ "${assumeinstalled[*]}" ]]; then # remove versioning @@ -455,7 +441,9 @@ FindDepsAur() { depspkgs=($(DiffArr 'assumeinstalled' 'depspkgs' -v)) fi if [[ "${depspkgs[*]}" ]]; then - depspkgsaur=($(LC_ALL=C "$pacmanbin" -Sp -- "${depspkgs[@]}" 2>&1 >/dev/null | awk '{print $NF}')) + mapfile -t depspkgsaur <<< "$(expac -Sv '' -- "${depspkgs[@]}" 2>&1)" && + depspkgsaur=("${depspkgsaur[@]#error: package \`}") && + depspkgsaur=("${depspkgsaur[@]%\' not found}") repodeps+=($(DiffArr 'depspkgsaur' 'depspkgs' -v)) fi fi @@ -465,20 +453,15 @@ FindDepsAur() { [[ "${depspkgsaur[*]}" ]] && depspkgsaur=($(DiffArr 'aurdepspkgs' 'depspkgsaur' -v)) # dependency cycle check - [[ "${prevdepspkgsaur[*]}" ]] && [[ "${prevdepspkgsaur[*]}" = "${depspkgsaur[*]}" ]] && + [[ "${prevdepspkgsaur[*]}" && "${prevdepspkgsaur[*]}" = "${depspkgsaur[*]}" ]] && Note "e" $"dependency cycle detected (${depspkgsaur[*]})" if [[ "${depspkgsaur[*]}" ]]; then # store for AUR version check - [[ ! "$nodeps" ]] && prevdepspkgsaur=("${depspkgsaur[@]}") + [[ "$nodeps" ]] || prevdepspkgsaur=("${depspkgsaur[@]}") - # remove AUR pkgs versioning - for i in "${!depspkgsaur[@]}"; do - depspkgsaur[$i]="${depspkgsaur[$i]%%[><=]*}" - done - - # remove duplicate - depspkgsaur=($(printf '%s\n' "${depspkgsaur[@]}" | sort -u)) + # remove duplicates and versioning + depspkgsaur=($(printf '%s\n' "${depspkgsaur[@]%%[><=]*}" | sort -u)) fi [[ "${depspkgsaur[*]}" ]] && aurdepspkgs+=("${depspkgsaur[@]}") && @@ -497,16 +480,14 @@ SortDepsAur() { sortdepspkgs+=($(GetJson "$json" "Depends" "${sortaurpkgs[$i]}")) sortdepspkgs+=($(GetJson "$json" "MakeDepends" "${sortaurpkgs[$i]}")) - [[ "$checkdeps" ]] && depspkgs+=($(GetJson "$json" "CheckDepends")) + [[ "$checkdeps" ]] && sortdepspkgs+=($(GetJson "$json" "CheckDepends")) # remove versioning - for j in "${!errdeps[@]}"; do - errdepsnover[$j]="${errdeps[$j]%%[><=]*}" - done + errdepsnover=("${errdeps[@]%%[><=]*}") # check AUR deps only + sortdepspkgs=("${sortdepspkgs[@]%%[><=]*}") for j in "${!sortdepspkgs[@]}"; do - sortdepspkgs[$j]="${sortdepspkgs[$j]%%[><=]*}" sortdepspkgsaur+=($(GetJson "$json" "Name" "${sortdepspkgs[$j]}")) # add erroneous AUR deps [[ " ${errdepsnover[*]} " =~ " ${sortdepspkgs[$j]} " ]] && @@ -541,20 +522,18 @@ FindDepsAurError() { # global errdepsnover errdepslist tsorterrdeps currenterrdep for i in "${tsorterrdeps[@]}"; do - [[ ! " ${errdepsnover[*]} " =~ " $i " && ! " ${errdepslist[*]} " =~ " $i " ]] && + [[ " ${errdepsnover[*]} " =~ " $i " || " ${errdepslist[*]} " =~ " $i " ]] || nexterrdep="$i" && break done - [[ ! "${currenterrdep[*]}" ]] && currenterrdep="${tsorterrdeps[0]}" + [[ "${currenterrdep[*]}" ]] || currenterrdep="${tsorterrdeps[0]}" if [[ ! " ${aurpkgs[*]} " =~ " $nexterrdep " ]]; then nextallerrdeps=($(GetJson "$json" "Depends" "$nexterrdep")) nextallerrdeps+=($(GetJson "$json" "MakeDepends" "$nexterrdep")) - [[ "$checkdeps" ]] && depspkgs+=($(GetJson "$json" "CheckDepends")) + [[ "$checkdeps" ]] && nextallerrdeps+=($(GetJson "$json" "CheckDepends")) # remove versioning - for i in "${!nextallerrdeps[@]}"; do - nextallerrdeps[$i]="${nextallerrdeps[$i]%%[><=]*}" - done + nextallerrdeps=("${nextallerrdeps[@]%%[><=]*}") [[ " ${nextallerrdeps[*]} " =~ " $currenterrdep " ]] && errdepslist+=("$nexterrdep") && currenterrdep="${tsorterrdeps[0]}" @@ -564,12 +543,10 @@ FindDepsAurError() { for i in "${!aurpkgs[@]}"; do nextallerrdeps=($(GetJson "$json" "Depends" "${aurpkgs[$i]}")) nextallerrdeps+=($(GetJson "$json" "MakeDepends" "${aurpkgs[$i]}")) - [[ "$checkdeps" ]] && depspkgs+=($(GetJson "$json" "CheckDepends")) + [[ "$checkdeps" ]] && nextallerrdeps+=($(GetJson "$json" "CheckDepends")) # remove versioning - for j in "${!nextallerrdeps[@]}"; do - nextallerrdeps[$j]="${nextallerrdeps[$j]%%[><=]*}" - done + nextallerrdeps=("${nextallerrdeps[@]%%[><=]*}") [[ " ${nextallerrdeps[*]} " =~ " $currenterrdep " ]] && errdepslist+=("${aurpkgs[$i]}") done @@ -579,17 +556,17 @@ FindDepsAurError() { FindDepsRepo() { local allrepodepspkgs repodepspkgstmp # global repodeps repodepspkgs - [[ ! "${repodeps[*]}" ]] && return + [[ "${repodeps[*]}" ]] || return # reduce root binary deps - repodeps=($(printf '%s\n' "${repodeps[@]}" | sort -u)) + repodeps=($(sort -u <<< "$(printf '%s\n' "${repodeps[@]}")")) # add initial repodeps - [[ ! "${repodepspkgs[*]}" ]] && repodepspkgs=("${repodeps[@]}") + [[ "${repodepspkgs[*]}" ]] || repodepspkgs=("${repodeps[@]}") - # get non installed repo deps + # get non installed binary deps unset allrepodepspkgs repodepspkgstmp - # no version check needed as all deps are binary + # no version check needed as all deps are repo deps [[ "${repodeps[*]}" ]] && allrepodepspkgs=($(expac -S1 '%E' "${repodeps[@]}")) [[ "${allrepodepspkgs[*]}" ]] && repodepspkgstmp=($("$pacmanbin" -T -- "${allrepodepspkgs[@]}" | sort -u)) @@ -605,7 +582,7 @@ FindDepsRepo() { FindDepsRepoProvider() { local allrepodepspkgs providerrepodepspkgstmp # global repodeps repodepspkgs - [[ ! "${providerspkgs[*]}" ]] && return + [[ "${providerspkgs[*]}" ]] || return # reduce root binary deps providerspkgs=($(printf '%s\n' "${providerspkgs[@]}" | sort -u)) @@ -742,8 +719,8 @@ ProviderChecks() { # skip if provided in dependency chain unset repodepspkgsprovided - for j in "${!providers[@]}"; do - [[ " ${repodepspkgs[*]} " =~ " ${providers[$j]} " ]] && repodepspkgsprovided='true' + for j in "${providers[@]}"; do + [[ " ${repodepspkgs[*]} " =~ " $j " ]] && repodepspkgsprovided='true' done [[ "$repodepspkgsprovided" ]] && continue @@ -767,15 +744,15 @@ ProviderChecks() { read -r nb ;; *) - read -r -n "$(echo -n "$providersnb" | wc -m)" nb - echo + read -r -n "$(printf '%s' "$providersnb" | wc -m)" nb + printf '\n' ;; esac case "$nb" in [0-9]|[0-9][0-9]) if [[ "$nb" -lt 0 || "$nb" -ge "${#providers[@]}" ]]; then - echo + printf '\n' Note "f" $"invalid value: $nb is not between 0 and $providersnb" ((i--)) else @@ -810,7 +787,7 @@ ProviderChecks() { ConflictChecks() { local allQprovides allQconflicts Aprovides Aconflicts aurconflicts aurAconflicts Qrequires i j - local k repodepsprovides repodepsconflicts checkedrepodepsconflicts repodepsconflictsname + local k l repodepsprovides repodepsconflicts checkedrepodepsconflicts repodepsconflictsname local repodepsconflictsver localver repoconflictingpkgs # global deps depsAname json aurdepspkgs aurconflictingpkgs aurconflictingpkgsrm depsQver # global repodepspkgs repoconflictingpkgsrm repoprovidersconflictingpkgs @@ -825,12 +802,8 @@ ConflictChecks() { Aprovides+=($(GetJson "$json" "Provides")) Aconflicts=($(GetJson "$json" "Conflicts")) # remove AUR versioning - for i in "${!Aprovides[@]}"; do - Aprovides[$i]="${Aprovides[$i]%%[><=]*}" - done - for i in "${!Aconflicts[@]}"; do - Aconflicts[$i]="${Aconflicts[$i]%%[><=]*}" - done + Aprovides=("${Aprovides[@]%%[><=]*}") + Aconflicts=("${Aconflicts[@]%%[><=]*}") aurconflicts=($(DiffArr 'Aprovides' 'allQconflicts')) aurconflicts+=($(DiffArr 'Aconflicts' 'allQprovides')) aurconflicts=($(printf '%s\n' "${aurconflicts[@]}" | sort -u)) @@ -845,8 +818,7 @@ ConflictChecks() { for j in "${aurAconflicts[@]}"; do unset k Aprovides read -rd' ' <<< "$(expac -Qs '%n %P' "^$i$")" k - [[ ! "$installpkg" && ! " ${aurdepspkgs[*]} " =~ " $j " ]] && continue - # skip if downloading only + [[ ! "$installpkg" && ! " ${aurdepspkgs[*]} " =~ " $j " ]] && continue # download only [[ "$j" = "$k" || ! "$k" ]] && continue # skip if reinstalling or if no conflict exists Aprovides=("$j") @@ -860,9 +832,7 @@ ConflictChecks() { done Aprovides+=($(GetJson "$json" "Provides" "$j")) # remove AUR versioning - for l in "${!Aprovides[@]}"; do - Aprovides[$l]="${Aprovides[$l]%%[><=]*}" - done + Aprovides=("${Aprovides[@]%%[><=]*}") [[ ! " ${Aprovides[*]} ${aurconflictingpkgsrm[*]} " =~ " $k " ]] && CheckRequires "$k" break @@ -879,9 +849,7 @@ ConflictChecks() { fi Aprovides+=($(GetJson "$json" "Provides" "$j")) # remove AUR versioning - for l in "${!Aprovides[@]}"; do - Aprovides[$l]="${Aprovides[$l]%%[><=]*}" - done + Aprovides=("${Aprovides[@]%%[><=]*}") [[ ! " ${Aprovides[*]} ${aurconflictingpkgsrm[*]} " =~ " $k " ]] && CheckRequires "$k" done done @@ -900,8 +868,8 @@ ConflictChecks() { unset repodepsconflictsname repodepsconflictsver localver repodepsconflictsname="${repodepsconflicts[$i]%%[><=]*}" repodepsconflictsver="${repodepsconflicts[$i]##*[><=]}" - [[ "$repodepsconflictsname" ]] && localver="$(expac -Q '%v' "$repodepsconflictsname")" - repodepsconflictsverdiff="$(vercmp "$repodepsconflictsver" "$localver")" + local localver="$(expac -Q '%v' "$repodepsconflictsname")" + local repodepsconflictsverdiff="$(vercmp "$repodepsconflictsver" "$localver")" if [[ "$localver" ]]; then case "${repodepsconflicts[$i]}" in @@ -917,7 +885,7 @@ ConflictChecks() { repoconflicts+=($(DiffArr 'repodepsprovides' 'allQconflicts')) repoconflicts+=($(DiffArr 'checkedrepodepsconflicts' 'allQprovides')) - repoconflicts=($(printf '%s\n' "${repoconflicts[@]}" | sort -u)) + repoconflicts=($(sort -u <<< "$(printf '%s\n' "${repoconflicts[@]}")")) fi for i in "${repoconflicts[@]}"; do @@ -1067,14 +1035,15 @@ Prompt() { fi if [[ "${repodepspkgs[*]}" ]]; then - strrepodlsize=$"Repo Download Size:"; strrepoinsize=$"Repo Installed Size:"; strsumk=$"$sumk MiB"; strsumm=$"$summ MiB" + strrepodlsize=$"Repo Download Size:"; strrepoinsize=$"Repo Installed Size:" + strsumk=$"$sumk MiB"; strsumm=$"$summ MiB" lreposizelabel="$(GetLength "$strrepodlsize" "$strrepoinsize")" lreposize="$(GetLength "$strsumk" "$strsumm")" printf "\n${colorW}%-${lreposizelabel}s${reset} %${lreposize}s\n" "$strrepodlsize" "$strsumk" printf "${colorW}%-${lreposizelabel}s${reset} %${lreposize}s\n" "$strrepoinsize" "$strsumm" fi - echo + printf '\n' if [[ "$installpkg" ]]; then Proceed "y" $"Proceed with installation?" || exit else @@ -1188,8 +1157,8 @@ EditPkgs() { } MakePkgs() { - local i j oldorphanpkgs neworphanpkgs orphanpkgs oldoptionalpkgs newoptionalpkgs optionalpkgs - local errinstall pkgsdepslist vcsclients vcschecked list aurdevelpkgsAver aurdevelpkgsQver + local i j k oldorphanpkgs neworphanpkgs orphanpkgs oldoptionalpkgs newoptionalpkgs optionalpkgs + local errinstall pkgsdepslist vcsclients vcschecked aurdevelpkgsAver aurdevelpkgsQver local builtpkgs builtdepspkgs basepkgsupdate checkpkgsdepslist isaurdeps makedeps # global deps basepkgs sudoloop pkgsbase pkgsdeps aurpkgs aurdepspkgs builtpkg errmakepkg json # global repoprovidersconflictingpkgs @@ -1211,8 +1180,8 @@ MakePkgs() { # split packages support for i in "${!pkgsbase[@]}"; do for j in "${!deps[@]}"; do - [[ "${pkgsbase[$i]}" = "${pkgsbase[$j]}" ]] && - [[ ! " ${pkgsdeps[*]} " =~ " ${deps[$j]} " ]] && pkgsdeps+=("${deps[$j]}") + [[ "${pkgsbase[$i]}" = "${pkgsbase[$j]}" && ! " ${pkgsdeps[*]} " =~ " ${deps[$j]} " ]] && + pkgsdeps+=("${deps[$j]}") done pkgsdeps+=("#") done @@ -1247,7 +1216,7 @@ MakePkgs() { unset makedeps for j in "${vcsclients[@]}"; do if [[ ! "${vcschecked[*]}" =~ "$j" ]]; then - expac -Qs '' "^$j$" || sudo "$pacmanbin" -S "$j" --asdeps --noconfirm + expac -Qs '' "^$j$" || sudo "$pacmanbin" -S --asdeps --noconfirm -- "$j" vcschecked+=("$j") fi done @@ -1299,19 +1268,15 @@ MakePkgs() { pkgsdepslist=($(awk -F "," '{for (k=1;k<=NF;k++) print $k}' <<< "${pkgsdeps[$i]}")) cd "$clonedir/${basepkgs[$i]}" || exit 1 - # retrieve updated version - unset list && mapfile -t -d'-' list <<< "$(makepkg --packagelist)" - # map packagelist output to array 'list', using the -es from the file name as delimiters - # then we can take the version as the 3rd element from the end, the first being arch and - # pkgext, and the second being pkgrel - aurdevelpkgsAver="${list[(("${#list[@]}"-3))]}" + mapfile -t -d'-' k <<< "$(makepkg --packagelist)" && aurdevelpkgsAver="${k[1]}-${k[2]}" + unset k # build devel if necessary only (supported protocols only) if [[ "${basepkgs[$i]}" =~ $vcs ]]; then # check split packages update unset basepkgsupdate checkpkgsdepslist for j in "${pkgsdepslist[@]}"; do - read -rd' ' <<< "$(expac -Qs '%v' "^$j$")" aurdevelpkgsQver + read -rd' ' <<< "$(expac -Qs '%v' "^$j$")" aurdevelpkgsQver if [[ "$needed" && ! "$rebuild" && "$aurdevelpkgsQver" ]] && [[ "$(vercmp "$aurdevelpkgsQver" "$aurdevelpkgsAver")" -ge 0 ]]; then Note "w" $"${colorW}$j${reset} is up-to-date -- skipping" && continue @@ -1330,8 +1295,8 @@ MakePkgs() { if [[ "$builtpkg" ]]; then if [[ " ${aurdepspkgs[*]} " =~ " $j " || "$installpkg" ]]; then Note "i" $"Installing ${colorW}$j${reset} cached package..." - sudo "$pacmanbin" -U "$builtpkg" --ask 36 "${pacopts[@]/--quiet}" --noconfirm - [[ ! " ${aurpkgs[*]} " =~ " $j " ]] && + sudo "$pacmanbin" -U --ask 36 "${pacopts[@]/--quiet}" --noconfirm -- "$builtpkg" + [[ " ${aurpkgs[*]} " =~ " $j " ]] || sudo "$pacmanbin" -D "$j" --asdeps "${pacopts[@]}" &>/dev/null else Note "w" $"Package ${colorW}$j${reset} already available in cache" @@ -1378,9 +1343,9 @@ MakePkgs() { done # install - if [[ $installpkg || ! "${builtpkgs[*]}" ]]; then + if [[ "$installpkg" || ! "${builtpkgs[*]}" ]]; then Note "i" $"Installing ${colorW}${pkgsdeps[$i]}${reset} package(s)..." - sudo "$pacmanbin" -U "${builtdepspkgs[@]}" "${builtpkgs[@]}" --ask 36 "${pacopts[@]/--quiet}" --noconfirm + sudo "$pacmanbin" -U --ask 36 "${pacopts[@]/--quiet}" --noconfirm -- "${builtdepspkgs[@]}" "${builtpkgs[@]}" fi # set dep status @@ -1432,7 +1397,7 @@ MakePkgs() { } CheckUpdates() { - local i json foreignpkgs foreignpkgsbase aurpkgsQood aurpkgsAname aurpkgsAver aurpkgsQver + local i j json foreignpkgs foreignpkgsbase aurpkgsQood aurpkgsAname aurpkgsAver aurpkgsQver local aurpkgsQignore aurdevelpkgsAver aurdevelpkgsQver aurpkgsQoodAver # global aur repo @@ -1457,7 +1422,7 @@ CheckUpdates() { if [[ "$devel" ]]; then if [[ ! "$needed" ]]; then for i in "${foreignpkgs[@]}"; do - [[ "$i" =~ $vcs ]]&& aurpkgsQood+=("$i") + [[ "$i" =~ $vcs ]] && aurpkgsQood+=("$i") done else foreignpkgsbase=($(expac -Q '%n %e' "${foreignpkgs[@]}" | @@ -1471,15 +1436,12 @@ CheckUpdates() { # silent extraction and pkgver update only makepkg -od --noprepare --skipinteg &>/dev/null # retrieve updated version - aurdevelpkgsAver="$(makepkg --packagelist | - awk -F "-" '{print $(NF-2)"-"$(NF-1)}' | head -1)" + mapfile -t -d'-' j <<< "$(makepkg --packagelist)" + aurdevelpkgsAver="${j[1]}-${j[2]}" && unset j read -rd' ' <<< "$(expac -Qs '%v' "^${foreignpkgsbase[$i]}$")" aurdevelpkgsQver - if [[ "$(vercmp "$aurdevelpkgsQver" "$aurdevelpkgsAver")" -ge 0 ]]; then - continue - else - aurpkgsQood+=("${foreignpkgsnobase[$i]}") + [[ "$(vercmp "$aurdevelpkgsQver" "$aurdevelpkgsAver")" -ge 0 ]] || + aurpkgsQood+=("${foreignpkgsnobase[$i]}") && aurpkgsQoodAver+=("$aurdevelpkgsAver") - fi fi done fi @@ -1524,7 +1486,7 @@ CleanCache() { if [[ "$ccount" -eq 1 ]]; then if Proceed "y" $"Do you want to remove all other packages from AUR cache?"; then printf "%s\n" $"removing old packages from cache..." - for i in $(ls "$PKGDEST" | sed "s%\(.*\)-.*%\1%g"); do + for i in $(basename -a "$PKGDEST"/* | sed "s%\(.*\)-.*%\1%g"); do pkgname="$(sed "s%\(.*\)-.*-.*%\1%g" <<< "$i")" [[ "$i" != "$(expac -Q '%n-%v' "$pkgname")" ]] && rm "${PKGDEST:?}/$i"-* done @@ -1564,7 +1526,7 @@ CleanCache() { awk '{if ($2 == "(null)") print $1; else print $2}')) # get target if [[ "${pkgs[*]}" ]]; then - pkgsbase=($(expac -Q %e "${pkgs[@]}")) + pkgsbase=($(expac -Q '%e' "${pkgs[@]}")) aurpkgsbase=($(DiffArr 'pkgsbase' 'foreignpkgsbase')) if Proceed "y" $"Do you want to remove ${aurpkgsbase[*]} clones from AUR clone directory?"; then printf "%s\n\n" $"removing uninstalled clones from AUR clone cache..." @@ -1629,8 +1591,8 @@ GetBuiltPkg() { # check PKGEXT suffixe first, then default .xz suffix for repository packages in pacman cache # and lastly all remaining suffixes in case PKGEXT is locally overridden for ext in "$PKGEXT" .pkg.tar{.xz,,.gz,.bz2,.lzo,.lrz,.Z}; do - builtpkg="$2/$1-${CARCH}$ext" - [[ ! -f "$builtpkg" ]] && builtpkg="$2/$1-any$ext" + builtpkg="$2/$1-${CARCH}${ext}" + [[ ! -f "$builtpkg" ]] && builtpkg="$2/$1-any${ext}" [[ -f "$builtpkg" ]] && break done [[ ! -f "$builtpkg" ]] && unset builtpkg @@ -1644,8 +1606,7 @@ GetPkgbase() { pkgsbase+=($(GetJson "$json" "PackageBase" "$i")) done for i in "${pkgsbase[@]}"; do - [[ " ${basepkgs[*]} " =~ " $i " ]] && continue - basepkgs+=("$i") + [[ " ${basepkgs[*]} " =~ " $i " ]] || basepkgs+=("$i") done } @@ -1655,9 +1616,7 @@ SetJson() { json="{}" else # global json - if [[ ! "${jsoncache[$@]}" ]]; then - jsoncache[$@]="$(auracle rawinfo -- "$@")" - fi + [[ "${jsoncache[$@]}" ]] || jsoncache[$@]="$(auracle rawinfo -- "$@")" json="${jsoncache[$@]}" fi } @@ -1684,7 +1643,7 @@ Proceed() { [[ "$TERM" = dumb || "$cleancache" ]] && local readline=1 case "$1" in y) printf "${colorB}%s${reset} ${colorW}%s${reset}" "::" "$2 [Y/n] " - [[ "$noconfirm" ]] && echo && return 0 + [[ "$noconfirm" ]] && printf '\n' && return 0 while true; do if [[ "$readline" ]]; then read -r answer @@ -1698,7 +1657,7 @@ Proceed() { esac done;; n) printf "${colorB}%s${reset} ${colorW}%s${reset}" "::" "$2 [y/N] " - [[ "$noconfirm" ]] && echo && return 0 + [[ "$noconfirm" ]] && printf '\n' && return 0 while true; do if [[ "$readline" ]]; then read -r answer @@ -1712,16 +1671,16 @@ Proceed() { esac done;; esac - [[ ! "$readline" ]] && echo "$answer" + [[ ! "$readline" ]] && printf '%s\n' "$answer" return "$ret" } Note() { case "$1" in - i) echo -e "${colorB}::${reset} $2";; # info - w) echo -e "${colorY}warning:${reset} $2" >&2;; # warn - f) echo -e "${colorR}error:${reset} $2" >&2;; # fail - e) echo -e "${colorR}error:${reset} $2" >&2; # error + i) printf '%b\n' "${colorB}::${reset} $2";; # info + w) printf '%b\n' "${colorY}warning:${reset} $2" >&2;; # warn + f) printf '%b\n' "${colorR}error:${reset} $2" >&2;; # fail + e) printf '%b\n' "${colorR}error:${reset} $2" >&2; # error exit 1;; esac } @@ -1732,11 +1691,11 @@ GetLength() { x="${#i}" [[ "$x" -gt "$length" ]] && length="$x" done - echo "$length" + printf '%s\n' "$length" } NothingToDo() { - [[ ! "$*" ]] && printf "%s\n" $" there is nothing to do" && exit || return 0 + [[ ! "$*" ]] && printf '%s\n' $" there is nothing to do" && exit || return 0 } SudoV() { @@ -1755,7 +1714,7 @@ DiffArr() { trap Cancel INT Cancel() { - echo + printf '\n' rm -f "${tmpdir:?}"/pacaur.{build,sudov}.lck exit } @@ -1846,7 +1805,7 @@ while true; do --silent) silent=true; pacopts+=("--quiet"); auropts+=("--quiet") makeopts+=("--log");; -y|--refresh) refresh=1;; -h|--help) unset operation; (("$pac"==0)) && Usage;; - -v|--version) [[ "$pac" -eq 0 || "$1" = --version ]] && echo "pacaur $version" && exit 0;; + -v|--version) [[ "$pac" -eq 0 || "$1" = --version ]] && printf '%s\n' "pacaur $version" && exit 0;; --) shift; break;; esac shift @@ -1875,16 +1834,16 @@ fi # sanity check [[ "$aur" ]] && unset refresh [[ "$pacS" && "$cleancache" ]] && unset search info upgrade -(("$pac">1)) && Note "e" $"only one operation may be used at a time" +[[ "$pac" -gt 1 ]] && Note "e" $"only one operation may be used at a time" [[ "$operation" = sync && ! "$search" && ! "$info" && ! "$cleancache" && "$EUID" -eq 0 ]] && Note "e" $"you cannot perform this operation as root" [[ "$pacS" && "$search" && "$info" ]] && Note "e" $"invalid option: '--info' and '--search' may not be used together" -[[ ! "$(command -v "${editor%% *}")" ]] && +[[ "$(command -v "${editor%% *}")" ]] || Note "e" $"${colorW}\$VISUAL${reset} and ${colorW}\$EDITOR${reset} environment variables not set or defined ${colorW}editor${reset} not found" [[ "$PACMAN" = "${0##*/}" ]] && Note "e" $"you cannot use ${colorW}pacaur${reset} as PACMAN environment variable" -[[ ! -w "$clonedir" ]] && Note "e" $"${colorW}$clonedir${reset} does not have write permission" +[[ -w "$clonedir" ]] || Note "e" $"${colorW}$clonedir${reset} does not have write permission" [[ ! "${pkgs[*]}" && ! "${refresh}${upgrade}${cleancache}" && "$operation" =~ (sync|edit) ]] && Note "e" $"no targets specified (use -h for help)" [[ ! "${pkgs[*]}" && " ${pacmanarg[*]} " =~ ' '-[RU]' ' && ! " ${pacmanarg[*]} " =~ ' -h ' ]] && |