zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: _urpmi update
@ 2002-01-13 10:27 Borsenkow Andrej
  2002-01-14 10:04 ` Chmouel Boudjnah
  0 siblings, 1 reply; 4+ messages in thread
From: Borsenkow Andrej @ 2002-01-13 10:27 UTC (permalink / raw)
  To: Zsh hackers list

[-- Attachment #1: Type: text/plain, Size: 352 bytes --]

It seems that urpmi rewrite has stabilized so this syncs completion with
current version. I stopped attempts to support several urpmi versions
because it has been changing too rapidly and we do not have this
completion in any released mandrake version as yet.

Chmouel, if it looks O.K. please add to cooker?

Should I add it to 4.0 as well?

-andrej


[-- Attachment #2: _urpmi.diff --]
[-- Type: text/x-diff, Size: 7970 bytes --]

Index: Completion/Mandrake/Command/_urpmi
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Mandrake/Command/_urpmi,v
retrieving revision 1.2
diff -u -r1.2 _urpmi
--- Completion/Mandrake/Command/_urpmi	2001/11/16 11:42:05	1.2
+++ Completion/Mandrake/Command/_urpmi	2002/01/13 10:23:12
@@ -1,111 +1,124 @@
 #compdef urpmi urpmi.addmedia urpmi.removemedia urpmi.update
-local state context line
-typeset -A opt_args
 
 _urpmi_cache_policy() {
-    [[ -e "$1" && -e /var/lib/urpmi/depslist.ordered && \
-	"$1" -nt /var/lib/urpmi/depslist.ordered ]] && return 1
+    local -a synthesis
+    local i
+    synthesis=(/var/lib/urpmi/synthesis.*)
+    for i in $synthesis; do
+	[[ -e "$1" && -e "$i" && "$1" -nt "$i" ]] && return 1
+    done
     return 0
 }
     
-case "$service" in
-    urpmi.addmedia )
-	_arguments -A '-*' \
-	    "--update[mark as update media]" \
-	    ":name of media: " \
-	    ":media URL:->media_url" \
-	    ": :(with)" \
-	    ":relative path to hdlist file: " \
-	 && return 0
-    ;;
-    urpmi.removemedia )
-	_arguments -A '-*' \
-	    "(:)-a[select all media]" \
-	    "(-a)"{,\*}": :->urpmi_media" \
-	 && return 0
-    ;;
-    urpmi.update )
-	_arguments -A '-*' \
-	    "(:)-a[select all non-removable media]" \
-	    "-c[clean /var/cache/urpmi/headers on exit]" \
-	    "*-f[force rebuild of hdlist or base files (if repeated)]" \
-	    "(-a)"{,\*}": :->urpmi_media" \
-	 && return 0
-    ;;
-    urpmi )
-	_arguments -A '-*' \
-	    "(: -)--help[print usage information]" \
-	    "(--help)--update[use only update media]" \
-	    "(--help)--allow-medium-change[allow change of removable media]" \
-	    "(--help)--auto[do not ask any questions]" \
-	    "(--help)--auto-select[select the packages to update]" \
-	    "(--help)--force[preceed even when some packages do not exist]" \
-	    "(--help)--best-output[automatically select text or X interface]" \
-	    "(--help)-a[select all packages matching command line]" \
-	    "(--help -m -M)-m[choose minimum closure of requires (default)]" \
-	    "(--help -m -M)-M[choose maximum closure of requires]" \
-	    "(--help)-c[choose complete method for resolving requires]" \
-	    "(--help)-p[allow search in provides]" \
-	    "(--help -q -v)-q[be quiet]" \
-	    "(--help -q -v)-v[verbose mode]" \
-	    "(--help)"{,\*}": :->urpmi_rpms" \
-	&& return 0
-    ;;
-esac
-
-case "$state" in
-    media_url )
-	if compset -P file://; then
-	    _files -W / -/ && return 0
-	elif compset -P 'removable_cdrom(|_?)://'; then
-	    _files -/ && return 0
-	elif compset -P removable_; then
-	    local -a devices
-	    locale dev foo
-	    while read dev foo; do
-		[[ "$dev" != none ]] && devices=($devices ${dev#/dev/})
-	    done < /etc/fstab
-	    if [[ "$(rpm -q urpmi)" == urpmi-1.* ]]; then
-		_wanted urpmi_device expl 'device for removable media' \
-		   compadd -s _ -S "" -a devices && return 0
+_urpmi() {
+    local state context line ret=1
+    typeset -A opt_args
+    local update_policy
+
+    zstyle -s ":completion:*:*:urpmi:*" cache-policy update_policy
+    if [[ -z "$update_policy" ]]; then
+	zstyle ":completion:*:*:urpmi:*" cache-policy _urpmi_cache_policy
+    fi
+
+    case "$service" in
+	urpmi.addmedia )
+	    _arguments -A '-*' \
+		"(--wget)--curl[use curl to retrieve distant files]" \
+		"--distrib[automatically create all media from an installation medium]" \
+		"--update[mark as update media]" \
+		"(--curl)--wget[use wget to retrieve distant files]" \
+		"-c[clean headers cache directory]" \
+		"-f[force generation of hdlist files]" \
+		"-h[try to find and use synthesis or hdlist file]" \
+		":name of media: " \
+		":media URL:->media_url" \
+		": :(with)" \
+		":relative path to hdlist file: " \
+	     && ret=0
+	;;
+	urpmi.removemedia )
+	    _arguments -A '-*' \
+		"(:)-a[select all media]" \
+		"(-a)"{,\*}": :->urpmi_media" \
+	     && ret=0
+	;;
+	urpmi.update )
+	    _arguments -A '-*' \
+		"(--wget)--curl[use curl to retrieve distant files]" \
+		"(--curl)--wget[use wget to retrieve distant files]" \
+		"(:)-a[select all non-removable media]" \
+		"-c[clean /var/cache/urpmi/headers on exit]" \
+		"-d[force complete computation of depslist.ordered file]" \
+		"*-f[force generation of hdlist files]" \
+		"(-a)"{,\*}": :->urpmi_media" \
+	     && ret=0
+	;;
+	urpmi )
+	    _arguments -A '-*' \
+		"(: -)--help[print usage information]" \
+		"(--help)--allow-medium-change[allow change of removable media]" \
+		"(--help)--auto[do not ask any questions]" \
+		"(--help)--auto-select[select the packages to update]" \
+		"(--help -X)--best-output[automatically select text or X interface]" \
+		"(--help)--complete[use parsehdlist server to complete selection]" \
+		"(--help --wget)--curl[use curl to retrieve distant files]" \
+		"(--help)--force[proceed even when some packages do not exist]" \
+		"(--help)--update[use only update media]" \
+		"(--help --curl)--wget[use wget to retrieve distant files]" \
+		"(--help)-a[select all packages matching command line]" \
+		"(--help -m -M)-m[choose minimum closure of requires (default)]" \
+		"(--help -m -M)-M[choose maximum closure of requires]" \
+		"(--help)-p[allow search in provides]" \
+		"(--help -q -v)-q[be quiet]" \
+		"(--help -q -v)-v[verbose mode]" \
+		"(--help --best-output)-X[use X interface]" \
+		"(--help)"{,\*}": :->urpmi_rpms" \
+	    && ret=0
+	;;
+    esac
+
+    case "$state" in
+	media_url )
+	    if compset -P file:// || compset -P removable://; then
+		_files -W / -/ && ret=0
+	    elif [[ -prefix '(ftp|http)://' ]]; then
+		_urls && ret=0
 	    else
-		_wanted urpmi_device expl 'device for removable media' \
-		   compadd -s :// -S "" -a devices && return 0
+		_wanted urpmi_media_type expl 'type of media' \
+		    compadd -- file:// http:// ftp:// removable:// && ret=0
 	    fi
-	elif [[ -prefix '(ftp|http)://' ]]; then
-	    _urls && return 0
-	else
-	    _wanted urpmi_media_type expl 'type of media' \
-		compadd -- file:// http:// ftp:// removable_
-	fi
-    ;;
-    urpmi_media )
-	local source media brace ret=1
-	while read source media brace; do
-	    [[ "$brace" != "{" ]] && continue
-	    _wanted urpmi_media expl 'available media' \
-		compadd -- "$source"
-	    ret=0
-	done < /etc/urpmi/urpmi.cfg
-	return "$ret"
-    ;;
-    urpmi_rpms )
-	local pkg foo expl
-	local -a pkgs
-	if [[ -r /var/lib/urpmi/depslist.ordered ]]; then
-	    if _cache_invalid _urpmi_rpms || ! _retrieve_cache _urpmi_rpms; then
-		while read pkg foo; do
-		    [[ "$pkg" == (#b)(*)-[^-]##-[^-]## ]] && {
-			pkgs[$#pkgs+1]=("$match[1]")
-		    }
-		done < /var/lib/urpmi/depslist.ordered
-		_store_cache _urpmi_rpms pkgs
-	    fi
-	    _wanted urpmi_rpms expl 'RPM to install' \
-		compadd -a pkgs && return 0
-	fi
-    ;;
-esac
+	;;
+	urpmi_media )
+	    local source media brace ret=1
+	    while read source media brace; do
+		[[ "$brace" != "{" ]] && continue
+		_wanted urpmi_media expl 'available media' \
+		    compadd -- "$source"
+		ret=0
+	    done < /etc/urpmi/urpmi.cfg
+	;;
+	urpmi_rpms )
+	    local pkg foo expl
+	    local -a pkgs
+	    local -a synthesis
+	    synthesis=(/var/lib/urpmi/synthesis.*(N))
+	    (( $#synthesis > 0 )) && {
+		if _cache_invalid _urpmi_rpms || ! _retrieve_cache _urpmi_rpms; then
+		    pkgs=($(zcat $synthesis | \
+			 grep @info@ | cut -d @ -f 3 | sed -e 's/\.[^.]*$//'))
+		    _store_cache _urpmi_rpms pkgs
+		fi
+	    }
+	    (( $#pkgs > 0 )) && \
+		_wanted urpmi_rpms expl 'urpmi RPMs to install' \
+		    compadd -a pkgs && ret=0
+	    (( $EUID == 0 )) && \
+		_wanted urpmi_files expl 'RPM files to install' \
+		    _files -g '*.(#i)rpm' && ret=0
+	;;
+    esac
 
-return 1
+    return $ret
+}
 
+_urpmi "$@"

^ permalink raw reply	[flat|nested] 4+ messages in thread
* Re: _values does not quote inserted matches
@ 2002-04-23  9:45 Oliver Kiddle
  2002-05-06  7:04 ` PATCH: _urpmi update Borsenkow Andrej
  0 siblings, 1 reply; 4+ messages in thread
