Skip to content
This repository has been archived by the owner on May 31, 2018. It is now read-only.

New structure #632

Merged
merged 9 commits into from
Jan 29, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions libpacaur/cache.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
CleanCache() {
if [[ $SRCDEST ]]; then
[[ $count -eq 1 ]] && printf "\n%s\n %s\n" $"Sources to keep:" $"All development packages sources"
printf "\n%s %s\n" $"AUR source cache directory:" "$SRCDEST"
if [[ $count -eq 1 ]]; then
if Proceed "y" $"Do you want to remove all non development files from AUR source cache?"; then
printf "%s\n" $"removing non development files from source cache..."
rm -f $SRCDEST/* &>/dev/null
fi
else
if ! Proceed "n" $"Do you want to remove ALL files from AUR source cache?"; then
printf "%s\n" $"removing all files from AUR source cache..."
rm -rf $SRCDEST/* &>/dev/null
fi
fi
fi
if [[ -d "$clonedir" ]]; then
cd $clonedir
[[ $count -eq 1 ]] && printf "\n%s\n %s\n" $"Clones to keep:" $"All packages clones"
printf "\n%s %s\n" $"AUR clone directory:" "$clonedir"
if [[ $count -eq 1 ]]; then
if Proceed "y" $"Do you want to remove all uninstalled clones from AUR clone directory?"; then
foreignpkgsbase=($(expac -Q '%n %e' $($pacmanbin -Qmq) | awk '{if ($2 == "(null)") print $1; else print $2}'))
printf "%s\n\n" $"removing uninstalled clones from AUR clone cache..."
for clone in *; do
[[ -d "$clonedir/$clone" && ! " ${foreignpkgsbase[@]} " =~ " $clone " ]] && rm -rf "$clonedir/$clone"
done
fi
if Proceed "y" $"Do you want to remove all untracked files from AUR clone directory?"; then
printf "%s\n" $"removing untracked files from AUR clone cache..."
for clone in *; do
[[ -d "$clonedir/$clone" ]] && git --git-dir="$clone/.git" --work-tree="$clone" clean -ffdx &>/dev/null
done
fi
else
if ! Proceed "n" $"Do you want to remove ALL clones from AUR clone directory?"; then
printf "%s\n" $"removing all clones from AUR clone cache..."
for clone in *; do
[[ -d "$clonedir/$clone" ]] && rm -rf "$clonedir/$clone"
done
fi
fi
fi
exit 0
}
454 changes: 454 additions & 0 deletions libpacaur/checks.sh

Large diffs are not rendered by default.

397 changes: 397 additions & 0 deletions libpacaur/deps.sh

Large diffs are not rendered by default.

90 changes: 90 additions & 0 deletions libpacaur/info.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
SearchAur() {
if [[ -z "$(grep -E "\-\-[r]?sort" <<< ${coweropts[@]})" ]]; then
[[ $sortorder = descending ]] && coweropts+=("--rsort=$sortby") || coweropts+=("--sort=$sortby");
fi
cower ${coweropts[@]} -- $@
}

InfoAur() {
local aurinfopkgs info infolabel maxlength linfo lbytes

readarray aurinfopkgs < <(cower ${coweropts[@]} --format "%n|%v|%d|%u|%p|%L|%W|%P|%D|%M|%O|%C|%R|%m|%r|%o|%t|%w|%s|%a\n" $@)
aurinfopkgsQname=($(expac -Q '%n' $@))
aurinfopkgsQver=($(expac -Q '%v' $@))

infolabel=($"Repository" $"Name" $"Version" $"Description" $"URL" $"AUR Page" $"Licenses" $"Keywords" $"Provides" $"Depends on" \
$"Make Deps" $"Optional Deps" $"Conflicts With" $"Replaces" $"Maintainer" $"Popularity" $"Votes" $"Out of Date" $"Submitted" $"Last Modified")
linfo=$(GetLength "${infolabel[@]}")
# take into account differences between characters and bytes
for i in "${!infolabel[@]}"; do
(( lbytes[$i] = $(printf "${infolabel[$i]}" | wc -c) - ${#infolabel[$i]} + ${linfo} ))
done
maxlength=$(($(tput cols) - $linfo - 4))

for i in "${!aurinfopkgs[@]}"; do
IFS='|' read -ra info <<< "${aurinfopkgs[$i]}"
# repo
printf "${colorW}%-${lbytes[0]}s :${reset} ${colorM}aur${reset}\n" "${infolabel[0]}"
# name and installed status
if [[ " ${aurinfopkgsQname[@]} " =~ " ${info[0]} " ]]; then
for j in "${!aurinfopkgsQname[@]}"; do
[[ "${aurinfopkgsQname[$j]}" != "${info[0]}" ]] && continue
if [[ $(vercmp "${info[1]}" "${aurinfopkgsQver[$j]}") -eq 0 ]]; then
printf "${colorW}%-${lbytes[1]}s :${reset} ${colorW}%s${reset} ${colorC}[${reset}${colorG}%s${reset}${colorC}]${reset}\n" "${infolabel[1]}" "${info[0]}" $"installed"
elif [[ $(vercmp "${info[1]}" "${aurinfopkgsQver[$j]}") -lt 0 ]]; then
printf "${colorW}%-${lbytes[1]}s :${reset} ${colorW}%s${reset} ${colorC}[${reset}${colorG}%s: %s${reset}${colorC}]${reset}\n" "${infolabel[1]}" "${info[0]}" $"installed" "${aurinfopkgsQver[$j]}"
else
printf "${colorW}%-${lbytes[1]}s :${reset} ${colorW}%s${reset} ${colorC}[${reset}${colorR}%s: %s${reset}${colorC}]${reset}\n" "${infolabel[1]}" "${info[0]}" $"installed" "${aurinfopkgsQver[$j]}"
fi
done
else
printf "${colorW}%-${linfo}s :${reset} ${colorW}%s${reset}\n" "${infolabel[1]}" "${info[0]}"
fi
# version
if [[ "${info[16]}" = 'no' ]]; then
printf "${colorW}%-${lbytes[2]}s :${reset} ${colorG}%s${reset}\n" "${infolabel[2]}" "${info[1]}"
else
printf "${colorW}%-${lbytes[2]}s :${reset} ${colorR}%s${reset}\n" "${infolabel[2]}" "${info[1]}"
fi
# description
if [[ $(GetLength "${info[2]}") -gt $maxlength ]]; then
# add line breaks if needed and align text
info[2]=$(sed 's/ / /g' <<< ${info[2]} | fold -s -w $(($maxlength - 2)) | sed "s/^ //;2,$ s/^/\\x1b[$(($linfo + 4))C/")
fi
printf "${colorW}%-${lbytes[3]}s :${reset} %s\n" "${infolabel[3]}" "${info[2]}"
# url page
printf "${colorW}%-${lbytes[4]}s :${reset} ${colorC}%s${reset}\n" "${infolabel[4]}" "${info[3]}"
printf "${colorW}%-${lbytes[5]}s :${reset} ${colorC}%s${reset}\n" "${infolabel[5]}" "${info[4]}"
# keywords licenses dependencies
for j in {5..12}; do
if [[ -n $(tr -dc '[[:print:]]' <<< ${info[$j]}) ]]; then
# handle special optional deps cases
if [[ "$j" = '10' ]]; then
info[$j]=$(sed -r 's/\S+:/\n&/2g' <<< ${info[$j]} | fold -s -w $(($maxlength - 2)) | sed "s/^ //;2,$ s/^/\\x1b[$(($linfo + 4))C/")
else
# add line breaks if needed and align text
if [[ $(GetLength "${info[$j]}") -gt $maxlength ]]; then
info[$j]=$(sed 's/ / /g' <<< ${info[$j]} | fold -s -w $(($maxlength - 2)) | sed "s/^ //;2,$ s/^/\\x1b[$(($linfo + 4))C/")
fi
fi
printf "${colorW}%-${lbytes[$j+1]}s :${reset} %s\n" "${infolabel[$j+1]}" "${info[$j]}"
else
printf "${colorW}%-${lbytes[$j+1]}s :${reset} %s\n" "${infolabel[$j+1]}" $"None"
fi
done
# maintainer popularity votes
for j in {13..15}; do
printf "${colorW}%-${lbytes[$j+1]}s :${reset} %s\n" "${infolabel[$j+1]}" "${info[$j]}"
done
# outofdate
if [[ "${info[16]}" = 'no' ]]; then
printf "${colorW}%-${lbytes[17]}s :${reset} ${colorG}%s${reset}\n" "${infolabel[17]}" $"No"
else
printf "${colorW}%-${lbytes[17]}s :${reset} ${colorR}%s${reset} [%s]\n" "${infolabel[17]}" $"Yes" $"$(date -d "@${info[17]}" "+%c")"
fi
# submitted modified
printf "${colorW}%-${lbytes[18]}s :${reset} %s\n" "${infolabel[18]}" $"$(date -d "@${info[18]}" "+%c")"
printf "${colorW}%-${lbytes[19]}s :${reset} %s\n" "${infolabel[19]}" $"$(date -d "@${info[19]}" "+%c")"
echo
done
}
133 changes: 133 additions & 0 deletions libpacaur/main.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
Core() {
GetIgnoredPkgs
[[ $upgrade ]] && UpgradeAur
IgnoreChecks
DepsSolver
IgnoreDepsChecks
ProviderChecks
ConflictChecks
ReinstallChecks
OutofdateChecks
OrphanChecks
Prompt
MakePkgs
}

UpgradeAur() {
local foreignpkgs allaurpkgs allaurpkgsAver allaurpkgsQver aurforeignpkgs i json
# global aurpkgs
Note "i" $"${colorW}Starting AUR upgrade...${reset}"

# selective upgrade switch
if [[ $selective && -n ${pkgs[@]} ]]; then
aurpkgs+=(${pkgs[@]})
else
foreignpkgs=($($pacmanbin -Qmq))
SetJson ${foreignpkgs[@]}
allaurpkgs=($(GetJson "var" "$json" "Name" | LC_COLLATE=C sort))
allaurpkgsAver=($(GetJson "var" "$json" "Version"))
allaurpkgsQver=($(expac -Q '%v' ${allaurpkgs[@]}))
for i in "${!allaurpkgs[@]}"; do
[[ $(vercmp "${allaurpkgsAver[$i]}" "${allaurpkgsQver[$i]}") -gt 0 ]] && aurpkgs+=(${allaurpkgs[$i]});
done
fi

# foreign packages check
aurforeignpkgs=($(grep -xvf <(printf '%s\n' "${allaurpkgs[@]}") <(printf '%s\n' "${foreignpkgs[@]}")))
for i in "${aurforeignpkgs[@]}"; do
Note "w" $"${colorW}$i${reset} is ${colorY}not present${reset} in AUR -- skipping"
done

# add devel packages
if [[ $devel ]]; then
for i in "${allaurpkgs[@]}"; do
[[ -n "$(grep -E "\-(cvs|svn|git|hg|bzr|darcs|nightly.*)$" <<< $i)" ]] && aurpkgs+=($i)
done
fi

# avoid possible duplicate
aurpkgs=($(tr ' ' '\n' <<< ${aurpkgs[@]} | sort -u))

NothingToDo ${aurpkgs[@]}
}

Prompt() {
local i binaryksize sumk summ builtpkg cachedpkgs strname stroldver strnewver strsize action
local depsver repodepspkgsver strrepodlsize strrepoinsize strsumk strsumm lreposizelabel lreposize
# global repodepspkgs repodepsSver depsAname depsAver depsArepo depsAcached lname lver lsize deps depsQver repodepspkgs repodepsSrepo repodepsQver repodepsSver
# compute binary size
if [[ -n "${repodepspkgs[@]}" ]]; then
binaryksize=($(expac -S -1 '%k' "${repodepspkgs[@]}"))
binarymsize=($(expac -S -1 '%m' "${repodepspkgs[@]}"))
sumk=0
summ=0
for i in "${!repodepspkgs[@]}"; do
GetBuiltPkg "${repodepspkgs[$i]}-${repodepsSver[$i]}" '/var/cache/pacman/pkg'
[[ $builtpkg ]] && binaryksize=(${binaryksize[@]/${binaryksize[$i]}/0})
sumk=$((sumk + ${binaryksize[$i]}))
summ=$((summ + ${binarymsize[$i]}))
done
sumk=$(awk '{ printf("%.2f\n", $1/$2) }' <<< "$sumk 1048576")
summ=$(awk '{ printf("%.2f\n", $1/$2) }' <<< "$summ 1048576")
fi

# cached packages check
for i in "${!depsAname[@]}"; do
[[ ! $PKGDEST || $rebuild ]] && break
GetBuiltPkg "${depsAname[$i]}-${depsAver[$i]}" "$PKGDEST"
[[ $builtpkg ]] && cachedpkgs+=(${depsAname[$i]}) && depsAcached[$i]=$"(cached)" || depsAcached[$i]=""
unset builtpkg
done

if [[ -n "$(grep '^VerbosePkgLists' '/etc/pacman.conf')" ]]; then
straurname=$"AUR Packages (${#deps[@]})"; strreponame=$"Repo Packages (${#repodepspkgs[@]})"; stroldver=$"Old Version"; strnewver=$"New Version"; strsize=$"Download Size"
depsArepo=(${depsAname[@]/#/aur/})
lname=$(GetLength ${depsArepo[@]} ${repodepsSrepo[@]} "$straurname" "$strreponame")
lver=$(GetLength ${depsQver[@]} ${depsAver[@]} ${repodepsQver[@]} ${repodepsSver[@]} "$stroldver" "$strnewver")
lsize=$(GetLength "$strsize")

# local version column cleanup
for i in "${!deps[@]}"; do
[[ "${depsQver[$i]}" =~ '#' ]] && unset depsQver[$i]
done
# show detailed output
printf "\n${colorW}%-${lname}s %-${lver}s %-${lver}s${reset}\n\n" "$straurname" "$stroldver" "$strnewver"
for i in "${!deps[@]}"; do
printf "%-${lname}s ${colorR}%-${lver}s${reset} ${colorG}%-${lver}s${reset} %${lsize}s\n" "${depsArepo[$i]}" "${depsQver[$i]}" "${depsAver[$i]}" "${depsAcached[$i]}";
done

if [[ -n "${repodepspkgs[@]}" ]]; then
for i in "${!repodepspkgs[@]}"; do
binarysize[$i]=$(awk '{ printf("%.2f\n", $1/$2) }' <<< "${binaryksize[$i]} 1048576")
done
printf "\n${colorW}%-${lname}s %-${lver}s %-${lver}s %s${reset}\n\n" "$strreponame" "$stroldver" "$strnewver" "$strsize"
for i in "${!repodepspkgs[@]}"; do
printf "%-${lname}s ${colorR}%-${lver}s${reset} ${colorG}%-${lver}s${reset} %${lsize}s\n" "${repodepsSrepo[$i]}" "${repodepsQver[$i]}" "${repodepsSver[$i]}" $"${binarysize[$i]} MiB";
done
fi
else
# show version
for i in "${!deps[@]}"; do
depsver="${depsver}${depsAname[$i]}-${depsAver[$i]} "
done
for i in "${!repodepspkgs[@]}"; do
repodepspkgsver="${repodepspkgsver}${repodepspkgs[$i]}-${repodepsSver[$i]} "
done
printf "\n${colorW}%-16s${reset} %s\n" $"AUR Packages (${#deps[@]})" "$depsver"
[[ -n "${repodepspkgs[@]}" ]] && printf "${colorW}%-16s${reset} %s\n" $"Repo Packages (${#repodepspkgs[@]})" "$repodepspkgsver"
fi

if [[ -n "${repodepspkgs[@]}" ]]; then
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
[[ $installpkg ]] && action=$"installation" || action=$"download"
if ! Proceed "y" $"Proceed with $action?"; then
exit
fi
}
Loading