From cd23f8dfdd8f2135480e8f86ac6feb0468e32f89 Mon Sep 17 00:00:00 2001 From: Andreas Gerler Date: Tue, 13 Nov 2018 15:13:01 +0100 Subject: [PATCH] update request. Signed-off-by: Andreas Gerler --- .../request-autoloads.el | 15 -- elpa/request-20160822.1659/request-pkg.el | 2 - .../request-20170201.147/request-autoloads.el | 22 ++ elpa/request-20170201.147/request-pkg.el | 2 + .../request.el | 219 ++++++------------ 5 files changed, 97 insertions(+), 163 deletions(-) delete mode 100644 elpa/request-20160822.1659/request-autoloads.el delete mode 100644 elpa/request-20160822.1659/request-pkg.el create mode 100644 elpa/request-20170201.147/request-autoloads.el create mode 100644 elpa/request-20170201.147/request-pkg.el rename elpa/{request-20160822.1659 => request-20170201.147}/request.el (87%) diff --git a/elpa/request-20160822.1659/request-autoloads.el b/elpa/request-20160822.1659/request-autoloads.el deleted file mode 100644 index bdf407c4..00000000 --- a/elpa/request-20160822.1659/request-autoloads.el +++ /dev/null @@ -1,15 +0,0 @@ -;;; request-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil nil ("request.el") (22555 30985 0 0)) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; request-autoloads.el ends here diff --git a/elpa/request-20160822.1659/request-pkg.el b/elpa/request-20160822.1659/request-pkg.el deleted file mode 100644 index 6b740ec9..00000000 --- a/elpa/request-20160822.1659/request-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "request" "20160822.1659" "Compatible layer for URL request in Emacs" '((emacs "24") (cl-lib "0.5"))) diff --git a/elpa/request-20170201.147/request-autoloads.el b/elpa/request-20170201.147/request-autoloads.el new file mode 100644 index 00000000..f6db8b1b --- /dev/null +++ b/elpa/request-20170201.147/request-autoloads.el @@ -0,0 +1,22 @@ +;;; request-autoloads.el --- automatically extracted autoloads +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "request" "request.el" (0 0 0 0)) +;;; Generated autoloads from request.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "request" '("request-"))) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; request-autoloads.el ends here diff --git a/elpa/request-20170201.147/request-pkg.el b/elpa/request-20170201.147/request-pkg.el new file mode 100644 index 00000000..dd26d4fd --- /dev/null +++ b/elpa/request-20170201.147/request-pkg.el @@ -0,0 +1,2 @@ +;;; -*- no-byte-compile: t -*- +(define-package "request" "20170201.147" "Compatible layer for URL request in Emacs" '((emacs "24.4")) :commit "a3d080e57eb8be606fbf39d1baff94e1b16e1fb8" :authors '(("Takafumi Arakaki ")) :maintainer '("Takafumi Arakaki ")) diff --git a/elpa/request-20160822.1659/request.el b/elpa/request-20170201.147/request.el similarity index 87% rename from elpa/request-20160822.1659/request.el rename to elpa/request-20170201.147/request.el index 7a879ee3..e282ade9 100644 --- a/elpa/request-20160822.1659/request.el +++ b/elpa/request-20170201.147/request.el @@ -5,9 +5,9 @@ ;; Free Software Foundation, Inc. ;; Author: Takafumi Arakaki -;; Package-Requires: ((emacs "24") (cl-lib "0.5")) -;; Package-Version: 20160822.1659 -;; Version: 0.2.0 +;; Package-Requires: ((emacs "24.4")) +;; Package-Version: 20170201.147 +;; Version: 0.3.0 ;; This file is NOT part of GNU Emacs. @@ -54,7 +54,7 @@ :group 'comm :prefix "request-") -(defconst request-version "0.2.0") +(defconst request-version "0.3.0") ;;; Customize variables @@ -68,6 +68,13 @@ "Executable for curl command." :type 'string) +(defcustom request-curl-options nil + "curl command options. + +List of strings that will be passed to every curl invocation. You can pass +extra options here, like setting the proxy." + :type '(repeat string)) + (defcustom request-backend (if (executable-find request-curl) 'curl 'url-retrieve) @@ -82,6 +89,11 @@ Automatically set to `curl' if curl command is found." :type '(choice (integer :tag "Request timeout seconds") (boolean :tag "No timeout" nil))) +(defcustom request-temp-prefix "emacs-request" + "Prefix for temporary files created by Request." + :type 'string + :risky t) + (defcustom request-log-level -1 "Logging level for request. One of `error'/`warn'/`info'/`verbose'/`debug'. @@ -605,6 +617,10 @@ raw-header slot." (buffer-substring (point-min) (point))) (delete-region (point-min) (min (1+ (point)) (point-max)))))))) +(defun request-untrampify-filename (file) + "Return FILE as the local file name." + (or (file-remote-p file 'localname) file)) + (defun request--parse-data (response parser) "Run PARSER in current buffer if ERROR-THROWN is nil, then kill the current buffer." @@ -615,8 +631,9 @@ then kill the current buffer." (with-current-buffer buffer (request-log 'trace "(buffer-string) at %S =\n%s" buffer (buffer-string)) - (goto-char (point-min)) - (setf (request-response-data response) (funcall parser)))))) + (when (/= (request-response-status-code response) 204) + (goto-char (point-min)) + (setf (request-response-data response) (funcall parser))))))) (cl-defun request--callback (buffer &key parser success error complete timeout status-code response @@ -875,7 +892,7 @@ Currently it is used only for testing.") (make-directory (file-name-directory (request--curl-cookie-jar)) t))) (cl-defun request--curl-command - (url &key type data headers timeout files* unix-socket + (url &key type data headers timeout response files* unix-socket &allow-other-keys &aux (cookie-jar (convert-standard-filename @@ -889,14 +906,25 @@ Currently it is used only for testing.") ;; running multiple requests. "--cookie" cookie-jar "--cookie-jar" cookie-jar "--write-out" request--curl-write-out-template) + request-curl-options (when unix-socket (list "--unix-socket" unix-socket)) (cl-loop for (name filename path mime-type) in files* collect "--form" - collect (format "%s=@%s;filename=%s%s" name path filename + collect (format "%s=@%s;filename=%s%s" name + (request-untrampify-filename path) filename (if mime-type (format ";type=%s" mime-type) ""))) - (when data (list "--data-binary" "@-")) + (when data + (let ((tempfile (request--make-temp-file))) + (push tempfile (request-response--tempfiles response)) + (let ((file-coding-system-alist nil) + (coding-system-for-write 'binary)) + (with-temp-file tempfile + (setq buffer-file-coding-system 'binary) + (set-buffer-multibyte nil) + (insert data))) + (list "--data-binary" (concat "@" (request-untrampify-filename tempfile))))) (when type (list "--request" type)) (cl-loop for (k . v) in headers collect "--header" @@ -931,6 +959,19 @@ Currently it is used only for testing.") (write-region (point-min) (point-max) tf nil 'silent)) (list name filename tf mime-type))))))) +(defun request--make-temp-file () + "Create a temporary file." + (if (file-remote-p default-directory) + (let ((tramp-temp-name-prefix request-temp-prefix) + (vec (tramp-dissect-file-name default-directory))) + (tramp-make-tramp-file-name + (tramp-file-name-method vec) + (tramp-file-name-user vec) + (tramp-file-name-host vec) + (tramp-make-tramp-temp-file vec) + (tramp-file-name-hop vec))) + (make-temp-file request-temp-prefix))) + (defun request--curl-normalize-files (files) "Change FILES into a list of (NAME FILENAME PATH MIME-TYPE). This is to make `request--curl-command' cleaner by converting @@ -940,7 +981,7 @@ temporary file paths." (let (tempfiles noerror) (unwind-protect (let* ((get-temp-file (lambda () - (let ((tf (make-temp-file "emacs-request-"))) + (let ((tf (request--make-temp-file))) (push tf tempfiles) tf))) (files* (request--curl-normalize-files-1 files get-temp-file))) @@ -981,8 +1022,13 @@ removed from the buffer before it is shown to the parser function. (process-connection-type nil) ;; Avoid starting program in non-existing directory. (home-directory (if (file-remote-p default-directory) - (with-parsed-tramp-file-name default-directory nil - (tramp-make-tramp-file-name method user host "~/")) + (let ((vec (tramp-dissect-file-name default-directory))) + (tramp-make-tramp-file-name + (tramp-file-name-method vec) + (tramp-file-name-user vec) + (tramp-file-name-host vec) + "~/" + (tramp-file-name-hop vec))) "~/")) (default-directory (expand-file-name home-directory)) (buffer (generate-new-buffer " *request curl*")) @@ -991,17 +1037,14 @@ removed from the buffer before it is shown to the parser function. (request--curl-normalize-files files) (setf (request-response--tempfiles response) tempfiles) (apply #'request--curl-command url :files* files* - settings))) + :response response settings))) (proc (apply #'start-file-process "request curl" buffer command))) (request-log 'debug "Run: %s" (mapconcat 'identity command " ")) (setf (request-response--buffer response) buffer) (process-put proc :request-response response) (set-process-coding-system proc 'binary 'binary) (set-process-query-on-exit-flag proc nil) - (set-process-sentinel proc #'request--curl-callback) - (when data - (process-send-string proc data) - (process-send-eof proc)))) + (set-process-sentinel proc #'request--curl-callback))) (defun request--curl-read-and-delete-tail-info () "Read a sexp at the end of buffer and remove it and preceding character. @@ -1035,7 +1078,7 @@ See \"set-cookie-av\" in http://www.ietf.org/rfc/rfc2965.txt") (defun request--consume-200-connection-established () "Remove \"HTTP/* 200 Connection established\" header at the point." - (when (looking-at-p "HTTP/1\\.0 200 Connection established") + (when (looking-at-p "HTTP/1\\.[0-1] 200 Connection established") (delete-region (point) (progn (request--goto-next-body) (point))))) (defun request--curl-preprocess () @@ -1138,33 +1181,31 @@ START-URL is the URL requested." (defun request--netscape-cookie-parse () "Parse Netscape/Mozilla cookie format." (goto-char (point-min)) - (let ((tsv-re (concat "^\\=" + (let ((tsv-re (concat "^\\(#HttpOnly_\\)?" (cl-loop repeat 6 concat "\\([^\t\n]+\\)\t") "\\(.*\\)")) cookies) - (while - (and - (cond - ((re-search-forward "^\\=#" nil t)) - ((re-search-forward "^\\=$" nil t)) - ((re-search-forward tsv-re) - (push (cl-loop for i from 1 to 7 collect (match-string i)) - cookies) - t)) - (= (forward-line 1) 0) - (not (= (point) (point-max))))) + (while (not (eobp)) + ;; HttpOnly cookie starts with '#' but its line is not comment line(#60) + (cond ((and (looking-at-p "^#") (not (looking-at-p "^#HttpOnly_"))) t) + ((looking-at-p "^$") t) + ((looking-at tsv-re) + (let ((cookie (cl-loop for i from 1 to 8 collect (match-string i)))) + (push cookie cookies)))) + (forward-line 1)) (setq cookies (nreverse cookies)) - (cl-loop for (domain flag path secure expiration name value) in cookies + (cl-loop for (http-only domain flag path secure expiration name value) in cookies collect (list domain (equal flag "TRUE") path (equal secure "TRUE") + (null (not http-only)) (string-to-number expiration) name value)))) (defun request--netscape-filter-cookies (cookies host localpart secure) - (cl-loop for (domain flag path secure-1 expiration name value) in cookies + (cl-loop for (domain flag path secure-1 http-only expiration name value) in cookies when (and (equal domain host) (equal path localpart) (or secure (not secure-1))) @@ -1178,120 +1219,6 @@ START-URL is the URL requested." (request--netscape-filter-cookies (request--netscape-cookie-parse) host localpart secure)))) - -;;; Monkey patches for url.el - -(defun request--url-default-expander (urlobj defobj) - "Adapted from lisp/url/url-expand.el. -FSF holds the copyright of this function: - Copyright (C) 1999, 2004-2012 Free Software Foundation, Inc." - ;; The default expansion routine - urlobj is modified by side effect! - (if (url-type urlobj) - ;; Well, they told us the scheme, let's just go with it. - nil - (setf (url-type urlobj) (or (url-type urlobj) (url-type defobj))) - (setf (url-port urlobj) (or (url-portspec urlobj) - (and (string= (url-type urlobj) - (url-type defobj)) - (url-port defobj)))) - (if (not (string= "file" (url-type urlobj))) - (setf (url-host urlobj) (or (url-host urlobj) (url-host defobj)))) - (if (string= "ftp" (url-type urlobj)) - (setf (url-user urlobj) (or (url-user urlobj) (url-user defobj)))) - (if (string= (url-filename urlobj) "") - (setf (url-filename urlobj) "/")) - ;; If the object we're expanding from is full, then we are now - ;; full. - (unless (url-fullness urlobj) - (setf (url-fullness urlobj) (url-fullness defobj))) - (if (string-match "^/" (url-filename urlobj)) - nil - (let ((query nil) - (file nil) - (sepchar nil)) - (if (string-match "[?#]" (url-filename urlobj)) - (setq query (substring (url-filename urlobj) (match-end 0)) - file (substring (url-filename urlobj) 0 (match-beginning 0)) - sepchar (substring (url-filename urlobj) (match-beginning 0) (match-end 0))) - (setq file (url-filename urlobj))) - ;; We use concat rather than expand-file-name to combine - ;; directory and file name, since urls do not follow the same - ;; rules as local files on all platforms. - (setq file (url-expander-remove-relative-links - (concat (url-file-directory (url-filename defobj)) file))) - (setf (url-filename urlobj) - (if query (concat file sepchar query) file)))))) - -(defadvice url-default-expander - (around request-monkey-patch-url-default-expander (urlobj defobj)) - "Monkey patch `url-default-expander' to fix bug #12374. -This patch is applied to Emacs trunk at revno 111291: - http://bzr.savannah.gnu.org/lh/emacs/trunk/revision/111291. -Without this patch, port number is not treated when using -`url-expand-file-name'. -See: http://thread.gmane.org/gmane.emacs.devel/155698" - (setq ad-return-value (request--url-default-expander urlobj defobj))) - -(unless (equal (url-expand-file-name "/path" "http://127.0.0.1:8000") - "http://127.0.0.1:8000/path") - (ad-enable-advice 'url-default-expander - 'around - 'request-monkey-patch-url-default-expander) - (ad-activate 'url-default-expander)) - - -(eval-when-compile (require 'url-http) - (defvar url-http-no-retry) - (defvar url-http-extra-headers) - (defvar url-http-data) - (defvar url-callback-function) - (defvar url-callback-arguments)) -(declare-function url-http-idle-sentinel "url-http") -(declare-function url-http-activate-callback "url-http") -(declare-function url-http "url-http") -(declare-function url-http-parse-headers "url-http") - -(defun request--url-http-end-of-document-sentinel (proc why) - "Adapted from lisp/url/url-http.el. -FSF holds the copyright of this function: - Copyright (C) 1999, 2001, 2004-2012 Free Software Foundation, Inc." - (url-http-debug "url-http-end-of-document-sentinel in buffer (%s)" - (process-buffer proc)) - (url-http-idle-sentinel proc why) - (when (buffer-name (process-buffer proc)) - (with-current-buffer (process-buffer proc) - (goto-char (point-min)) - (cond ((not (looking-at "HTTP/")) - (if url-http-no-retry - ;; HTTP/0.9 just gets passed back no matter what - (url-http-activate-callback) - ;; Call `url-http' again if our connection expired. - (erase-buffer) - (let ((url-request-method url-http-method) - (url-request-extra-headers url-http-extra-headers) - (url-request-data url-http-data)) - (url-http url-current-object url-callback-function - url-callback-arguments (current-buffer))))) - ((url-http-parse-headers) - (url-http-activate-callback)))))) - -(defadvice url-http-end-of-document-sentinel - (around request-monkey-patch-url-http-end-of-document-sentinel (proc why)) - "Monkey patch `url-http-end-of-document-sentinel' to fix bug #11469. -This patch is applied to Emacs trunk at revno 111291: - http://bzr.savannah.gnu.org/lh/emacs/trunk/revision/111291. -Without this patch, PUT method fails every two times. -See: http://thread.gmane.org/gmane.emacs.devel/155697" - (setq ad-return-value (request--url-http-end-of-document-sentinel proc why))) - -(when (and (version< "24" emacs-version) - (version< emacs-version "24.3.50.1")) - (ad-enable-advice 'url-http-end-of-document-sentinel - 'around - 'request-monkey-patch-url-http-end-of-document-sentinel) - (ad-activate 'url-http-end-of-document-sentinel)) - - (provide 'request) ;;; request.el ends here -- 2.47.3