[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#11628: closed (24.1.50; "Assertion failed: (equal

From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#11628: closed (24.1.50; "Assertion failed: (equal (funcall unquote qstring) completion)" when completing remote file names)
Date: Sat, 23 Jun 2012 03:58:03 +0000

Your message dated Fri, 22 Jun 2012 23:49:46 -0400
with message-id <address@hidden>
and subject line Re: bug#11714: 24.1.50; find-file completion on a remote 
has caused the debbugs.gnu.org bug report #11714,
regarding 24.1.50; "Assertion failed: (equal (funcall unquote qstring) 
completion)" when completing remote file names
to be marked as done.

(If you believe you have received this mail in error, please contact

11714: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11714
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: 24.1.50; "Assertion failed: (equal (funcall unquote qstring) completion)" when completing remote file names Date: Mon, 04 Jun 2012 16:44:49 +0200 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux)
This bug report will be sent to the Bug-GNU-Emacs mailing list
and the GNU bug tracker at debbugs.gnu.org.  Please check that
the From: line contains a valid email address.  After a delay of up
to one day, you should receive an acknowledgement at that address.

The error message looks identical to bug#11466. That bug has been
reported as fixed, buth with the following scenario the problem still exist:

C-c C-f /ssh:: <RET>
password <RET>
C-c C-f /tm <TAB>

