1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-07 15:21:46 +00:00

lisp/gnus.auth-source.el (auth-source-search): return boolean on :max 0

* lisp/gnus.auth-source.el (auth-source-search, auth-source-search-backends):
Treat :max 0 as an indicator that a boolean return is wanted, as
documented. Reported by Joe Bloggs.
This commit is contained in:
Teodor Zlatanov 2014-04-27 22:08:43 +00:00 committed by Katsumi Yamaoka
parent 5ba339c7f4
commit 8f25c2bc56
2 changed files with 21 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2014-04-27 Teodor Zlatanov <tzz@lifelogs.com>
* auth-source.el (auth-source-search, auth-source-search-backends):
Treat :max 0 as an indicator that a boolean return is wanted, as
documented. Reported by Joe Bloggs.
2014-04-20 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-icalendar.el: Require gnus-art.

View File

@ -654,9 +654,11 @@ Use `auth-source-delete' in ELisp code instead of calling
'secrets are the only ones supported right now.
:max N means to try to return at most N items (defaults to 1).
When 0 the function will return just t or nil to indicate if any
matches were found. More than N items may be returned, depending
on the search and the backend.
More than N items may be returned, depending on the search and
the backend.
When :max is 0 the function will return just t or nil to indicate
if any matches were found.
:host (X Y Z) means to match only hosts X, Y, or Z according to
the match rules above. Defaults to t.
@ -757,18 +759,22 @@ must call it to obtain the actual value."
(when auth-source-do-cache
(auth-source-remember spec found)))
found))
(if (zerop max)
(not (null found))
found)))
(defun auth-source-search-backends (backends spec max create delete require)
(let (matches)
(let ((max (if (zerop max) 1 max)) ; stop with 1 match if we're asked for zero
matches)
(dolist (backend backends)
(when (> max (length matches)) ; when we need more matches...
(when (> max (length matches)) ; if we need more matches...
(let* ((bmatches (apply
(slot-value backend 'search-function)
:backend backend
:type (slot-value backend :type)
;; note we're overriding whatever the spec
;; has for :require, :create, and :delete
;; has for :max, :require, :create, and :delete
:max max
:require require
:create create
:delete delete
@ -783,6 +789,7 @@ must call it to obtain the actual value."
(setq matches (append matches bmatches))))))
matches))
;; (auth-source-search :max 0)
;; (auth-source-search :max 1)
;; (funcall (plist-get (nth 0 (auth-source-search :max 1)) :secret))
;; (auth-source-search :host "nonesuch" :type 'netrc :K 1)
@ -1653,6 +1660,7 @@ authentication tokens:
;; (let ((auth-sources '("macos-keychain-internet:/Users/tzz/Library/Keychains/login.keychain"))) (auth-source-search :max 1))
;; (let ((auth-sources '("macos-keychain-generic:Login"))) (auth-source-search :max 1 :host "git.gnus.org"))
;; (let ((auth-sources '("macos-keychain-generic:Login"))) (auth-source-search :max 1))
(defun* auth-source-macos-keychain-search (&rest
spec