unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Daniel Pittman <slippycheeze@google.com>
To: Michael Albinus <michael.albinus@gmx.de>
Cc: emacs-devel <emacs-devel@gnu.org>
Subject: Re: TRAMP VC optimization fails: non-TRAMP filenames handled incorrectly in async operations.
Date: Fri, 29 Mar 2019 12:36:21 +0000	[thread overview]
Message-ID: <CAC45yQus1vNs0MmxgXOYANNSuddMSuyxp8WQ2TOSBxbGpQtksA@mail.gmail.com> (raw)
In-Reply-To: <8736n8i4wa.fsf@gmx.de>

[-- Attachment #1: Type: text/plain, Size: 59303 bytes --]

On Wed, Mar 27, 2019 at 5:49 PM Michael Albinus <michael.albinus@gmx.de>
wrote:

> Daniel Pittman <slippycheeze@google.com> writes:
>
> In your initial message you've said, that the problem happened inside
> tramp-vc-file-name-handler. Is this always the case? If yes, I could
> simply catch errors inside this function, and in case of, throw away all
> results. This would fall back to the non-optimized solution by default.
>

As far as I can tell, yes, that is correct.  In addition to caching errors,
testing if the filename returned is actually a tramp filename and aborting
on that would also work, as far as I can tell.


> Since I cannot reproduce the problem (yet), do you have a backtrace?
>

Sure, please see it follow.  I have censored the content of a small number
of strings, but this is replacing a standard ASCII letter with 'X' so
should have no semantic effect.  Sorry to have to do that.  Fair warning,
it is ... long.

This actually has multiple backtraces, because the error causing process
triggers while displaying the first error, but I included everything
because truth in advertising or something.

The most interesting part is at the very start, where my `revert-file`
operation on a remote file triggers a `vc-refresh-state`, which ends up
causing `tramp-send-string` to run `process-send-string`, and then a timer
fires that drives the "deferred" third party library [1] to move on to
running a background command, using the timeout(1) and p4(1) binaries to
grab some state information.

That p4 call is driven from some internal code here at Google, but I don't
think it is mandatory: as you know, if the timer fires, any code attached
to the timer could fire, and make the same calls.

Anyway, once you skip over the deferred code, you get to:

apply(start-process "*deferred:*/usr/bin/timeout*:41" "
*deferred:*/usr/bin/timeout*:41" "/usr/bin/timeout" ("1s" "p4"
"-zprog=google-piper.el" "--format=%clientName%\n%clientRoot%" "info"))

