emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 7cc233e 2/2: * lisp/emacs-lisp/package.el: Fix a de


From: Artur Malabarba
Subject: [Emacs-diffs] master 7cc233e 2/2: * lisp/emacs-lisp/package.el: Fix a decoding issue
Date: Sun, 15 Nov 2015 20:36:05 +0000

branch: master
commit 7cc233e1e3da297882c006c1f07c628fbd4e94d5
Author: Artur Malabarba <address@hidden>
Commit: Artur Malabarba <address@hidden>

    * lisp/emacs-lisp/package.el: Fix a decoding issue
    
    (package--with-response-buffer): Use `url-insert-buffer-contents'.
    The previous code had some issues with decoding. Refactoring that
    function allows us to use the decoding from url-handlers while still
    treating both sync and async requests the same.
    
    * lisp/url/url-handlers.el (url-insert-file-contents): Move some code to
    `url-insert-buffer-contents'.
    (url-insert-buffer-contents): New function
---
 lisp/emacs-lisp/package.el |   16 ++++++++--------
 lisp/url/url-handlers.el   |   42 ++++++++++++++++++++++++------------------
 2 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index fba07a6..d811db9 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1165,16 +1165,16 @@ BODY (does not apply to errors signaled by ERROR-FORM).
                                                  (when-let ((er (plist-get 
status :error)))
                                                    (error "Error retrieving: 
%s %S" url er))
                                                  (unless 
(search-forward-regexp "^\r?\n\r?" nil 'noerror)
-                                                   (rest-error 
'rest-unintelligible-result))
-                                                 (delete-region (point-min) 
(point))
-                                                 ,@body)
-                                  (when (buffer-live-p b)
-                                    (kill-buffer b)))))))
+                                                   (error "Error retrieving: 
%s %S" url "incomprehensible buffer"))
+                                                 (with-temp-buffer
+                                                   (url-insert-buffer-contents 
b url)
+                                                   (kill-buffer b)
+                                                   (goto-char (point-min))
+                                                   ,@body)))))))
              (if ,async
                  (wrap-errors (url-retrieve url callback nil 'silent))
-               (let ((buffer (wrap-errors (url-retrieve-synchronously url 
'silent))))
-                 (with-current-buffer buffer
-                   (funcall callback nil)))))
+               (with-current-buffer (wrap-errors (url-retrieve-synchronously 
url 'silent))
+                 (funcall callback nil))))
          (wrap-errors (with-temp-buffer
                         (let ((url (expand-file-name ,file ,url-1)))
                           (unless (file-name-absolute-p url)
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el
index a5d9f37..bafe3e5 100644
--- a/lisp/url/url-handlers.el
+++ b/lisp/url/url-handlers.el
@@ -309,6 +309,29 @@ They count bytes from the beginning of the body."
 
 (defvar url-http-codes)
 
+(defun url-insert-buffer-contents (buffer url &optional visit beg end replace)
+  "Insert the contents of BUFFER into current buffer.
+This is like `url-insert', but also decodes the current buffer as
+if it had been inserted from a file named URL."
+  (if visit (setq buffer-file-name url))
+  (save-excursion
+    (let* ((start (point))
+           (size-and-charset (url-insert buffer beg end)))
+      (kill-buffer buffer)
+      (when replace
+        (delete-region (point-min) start)
+        (delete-region (point) (point-max)))
+      (unless (cadr size-and-charset)
+        ;; If the headers don't specify any particular charset, use the
+        ;; usual heuristic/rules that we apply to files.
+        (decode-coding-inserted-region (point-min) (point) url
+                                       visit beg end replace))
+      (let ((inserted (car size-and-charset)))
+        (when (fboundp 'after-insert-file-set-coding)
+          (let ((insval (after-insert-file-set-coding inserted visit)))
+            (if insval (setq inserted insval))))
+        (list url inserted)))))
+
 ;;;###autoload
 (defun url-insert-file-contents (url &optional visit beg end replace)
   (let ((buffer (url-retrieve-synchronously url)))
@@ -323,24 +346,7 @@ They count bytes from the beginning of the body."
             (kill-buffer buffer)
             ;; Signal file-error per http://debbugs.gnu.org/16733.
             (signal 'file-error (list url desc))))))
-    (if visit (setq buffer-file-name url))
-    (save-excursion
-      (let* ((start (point))
-             (size-and-charset (url-insert buffer beg end)))
-        (kill-buffer buffer)
-        (when replace
-          (delete-region (point-min) start)
-          (delete-region (point) (point-max)))
-        (unless (cadr size-and-charset)
-          ;; If the headers don't specify any particular charset, use the
-          ;; usual heuristic/rules that we apply to files.
-          (decode-coding-inserted-region start (point) url
-                                         visit beg end replace))
-        (let ((inserted (car size-and-charset)))
-          (when (fboundp 'after-insert-file-set-coding)
-            (let ((insval (after-insert-file-set-coding inserted visit)))
-              (if insval (setq inserted insval))))
-          (list url inserted))))))
+    (url-insert-buffer-contents buffer url visit beg end replace)))
 
 (put 'insert-file-contents 'url-file-handlers 'url-insert-file-contents)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]