Subject: Re: bug#23424: 25.0.93; error in process sentinel with Melpa added to package-archives

From: Kaushal Modi <[email-masked]>
Date: Mon, 02 May 2016 23:18:38 +0000

I was finally able to get the backtrace for end-of-file after rebuilding
emacs without those 2 assertion check flags.

So the last elisp-land function to propagate the error was in url-http.el:

=====
(defun url-http-activate-callback ()
  "Activate callback specified when this buffer was created."
  (url-http-mark-connection-as-free (url-host url-current-object)
   (url-port url-current-object)
   url-http-process)
  (url-http-debug "Activating callback in buffer (%s): %S %S"
 (buffer-name) url-callback-function url-callback-arguments)
  (apply url-callback-function url-callback-arguments))
=====

I see that url-http-debug form but it is not run because the error appears
too soon and the user does not have change to hit C-g to make the info
print in url-http-debug. So how about printing that info if "(apply
url-callback-function url-callback-arguments)" results in error?

With the above "melpa-fake" archive from my gist.github.com and a modified
version of url-http-activate-callback as below:

=====
(defun url-http-activate-callback ()
  "Activate callback specified when this buffer was created."
  (url-http-mark-connection-as-free (url-host url-current-object)
   (url-port url-current-object)
   url-http-process)
  (url-http-debug "Activating callback in buffer (%s): %S %S"
 (buffer-name) url-callback-function url-callback-arguments)
  (message "url-callback-function: %S" url-callback-function)
  (apply url-callback-function url-callback-arguments))
=====

I get:

=====
url-callback-function: #[257 <byte-code> [("melpa-fake" . "
https://gist.githubusercontent.com/kaushalmodi/0603d601d84fc3282a34f08d3fe75f30/raw/597a359fba08dac61ff20e1ece6437b406a5a622/")
"archive-contents" t "
https://gist.githubusercontent.com/kaushalmodi/0603d601d84fc3282a34f08d3fe75f30/raw/597a359fba08dac61ff20e1ece6437b406a5a622/archive-contents"
package-user-dir package-check-signature require url-handlers
generate-new-buffer " *temp*" make-byte-code 0 <byte-code> vconcat vector
[buffer-name kill-buffer] 2 (error) plist-get :error error "Error
retrieving: %s %S" search-forward-regexp "^
?

?" nil noerror "incomprehensible buffer" url-insert-buffer-contents
kill-buffer t package--update-downloads-in-progress signal buffer-string
expand-file-name format "archives/%s" read-from-string make-directory
write-region silent package--check-signature 256 <byte-code> [write-region
nil silent mapconcat epg-signature-to-string "
" ".signed"] 7 "

(fn &optional GOOD-SIGS)" "\301\300!\207"
[package--update-downloads-in-progress] package-unsigned-archives] 20 "

(fn STATUS)"]
error in process filter: End of file during parsing [2 times]
=====

So can we have something like:
- If  (apply url-callback-function url-callback-arguments) returns an
error, then extract the url being fetched from url-callback-function and
print some like "Error incurred when when processing XYZ url.". In this
case, we know that read-from-string threw an error. So we can even say that
the string fetched from XYZ url could not be parsed as a valid lisp form
(it does not necessarily mean that it read an empty string; in this case
the lisp form was incomplete).

The value of url-callback-function has a lot of other info which I do not
understand (I spy mainly the URL in it and "read-from-string" in it). But
may be using all the info in that var, we can have a well constructed error
message that can tell us what exactly went wrong. What do you think?
-- 

-- 
Kaushal Modi