That in term, a few steps later calls make-process, and that calls

  tramp-vc-file-name-handler(expand-file-name "~"
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")

...and there we have our problem start.

[1] https://github.com/kiwanami/emacs-deferred

  backtrace()
  tramp-error(nil user-error "Not a Tramp file name: \"%s\"" "~")
  apply(tramp-error nil user-error "Not a Tramp file name: \"%s\"" "~")
  tramp-user-error(nil "Not a Tramp file name: \"%s\"" "~")
  (if (tramp-tramp-file-p name) nil (tramp-user-error nil "Not a Tramp file
name: \"%s\"" name))
  (unless (tramp-tramp-file-p name) (tramp-user-error nil "Not a Tramp file
name: \"%s\"" name))
  (progn (unless (tramp-tramp-file-p name) (tramp-user-error nil "Not a
Tramp file name: \"%s\"" name)) (if (not (string-match (nth 0
tramp-file-name-structure) name)) (error "`tramp-file-name-structure'
didn't match!") (let ((method (match-string (nth 1
tramp-file-name-structure) name)) (user (match-string (nth 2
tramp-file-name-structure) name)) (host (match-string (nth 3
tramp-file-name-structure) name)) (localname (match-string (nth 4
tramp-file-name-structure) name)) (hop (match-string (nth 5
tramp-file-name-structure) name)) domain port v) (when user (when
(string-match tramp-user-with-domain-regexp user) (setq domain
(match-string 2 user) user (match-string 1 user)))) (when host (when
(string-match tramp-host-with-port-regexp host) (setq port (match-string 2
host) host (match-string 1 host))) (when (string-match
tramp-prefix-ipv6-regexp host) (setq host (replace-match "" nil t host)))
(when (string-match tramp-postfix-ipv6-regexp host) (setq host
(replace-match "" nil t host)))) (unless nodefault (when hop (setq v
(tramp-dissect-hop-name hop) hop (and hop (tramp-make-tramp-hop-name v))))
(let ((tramp-default-host (or ... tramp-default-host))) (setq method
(tramp-find-method method user host) user (tramp-find-user method user
host) host (tramp-find-host method user host) hop (and hop (format-spec hop
...))))) (prog1 (setq v (make-tramp-file-name :method method :user user
:domain domain :host host :port port :localname localname :hop hop)) (when
(and hop (or (not ...) (tramp-get-method-parameter v ...)))
(tramp-user-error v "Method `%s' is not supported for multi-hops."
method))))))
  (unwind-protect (progn (unless (tramp-tramp-file-p name)
(tramp-user-error nil "Not a Tramp file name: \"%s\"" name)) (if (not
(string-match (nth 0 tramp-file-name-structure) name)) (error
"`tramp-file-name-structure' didn't match!") (let ((method (match-string
(nth 1 tramp-file-name-structure) name)) (user (match-string (nth 2
tramp-file-name-structure) name)) (host (match-string (nth 3
tramp-file-name-structure) name)) (localname (match-string (nth 4
tramp-file-name-structure) name)) (hop (match-string (nth 5
tramp-file-name-structure) name)) domain port v) (when user (when
(string-match tramp-user-with-domain-regexp user) (setq domain
(match-string 2 user) user (match-string 1 user)))) (when host (when
(string-match tramp-host-with-port-regexp host) (setq port (match-string 2
host) host (match-string 1 host))) (when (string-match
tramp-prefix-ipv6-regexp host) (setq host (replace-match "" nil t host)))
(when (string-match tramp-postfix-ipv6-regexp host) (setq host
(replace-match "" nil t host)))) (unless nodefault (when hop (setq v
(tramp-dissect-hop-name hop) hop (and hop ...))) (let ((tramp-default-host
...)) (setq method (tramp-find-method method user host) user
(tramp-find-user method user host) host (tramp-find-host method user host)
hop (and hop ...)))) (prog1 (setq v (make-tramp-file-name :method method
:user user :domain domain :host host :port port :localname localname :hop
hop)) (when (and hop (or ... ...)) (tramp-user-error v "Method `%s' is not
supported for multi-hops." method)))))) (set-match-data
save-match-data-internal 'evaporate))
  (let ((save-match-data-internal (match-data))) (unwind-protect (progn
(unless (tramp-tramp-file-p name) (tramp-user-error nil "Not a Tramp file
name: \"%s\"" name)) (if (not (string-match (nth 0
tramp-file-name-structure) name)) (error "`tramp-file-name-structure'
didn't match!") (let ((method (match-string ... name)) (user (match-string
... name)) (host (match-string ... name)) (localname (match-string ...
name)) (hop (match-string ... name)) domain port v) (when user (when
(string-match tramp-user-with-domain-regexp user) (setq domain ... user
...))) (when host (when (string-match tramp-host-with-port-regexp host)
(setq port ... host ...)) (when (string-match tramp-prefix-ipv6-regexp
host) (setq host ...)) (when (string-match tramp-postfix-ipv6-regexp host)
(setq host ...))) (unless nodefault (when hop (setq v ... hop ...)) (let
(...) (setq method ... user ... host ... hop ...))) (prog1 (setq v
(make-tramp-file-name :method method :user user :domain domain :host host
:port port :localname localname :hop hop)) (when (and hop ...)
(tramp-user-error v "Method `%s' is not supported for multi-hops."
method)))))) (set-match-data save-match-data-internal 'evaporate)))
  (save-match-data (unless (tramp-tramp-file-p name) (tramp-user-error nil
"Not a Tramp file name: \"%s\"" name)) (if (not (string-match (nth 0
tramp-file-name-structure) name)) (error "`tramp-file-name-structure'
didn't match!") (let ((method (match-string (nth 1
tramp-file-name-structure) name)) (user (match-string (nth 2
tramp-file-name-structure) name)) (host (match-string (nth 3
tramp-file-name-structure) name)) (localname (match-string (nth 4
tramp-file-name-structure) name)) (hop (match-string (nth 5
tramp-file-name-structure) name)) domain port v) (when user (when
(string-match tramp-user-with-domain-regexp user) (setq domain
(match-string 2 user) user (match-string 1 user)))) (when host (when
(string-match tramp-host-with-port-regexp host) (setq port (match-string 2
host) host (match-string 1 host))) (when (string-match
tramp-prefix-ipv6-regexp host) (setq host (replace-match "" nil t host)))
(when (string-match tramp-postfix-ipv6-regexp host) (setq host
(replace-match "" nil t host)))) (unless nodefault (when hop (setq v
(tramp-dissect-hop-name hop) hop (and hop (tramp-make-tramp-hop-name v))))
(let ((tramp-default-host (or ... tramp-default-host))) (setq method
(tramp-find-method method user host) user (tramp-find-user method user
host) host (tramp-find-host method user host) hop (and hop (format-spec hop
...))))) (prog1 (setq v (make-tramp-file-name :method method :user user
:domain domain :host host :port port :localname localname :hop hop)) (when
(and hop (or (not ...) (tramp-get-method-parameter v ...)))
(tramp-user-error v "Method `%s' is not supported for multi-hops."
method))))))
  tramp-dissect-file-name("~")
  (let* ((v (tramp-dissect-file-name filename)) (method
(tramp-file-name-method v)) (user (tramp-file-name-user v)) (domain
(tramp-file-name-domain v)) (host (tramp-file-name-host v)) (port
(tramp-file-name-port v)) (localname (tramp-file-name-localname v)) (hop
(tramp-file-name-hop v))) (ignore method user domain host port localname
hop) (cond ((and fn (memq operation '(file-exists-p file-readable-p)))
(add-to-list 'tramp-vc-registered-file-names localname 'append) nil) ((and
fn (eq operation 'process-file) 0)) ((and fn (eq operation
'start-file-process) nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args))))
  (with-parsed-tramp-file-name filename nil (cond ((and fn (memq operation
'(file-exists-p file-readable-p))) (add-to-list
'tramp-vc-registered-file-names localname 'append) nil) ((and fn (eq
operation 'process-file) 0)) ((and fn (eq operation 'start-file-process)
nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args))))
  (let ((filename (tramp-replace-environment-variables (apply
#'tramp-file-name-for-operation operation args))) (fn (assoc operation
tramp-sh-file-name-handler-alist))) (with-parsed-tramp-file-name filename
nil (cond ((and fn (memq operation '(file-exists-p file-readable-p)))
(add-to-list 'tramp-vc-registered-file-names localname 'append) nil) ((and
fn (eq operation 'process-file) 0)) ((and fn (eq operation
'start-file-process) nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args)))))
  (progn (let ((filename (tramp-replace-environment-variables (apply
#'tramp-file-name-for-operation operation args))) (fn (assoc operation
tramp-sh-file-name-handler-alist))) (with-parsed-tramp-file-name filename
nil (cond ((and fn (memq operation '...)) (add-to-list
'tramp-vc-registered-file-names localname 'append) nil) ((and fn (eq
operation 'process-file) 0)) ((and fn (eq operation 'start-file-process)
nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args))))))
  (unwind-protect (progn (let ((filename
(tramp-replace-environment-variables (apply #'tramp-file-name-for-operation
operation args))) (fn (assoc operation tramp-sh-file-name-handler-alist)))
(with-parsed-tramp-file-name filename nil (cond ((and fn (memq operation
...)) (add-to-list 'tramp-vc-registered-file-names localname 'append) nil)
((and fn (eq operation ...) 0)) ((and fn (eq operation ...) nil)) (fn
(save-match-data (apply ... args))) (t (tramp-run-real-handler operation
args)))))) (set-match-data save-match-data-internal 'evaporate))
  (let ((save-match-data-internal (match-data))) (unwind-protect (progn
(let ((filename (tramp-replace-environment-variables (apply ... operation
args))) (fn (assoc operation tramp-sh-file-name-handler-alist)))
(with-parsed-tramp-file-name filename nil (cond ((and fn ...) (add-to-list
... localname ...) nil) ((and fn ... 0)) ((and fn ... nil)) (fn
(save-match-data ...)) (t (tramp-run-real-handler operation args))))))
(set-match-data save-match-data-internal 'evaporate)))
  (save-match-data (let ((filename (tramp-replace-environment-variables
(apply #'tramp-file-name-for-operation operation args))) (fn (assoc
operation tramp-sh-file-name-handler-alist))) (with-parsed-tramp-file-name
filename nil (cond ((and fn (memq operation '...)) (add-to-list
'tramp-vc-registered-file-names localname 'append) nil) ((and fn (eq
operation 'process-file) 0)) ((and fn (eq operation 'start-file-process)
nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args))))))
  tramp-vc-file-name-handler(expand-file-name "~"
"/gssh:slippycheeze.X.XXXXXXXX.com:/XXXXXX/XXX/XXXX...")
  make-process(:name "*deferred:*/usr/bin/timeout*:42" :buffer "
*deferred:*/usr/bin/timeout*:42" :command ("/usr/bin/timeout" "5s" "p4"
"-zprog=google-piper.el"
"--format=%depotFile%\n%clientFile%\n%action%\n%change..." "fstat" "--"
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX..."))
  apply(make-process (:name "*deferred:*/usr/bin/timeout*:42" :buffer "
*deferred:*/usr/bin/timeout*:42" :command ("/usr/bin/timeout" "5s" "p4"
"-zprog=google-piper.el"
"--format=%depotFile%\n%clientFile%\n%action%\n%change..." "fstat" "--"
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")))
  start-process("*deferred:*/usr/bin/timeout*:42" "
*deferred:*/usr/bin/timeout*:42" "/usr/bin/timeout" "5s" "p4"
"-zprog=google-piper.el"
"--format=%depotFile%\n%clientFile%\n%action%\n%change..." "fstat" "--"
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")
  apply(start-process "*deferred:*/usr/bin/timeout*:42" "
*deferred:*/usr/bin/timeout*:42" "/usr/bin/timeout" ("5s" "p4"
"-zprog=google-piper.el"
"--format=%depotFile%\n%clientFile%\n%action%\n%change..." "fstat" "--"
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX..."))
  (if (null (car args)) (apply f proc-name buf-name command nil) (apply f
proc-name buf-name command args))
  (setq proc (if (null (car args)) (apply f proc-name buf-name command nil)
(apply f proc-name buf-name command args)))
  (let ((default-directory pwd) (process-environment env)
(process-connection-type con-type)) (setq proc (if (null (car args)) (apply
f proc-name buf-name command nil) (apply f proc-name buf-name command
args))) (set-process-sentinel proc #'(lambda (_proc event) (cond
((string-match "exited abnormally" event) (let (...) (kill-buffer proc-buf)
(deferred:post-task nd ... msg))) ((equal event "finished\n")
(deferred:post-task nd 'ok proc-buf))))) (progn (or (and (memq (type-of nd)
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list 'deferred
nd))) (let* ((v nd)) (aset v 3 #'(lambda (x) (deferred:default-cancel x)
(if proc (progn ... ...)))))))
  (condition-case err (let ((default-directory pwd) (process-environment
env) (process-connection-type con-type)) (setq proc (if (null (car args))
(apply f proc-name buf-name command nil) (apply f proc-name buf-name
command args))) (set-process-sentinel proc #'(lambda (_proc event) (cond
((string-match "exited abnormally" event) (let ... ... ...)) ((equal event
"finished\n") (deferred:post-task nd ... proc-buf))))) (progn (or (and
(memq (type-of nd) cl-struct-deferred-tags) t) (signal 'wrong-type-argument
(list 'deferred nd))) (let* ((v nd)) (aset v 3 #'(lambda (x)
(deferred:default-cancel x) (if proc ...)))))) (error (deferred:post-task
nd 'ng err)))
  (closure ((proc) (proc-buf . #<buffer  *deferred:*/usr/bin/timeout*:42>)
(nd . #s(deferred :callback deferred:default-callback :errorback
deferred:default-errorback :cancel deferred:default-cancel :next
#s(deferred :callback (closure ... ... ...) :errorback
deferred:default-errorback :cancel (closure ... ... ... ...) :next
#s(deferred :callback ... :errorback deferred:default-errorback :cancel
deferred:default-cancel :next ... :status nil :value nil) :status nil
:value nil) :status nil :value nil)) (con-type . t) (env "TERM=dumb"
"P4CONFIG=.p4config" "MANPATH=/Users/slippycheeze/share/man:/User..."
"INFOPATH=/Users/slippycheeze/share/info:/Us..." "LANG=en_US.UTF-8"
"XPC_FLAGS=0x0" "SECURITYSESSIONID=XXXXX" "USER=slippycheeze"
"COMMAND_MODE=unix2003" "XPC_SERVICE_NAME=org.gnu.Emacs.15324"
"DISPLAY=/private/tmp/com.apple.launchd.O28B..." "LOGNAME=slippycheeze"
"PATH=/Users/slippycheeze/.bagpipe:/Users/sl..."
"SSH_AUTH_SOCK=/private/tmp/com.apple.launch..."
"Apple_PubSub_Socket_Render=/private/tmp/com..."
"SHELL=/Users/slippycheeze/homebrew/bin/zsh" "HOME=/Users/slippycheeze"
"__CF_USER_TEXT_ENCODING=0x64DE5:0x0:0x0"
"TMPDIR=/var/folders/bc/tpg4l8wj7gg2722p9384...") (pwd .
"/gssh:slippycheeze.X.XXXXXXXX.com:/XXXXXX/X...") (buf-name . "
*deferred:*/usr/bin/timeout*:42") (proc-name .
"*deferred:*/usr/bin/timeout*:42") (uid . 42) (d . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback #0 :errorback
deferred:default-errorback :cancel deferred:default-cancel :next nil
:status nil :value nil) :status nil :value nil)) (args "5s" "p4"
"-zprog=google-piper.el"
"--format=%depotFile%\n%clientFile%\n%action%\n..." "fstat" "--"
"/gssh:slippycheeze.X.XXXXXXXX.com:/XXXXXX/X...") (command .
"/usr/bin/timeout") (f . start-process) cl-struct-deferred-tags t) (_x)
(setq proc-buf (get-buffer-create buf-name)) (condition-case err (let
((default-directory pwd) (process-environment env) (process-connection-type
con-type)) (setq proc (if (null ...) (apply f proc-name buf-name command
nil) (apply f proc-name buf-name command args))) (set-process-sentinel proc
#'(lambda ... ...)) (progn (or (and ... t) (signal ... ...)) (let* (...)
(aset v 3 ...)))) (error (deferred:post-task nd 'ng err))) nil)(nil)
  funcall((closure ((proc) (proc-buf . #<buffer
*deferred:*/usr/bin/timeout*:42>) (nd . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback (closure (... ... ...
... ... cl-struct-deferred-tags t) (buf) (prog1 ... ...)) :errorback
deferred:default-errorback :cancel (closure (... ... ... ... ... ...
cl-struct-deferred-tags t) (_x) (deferred:default-cancel d)
(deferred:default-cancel pd)) :next #s(deferred :callback (closure ... ...
...) :errorback deferred:default-errorback :cancel deferred:default-cancel
:next #s(deferred :callback deferred:default-callback :errorback ignore
:cancel deferred:default-cancel :next ... :status nil :value nil) :status
nil :value nil) :status nil :value nil) :status nil :value nil)) (con-type
. t) (env "TERM=dumb" "P4CONFIG=.p4config"
"MANPATH=/Users/slippycheeze/share/man:/Users/slipp..."
"INFOPATH=/Users/slippycheeze/share/info:/Users/sli..." "LANG=en_US.UTF-8"
"XPC_FLAGS=0x0" "SECURITYSESSIONID=XXXXX" "USER=slippycheeze"
"COMMAND_MODE=unix2003" "XPC_SERVICE_NAME=org.gnu.Emacs.15324"
"DISPLAY=/private/tmp/com.apple.launchd.O28Br4hHcs/..."
"LOGNAME=slippycheeze"
"PATH=/Users/slippycheeze/.bagpipe:/Users/slippyche..."
"SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.Qs29e..."
"Apple_PubSub_Socket_Render=/private/tmp/com.apple...."
"SHELL=/Users/slippycheeze/homebrew/bin/zsh" "HOME=/Users/slippycheeze"
"__CF_USER_TEXT_ENCODING=0x64DE5:0x0:0x0"
"TMPDIR=/var/folders/bc/tpg4l8wj7gg2722p9384ftww00c...") (pwd .
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...") (buf-name . "
*deferred:*/usr/bin/timeout*:42") (proc-name .
"*deferred:*/usr/bin/timeout*:42") (uid . 42) (d . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback #1 :errorback
deferred:default-errorback :cancel deferred:default-cancel :next nil
:status nil :value nil) :status nil :value nil)) (args "5s" "p4"
"-zprog=google-piper.el"
"--format=%depotFile%\n%clientFile%\n%action%\n%change..." "fstat" "--"
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...") (command .
"/usr/bin/timeout") (f . start-process) cl-struct-deferred-tags t) (_x)
(setq proc-buf (get-buffer-create buf-name)) (condition-case err (let
((default-directory pwd) (process-environment env) (process-connection-type
con-type)) (setq proc (if (null (car args)) (apply f proc-name buf-name
command nil) (apply f proc-name buf-name command args)))
(set-process-sentinel proc #'(lambda (_proc event) (cond ... ...))) (progn
(or (and (memq ... cl-struct-deferred-tags) t) (signal 'wrong-type-argument
(list ... nd))) (let* ((v nd)) (aset v 3 #'...)))) (error
(deferred:post-task nd 'ng err))) nil) nil)
  (condition-case err (funcall f arg) ('wrong-number-of-arguments
(display-warning 'deferred "Callback that takes no argument may be
specified.\n..." err) (condition-case nil (funcall f)
('wrong-number-of-arguments (signal 'wrong-number-of-arguments (cdr
err))))))
  deferred:call-lambda((closure ((proc) (proc-buf . #<buffer
*deferred:*/usr/bin/timeout*:42>) (nd . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback (closure (... ... ...
... ... cl-struct-deferred-tags t) (buf) (prog1 ... ...)) :errorback
deferred:default-errorback :cancel (closure (... ... ... ... ... ...
cl-struct-deferred-tags t) (_x) (deferred:default-cancel d)
(deferred:default-cancel pd)) :next #s(deferred :callback (closure ... ...
...) :errorback deferred:default-errorback :cancel deferred:default-cancel
:next #s(deferred :callback deferred:default-callback :errorback ignore
:cancel deferred:default-cancel :next ... :status nil :value nil) :status
nil :value nil) :status nil :value nil) :status nil :value nil)) (con-type
. t) (env "TERM=dumb" "P4CONFIG=.p4config"
"MANPATH=/Users/slippycheeze/share/man:/Users/slipp..."
"INFOPATH=/Users/slippycheeze/share/info:/Users/sli..." "LANG=en_US.UTF-8"
"XPC_FLAGS=0x0" "SECURITYSESSIONID=XXXXX" "USER=slippycheeze"
"COMMAND_MODE=unix2003" "XPC_SERVICE_NAME=org.gnu.Emacs.15324"
"DISPLAY=/private/tmp/com.apple.launchd.O28Br4hHcs/..."
"LOGNAME=slippycheeze"
"PATH=/Users/slippycheeze/.bagpipe:/Users/slippyche..."
"SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.Qs29e..."
"Apple_PubSub_Socket_Render=/private/tmp/com.apple...."
"SHELL=/Users/slippycheeze/homebrew/bin/zsh" "HOME=/Users/slippycheeze"
"__CF_USER_TEXT_ENCODING=0x64DE5:0x0:0x0"
"TMPDIR=/var/folders/bc/tpg4l8wj7gg2722p9384ftww00c...") (pwd .
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...") (buf-name . "
*deferred:*/usr/bin/timeout*:42") (proc-name .
"*deferred:*/usr/bin/timeout*:42") (uid . 42) (d . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback #1 :errorback
deferred:default-errorback :cancel deferred:default-cancel :next nil
:status nil :value nil) :status nil :value nil)) (args "5s" "p4"
"-zprog=google-piper.el"
"--format=%depotFile%\n%clientFile%\n%action%\n%change..." "fstat" "--"
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...") (command .
"/usr/bin/timeout") (f . start-process) cl-struct-deferred-tags t) (_x)
(setq proc-buf (get-buffer-create buf-name)) (condition-case err (let
((default-directory pwd) (process-environment env) (process-connection-type
con-type)) (setq proc (if (null (car args)) (apply f proc-name buf-name
command nil) (apply f proc-name buf-name command args)))
(set-process-sentinel proc #'(lambda (_proc event) (cond ... ...))) (progn
(or (and (memq ... cl-struct-deferred-tags) t) (signal 'wrong-type-argument
(list ... nd))) (let* ((v nd)) (aset v 3 #'...)))) (error
(deferred:post-task nd 'ng err))) nil) nil)
  (let ((value (deferred:call-lambda callback arg))) (cond ((and (memq
(type-of value) cl-struct-deferred-tags) t) nil (if next-deferred
(deferred:set-next value next-deferred) value)) (t (if next-deferred
(deferred:post-task next-deferred 'ok value) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(let* ((v d)) (aset v 5 'ok))) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(let* ((v d)) (aset v 6 value))) value))))
  (condition-case err (let ((value (deferred:call-lambda callback arg)))
(cond ((and (memq (type-of value) cl-struct-deferred-tags) t) nil (if
next-deferred (deferred:set-next value next-deferred) value)) (t (if
next-deferred (deferred:post-task next-deferred 'ok value) (progn (or (and
... t) (signal ... ...)) (let* (...) (aset v 5 ...))) (progn (or (and ...
t) (signal ... ...)) (let* (...) (aset v 6 value))) value)))) (error (cond
(next-deferred (deferred:post-task next-deferred 'ng err))
(deferred:onerror (deferred:call-lambda deferred:onerror err)) (t nil
(message "deferred error : %S" err) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(let* ((v d)) (aset v 5 'ng))) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(let* ((v d)) (aset v 6 err))) err))))
  (let ((debug-on-signal (or debug-on-signal deferred:debug-on-signal)))
(condition-case err (let ((value (deferred:call-lambda callback arg)))
(cond ((and (memq (type-of value) cl-struct-deferred-tags) t) nil (if
next-deferred (deferred:set-next value next-deferred) value)) (t (if
next-deferred (deferred:post-task next-deferred 'ok value) (progn (or ...
...) (let* ... ...)) (progn (or ... ...) (let* ... ...)) value)))) (error
(cond (next-deferred (deferred:post-task next-deferred 'ng err))
(deferred:onerror (deferred:call-lambda deferred:onerror err)) (t nil
(message "deferred error : %S" err) (progn (or (and ... t) (signal ...
...)) (let* (...) (aset v 5 ...))) (progn (or (and ... t) (signal ... ...))
(let* (...) (aset v 6 err))) err)))))
  (cond (callback (let ((debug-on-signal (or debug-on-signal
deferred:debug-on-signal))) (condition-case err (let ((value
(deferred:call-lambda callback arg))) (cond ((and ... t) nil (if
next-deferred ... value)) (t (if next-deferred ... ... ... value)))) (error
(cond (next-deferred (deferred:post-task next-deferred ... err))
(deferred:onerror (deferred:call-lambda deferred:onerror err)) (t nil
(message "deferred error : %S" err) (progn ... ...) (progn ... ...)
err)))))) (t (cond (next-deferred (deferred:exec-task next-deferred which
arg)) ((eq which 'ok) arg) (t (deferred:resignal arg)))))
  (let ((callback (if (eq which 'ok) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(aref d 1)) (progn (or (and (memq ... cl-struct-deferred-tags) t) (signal
'wrong-type-argument (list ... d))) (aref d 2)))) (next-deferred (progn (or
(and (memq (type-of d) cl-struct-deferred-tags) t) (signal
'wrong-type-argument (list 'deferred d))) (aref d 4)))) (cond (callback
(let ((debug-on-signal (or debug-on-signal deferred:debug-on-signal)))
(condition-case err (let ((value ...)) (cond (... nil ...) (t ...))) (error
(cond (next-deferred ...) (deferred:onerror ...) (t nil ... ... ...
err)))))) (t (cond (next-deferred (deferred:exec-task next-deferred which
arg)) ((eq which 'ok) arg) (t (deferred:resignal arg))))))
  deferred:exec-task(#s(deferred :callback (closure ((proc) (proc-buf .
#<buffer  *deferred:*/usr/bin/timeout*:42>) (nd . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback (closure ... ... ...)
:errorback deferred:default-errorback :cancel (closure ... ... ... ...)
:next #s(deferred :callback ... :errorback deferred:default-errorback
:cancel deferred:default-cancel :next ... :status nil :value nil) :status
nil :value nil) :status nil :value nil)) (con-type . t) (env "TERM=dumb"
"P4CONFIG=.p4config"
"MANPATH=/Users/slippycheeze/share/man:/Users/slipp..."
"INFOPATH=/Users/slippycheeze/share/info:/Users/sli..." "LANG=en_US.UTF-8"
"XPC_FLAGS=0x0" "SECURITYSESSIONID=XXXXX" "USER=slippycheeze"
"COMMAND_MODE=unix2003" "XPC_SERVICE_NAME=org.gnu.Emacs.15324"
"DISPLAY=/private/tmp/com.apple.launchd.O28Br4hHcs/..."
"LOGNAME=slippycheeze"
"PATH=/Users/slippycheeze/.bagpipe:/Users/slippyche..."
"SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.Qs29e..."
"Apple_PubSub_Socket_Render=/private/tmp/com.apple...."
"SHELL=/Users/slippycheeze/homebrew/bin/zsh" "HOME=/Users/slippycheeze"
"__CF_USER_TEXT_ENCODING=0x64DE5:0x0:0x0"
"TMPDIR=/var/folders/bc/tpg4l8wj7gg2722p9384ftww00c...") (pwd .
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...") (buf-name . "
*deferred:*/usr/bin/timeout*:42") (proc-name .
"*deferred:*/usr/bin/timeout*:42") (uid . 42) (d . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #1 :status nil :value nil)) (args "5s" "p4"
"-zprog=google-piper.el"
"--format=%depotFile%\n%clientFile%\n%action%\n%change..." "fstat" "--"
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...") (command .
"/usr/bin/timeout") (f . start-process) cl-struct-deferred-tags t) (_x)
(setq proc-buf (get-buffer-create buf-name)) (condition-case err (let
((default-directory pwd) (process-environment env) (process-connection-type
con-type)) (setq proc (if (null ...) (apply f proc-name buf-name command
nil) (apply f proc-name buf-name command args))) (set-process-sentinel proc
#'(lambda ... ...)) (progn (or (and ... t) (signal ... ...)) (let* (...)
(aset v 3 ...)))) (error (deferred:post-task nd 'ng err))) nil) :errorback
deferred:default-errorback :cancel deferred:default-cancel :next nil
:status nil :value nil) ok nil)
  (setq value (deferred:exec-task d which arg))
  (condition-case err (setq value (deferred:exec-task d which arg)) (error
nil (message "deferred error : %s" err)))
  (let* ((pack (car (last deferred:queue))) (d (car pack)) (which (car (cdr
pack))) (arg (cdr (cdr pack))) value) (setq deferred:queue (nbutlast
deferred:queue)) (condition-case err (setq value (deferred:exec-task d
which arg)) (error nil (message "deferred error : %s" err))) value)
  (progn (let* ((pack (car (last deferred:queue))) (d (car pack)) (which
(car (cdr pack))) (arg (cdr (cdr pack))) value) (setq deferred:queue
(nbutlast deferred:queue)) (condition-case err (setq value
(deferred:exec-task d which arg)) (error nil (message "deferred error : %s"
err))) value))
  (if deferred:queue (progn (let* ((pack (car (last deferred:queue))) (d
(car pack)) (which (car (cdr pack))) (arg (cdr (cdr pack))) value) (setq
deferred:queue (nbutlast deferred:queue)) (condition-case err (setq value
(deferred:exec-task d which arg)) (error nil (message "deferred error : %s"
err))) value)))
  deferred:worker()
  apply(deferred:worker nil)
  timer-event-handler([t 23709 65205 28583 nil deferred:worker nil nil 0])
  input-pending-p(t)
  sit-for(30)
  #f(compiled-function () #<bytecode 0x1fe44d8a0399>)()
  tramp-user-error(nil "Not a Tramp file name: \"%s\"" "~")
  (if (tramp-tramp-file-p name) nil (tramp-user-error nil "Not a Tramp file
name: \"%s\"" name))
  (unless (tramp-tramp-file-p name) (tramp-user-error nil "Not a Tramp file
name: \"%s\"" name))
  (progn (unless (tramp-tramp-file-p name) (tramp-user-error nil "Not a
Tramp file name: \"%s\"" name)) (if (not (string-match (nth 0
tramp-file-name-structure) name)) (error "`tramp-file-name-structure'
didn't match!") (let ((method (match-string (nth 1
tramp-file-name-structure) name)) (user (match-string (nth 2
tramp-file-name-structure) name)) (host (match-string (nth 3
tramp-file-name-structure) name)) (localname (match-string (nth 4
tramp-file-name-structure) name)) (hop (match-string (nth 5
tramp-file-name-structure) name)) domain port v) (when user (when
(string-match tramp-user-with-domain-regexp user) (setq domain
(match-string 2 user) user (match-string 1 user)))) (when host (when
(string-match tramp-host-with-port-regexp host) (setq port (match-string 2
host) host (match-string 1 host))) (when (string-match
tramp-prefix-ipv6-regexp host) (setq host (replace-match "" nil t host)))
(when (string-match tramp-postfix-ipv6-regexp host) (setq host
(replace-match "" nil t host)))) (unless nodefault (when hop (setq v
(tramp-dissect-hop-name hop) hop (and hop (tramp-make-tramp-hop-name v))))
(let ((tramp-default-host (or ... tramp-default-host))) (setq method
(tramp-find-method method user host) user (tramp-find-user method user
host) host (tramp-find-host method user host) hop (and hop (format-spec hop
...))))) (prog1 (setq v (make-tramp-file-name :method method :user user
:domain domain :host host :port port :localname localname :hop hop)) (when
(and hop (or (not ...) (tramp-get-method-parameter v ...)))
(tramp-user-error v "Method `%s' is not supported for multi-hops."
method))))))
  (unwind-protect (progn (unless (tramp-tramp-file-p name)
(tramp-user-error nil "Not a Tramp file name: \"%s\"" name)) (if (not
(string-match (nth 0 tramp-file-name-structure) name)) (error
"`tramp-file-name-structure' didn't match!") (let ((method (match-string
(nth 1 tramp-file-name-structure) name)) (user (match-string (nth 2
tramp-file-name-structure) name)) (host (match-string (nth 3
tramp-file-name-structure) name)) (localname (match-string (nth 4
tramp-file-name-structure) name)) (hop (match-string (nth 5
tramp-file-name-structure) name)) domain port v) (when user (when
(string-match tramp-user-with-domain-regexp user) (setq domain
(match-string 2 user) user (match-string 1 user)))) (when host (when
(string-match tramp-host-with-port-regexp host) (setq port (match-string 2
host) host (match-string 1 host))) (when (string-match
tramp-prefix-ipv6-regexp host) (setq host (replace-match "" nil t host)))
(when (string-match tramp-postfix-ipv6-regexp host) (setq host
(replace-match "" nil t host)))) (unless nodefault (when hop (setq v
(tramp-dissect-hop-name hop) hop (and hop ...))) (let ((tramp-default-host
...)) (setq method (tramp-find-method method user host) user
(tramp-find-user method user host) host (tramp-find-host method user host)
hop (and hop ...)))) (prog1 (setq v (make-tramp-file-name :method method
:user user :domain domain :host host :port port :localname localname :hop
hop)) (when (and hop (or ... ...)) (tramp-user-error v "Method `%s' is not
supported for multi-hops." method)))))) (set-match-data
save-match-data-internal 'evaporate))
  (let ((save-match-data-internal (match-data))) (unwind-protect (progn
(unless (tramp-tramp-file-p name) (tramp-user-error nil "Not a Tramp file
name: \"%s\"" name)) (if (not (string-match (nth 0
tramp-file-name-structure) name)) (error "`tramp-file-name-structure'
didn't match!") (let ((method (match-string ... name)) (user (match-string
... name)) (host (match-string ... name)) (localname (match-string ...
name)) (hop (match-string ... name)) domain port v) (when user (when
(string-match tramp-user-with-domain-regexp user) (setq domain ... user
...))) (when host (when (string-match tramp-host-with-port-regexp host)
(setq port ... host ...)) (when (string-match tramp-prefix-ipv6-regexp
host) (setq host ...)) (when (string-match tramp-postfix-ipv6-regexp host)
(setq host ...))) (unless nodefault (when hop (setq v ... hop ...)) (let
(...) (setq method ... user ... host ... hop ...))) (prog1 (setq v
(make-tramp-file-name :method method :user user :domain domain :host host
:port port :localname localname :hop hop)) (when (and hop ...)
(tramp-user-error v "Method `%s' is not supported for multi-hops."
method)))))) (set-match-data save-match-data-internal 'evaporate)))
  (save-match-data (unless (tramp-tramp-file-p name) (tramp-user-error nil
"Not a Tramp file name: \"%s\"" name)) (if (not (string-match (nth 0
tramp-file-name-structure) name)) (error "`tramp-file-name-structure'
didn't match!") (let ((method (match-string (nth 1
tramp-file-name-structure) name)) (user (match-string (nth 2
tramp-file-name-structure) name)) (host (match-string (nth 3
tramp-file-name-structure) name)) (localname (match-string (nth 4
tramp-file-name-structure) name)) (hop (match-string (nth 5
tramp-file-name-structure) name)) domain port v) (when user (when
(string-match tramp-user-with-domain-regexp user) (setq domain
(match-string 2 user) user (match-string 1 user)))) (when host (when
(string-match tramp-host-with-port-regexp host) (setq port (match-string 2
host) host (match-string 1 host))) (when (string-match
tramp-prefix-ipv6-regexp host) (setq host (replace-match "" nil t host)))
(when (string-match tramp-postfix-ipv6-regexp host) (setq host
(replace-match "" nil t host)))) (unless nodefault (when hop (setq v
(tramp-dissect-hop-name hop) hop (and hop (tramp-make-tramp-hop-name v))))
(let ((tramp-default-host (or ... tramp-default-host))) (setq method
(tramp-find-method method user host) user (tramp-find-user method user
host) host (tramp-find-host method user host) hop (and hop (format-spec hop
...))))) (prog1 (setq v (make-tramp-file-name :method method :user user
:domain domain :host host :port port :localname localname :hop hop)) (when
(and hop (or (not ...) (tramp-get-method-parameter v ...)))
(tramp-user-error v "Method `%s' is not supported for multi-hops."
method))))))
  tramp-dissect-file-name("~")
  (let* ((v (tramp-dissect-file-name filename)) (method
(tramp-file-name-method v)) (user (tramp-file-name-user v)) (domain
(tramp-file-name-domain v)) (host (tramp-file-name-host v)) (port
(tramp-file-name-port v)) (localname (tramp-file-name-localname v)) (hop
(tramp-file-name-hop v))) (ignore method user domain host port localname
hop) (cond ((and fn (memq operation '(file-exists-p file-readable-p)))
(add-to-list 'tramp-vc-registered-file-names localname 'append) nil) ((and
fn (eq operation 'process-file) 0)) ((and fn (eq operation
'start-file-process) nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args))))
  (with-parsed-tramp-file-name filename nil (cond ((and fn (memq operation
'(file-exists-p file-readable-p))) (add-to-list
'tramp-vc-registered-file-names localname 'append) nil) ((and fn (eq
operation 'process-file) 0)) ((and fn (eq operation 'start-file-process)
nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args))))
  (let ((filename (tramp-replace-environment-variables (apply
#'tramp-file-name-for-operation operation args))) (fn (assoc operation
tramp-sh-file-name-handler-alist))) (with-parsed-tramp-file-name filename
nil (cond ((and fn (memq operation '(file-exists-p file-readable-p)))
(add-to-list 'tramp-vc-registered-file-names localname 'append) nil) ((and
fn (eq operation 'process-file) 0)) ((and fn (eq operation
'start-file-process) nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args)))))
  (progn (let ((filename (tramp-replace-environment-variables (apply
#'tramp-file-name-for-operation operation args))) (fn (assoc operation
tramp-sh-file-name-handler-alist))) (with-parsed-tramp-file-name filename
nil (cond ((and fn (memq operation '...)) (add-to-list
'tramp-vc-registered-file-names localname 'append) nil) ((and fn (eq
operation 'process-file) 0)) ((and fn (eq operation 'start-file-process)
nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args))))))
  (unwind-protect (progn (let ((filename
(tramp-replace-environment-variables (apply #'tramp-file-name-for-operation
operation args))) (fn (assoc operation tramp-sh-file-name-handler-alist)))
(with-parsed-tramp-file-name filename nil (cond ((and fn (memq operation
...)) (add-to-list 'tramp-vc-registered-file-names localname 'append) nil)
((and fn (eq operation ...) 0)) ((and fn (eq operation ...) nil)) (fn
(save-match-data (apply ... args))) (t (tramp-run-real-handler operation
args)))))) (set-match-data save-match-data-internal 'evaporate))
  (let ((save-match-data-internal (match-data))) (unwind-protect (progn
(let ((filename (tramp-replace-environment-variables (apply ... operation
args))) (fn (assoc operation tramp-sh-file-name-handler-alist)))
(with-parsed-tramp-file-name filename nil (cond ((and fn ...) (add-to-list
... localname ...) nil) ((and fn ... 0)) ((and fn ... nil)) (fn
(save-match-data ...)) (t (tramp-run-real-handler operation args))))))
(set-match-data save-match-data-internal 'evaporate)))
  (save-match-data (let ((filename (tramp-replace-environment-variables
(apply #'tramp-file-name-for-operation operation args))) (fn (assoc
operation tramp-sh-file-name-handler-alist))) (with-parsed-tramp-file-name
filename nil (cond ((and fn (memq operation '...)) (add-to-list
'tramp-vc-registered-file-names localname 'append) nil) ((and fn (eq
operation 'process-file) 0)) ((and fn (eq operation 'start-file-process)
nil)) (fn (save-match-data (apply (cdr fn) args))) (t
(tramp-run-real-handler operation args))))))
  tramp-vc-file-name-handler(expand-file-name "~"
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")
  make-process(:name "*deferred:*/usr/bin/timeout*:41" :buffer "
*deferred:*/usr/bin/timeout*:41" :command ("/usr/bin/timeout" "1s" "p4"
"-zprog=google-piper.el" "--format=%clientName%\n%clientRoot%" "info"))
  apply(make-process (:name "*deferred:*/usr/bin/timeout*:41" :buffer "
*deferred:*/usr/bin/timeout*:41" :command ("/usr/bin/timeout" "1s" "p4"
"-zprog=google-piper.el" "--format=%clientName%\n%clientRoot%" "info")))
  start-process("*deferred:*/usr/bin/timeout*:41" "
*deferred:*/usr/bin/timeout*:41" "/usr/bin/timeout" "1s" "p4"
"-zprog=google-piper.el" "--format=%clientName%\n%clientRoot%" "info")
  apply(start-process "*deferred:*/usr/bin/timeout*:41" "
*deferred:*/usr/bin/timeout*:41" "/usr/bin/timeout" ("1s" "p4"
"-zprog=google-piper.el" "--format=%clientName%\n%clientRoot%" "info"))
  (if (null (car args)) (apply f proc-name buf-name command nil) (apply f
proc-name buf-name command args))
  (setq proc (if (null (car args)) (apply f proc-name buf-name command nil)
(apply f proc-name buf-name command args)))
  (let ((default-directory pwd) (process-environment env)
(process-connection-type con-type)) (setq proc (if (null (car args)) (apply
f proc-name buf-name command nil) (apply f proc-name buf-name command
args))) (set-process-sentinel proc #'(lambda (_proc event) (cond
((string-match "exited abnormally" event) (let (...) (kill-buffer proc-buf)
(deferred:post-task nd ... msg))) ((equal event "finished\n")
(deferred:post-task nd 'ok proc-buf))))) (progn (or (and (memq (type-of nd)
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list 'deferred
nd))) (let* ((v nd)) (aset v 3 #'(lambda (x) (deferred:default-cancel x)
(if proc (progn ... ...)))))))
  (condition-case err (let ((default-directory pwd) (process-environment
env) (process-connection-type con-type)) (setq proc (if (null (car args))
(apply f proc-name buf-name command nil) (apply f proc-name buf-name
command args))) (set-process-sentinel proc #'(lambda (_proc event) (cond
((string-match "exited abnormally" event) (let ... ... ...)) ((equal event
"finished\n") (deferred:post-task nd ... proc-buf))))) (progn (or (and
(memq (type-of nd) cl-struct-deferred-tags) t) (signal 'wrong-type-argument
(list 'deferred nd))) (let* ((v nd)) (aset v 3 #'(lambda (x)
(deferred:default-cancel x) (if proc ...)))))) (error (deferred:post-task
nd 'ng err)))
  (closure ((proc) (proc-buf . #<buffer  *deferred:*/usr/bin/timeout*:41>)
(nd . #s(deferred :callback deferred:default-callback :errorback
deferred:default-errorback :cancel deferred:default-cancel :next
#s(deferred :callback (closure ... ... ...) :errorback
deferred:default-errorback :cancel (closure ... ... ... ...) :next
#s(deferred :callback ... :errorback deferred:default-errorback :cancel
deferred:default-cancel :next ... :status nil :value nil) :status nil
:value nil) :status nil :value nil)) (con-type . t) (env "TERM=dumb"
"P4CONFIG=.p4config" "MANPATH=/Users/slippycheeze/share/man:/User..."
"INFOPATH=/Users/slippycheeze/share/info:/Us..." "LANG=en_US.UTF-8"
"XPC_FLAGS=0x0" "SECURITYSESSIONID=XXXXX" "USER=slippycheeze"
"COMMAND_MODE=unix2003" "XPC_SERVICE_NAME=org.gnu.Emacs.15324"
"DISPLAY=/private/tmp/com.apple.launchd.O28B..." "LOGNAME=slippycheeze"
"PATH=/Users/slippycheeze/.bagpipe:/Users/sl..."
"SSH_AUTH_SOCK=/private/tmp/com.apple.launch..."
"Apple_PubSub_Socket_Render=/private/tmp/com..."
"SHELL=/Users/slippycheeze/homebrew/bin/zsh" "HOME=/Users/slippycheeze"
"__CF_USER_TEXT_ENCODING=0x64DE5:0x0:0x0"
"TMPDIR=/var/folders/bc/tpg4l8wj7gg2722p9384...") (pwd .
"/gssh:slippycheeze.X.XXXXXXXX.com:/XXXXXX/X...") (buf-name . "
*deferred:*/usr/bin/timeout*:41") (proc-name .
"*deferred:*/usr/bin/timeout*:41") (uid . 41) (d . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback #0 :errorback
deferred:default-errorback :cancel deferred:default-cancel :next nil
:status nil :value nil) :status nil :value nil)) (args "1s" "p4"
"-zprog=google-piper.el" "--format=%clientName%\n%clientRoot%" "info")
(command . "/usr/bin/timeout") (f . start-process) cl-struct-deferred-tags
t) (_x) (setq proc-buf (get-buffer-create buf-name)) (condition-case err
(let ((default-directory pwd) (process-environment env)
(process-connection-type con-type)) (setq proc (if (null ...) (apply f
proc-name buf-name command nil) (apply f proc-name buf-name command args)))
(set-process-sentinel proc #'(lambda ... ...)) (progn (or (and ... t)
(signal ... ...)) (let* (...) (aset v 3 ...)))) (error (deferred:post-task
nd 'ng err))) nil)(nil)
  funcall((closure ((proc) (proc-buf . #<buffer
*deferred:*/usr/bin/timeout*:41>) (nd . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback (closure (... ... ...
... ... cl-struct-deferred-tags t) (buf) (prog1 ... ...)) :errorback
deferred:default-errorback :cancel (closure (... ... ... ... ... ...
cl-struct-deferred-tags t) (_x) (deferred:default-cancel d)
(deferred:default-cancel pd)) :next #s(deferred :callback (closure ... ...
...) :errorback deferred:default-errorback :cancel deferred:default-cancel
:next #s(deferred :callback ... :errorback deferred:default-errorback
:cancel deferred:default-cancel :next ... :status nil :value nil) :status
nil :value nil) :status nil :value nil) :status nil :value nil)) (con-type
. t) (env "TERM=dumb" "P4CONFIG=.p4config"
"MANPATH=/Users/slippycheeze/share/man:/Users/slipp..."
"INFOPATH=/Users/slippycheeze/share/info:/Users/sli..." "LANG=en_US.UTF-8"
"XPC_FLAGS=0x0" "SECURITYSESSIONID=XXXXX" "USER=slippycheeze"
"COMMAND_MODE=unix2003" "XPC_SERVICE_NAME=org.gnu.Emacs.15324"
"DISPLAY=/private/tmp/com.apple.launchd.O28Br4hHcs/..."
"LOGNAME=slippycheeze"
"PATH=/Users/slippycheeze/.bagpipe:/Users/slippyche..."
"SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.Qs29e..."
"Apple_PubSub_Socket_Render=/private/tmp/com.apple...."
"SHELL=/Users/slippycheeze/homebrew/bin/zsh" "HOME=/Users/slippycheeze"
"__CF_USER_TEXT_ENCODING=0x64DE5:0x0:0x0"
"TMPDIR=/var/folders/bc/tpg4l8wj7gg2722p9384ftww00c...") (pwd .
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...") (buf-name . "
*deferred:*/usr/bin/timeout*:41") (proc-name .
"*deferred:*/usr/bin/timeout*:41") (uid . 41) (d . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback #1 :errorback
deferred:default-errorback :cancel deferred:default-cancel :next nil
:status nil :value nil) :status nil :value nil)) (args "1s" "p4"
"-zprog=google-piper.el" "--format=%clientName%\n%clientRoot%" "info")
(command . "/usr/bin/timeout") (f . start-process) cl-struct-deferred-tags
t) (_x) (setq proc-buf (get-buffer-create buf-name)) (condition-case err
(let ((default-directory pwd) (process-environment env)
(process-connection-type con-type)) (setq proc (if (null (car args)) (apply
f proc-name buf-name command nil) (apply f proc-name buf-name command
args))) (set-process-sentinel proc #'(lambda (_proc event) (cond ... ...)))
(progn (or (and (memq ... cl-struct-deferred-tags) t) (signal
'wrong-type-argument (list ... nd))) (let* ((v nd)) (aset v 3 #'...))))
(error (deferred:post-task nd 'ng err))) nil) nil)
  (condition-case err (funcall f arg) ('wrong-number-of-arguments
(display-warning 'deferred "Callback that takes no argument may be
specified.\n..." err) (condition-case nil (funcall f)
('wrong-number-of-arguments (signal 'wrong-number-of-arguments (cdr
err))))))
  deferred:call-lambda((closure ((proc) (proc-buf . #<buffer
*deferred:*/usr/bin/timeout*:41>) (nd . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback (closure (... ... ...
... ... cl-struct-deferred-tags t) (buf) (prog1 ... ...)) :errorback
deferred:default-errorback :cancel (closure (... ... ... ... ... ...
cl-struct-deferred-tags t) (_x) (deferred:default-cancel d)
(deferred:default-cancel pd)) :next #s(deferred :callback (closure ... ...
...) :errorback deferred:default-errorback :cancel deferred:default-cancel
:next #s(deferred :callback ... :errorback deferred:default-errorback
:cancel deferred:default-cancel :next ... :status nil :value nil) :status
nil :value nil) :status nil :value nil) :status nil :value nil)) (con-type
. t) (env "TERM=dumb" "P4CONFIG=.p4config"
"MANPATH=/Users/slippycheeze/share/man:/Users/slipp..."
"INFOPATH=/Users/slippycheeze/share/info:/Users/sli..." "LANG=en_US.UTF-8"
"XPC_FLAGS=0x0" "SECURITYSESSIONID=XXXXX" "USER=slippycheeze"
"COMMAND_MODE=unix2003" "XPC_SERVICE_NAME=org.gnu.Emacs.15324"
"DISPLAY=/private/tmp/com.apple.launchd.O28Br4hHcs/..."
"LOGNAME=slippycheeze"
"PATH=/Users/slippycheeze/.bagpipe:/Users/slippyche..."
"SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.Qs29e..."
"Apple_PubSub_Socket_Render=/private/tmp/com.apple...."
"SHELL=/Users/slippycheeze/homebrew/bin/zsh" "HOME=/Users/slippycheeze"
"__CF_USER_TEXT_ENCODING=0x64DE5:0x0:0x0"
"TMPDIR=/var/folders/bc/tpg4l8wj7gg2722p9384ftww00c...") (pwd .
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...") (buf-name . "
*deferred:*/usr/bin/timeout*:41") (proc-name .
"*deferred:*/usr/bin/timeout*:41") (uid . 41) (d . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback #1 :errorback
deferred:default-errorback :cancel deferred:default-cancel :next nil
:status nil :value nil) :status nil :value nil)) (args "1s" "p4"
"-zprog=google-piper.el" "--format=%clientName%\n%clientRoot%" "info")
(command . "/usr/bin/timeout") (f . start-process) cl-struct-deferred-tags
t) (_x) (setq proc-buf (get-buffer-create buf-name)) (condition-case err
(let ((default-directory pwd) (process-environment env)
(process-connection-type con-type)) (setq proc (if (null (car args)) (apply
f proc-name buf-name command nil) (apply f proc-name buf-name command
args))) (set-process-sentinel proc #'(lambda (_proc event) (cond ... ...)))
(progn (or (and (memq ... cl-struct-deferred-tags) t) (signal
'wrong-type-argument (list ... nd))) (let* ((v nd)) (aset v 3 #'...))))
(error (deferred:post-task nd 'ng err))) nil) nil)
  (let ((value (deferred:call-lambda callback arg))) (cond ((and (memq
(type-of value) cl-struct-deferred-tags) t) nil (if next-deferred
(deferred:set-next value next-deferred) value)) (t (if next-deferred
(deferred:post-task next-deferred 'ok value) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(let* ((v d)) (aset v 5 'ok))) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(let* ((v d)) (aset v 6 value))) value))))
  (condition-case err (let ((value (deferred:call-lambda callback arg)))
(cond ((and (memq (type-of value) cl-struct-deferred-tags) t) nil (if
next-deferred (deferred:set-next value next-deferred) value)) (t (if
next-deferred (deferred:post-task next-deferred 'ok value) (progn (or (and
... t) (signal ... ...)) (let* (...) (aset v 5 ...))) (progn (or (and ...
t) (signal ... ...)) (let* (...) (aset v 6 value))) value)))) (error (cond
(next-deferred (deferred:post-task next-deferred 'ng err))
(deferred:onerror (deferred:call-lambda deferred:onerror err)) (t nil
(message "deferred error : %S" err) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(let* ((v d)) (aset v 5 'ng))) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(let* ((v d)) (aset v 6 err))) err))))
  (let ((debug-on-signal (or debug-on-signal deferred:debug-on-signal)))
(condition-case err (let ((value (deferred:call-lambda callback arg)))
(cond ((and (memq (type-of value) cl-struct-deferred-tags) t) nil (if
next-deferred (deferred:set-next value next-deferred) value)) (t (if
next-deferred (deferred:post-task next-deferred 'ok value) (progn (or ...
...) (let* ... ...)) (progn (or ... ...) (let* ... ...)) value)))) (error
(cond (next-deferred (deferred:post-task next-deferred 'ng err))
(deferred:onerror (deferred:call-lambda deferred:onerror err)) (t nil
(message "deferred error : %S" err) (progn (or (and ... t) (signal ...
...)) (let* (...) (aset v 5 ...))) (progn (or (and ... t) (signal ... ...))
(let* (...) (aset v 6 err))) err)))))
  (cond (callback (let ((debug-on-signal (or debug-on-signal
deferred:debug-on-signal))) (condition-case err (let ((value
(deferred:call-lambda callback arg))) (cond ((and ... t) nil (if
next-deferred ... value)) (t (if next-deferred ... ... ... value)))) (error
(cond (next-deferred (deferred:post-task next-deferred ... err))
(deferred:onerror (deferred:call-lambda deferred:onerror err)) (t nil
(message "deferred error : %S" err) (progn ... ...) (progn ... ...)
err)))))) (t (cond (next-deferred (deferred:exec-task next-deferred which
arg)) ((eq which 'ok) arg) (t (deferred:resignal arg)))))
  (let ((callback (if (eq which 'ok) (progn (or (and (memq ...
cl-struct-deferred-tags) t) (signal 'wrong-type-argument (list ... d)))
(aref d 1)) (progn (or (and (memq ... cl-struct-deferred-tags) t) (signal
'wrong-type-argument (list ... d))) (aref d 2)))) (next-deferred (progn (or
(and (memq (type-of d) cl-struct-deferred-tags) t) (signal
'wrong-type-argument (list 'deferred d))) (aref d 4)))) (cond (callback
(let ((debug-on-signal (or debug-on-signal deferred:debug-on-signal)))
(condition-case err (let ((value ...)) (cond (... nil ...) (t ...))) (error
(cond (next-deferred ...) (deferred:onerror ...) (t nil ... ... ...
err)))))) (t (cond (next-deferred (deferred:exec-task next-deferred which
arg)) ((eq which 'ok) arg) (t (deferred:resignal arg))))))
  deferred:exec-task(#s(deferred :callback (closure ((proc) (proc-buf .
#<buffer  *deferred:*/usr/bin/timeout*:41>) (nd . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #s(deferred :callback (closure ... ... ...)
:errorback deferred:default-errorback :cancel (closure ... ... ... ...)
:next #s(deferred :callback ... :errorback deferred:default-errorback
:cancel deferred:default-cancel :next ... :status nil :value nil) :status
nil :value nil) :status nil :value nil)) (con-type . t) (env "TERM=dumb"
"P4CONFIG=.p4config"
"MANPATH=/Users/slippycheeze/share/man:/Users/slipp..."
"INFOPATH=/Users/slippycheeze/share/info:/Users/sli..." "LANG=en_US.UTF-8"
"XPC_FLAGS=0x0" "SECURITYSESSIONID=XXXXX" "USER=slippycheeze"
"COMMAND_MODE=unix2003" "XPC_SERVICE_NAME=org.gnu.Emacs.15324"
"DISPLAY=/private/tmp/com.apple.launchd.O28Br4hHcs/..."
"LOGNAME=slippycheeze"
"PATH=/Users/slippycheeze/.bagpipe:/Users/slippyche..."
"SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.Qs29e..."
"Apple_PubSub_Socket_Render=/private/tmp/com.apple...."
"SHELL=/Users/slippycheeze/homebrew/bin/zsh" "HOME=/Users/slippycheeze"
"__CF_USER_TEXT_ENCODING=0x64DE5:0x0:0x0"
"TMPDIR=/var/folders/bc/tpg4l8wj7gg2722p9384ftww00c...") (pwd .
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...") (buf-name . "
*deferred:*/usr/bin/timeout*:41") (proc-name .
"*deferred:*/usr/bin/timeout*:41") (uid . 41) (d . #s(deferred :callback
deferred:default-callback :errorback deferred:default-errorback :cancel
deferred:default-cancel :next #1 :status nil :value nil)) (args "1s" "p4"
"-zprog=google-piper.el" "--format=%clientName%\n%clientRoot%" "info")
(command . "/usr/bin/timeout") (f . start-process) cl-struct-deferred-tags
t) (_x) (setq proc-buf (get-buffer-create buf-name)) (condition-case err
(let ((default-directory pwd) (process-environment env)
(process-connection-type con-type)) (setq proc (if (null ...) (apply f
proc-name buf-name command nil) (apply f proc-name buf-name command args)))
(set-process-sentinel proc #'(lambda ... ...)) (progn (or (and ... t)
(signal ... ...)) (let* (...) (aset v 3 ...)))) (error (deferred:post-task
nd 'ng err))) nil) :errorback deferred:default-errorback :cancel
deferred:default-cancel :next nil :status nil :value nil) ok nil)
  (setq value (deferred:exec-task d which arg))
  (condition-case err (setq value (deferred:exec-task d which arg)) (error
nil (message "deferred error : %s" err)))
  (let* ((pack (car (last deferred:queue))) (d (car pack)) (which (car (cdr
pack))) (arg (cdr (cdr pack))) value) (setq deferred:queue (nbutlast
deferred:queue)) (condition-case err (setq value (deferred:exec-task d
which arg)) (error nil (message "deferred error : %s" err))) value)
  (progn (let* ((pack (car (last deferred:queue))) (d (car pack)) (which
(car (cdr pack))) (arg (cdr (cdr pack))) value) (setq deferred:queue
(nbutlast deferred:queue)) (condition-case err (setq value
(deferred:exec-task d which arg)) (error nil (message "deferred error : %s"
err))) value))
  (if deferred:queue (progn (let* ((pack (car (last deferred:queue))) (d
(car pack)) (which (car (cdr pack))) (arg (cdr (cdr pack))) value) (setq
deferred:queue (nbutlast deferred:queue)) (condition-case err (setq value
(deferred:exec-task d which arg)) (error nil (message "deferred error : %s"
err))) value)))
  deferred:worker()
  apply(deferred:worker nil)
  timer-event-handler([t 23709 65205 28556 nil deferred:worker nil nil 0])
  process-send-string(#<process *tramp/gssh slippycheeze.c.googlers.com*>
"tramp_vc_registered_read_file_names <<'c231581b08e...")
  tramp-send-string((tramp-file-name "gssh" nil nil "
slippycheeze.c.googlers.com" nil
"/google/src/cloud/slippycheeze/work/google3/storag..." nil)
"tramp_vc_registered_read_file_names <<'c231581b08e...")
  tramp-send-command((tramp-file-name "gssh" nil nil "
slippycheeze.c.googlers.com" nil
"/google/src/cloud/slippycheeze/work/google3/storag..." nil)
"tramp_vc_registered_read_file_names <<'c231581b08e...")

tramp-sh-handle-vc-registered("/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")
  apply(tramp-sh-handle-vc-registered
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")
  tramp-sh-file-name-handler(vc-registered
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")
  apply(tramp-sh-file-name-handler vc-registered
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")
  tramp-file-name-handler(vc-registered
"/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")
  vc-registered("/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")
  vc-backend("/gssh:slippycheeze.X.XXXXXXXX.XXX:/XXXXXX/XXX/XXXX...")
  vc-refresh-state()
  run-hooks(find-file-hook)
  after-find-file(nil nil t nil nil)
  revert-buffer--default(t nil)
  revert-buffer(t)
  funcall-interactively(revert-buffer t)
  call-interactively(revert-buffer record nil)
  command-execute(revert-buffer record)
  execute-extended-command(nil "revert-buffer" "revert-buf")
  funcall-interactively(execute-extended-command nil "revert-buffer"
"revert-buf")
  call-interactively(execute-extended-command nil nil)
  command-execute(execute-extended-command)

[-- Attachment #2: Type: text/html, Size: 66797 bytes --]

  reply	other threads:[~2019-03-29 12:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-27 15:38 TRAMP VC optimization fails: non-TRAMP filenames handled incorrectly in async operations Daniel Pittman
2019-03-27 15:55 ` Michael Albinus
2019-03-27 16:22   ` Daniel Pittman
2019-03-27 17:49     ` Michael Albinus
2019-03-29 12:36       ` Daniel Pittman [this message]
2019-03-29 17:03         ` Michael Albinus
2019-04-02  9:34           ` Daniel Pittman
2019-04-02 13:18             ` Michael Albinus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAC45yQus1vNs0MmxgXOYANNSuddMSuyxp8WQ2TOSBxbGpQtksA@mail.gmail.com \
    --to=slippycheeze@google.com \
    --cc=emacs-devel@gnu.org \
    --cc=michael.albinus@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).