Subject: Re: bug#9565: 23.3; Dired and recursive copy from ftp

From: Glenn Morris <[email-masked]>
Date: Wed, 21 Sep 2011 14:48:24 -0400

This still happens with the current Emacs trunk. Here is a backtrace:

Debugger entered--Lisp error: (wrong-type-argument integerp nil)
  signal(wrong-type-argument (integerp nil))
  (cond ((and completion (zerop (length localname)) (memq operation (quote (file-exists-p file-directory-p)))) t) ((and completion (zerop (length localname)) (memq operation (quote (expand-file-name file-name-as-directory)))) filename) (t (signal (car err) (cdr err))))
  (condition-case err (let ((sf (symbol-function foreign))) (when (and (listp sf) (eq (car sf) (quote autoload))) (let ((default-directory (tramp-compat-temporary-file-directory))) (load (cadr sf) (quote noerror)))) (apply foreign operation args)) (quit (let (tramp-message-show-message) (tramp-message v 1 "Interrupt received in operation %s" (append (list operation) args))) (signal (car err) (cdr err))) (error (cond ((and completion (zerop (length localname)) (memq operation (quote (file-exists-p file-directory-p)))) t) ((and completion (zerop (length localname)) (memq operation (quote (expand-file-name file-name-as-directory)))) filename) (t (signal (car err) (cdr err))))))
  (if foreign (condition-case err (let ((sf (symbol-function foreign))) (when (and (listp sf) (eq (car sf) (quote autoload))) (let ((default-directory (tramp-compat-temporary-file-directory))) (load (cadr sf) (quote noerror)))) (apply foreign operation args)) (quit (let (tramp-message-show-message) (tramp-message v 1 "Interrupt received in operation %s" (append (list operation) args))) (signal (car err) (cdr err))) (error (cond ((and completion (zerop (length localname)) (memq operation (quote ...))) t) ((and completion (zerop (length localname)) (memq operation (quote ...))) filename) (t (signal (car err) (cdr err)))))) (tramp-run-real-handler operation args))
  (let* ((v (tramp-dissect-file-name filename)) (method (tramp-file-name-method v)) (user (tramp-file-name-user v)) (host (tramp-file-name-host v)) (localname (tramp-file-name-localname v))) (if foreign (condition-case err (let ((sf (symbol-function foreign))) (when (and (listp sf) (eq (car sf) (quote autoload))) (let ((default-directory ...)) (load (cadr sf) (quote noerror)))) (apply foreign operation args)) (quit (let (tramp-message-show-message) (tramp-message v 1 "Interrupt received in operation %s" (append (list operation) args))) (signal (car err) (cdr err))) (error (cond ((and completion (zerop ...) (memq operation ...)) t) ((and completion (zerop ...) (memq operation ...)) filename) (t (signal (car err) (cdr err)))))) (tramp-run-real-handler operation args)))
  (with-parsed-tramp-file-name filename nil (if foreign (condition-case err (let ((sf (symbol-function foreign))) (when (and (listp sf) (eq (car sf) (quote autoload))) (let ((default-directory ...)) (load (cadr sf) (quote noerror)))) (apply foreign operation args)) (quit (let (tramp-message-show-message) (tramp-message v 1 "Interrupt received in operation %s" (append (list operation) args))) (signal (car err) (cdr err))) (error (cond ((and completion (zerop ...) (memq operation ...)) t) ((and completion (zerop ...) (memq operation ...)) filename) (t (signal (car err) (cdr err)))))) (tramp-run-real-handler operation args)))
  (let* ((filename (tramp-replace-environment-variables (apply (quote tramp-file-name-for-operation) operation args))) (completion (tramp-completion-mode-p)) (foreign (tramp-find-foreign-file-name-handler filename))) (with-parsed-tramp-file-name filename nil (if foreign (condition-case err (let ((sf (symbol-function foreign))) (when (and (listp sf) (eq ... ...)) (let (...) (load ... ...))) (apply foreign operation args)) (quit (let (tramp-message-show-message) (tramp-message v 1 "Interrupt received in operation %s" (append ... args))) (signal (car err) (cdr err))) (error (cond ((and completion ... ...) t) ((and completion ... ...) filename) (t (signal ... ...))))) (tramp-run-real-handler operation args))))
  (progn (let* ((filename (tramp-replace-environment-variables (apply (quote tramp-file-name-for-operation) operation args))) (completion (tramp-completion-mode-p)) (foreign (tramp-find-foreign-file-name-handler filename))) (with-parsed-tramp-file-name filename nil (if foreign (condition-case err (let ((sf ...)) (when (and ... ...) (let ... ...)) (apply foreign operation args)) (quit (let (tramp-message-show-message) (tramp-message v 1 "Interrupt received in operation %s" ...)) (signal (car err) (cdr err))) (error (cond (... t) (... filename) (t ...)))) (tramp-run-real-handler operation args)))))
  (unwind-protect (progn (let* ((filename (tramp-replace-environment-variables (apply (quote tramp-file-name-for-operation) operation args))) (completion (tramp-completion-mode-p)) (foreign (tramp-find-foreign-file-name-handler filename))) (with-parsed-tramp-file-name filename nil (if foreign (condition-case err (let (...) (when ... ...) (apply foreign operation args)) (quit (let ... ...) (signal ... ...)) (error (cond ... ... ...))) (tramp-run-real-handler operation args))))) (set-match-data save-match-data-internal (quote evaporate)))
  (let ((save-match-data-internal (match-data))) (unwind-protect (progn (let* ((filename (tramp-replace-environment-variables (apply ... operation args))) (completion (tramp-completion-mode-p)) (foreign (tramp-find-foreign-file-name-handler filename))) (with-parsed-tramp-file-name filename nil (if foreign (condition-case err (let ... ... ...) (quit ... ...) (error ...)) (tramp-run-real-handler operation args))))) (set-match-data save-match-data-internal (quote evaporate))))
  (save-match-data (let* ((filename (tramp-replace-environment-variables (apply (quote tramp-file-name-for-operation) operation args))) (completion (tramp-completion-mode-p)) (foreign (tramp-find-foreign-file-name-handler filename))) (with-parsed-tramp-file-name filename nil (if foreign (condition-case err (let ((sf ...)) (when (and ... ...) (let ... ...)) (apply foreign operation args)) (quit (let (tramp-message-show-message) (tramp-message v 1 "Interrupt received in operation %s" ...)) (signal (car err) (cdr err))) (error (cond (... t) (... filename) (t ...)))) (tramp-run-real-handler operation args)))))
  (if tramp-mode (save-match-data (let* ((filename (tramp-replace-environment-variables (apply (quote tramp-file-name-for-operation) operation args))) (completion (tramp-completion-mode-p)) (foreign (tramp-find-foreign-file-name-handler filename))) (with-parsed-tramp-file-name filename nil (if foreign (condition-case err (let (...) (when ... ...) (apply foreign operation args)) (quit (let ... ...) (signal ... ...)) (error (cond ... ... ...))) (tramp-run-real-handler operation args))))) (tramp-run-real-handler operation args))
  tramp-file-name-handler(copy-directory "/[email-masked]:/users/xxx/dir" "/tmp/dir" t nil)
  copy-directory("/[email-masked]:/users/xxx/dir" "/tmp/dir" t)
  dired-copy-file-recursive("/[email-masked]:/users/xxx/dir" "/tmp/dir" nil t t top)
  dired-copy-file("/[email-masked]:/users/xxx/dir" "/tmp/dir" nil)