[Bash-completion-commits] ./current r1234: Improved performance of rpm -qa based rpm installed package completion.

Ville Skyttä ville.skytta at iki.fi
Sun Jan 11 14:13:32 UTC 2009


------------------------------------------------------------
revno: 1234
committer: Ville Skyttä <ville.skytta at iki.fi>
branch nick: current
timestamp: Sun 2009-01-11 16:13:32 +0200
message:
  Improved performance of rpm -qa based rpm installed package completion.
modified:
  bash_completion
  debian/changelog
-------------- next part --------------
=== modified file 'bash_completion'
--- a/bash_completion	2009-01-11 13:42:12 +0000
+++ b/bash_completion	2009-01-11 14:13:32 +0000
@@ -1836,7 +1836,7 @@
 #
 _rpm_installed_packages()
 {
-	local ver nodig nosig
+	local ver nodig="$1" nosig="$2"
 
 	if [ -r /var/log/rpmpkgs -a \
 		/var/log/rpmpkgs -nt /var/lib/rpm/Packages ]; then
@@ -1845,20 +1845,8 @@
 		's|^\('$cur'[^[:space:]]*\)-[^[:space:]-]\+-[^[:space:]-]\+\.rpm$|\1|p' \
 				/var/log/rpmpkgs ) )
 	else
-		nodig=""
-		nosig=""
-		ver=$(rpm --version)
-		ver=${ver##* }
-
-		if [[ "$ver" > "4.0.4" ]]; then
-			nodig="--nodigest"
-		fi
-		if [[ "$ver" > "4.0.99" ]]; then
-			nosig="--nosignature"
-		fi
-
-		COMPREPLY=( $( rpm -qa $nodig $nosig | sed -ne \
-		's|^\('$cur'.*\)-[0-9a-zA-Z._]\+-[0-9a-z.@]\+$|\1|p' ) )
+		_rpm_nodigsig
+		COMPREPLY=( $( rpm -qa $nodig $nosig --qf='%{NAME} ' "$cur*" ) )
 	fi
 }
 
@@ -1873,25 +1861,35 @@
 	COMPREPLY=( $( echo "${COMPREPLY[@]}" | sed 's/ /\\ /g' | tr '\n' '\t' ) )
 }
 
+_rpm_nodigsig()
+{
+	if [ -z "$nodig" -a -z "$nosig" ]; then
+		local rpmver
+	
+		rpmver=$(rpm --version)
+		rpmver=${rpmver##* }
+
+		if [[ "$rpmver" > "4.0.4" ]]; then
+			nodig="--nodigest"
+		fi
+		if [[ "$rpmver" > "4.0.99" ]]; then
+			nosig="--nosignature"
+		fi
+	fi
+}
+
 # rpm(8) completion
 #
 _rpm()
 {
-	local cur prev ver nodig nosig
+	local cur prev nodig nosig
 
 	COMPREPLY=()
 	cur=`_get_cword`
 	prev=${COMP_WORDS[COMP_CWORD-1]}
 	nodig=""
 	nosig=""
-	ver=$(rpm --version); ver=${ver##* }
-
-	if [[ "$ver" > "4.0.4" ]]; then
-		nodig="--nodigest"
-	fi
-	if [[ "$ver" > "4.0.99" ]]; then
-		nosig="--nosignature"
-	fi
+	_rpm_nodigsig
 
 	if [ $COMP_CWORD -eq 1 ]; then
 		# first parameter on line
@@ -1985,7 +1983,7 @@
 			COMPREPLY=( $( compgen -W '--allmatches --noscripts \
 			--notriggers --nodeps --test --repackage' -- $cur ) )
 		else
-			_rpm_installed_packages
+			_rpm_installed_packages "$nodig" "$nosig"
 		fi
 		;;
 	-@(q*|-query))
@@ -2037,7 +2035,7 @@
 				--fileid --tid --nodigest --nosignature \
 				--triggerscripts' -- $cur ) )
 			elif [ "${COMP_LINE#* -*([^ -])a}" == "$COMP_LINE" ]; then
-				_rpm_installed_packages
+				_rpm_installed_packages "$nodig" "$nosig"
 			fi
 		fi
 		;;
@@ -2064,7 +2062,7 @@
 		elif [ "${COMP_LINE#* -*([^ -])p}" != "$COMP_LINE" ]; then
 			_filedir 'rpm'
 		else
-			_rpm_installed_packages
+			_rpm_installed_packages "$nodig" "$nosig"
 		fi
 		;;
 	-[bt]*)
@@ -2094,7 +2092,7 @@
 		_filedir 'rpm'
 		;;
 	--set@(perms|gids))
-		_rpm_installed_packages
+		_rpm_installed_packages "$nodig" "$nosig"
 		;;
 	--@(clean|rms@(ource|pec)))
 		if [[ "$cur" == -* ]]; then

=== modified file 'debian/changelog'
--- a/debian/changelog	2009-01-11 13:42:12 +0000
+++ b/debian/changelog	2009-01-11 14:13:32 +0000
@@ -57,6 +57,8 @@
   * Improved rpm backup file avoidance (Ville Skyttä).
   * Improved /var/log/rpmpkgs based rpm installed package completion
     (Ville Skyttä).
+  * Improved performance of rpm -qa based rpm installed package completion
+    (Ville Skyttä).
   * Merge from Gentoo:
     - fix 'find' completion so that it properly completes on -?(i)whilename.
       Patch by Ciaran McCreesh.



More information about the Bash-completion-commits mailing list