Use the API derectly. Massive speed boost. Almost as fast as cower \m/
This commit is contained in:
		
							
								
								
									
										68
									
								
								zpac
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								zpac
									
									
									
									
									
								
							| @@ -19,13 +19,28 @@ usage() { | ||||
| 		        -h        Show this message. | ||||
| 		        -s        Search for <package>. | ||||
| 		        -d        Get the package sources (default). | ||||
| 				-D        If used with -d, makes $_self download the dependencies from AUR too. | ||||
| 	EOF | ||||
| } | ||||
|  | ||||
| aur.get() { | ||||
| aur.info() { | ||||
| 	local pkg_aur_info=$( curl "${cfg_aur_api}?type=info&arg=${1}" 2>/dev/null ) | ||||
| 	local pkg_base=$( jshon -e results -e PackageBase -u <<< "$pkg_aur_info" ) | ||||
| 	local tarball_path=$( jshon -e results -e URLPath -u <<< "$pkg_aur_info" ) | ||||
| 	local aur_query_result=$( jshon -e resultcount -u <<< "$pkg_aur_info" ) | ||||
|  | ||||
| 	if (( aur_query_result )); then | ||||
| 		echo "$pkg_aur_info" | ||||
| 	else | ||||
| 		return 1 | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| aur.get() { | ||||
| 	local dep_name aur_api_multireq aur_deps_api_data aur_deps_count aur_deps pkg_aur_info pkg_base tarball_path | ||||
| 	 | ||||
| 	read pkg_aur_info | ||||
|  | ||||
| 	pkg_base=$( jshon -e results -e PackageBase -u <<< "$pkg_aur_info" ) | ||||
| 	tarball_path=$( jshon -e results -e URLPath -u <<< "$pkg_aur_info" ) | ||||
|  | ||||
| 	cd "$cfg_workdir" | ||||
|  | ||||
| @@ -38,26 +53,37 @@ aur.get() { | ||||
| 	echo ": ${cfg_workdir}/${pkg_base}" | ||||
|  | ||||
| 	if (( flag_get_deps )); then | ||||
| 		unset depends makedepends | ||||
|  | ||||
| 		cd "${cfg_workdir}/${pkg_base}" | ||||
| 		source PKGBUILD | ||||
|  | ||||
| 		for i in "${depends[@]}" "${makedepends[@]}"; do | ||||
| 			dep_name="${i/[<>=]*}" | ||||
| 			dep_repo=$( package-query -1 -A -f '%r' "${dep_name}" ) | ||||
|  | ||||
| 			if [[ "$dep_repo" == 'aur' ]]; then | ||||
| 				[[ -d "${cfg_workdir}/${dep_name}" ]] || { | ||||
| 					aur.get "$dep_name" || { return "$?"; } | ||||
| 				} | ||||
| 			fi | ||||
| 			aur_api_multireq+="&arg\[\]=$dep_name" | ||||
| 		done | ||||
| 		 | ||||
| 		aur_deps_api_data=$( curl "${cfg_aur_api}?type=multiinfo${aur_api_multireq}" ) | ||||
| 		aur_deps_count=$( jshon -e resultcount <<< "$aur_deps_api_data" ) | ||||
|  | ||||
| 		if (( aur_deps_count )); then | ||||
| 			aur_deps=$( jshon -e results -a -e Name -u <<< "$aur_deps_api_data" ) | ||||
|  | ||||
| 			echo "${aur_deps[@]}" | ||||
|  | ||||
| 			for i in "${aur_deps[@]}"; do | ||||
| 				aur.get < <(aur.info "$i") || { | ||||
| 					return "$?" | ||||
| 				} | ||||
| 			done | ||||
| 		fi | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| abs.get() { | ||||
| 	local svn_repo | ||||
|  | ||||
| 	case "$package_repo" in | ||||
| 	case "$repo" in | ||||
| 		(community|multilib) | ||||
| 			svn_repo='community';; | ||||
| 		(*) | ||||
| @@ -90,7 +116,12 @@ main() { | ||||
|  | ||||
| 	action=${action:-"get"} | ||||
|  | ||||
| 	if [[ "$1" ]]; then | ||||
| 		package="$1" | ||||
| 	else | ||||
| 		usage | ||||
| 		return 1 | ||||
| 	fi | ||||
|  | ||||
| 	case "$action" in | ||||
| 		(get) | ||||
| @@ -101,21 +132,26 @@ main() { | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			IFS='/' read repo _ < <( package-query -AS -f '%r/%n' "$package" ) | ||||
| 			pkg_aur_info=$( aur.info "$package" ) | ||||
|  | ||||
| 			if [[ "$?" > 0 ]]; then | ||||
| 				err "Can't find package: $package" | ||||
| 			if (( ! "$?" )); then | ||||
| 				repo='aur' | ||||
| 			else | ||||
| 				repo=$( package-query -S -f '%r' "$package" ) | ||||
| 				(( "$?" )) || { | ||||
| 					err "Can't find package ${package}" | ||||
| 					return 1 | ||||
| 				} | ||||
| 			fi | ||||
|  | ||||
| 			echo "Found ${package} in ${repo}." | ||||
|  | ||||
| 			case "$repo" in | ||||
| 				(aur) | ||||
| 					aur.get "$package";; | ||||
| 					aur.get <<< "$pkg_aur_info";; | ||||
|  | ||||
| 				(core|extra|community|multilib) | ||||
| 					abs.get "$package";; | ||||
| 					abs.get "${package}" "";; | ||||
|  | ||||
| 				(*) | ||||
| 					err "Repository $repo not supported." | ||||
|   | ||||
		Reference in New Issue
	
	Block a user