-> Debugger entered--Lisp error: (cl-assertion-failed (equal (funcall unquote 
qstring) completion))
  signal(cl-assertion-failed ((equal (funcall unquote qstring) completion)))
  completion--twq-try("/ssh:detlef:/home/albinus//tm" "/ssh:detlef:/tm" 
"/ssh:detlef:/tmp/" 17 substitute-in-file-name completion--sifn-requote)
 [substitute-in-file-name completion--sifn-requote 
"/ssh:detlef:/home/albinus//tm" "/ssh:detlef:/tm" 1 completion--twq-try 2 last 
0 nil completion--twq-all] 11 "\n\n(fn UNQUOTED-RESULT 
OP)"](("/ssh:detlef:/tmp/" . 17) 1)
  completion--nth-completion(1 "/ssh:detlef:/home/albinus//tm" 
read-file-name-internal file-exists-p 29 (metadata (category . file) 
(completion--unquote-requote . t)))
read-file-name-internal file-exists-p 29 (metadata (category . file) 
(completion--unquote-requote . t)))
  call-interactively(minibuffer-complete nil nil)
  read-from-minibuffer("Find file: " "/ssh:detlef:/home/albinus/" (keymap 
(keymap (32)) keymap (10 . minibuffer-complete-and-exit) (13 . 
minibuffer-complete-and-exit) keymap (menu-bar keymap (minibuf "Minibuf" keymap 
(tab menu-item "Complete" minibuffer-complete :help "Complete as far as 
possible") (space menu-item "Complete Word" minibuffer-complete-word :help 
"Complete at most one word") (63 menu-item "List Completions" 
minibuffer-completion-help :help "Display all possible completions") 
"Minibuf")) (27 keymap (118 . switch-to-completions)) (prior . 
switch-to-completions) (63 . minibuffer-completion-help) (32 . 
minibuffer-complete-word) (9 . minibuffer-complete) keymap (menu-bar keymap 
(minibuf "Minibuf" keymap (previous menu-item "Previous History Item" 
previous-history-element :help "Put previous minibuffer history element in the 
minibuffer") (next menu-item "Next History Item" next-history-element :help 
"Put next minibuffer history element in the minibuffer") (isearch-backward 
menu-item "Isearch History Backward" isearch-backward :help "Incrementally 
search minibuffer history backward") (isearch-forward menu-item "Isearch 
History Forward" isearch-forward :help "Incrementally search minibuffer history 
forward") (return menu-item "Enter" exit-minibuffer :key-sequence "" :help 
"Terminate input and exit minibuffer") (quit menu-item "Quit" 
abort-recursive-edit :help "Abort input and exit minibuffer") "Minibuf")) (10 . 
exit-minibuffer) (13 . exit-minibuffer) (7 . abort-recursive-edit) (C-tab . 
file-cache-minibuffer-complete) (9 . self-insert-command) (up . 
previous-history-element) (prior . previous-history-element) (down . 
next-history-element) (next . next-history-element) (27 keymap (114 . 
previous-matching-history-element) (115 . next-matching-history-element) (112 . 
previous-history-element) (110 . next-history-element))) nil file-name-history 
"/ssh:detlef:/home/albinus/" nil)
  completing-read-default("Find file: " read-file-name-internal file-exists-p 
confirm-after-completion "/ssh:detlef:/home/albinus/" file-name-history 
"/ssh:detlef:/home/albinus/" nil)
  completing-read("Find file: " read-file-name-internal file-exists-p 
confirm-after-completion "/ssh:detlef:/home/albinus/" file-name-history 
  read-file-name-default("Find file: " nil "/ssh:detlef:/home/albinus/" 
confirm-after-completion nil nil)
  read-file-name("Find file: " nil "/ssh:detlef:/home/albinus/" 
  find-file-read-args("Find file: " confirm-after-completion)
  byte-code("\300\301\302 \"\207" [find-file-read-args "Find file: " 
confirm-nonexistent-file-or-buffer] 3)
  call-interactively(find-file nil nil)

If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
    `bt full' and `xbacktrace'.
For information about debugging Emacs, please read the file

In GNU Emacs (x86_64-unknown-linux-gnu, GTK+ Version 2.24.10)
 of 2012-06-04 on detlef
Bzr revision: 108481 address@hidden
Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Dired by name

Minor modes in effect:
  display-time-mode: t
  shell-dirtrack-mode: t
  iswitchb-mode: t
  icomplete-mode: t
  show-paren-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
ESC [ > 1 ; 1 4 0 0 ; 0 c C-x C-f / s u d o : : RET
[ A RET q C-x C-f / e t TAB C-g ESC x r e p o TAB r

Recent messages:

Tramp: Waiting for prompts from remote shell
Tramp: Sending Password
Tramp: Sending command `exec sudo -u root -s -H -p Password:'
Tramp: Found remote shell prompt on `detlef'
Tramp: Opening connection for address@hidden using sudo...done
Mark set
completion--twq-try: Assertion failed: (equal (funcall unquote qstring) 
Making completion list...

Load-path shadows:
~/src/tramp/lisp/tramp-smb hides /home/albinus/src/emacs/lisp/net/tramp-smb
~/src/tramp/lisp/tramp-uu hides /home/albinus/src/emacs/lisp/net/tramp-uu
~/src/tramp/lisp/tramp-cmds hides /home/albinus/src/emacs/lisp/net/tramp-cmds
~/src/tramp/lisp/tramp-cache hides /home/albinus/src/emacs/lisp/net/tramp-cache
~/src/tramp/lisp/trampver hides /home/albinus/src/emacs/lisp/net/trampver
~/src/tramp/lisp/tramp-ftp hides /home/albinus/src/emacs/lisp/net/tramp-ftp
~/src/tramp/lisp/tramp-sh hides /home/albinus/src/emacs/lisp/net/tramp-sh
~/src/tramp/lisp/tramp hides /home/albinus/src/emacs/lisp/net/tramp
~/lisp/dbus hides /home/albinus/src/emacs/lisp/net/dbus
~/lisp/soap-client hides /home/albinus/src/emacs/lisp/net/soap-client
~/src/tramp/lisp/tramp-gw hides /home/albinus/src/emacs/lisp/net/tramp-gw
~/src/tramp/lisp/tramp-gvfs hides /home/albinus/src/emacs/lisp/net/tramp-gvfs
~/src/tramp/lisp/tramp-compat hides 

(shadow sort mail-extr warnings emacsbug message rfc822 mml mml-sec
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader sendmail rfc2047 rfc2045 ietf-drums mail-utils help-mode view
noutline outline easy-mmode tramp-cache tramp-sh debbugs-autoloads
package cperl-mode easymenu time tramp tramp-compat auth-source eieio
byte-opt bytecomp byte-compile cconv macroexp gnus-util mm-util
mail-prsvr password-cache shell pcomplete comint ansi-color ring
format-spec advice help-fns advice-preload tramp-loaddefs cl cl-lib
iswitchb jka-compr icomplete time-date paren ps-print ps-def lpr vc
ediff-merg ediff-diff ediff-wind ediff-help ediff-util ediff-mult
ediff-init ediff vc-dispatcher dired tooltip ediff-hook vc-hooks
lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment lisp-mode register page menu-bar
rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax
facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces
cus-face files text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget hashtable-print-readable backquote
make-network-process dbusbind dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs)

--- End Message ---
--- Begin Message --- Subject: Re: bug#11714: 24.1.50; find-file completion on a remote directory Date: Fri, 22 Jun 2012 23:49:46 -0400 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux)
>> Recipe from "emacs -Q":
>> 1. Eval: (cd "/address@hidden:~")
>> 2. Give the correct password.
>> 3. Type: C-x C-f / h o m e / s o m e - u s e r / t TAB

I just fixed this in the trunk with the patch below.


=== modified file 'lisp/minibuffer.el'
--- lisp/minibuffer.el  2012-06-18 20:39:52 +0000
+++ lisp/minibuffer.el  2012-06-23 03:46:25 +0000
@@ -488,7 +488,7 @@
 (defun completion--twq-try (string ustring completion point
                                    unquote requote)
-  ;; Basically two case: either the new result is
+  ;; Basically two cases: either the new result is
   ;; - commonprefix1 <point> morecommonprefix <qpos> suffix
   ;; - commonprefix <qpos> newprefix <point> suffix
@@ -505,8 +505,13 @@
          ((> point (length prefix)) (+ qpos (length qstr1)))
          (t (car (funcall requote point string))))))
     ;; Make sure `requote' worked.
-    (assert (equal (funcall unquote qstring) completion))
-    (cons qstring qpoint)))
+    (if (equal (funcall unquote qstring) completion)
+       (cons qstring qpoint)
+      ;; If requote failed (e.g. because sifn-requote did not handle
+      ;; Tramp's "/foo:/bar//baz -> /foo:/baz" truncation), then at least
+      ;; try requote properly.
+      (let ((qstr (funcall qfun completion)))
+       (cons qstr (length qstr))))))
 (defun completion--string-equal-p (s1 s2)
   (eq t (compare-strings s1 nil nil s2 nil nil 'ignore-case)))
@@ -2130,6 +2135,12 @@
   ;; find the position corresponding to UPOS in QSTR, but
   ;; substitute-in-file-name can do anything, depending on file-name-handlers.
   ;; Kind of like in rfn-eshadow-update-overlay, only worse.
+  ;; FIXME: example of thing we do not handle: Tramp's makes
+  ;; (substitute-in-file-name "/foo:~/bar//baz") -> "/scpc:foo:/baz".
+  ;; FIXME: One way to try and handle "all" cases is to require
+  ;; substitute-in-file-name to preserve text-properties, so we could
+  ;; apply text-properties to the input string and then look for them in
+  ;; the output to understand what comes from where.
   (let ((qpos 0))
     ;; Handle substitute-in-file-name's truncation behavior.
     (let (tpos)
@@ -2824,14 +2835,14 @@
 (defun completion--sreverse (str)
   "Like `reverse' but for a string STR rather than a list."
-  (apply 'string (nreverse (mapcar 'identity str))))
+  (apply #'string (nreverse (mapcar 'identity str))))
 (defun completion--common-suffix (strs)
   "Return the common suffix of the strings STRS."
-    (mapcar 'completion--sreverse strs))))
+    (mapcar #'completion--sreverse strs))))
 (defun completion-pcm--merge-completions (strs pattern)
   "Extract the commonality in STRS, with the help of PATTERN.

--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]