From: Oliver Kiddle @ 2002-04-23  9:45 UTC (permalink / raw)
  To: zsh-workers

Andrej wrote:
> 
> Here is updated version. It relies on recent _values fixes. The
> completion is correct for Mandrake 8.2. If you say O.K it will go in
> both head and 4.0.

Are the recent _values fixes going on the 4.0 branch then? I'd say that
was questionable without first checking through _values calls for
quoted strings. Presumably _urpmi can be adjusted for the old _values
fairly easily so if Andrej is happy that it works on each branch, it
gets my okay.

> I'd like to use common with _rpm cache and functions to get list of
> installed RPMs, but _rpm is one large function and I am reluctant to
> split it (I remember somebody was against it, but forgot reasons).

I can't think of any reason why not. It is very similar to the Debian
situation where we have an _deb_packages used by both _dpkg and _apt.
Maybe the reasons against splitting _rpm before was based on rpm being
the only command to complete rpm packages.

Bart wrote:
> Somebody other than me (Peter?  Oliver?  Sven?) should give the OK.

Well I haven't been able to test the _values calling part as it gets
its arguments by parsing urpmi.cfg which I don't have.

Looking over the rest it looks fine. The one thing I see that I would
do differently is to have a single tags loop in _urpmi_rpms instead
of the three consecutive _wanted calls. It also adds source and
binary rpms separately which means that directories get added twice.
I think it'd be better to add them together - a user can always
separate them with a file-patterns style.

Oliver
-- 

This e-mail and any attachment is for authorised use by the intended recipient(s) only.  It may contain proprietary material, confidential information and/or be subject to legal privilege.  It should not be copied, disclosed to, retained or used by, any other party.  If you are not an intended recipient then please promptly delete this e-mail and any attachment and all copies and inform the sender.  Thank you.


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2002-05-06  7:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-01-13 10:27 PATCH: _urpmi update Borsenkow Andrej
2002-01-14 10:04 ` Chmouel Boudjnah
2002-01-14 10:23   ` Borsenkow Andrej
2002-04-23  9:45 _values does not quote inserted matches Oliver Kiddle
2002-05-06  7:04 ` PATCH: _urpmi update Borsenkow Andrej

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).