]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/package.el: Fix a decoding issue
authorArtur Malabarba <bruce.connor.am@gmail.com>
Sun, 15 Nov 2015 21:28:37 +0000 (21:28 +0000)
committerArtur Malabarba <bruce.connor.am@gmail.com>
Sun, 15 Nov 2015 21:35:06 +0000 (21:35 +0000)
(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
lisp/url/url-handlers.el

index fba07a6801e4c0b5d15da8acc77f6179e7cdf5c5..d811db9579fd64b61ceeef158f9442581dc1d606 100644 (file)
@@ -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)
index a5d9f37b5ee8580aa25758467142ab8e257c7847..bafe3e52725312d005bed3a6b4861092f54f32aa 100644 (file)
@@ -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)