84 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/bash
 | |
| shopt -s nullglob
 | |
| 
 | |
| parse_pkg_filename() {
 | |
| 	declare filename=$1
 | |
| 	declare -a filename_array
 | |
| 
 | |
| 	IFS='-' read -r -a filename_array <<< "$filename"
 | |
| 
 | |
| 	for (( i=${#filename_array[@]}; i>=0; i-- )); do
 | |
| 		printf '%s ' "${filename_array[$i]}"
 | |
| 	done
 | |
| }
 | |
| 
 | |
| is_latest() {
 | |
| 	declare filename=$1 p
 | |
| 
 | |
| 	for p in "${latest[@]}"; do
 | |
| 		if [[ "$filename" == "$p" ]]; then
 | |
| 			return 0
 | |
| 		fi
 | |
| 	done
 | |
| 
 | |
| 	return 1
 | |
| }
 | |
| 
 | |
| _pacsort() {
 | |
| 	declare i
 | |
| 
 | |
| 	for i in *.pkg.tar.xz; do
 | |
| 		printf '%s\n' "$i"
 | |
| 	done | pacsort -f
 | |
| }
 | |
| 
 | |
| while (( $# )); do
 | |
| 	case "$1" in
 | |
| 		-r) flag_rm=1;;
 | |
| 		-d) flag_debug=1;;
 | |
| 	esac
 | |
| 	shift
 | |
| done
 | |
| 
 | |
| if ! (( flag_rm )); then
 | |
| 	if ! [[ -d old ]]; then
 | |
| 		mkdir -p old || {
 | |
| 			return 1
 | |
| 		}
 | |
| 	fi
 | |
| fi
 | |
| 
 | |
| read -d '' -r -a package_files < <( _pacsort )
 | |
| 
 | |
| for f in "${package_files[@]}"; do
 | |
| 	unset revision version end package_name
 | |
| 
 | |
| 	read -r end revision version _ < <(parse_pkg_filename "$f")
 | |
| 	package_name=${f%%-$version-$revision*}
 | |
| 
 | |
| 	declare -g -A latest["$package_name"]="$package_name-$version-$revision-$end"
 | |
| done
 | |
| 
 | |
| for f in ${package_files[@]}; do
 | |
| 	if is_latest "$f"; then
 | |
| 		(( flag_debug )) && printf '%s is the latest version available\n' "$f"
 | |
| 	else
 | |
| 		printf 'Removing: %s\n' "$f"
 | |
| 
 | |
| 		if (( flag_rm )); then
 | |
| 			rm -f "$f" "${f}.sig"
 | |
| 		else
 | |
| 			mv "$f" old/
 | |
| 
 | |
| 			if [[ -f "${f}.sig" ]]; then
 | |
| 				mv "${f}.sig" old/
 | |
| 			fi
 | |
| 		fi
 | |
| 	fi
 | |
| done
 | |
| 
 | |
| if [[ -d old ]]; then
 | |
| 	cd old
 | |
| 	exec bash "$0" -r
 | |
| fi
 |