[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-25 d99ccd6: Backport: * lisp/emacs-lisp/package.el:
From: |
Artur Malabarba |
Subject: |
[Emacs-diffs] emacs-25 d99ccd6: Backport: * lisp/emacs-lisp/package.el: Fix a decoding issue. |
Date: |
Sun, 15 Nov 2015 20:34:58 +0000 |
branch: emacs-25
commit d99ccd6dd171a12cf528c03a4a956ad1751173c5
Author: Artur Malabarba <address@hidden>
Commit: Artur Malabarba <address@hidden>
Backport: * lisp/emacs-lisp/package.el: Fix a decoding issue.
* lisp/url/url-handlers.el (url-insert-file-contents): Move some code to
`url-insert-buffer-contents'.
(url-insert-buffer-contents): New function
(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/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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-25 d99ccd6: Backport: * lisp/emacs-lisp/package.el: Fix a decoding issue.,
Artur Malabarba <=