From 61e9662ef52e9b4a257fc9dd3c3812af2657f70a Mon Sep 17 00:00:00 2001 From: Teodor Zlatanov Date: Fri, 25 Feb 2011 23:52:19 +0000 Subject: [PATCH] Merge changes made in Gnus trunk. auth-source.el (auth-source-search): Cache empty result sets. password-cache.el (password-in-cache-p): Convenience function to check if a key is in the cache, even if the value is nil. --- lisp/ChangeLog | 5 +++++ lisp/gnus/ChangeLog | 2 ++ lisp/gnus/auth-source.el | 16 ++++++++++++++-- lisp/password-cache.el | 6 ++++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b59b11590d0..f5df9a26c37 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-02-25 Teodor Zlatanov + + * password-cache.el (password-in-cache-p): Convenience function to + check if a key is in the cache, even if the value is nil. + 2011-02-25 Jambunathan K * emacs-lisp/package-x.el (package--archive-contents-from-url) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 7e39a369714..3eb7a477dd1 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,5 +1,7 @@ 2011-02-25 Teodor Zlatanov + * auth-source.el (auth-source-search): Cache empty result sets. + * auth-source.el (auth-source-save-behavior): New variable to replace `auth-source-never-create'. (auth-source-netrc-create): Use it. diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el index e4d4fd4c83b..500de10b71c 100644 --- a/lisp/gnus/auth-source.el +++ b/lisp/gnus/auth-source.el @@ -524,10 +524,13 @@ must call it to obtain the actual value." (keys (loop for i below (length spec) by 2 unless (memq (nth i spec) ignored-keys) collect (nth i spec))) + (cached (auth-source-remembered-p spec)) + ;; note that we may have cached results but found is still nil + ;; (there were no results from the search) (found (auth-source-recall spec)) filtered-backends accessor-key backend) - (if (and found auth-source-do-cache) + (if (and cached auth-source-do-cache) (auth-source-do-debug "auth-source-search: found %d CACHED results matching %S" (length found) spec) @@ -580,7 +583,8 @@ must call it to obtain the actual value." "auth-source-search: CREATED %d results (max %d) matching %S" (length found) max spec)) - (when (and found auth-source-do-cache) + ;; note we remember the lack of result too, if it's applicable + (when auth-source-do-cache (auth-source-remember spec found))) found)) @@ -654,6 +658,11 @@ Returns the deleted entries." (password-read-from-cache (concat auth-source-magic (format "%S" spec)))) +(defun auth-source-remembered-p (spec) + "Check if SPEC is remembered." + (password-in-cache-p + (concat auth-source-magic (format "%S" spec)))) + (defun auth-source-forget (spec) "Forget any cached data matching SPEC exactly. @@ -664,7 +673,10 @@ Returns t or nil for forgotten or not found." ;;; (loop for sym being the symbols of password-data when (string-match (concat "^" auth-source-magic) (symbol-name sym)) collect (symbol-name sym)) ;;; (auth-source-remember '(:host "wedd") '(4 5 6)) +;;; (auth-source-remembered-p '(:host "wedd")) ;;; (auth-source-remember '(:host "xedd") '(1 2 3)) +;;; (auth-source-remembered-p '(:host "xedd")) +;;; (auth-source-remembered-p '(:host "zedd")) ;;; (auth-source-recall '(:host "xedd")) ;;; (auth-source-recall '(:host t)) ;;; (auth-source-forget+ :host t) diff --git a/lisp/password-cache.el b/lisp/password-cache.el index 8738aa65a9f..a7f75a03add 100644 --- a/lisp/password-cache.el +++ b/lisp/password-cache.el @@ -76,6 +76,12 @@ regulate cache behavior." key (symbol-value (intern-soft key password-data)))) +(defun password-in-cache-p (key) + "Check if KEY is in the cache." + (and password-cache + key + (intern-soft key password-data))) + (defun password-read (prompt &optional key) "Read password, for use with KEY, from user, or from cache if wanted. KEY indicate the purpose of the password, so the cache can -- 2.11.4.GIT