GNU bug report logs - #76678
31.0.50; Can't trash broken links

Previous Next

Package: emacs;

Reported by: the_wurfkreuz <the_wurfkreuz <at> proton.me>

Date: Sun, 2 Mar 2025 09:36:01 UTC

Severity: normal

Found in version 31.0.50

Done: Michael Albinus <michael.albinus <at> gmx.de>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 76678 in the body.
You can then email your comments to 76678 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#76678; Package emacs. (Sun, 02 Mar 2025 09:36:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to the_wurfkreuz <the_wurfkreuz <at> proton.me>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 02 Mar 2025 09:36:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: the_wurfkreuz <the_wurfkreuz <at> proton.me>
To: "bug-gnu-emacs <at> gnu.org" <bug-gnu-emacs <at> gnu.org>
Subject: 31.0.50; Can't trash broken links
Date: Sun, 02 Mar 2025 09:34:48 +0000
[Message part 1 (text/plain, inline)]
With trashing enabled:

(setq delete-by-moving-to-trash t)
(setq trash-directory "~/.local/share/Trash/files/")

(connection-local-set-profile-variables
'remote-trash-directory
'((trash-directory . "/sudo::~/.local/share/trash/")))

(connection-local-set-profiles
`(:application tramp :protocol "sudo" :machine ,(system-name))
'remote-trash-directory)

If i try to delete a broken link using 'dired-do-delete' through tramp's sudo, i will get this message:

"file-missing: /sudo:root <at> ub-void:/path/to/file"

Steps to reproduce:

1. emacs -Q
2. Evaluate:

(setq delete-by-moving-to-trash t)
(setq trash-directory "~/.local/share/Trash/files/")

(connection-local-set-profile-variables
'remote-trash-directory
'((trash-directory . "/sudo::~/.local/share/trash/")))

(connection-local-set-profiles
`(:application tramp :protocol "sudo" :machine ,(system-name))
'remote-trash-directory)

(require 'tramp)

3. Create a file and symlink it to /usr/local/bin.
4. Delete the file, but not the symlink.
5. Go to /usr/local/bin using find-file command.
6. Execute 'tramp-revert-buffer-with-sudo'.
7. Execute 'dired-do-delete' on the broken symlink.

In GNU Emacs 31.0.50 (build 3, x86_64-pc-linux-gnu, GTK+ Version
3.24.43, cairo version 1.18.0) of 2025-02-19 built on ub-void
Repository revision: b568ff418ce7147c27d7f82fe4a8eef325b9de2c
Repository branch: HEAD
System Description: Void Linux

Configured using:
'configure --with-native-compilation=aot --with-tree-sitter --with-gif
--with-png --with-jpeg --with-rsvg --with-tiff --with-imagemagick
--with-pgtk --with-mailutils CC=/usr/bin/gcc CXX=/usr/bin/gcc'

Configured features:
CAIRO DBUS FREETYPE GLIB GMP GNUTLS GSETTINGS HARFBUZZ IMAGEMAGICK JPEG
LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG RSVG
SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP
XIM GTK3 ZLIB

Important settings:
value of $LC_COLLATE: C
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix

Major mode: ELisp/l

Minor modes in effect:
windmove-mode: t
savehist-mode: t
meow-global-mode: t
meow-mode: t
meow-normal-mode: t
meow-esc-mode: t
envrc-global-mode: t
envrc-mode: t
buffer-terminator-mode: t
global-git-commit-mode: t
magit-auto-revert-mode: t
marginalia-mode: t
vertico-mode: t
corfu-popupinfo-mode: t
corfu-history-mode: t
corfu-echo-mode: t
global-corfu-mode: t
corfu-mode: t
which-key-mode: t
undo-fu-session-global-mode: t
undo-fu-session-mode: t
global-treesit-auto-mode: t
global-auto-revert-mode: t
save-place-mode: t
electric-pair-mode: t
recentf-mode: t
global-display-line-numbers-mode: t
display-line-numbers-mode: t
override-global-mode: t
tooltip-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tab-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
minibuffer-regexp-mode: t
line-number-mode: t
auto-fill-function: do-auto-fill
indent-tabs-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t

Load-path shadows:
/home/wurfkreuz/.emacs.d/elpa/transient-20250108.1351/transient hides /usr/local/share/emacs/31.0.50/lisp/transient

Features:
(shadow sort mail-extr emacsbug help-fns radix-tree rfc2104 cus-start
rect tramp-cmds find-dired face-remap windmove misearch multi-isearch
dired-aux org-appear image-file image-converter oc-basic ol-eww eww
vtable mule-util url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus
nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig
gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group gnus-undo
gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source utf7
nnoo gnus-spec gnus-int gnus-range gnus-win gnus nnheader range
ol-docview doc-view image-mode exif ol-bibtex bibtex ol-bbdb ol-w3m
ol-doi org-link-doi raku-detect vc-git vc-dispatcher jka-compr python
savehist f eshell em-tramp esh-cmd esh-ext esh-proc esh-opt esh-io
esh-arg esh-module esh-module-loaddefs esh-util meow meow-tutor
meow-cheatsheet meow-cheatsheet-layout meow-core meow-shims meow-esc
meow-command array meow-thing meow-visual meow-keypad meow-beacon
meow-helpers meow-util meow-keymap meow-face meow-var delsel org-tempo
tempo org-drill persist org-agenda embark-org org-element org-persist
org-id org-refile org-element-ast inline avl-tree org ob ob-tangle
ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete
org-list org-footnote org-faces org-entities ob-emacs-lisp ob-core
ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc
org-version org-loaddefs cal-menu calendar cal-loaddefs org-compat
org-macs eglot external-completion jsonrpc xref ert ewoc debug backtrace
kdl-mode generic markdown-mode color nix-mode nix-repl nix-shell
nix-store nix-log nix-instantiate nix-shebang nix-format nix yaml-mode
dockerfile-mode sh-script smie executable terraform-mode noutline
outline hcl-mode lua-mode perl-mode flymake envrc inheritenv
buffer-terminator transpose-frame magit-bookmark magit-submodule
magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull
magit-fetch magit-clone magit-remote magit-commit magit-sequence
magit-notes magit-worktree magit-tag magit-merge magit-branch
magit-reset magit-files magit-refs magit-status magit magit-repos
magit-apply magit-wip magit-log which-func imenu magit-diff git-commit
log-edit message sendmail yank-media puny rfc822 mml mml-sec epa derived
epg rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log magit-core
magit-autorevert magit-margin magit-transient magit-process magit-mode
benchmark magit-git magit-base magit-section cursor-sensor crm
smerge-mode diff-mode track-changes diff hydra lv with-editor server
embark-consult embark ffap thingatpt consult bookmark marginalia vertico
project cape corfu-popupinfo corfu-history corfu-echo corfu orderless
tempel-collection tempel wgrep grep compile text-property-search
which-key docker docker-context docker-volume docker-network
docker-image docker-container docker-faces docker-core docker-compose
docker-process docker-utils tablist advice tablist-filter
semantic/wisent/comp semantic/wisent semantic/wisent/wisent
semantic/util-modes semantic/util semantic semantic/tag semantic/lex
semantic/fw mode-local find-func cedet dired dired-loaddefs docker-group
transient edmacro kmacro compat dash aio generator s goto-chg
undo-fu-session undo-fu zig-ts-mode clojure-ts-mode treesit-auto treesit
rose-pine-theme cus-edit pp cus-load midnight autorevert filenotify
saveplace tramp-cache time-stamp tramp-sh tramp trampver
tramp-integration files-x tramp-message tramp-compat shell pcomplete
comint ansi-osc ring parse-time iso8601 time-date format-spec ansi-color
tramp-loaddefs desktop frameset elec-pair recentf tree-widget wid-edit
comp comp-cstr warnings comp-run comp-common display-line-numbers
cl-extra help-mode use-package use-package-ensure use-package-delight
use-package-diminish use-package-bind-key bind-key easy-mmode
use-package-core finder-inf annalist-autoloads
buffer-terminator-autoloads cape-autoloads clojure-ts-mode-autoloads
corfu-autoloads cursor-undo-autoloads docker-autoloads aio-autoloads
dockerfile-mode-autoloads embark-consult-autoloads consult-autoloads
embark-autoloads envrc-autoloads f-autoloads go-mode-autoloads
goto-chg-autoloads haskell-mode-autoloads hydra-autoloads
inheritenv-autoloads lua-mode-autoloads lv-autoloads magit-autoloads
pcase marginalia-autoloads markdown-mode-autoloads meow-autoloads
nix-mode-autoloads magit-section-autoloads orderless-autoloads
org-appear-autoloads org-drill-autoloads persist-autoloads
queue-autoloads raku-mode-autoloads rx s-autoloads tablist-autoloads
tempel-collection-autoloads tempel-autoloads terraform-mode-autoloads
dash-autoloads hcl-mode-autoloads transient-autoloads
transpose-frame-autoloads treesit-auto-autoloads undo-fu-autoloads
undo-fu-session-autoloads vertico-autoloads wgrep-autoloads info
with-editor-autoloads yaml-mode-autoloads zig-ts-mode-autoloads package
browse-url xdg url url-proxy url-privacy url-expand url-methods
url-history url-cookie generate-lisp-file url-domsuf url-util mailcap
url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs icons
password-cache json subr-x map byte-opt gv bytecomp byte-compile
url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren
electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify
dynamic-setting system-font-setting font-render-setting cairo gtk pgtk
lcms2 multi-tty move-toolbar make-network-process tty-child-frames
native-compile emacs)

Memory information:
((conses 16 903740 318973) (symbols 48 51677 3) (strings 32 250128 23881)
(string-bytes 1 8438465) (vectors 16 94435) (vector-slots 8 1786126 147997)
(floats 8 768 1181) (intervals 56 8216 3595) (buffers 992 30))
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76678; Package emacs. (Tue, 04 Mar 2025 02:31:02 GMT) Full text and rfc822 format available.

Message #8 received at 76678 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: the_wurfkreuz <the_wurfkreuz <at> proton.me>
Cc: 76678 <at> debbugs.gnu.org, Michael Albinus <michael.albinus <at> gmx.de>
Subject: Re: bug#76678: 31.0.50; Can't trash broken links
Date: Mon, 3 Mar 2025 18:30:30 -0800
the_wurfkreuz <the_wurfkreuz <at> proton.me> writes:

> With trashing enabled:
>
> (setq delete-by-moving-to-trash t)
> (setq trash-directory "~/.local/share/Trash/files/")
>
> (connection-local-set-profile-variables
>  'remote-trash-directory
>  '((trash-directory . "/sudo::~/.local/share/trash/")))
>
> (connection-local-set-profiles
>  `(:application tramp :protocol "sudo" :machine ,(system-name))
>  'remote-trash-directory)
>
> If i try to delete a broken link using 'dired-do-delete' through tramp's sudo, i will get this
> message:
>
> "file-missing: /sudo:root <at> ub-void:/path/to/file"
>
> Steps to reproduce:
>
> 1. emacs -Q
> 2. Evaluate:
>
> (setq delete-by-moving-to-trash t)
> (setq trash-directory "~/.local/share/Trash/files/")
>
> (connection-local-set-profile-variables
>  'remote-trash-directory
>  '((trash-directory . "/sudo::~/.local/share/trash/")))
>
> (connection-local-set-profiles
>  `(:application tramp :protocol "sudo" :machine ,(system-name))
>  'remote-trash-directory)
>
> (require 'tramp)
>
> 3. Create a file and symlink it to /usr/local/bin.
> 4. Delete the file, but not the symlink.
> 5. Go to /usr/local/bin using find-file command.
> 6. Execute 'tramp-revert-buffer-with-sudo'.
> 7. Execute 'dired-do-delete' on the broken symlink.

Michael, could you please take a look at this?

> In GNU Emacs 31.0.50 (build 3, x86_64-pc-linux-gnu, GTK+ Version
>  3.24.43, cairo version 1.18.0) of 2025-02-19 built on ub-void
> Repository revision: b568ff418ce7147c27d7f82fe4a8eef325b9de2c
> Repository branch: HEAD
> System Description: Void Linux
>
> Configured using:
>  'configure --with-native-compilation=aot --with-tree-sitter --with-gif
>  --with-png --with-jpeg --with-rsvg --with-tiff --with-imagemagick
>  --with-pgtk --with-mailutils CC=/usr/bin/gcc CXX=/usr/bin/gcc'
>
> Configured features:
> CAIRO DBUS FREETYPE GLIB GMP GNUTLS GSETTINGS HARFBUZZ IMAGEMAGICK
> JPEG
> LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG
> RSVG
> SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
> WEBP
> XIM GTK3 ZLIB
>
> Important settings:
>   value of $LC_COLLATE: C
>   value of $LANG: en_US.UTF-8
>   locale-coding-system: utf-8-unix
>
> Major mode: ELisp/l
>
> Minor modes in effect:
>   windmove-mode: t
>   savehist-mode: t
>   meow-global-mode: t
>   meow-mode: t
>   meow-normal-mode: t
>   meow-esc-mode: t
>   envrc-global-mode: t
>   envrc-mode: t
>   buffer-terminator-mode: t
>   global-git-commit-mode: t
>   magit-auto-revert-mode: t
>   marginalia-mode: t
>   vertico-mode: t
>   corfu-popupinfo-mode: t
>   corfu-history-mode: t
>   corfu-echo-mode: t
>   global-corfu-mode: t
>   corfu-mode: t
>   which-key-mode: t
>   undo-fu-session-global-mode: t
>   undo-fu-session-mode: t
>   global-treesit-auto-mode: t
>   global-auto-revert-mode: t
>   save-place-mode: t
>   electric-pair-mode: t
>   recentf-mode: t
>   global-display-line-numbers-mode: t
>   display-line-numbers-mode: t
>   override-global-mode: t
>   tooltip-mode: t
>   show-paren-mode: t
>   electric-indent-mode: t
>   mouse-wheel-mode: t
>   tab-bar-mode: t
>   file-name-shadow-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   minibuffer-regexp-mode: t
>   line-number-mode: t
>   auto-fill-function: do-auto-fill
>   indent-tabs-mode: t
>   transient-mark-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>
> Load-path shadows:
> /home/wurfkreuz/.emacs.d/elpa/transient-20250108.1351/transient hides
> /usr/local/share/emacs/31.0.50/lisp/transient
>
> Features:
> (shadow sort mail-extr emacsbug help-fns radix-tree rfc2104 cus-start
> rect tramp-cmds find-dired face-remap windmove misearch multi-isearch
> dired-aux org-appear image-file image-converter oc-basic ol-eww eww
> vtable mule-util url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus
> nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig
> gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group gnus-undo
> gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source utf7
> nnoo gnus-spec gnus-int gnus-range gnus-win gnus nnheader range
> ol-docview doc-view image-mode exif ol-bibtex bibtex ol-bbdb ol-w3m
> ol-doi org-link-doi raku-detect vc-git vc-dispatcher jka-compr python
> savehist f eshell em-tramp esh-cmd esh-ext esh-proc esh-opt esh-io
> esh-arg esh-module esh-module-loaddefs esh-util meow meow-tutor
> meow-cheatsheet meow-cheatsheet-layout meow-core meow-shims meow-esc
> meow-command array meow-thing meow-visual meow-keypad meow-beacon
> meow-helpers meow-util meow-keymap meow-face meow-var delsel org-tempo
> tempo org-drill persist org-agenda embark-org org-element org-persist
> org-id org-refile org-element-ast inline avl-tree org ob ob-tangle
> ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete
> org-list org-footnote org-faces org-entities ob-emacs-lisp ob-core
> ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc
> org-version org-loaddefs cal-menu calendar cal-loaddefs org-compat
> org-macs eglot external-completion jsonrpc xref ert ewoc debug backtrace
> kdl-mode generic markdown-mode color nix-mode nix-repl nix-shell
> nix-store nix-log nix-instantiate nix-shebang nix-format nix yaml-mode
> dockerfile-mode sh-script smie executable terraform-mode noutline
> outline hcl-mode lua-mode perl-mode flymake envrc inheritenv
> buffer-terminator transpose-frame magit-bookmark magit-submodule
> magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull
> magit-fetch magit-clone magit-remote magit-commit magit-sequence
> magit-notes magit-worktree magit-tag magit-merge magit-branch
> magit-reset magit-files magit-refs magit-status magit magit-repos
> magit-apply magit-wip magit-log which-func imenu magit-diff git-commit
> log-edit message sendmail yank-media puny rfc822 mml mml-sec epa derived
> epg rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode
> mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
> mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log magit-core
> magit-autorevert magit-margin magit-transient magit-process magit-mode
> benchmark magit-git magit-base magit-section cursor-sensor crm
> smerge-mode diff-mode track-changes diff hydra lv with-editor server
> embark-consult embark ffap thingatpt consult bookmark marginalia vertico
> project cape corfu-popupinfo corfu-history corfu-echo corfu orderless
> tempel-collection tempel wgrep grep compile text-property-search
> which-key docker docker-context docker-volume docker-network
> docker-image docker-container docker-faces docker-core docker-compose
> docker-process docker-utils tablist advice tablist-filter
> semantic/wisent/comp semantic/wisent semantic/wisent/wisent
> semantic/util-modes semantic/util semantic semantic/tag semantic/lex
> semantic/fw mode-local find-func cedet dired dired-loaddefs docker-group
> transient edmacro kmacro compat dash aio generator s goto-chg
> undo-fu-session undo-fu zig-ts-mode clojure-ts-mode treesit-auto treesit
> rose-pine-theme cus-edit pp cus-load midnight autorevert filenotify
> saveplace tramp-cache time-stamp tramp-sh tramp trampver
> tramp-integration files-x tramp-message tramp-compat shell pcomplete
> comint ansi-osc ring parse-time iso8601 time-date format-spec ansi-color
> tramp-loaddefs desktop frameset elec-pair recentf tree-widget wid-edit
> comp comp-cstr warnings comp-run comp-common display-line-numbers
> cl-extra help-mode use-package use-package-ensure use-package-delight
> use-package-diminish use-package-bind-key bind-key easy-mmode
> use-package-core finder-inf annalist-autoloads
> buffer-terminator-autoloads cape-autoloads clojure-ts-mode-autoloads
> corfu-autoloads cursor-undo-autoloads docker-autoloads aio-autoloads
> dockerfile-mode-autoloads embark-consult-autoloads consult-autoloads
> embark-autoloads envrc-autoloads f-autoloads go-mode-autoloads
> goto-chg-autoloads haskell-mode-autoloads hydra-autoloads
> inheritenv-autoloads lua-mode-autoloads lv-autoloads magit-autoloads
> pcase marginalia-autoloads markdown-mode-autoloads meow-autoloads
> nix-mode-autoloads magit-section-autoloads orderless-autoloads
> org-appear-autoloads org-drill-autoloads persist-autoloads
> queue-autoloads raku-mode-autoloads rx s-autoloads tablist-autoloads
> tempel-collection-autoloads tempel-autoloads terraform-mode-autoloads
> dash-autoloads hcl-mode-autoloads transient-autoloads
> transpose-frame-autoloads treesit-auto-autoloads undo-fu-autoloads
> undo-fu-session-autoloads vertico-autoloads wgrep-autoloads info
> with-editor-autoloads yaml-mode-autoloads zig-ts-mode-autoloads package
> browse-url xdg url url-proxy url-privacy url-expand url-methods
> url-history url-cookie generate-lisp-file url-domsuf url-util mailcap
> url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs icons
> password-cache json subr-x map byte-opt gv bytecomp byte-compile
> url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren
> electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
> term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd tool-bar
> dnd fontset image regexp-opt fringe tabulated-list replace newcomment
> text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
> isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
> font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
> indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
> tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
> romanian slovak czech european ethiopic indian cyrillic chinese
> composite emoji-zwj charscript charprop case-table epa-hook
> jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
> theme-loaddefs faces cus-face macroexp files window text-properties
> overlay sha1 md5 base64 format env code-pages mule custom widget keymap
> hashtable-print-readable backquote threads dbusbind inotify
> dynamic-setting system-font-setting font-render-setting cairo gtk pgtk
> lcms2 multi-tty move-toolbar make-network-process tty-child-frames
> native-compile emacs)
>
> Memory information:
> ((conses 16 903740 318973) (symbols 48 51677 3) (strings 32 250128 23881)
>  (string-bytes 1 8438465) (vectors 16 94435) (vector-slots 8 1786126 147997)
>  (floats 8 768 1181) (intervals 56 8216 3595) (buffers 992 30))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76678; Package emacs. (Tue, 04 Mar 2025 07:43:01 GMT) Full text and rfc822 format available.

Message #11 received at 76678 <at> debbugs.gnu.org (full text, mbox):

From: Michael Albinus <michael.albinus <at> gmx.de>
To: Stefan Kangas <stefankangas <at> gmail.com>
Cc: 76678 <at> debbugs.gnu.org, the_wurfkreuz <the_wurfkreuz <at> proton.me>
Subject: Re: bug#76678: 31.0.50; Can't trash broken links
Date: Tue, 04 Mar 2025 08:42:13 +0100
Stefan Kangas <stefankangas <at> gmail.com> writes:

Hi Stefan,

>> 3. Create a file and symlink it to /usr/local/bin.
>> 4. Delete the file, but not the symlink.
>> 5. Go to /usr/local/bin using find-file command.
>> 6. Execute 'tramp-revert-buffer-with-sudo'.
>> 7. Execute 'dired-do-delete' on the broken symlink.
>
> Michael, could you please take a look at this?

I'm working already on this for two days. It is simple to reproduce, and
I have already extended tramp-tests.el for this case. This helps me also
debugging.

However, the fix isn't easy. Finally, the problem is a subtle behavior
of file-exists-p. If it is called with a symlinked file, valid target,
it returns t. If the target doesn't exist, it returns nil.

The Tramp implementation returns always t, whether the target exists or
not. Wrong.

I've fixed tramp-sh-handle-file-exists-p accordingly. But now, since
file-exists-p is used everywhere in Tramp, I must test everything.
Sometimes the changed implementation results in new errors, and I must
change code to '(or (file-exists-p filename) (file-symlinkp filename))'
at places, which have used a simple '(file-exists-p filename)' before.

This will take time.

Best regards, Michael.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76678; Package emacs. (Tue, 04 Mar 2025 09:55:02 GMT) Full text and rfc822 format available.

Message #14 received at 76678 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Michael Albinus <michael.albinus <at> gmx.de>
Cc: 76678 <at> debbugs.gnu.org, the_wurfkreuz <the_wurfkreuz <at> proton.me>
Subject: Re: bug#76678: 31.0.50; Can't trash broken links
Date: Tue, 4 Mar 2025 01:54:06 -0800
Michael Albinus <michael.albinus <at> gmx.de> writes:

> Hi Stefan,
>
>> Michael, could you please take a look at this?
>
> I'm working already on this for two days. It is simple to reproduce, and
> I have already extended tramp-tests.el for this case. This helps me also
> debugging.
>
> However, the fix isn't easy. Finally, the problem is a subtle behavior
> of file-exists-p. If it is called with a symlinked file, valid target,
> it returns t. If the target doesn't exist, it returns nil.
>
> The Tramp implementation returns always t, whether the target exists
> or not. Wrong.

Subtle behaviour, indeed.

> I've fixed tramp-sh-handle-file-exists-p accordingly. But now, since
> file-exists-p is used everywhere in Tramp, I must test everything.
> Sometimes the changed implementation results in new errors, and I must
> change code to '(or (file-exists-p filename) (file-symlinkp
> filename))' at places, which have used a simple '(file-exists-p
> filename)' before.
>
> This will take time.

Thanks for looking into this.




Reply sent to Michael Albinus <michael.albinus <at> gmx.de>:
You have taken responsibility. (Sun, 16 Mar 2025 13:25:05 GMT) Full text and rfc822 format available.

Notification sent to the_wurfkreuz <the_wurfkreuz <at> proton.me>:
bug acknowledged by developer. (Sun, 16 Mar 2025 13:25:06 GMT) Full text and rfc822 format available.

Message #19 received at 76678-done <at> debbugs.gnu.org (full text, mbox):

From: Michael Albinus <michael.albinus <at> gmx.de>
To: Stefan Kangas <stefankangas <at> gmail.com>
Cc: 76678-done <at> debbugs.gnu.org, the_wurfkreuz <the_wurfkreuz <at> proton.me>
Subject: Re: bug#76678: 31.0.50; Can't trash broken links
Date: Sun, 16 Mar 2025 14:23:57 +0100
Vesion: 30.2

Hi,

>> I'm working already on this for two days. It is simple to reproduce, and
>> I have already extended tramp-tests.el for this case. This helps me also
>> debugging.
>>
>> However, the fix isn't easy. Finally, the problem is a subtle behavior
>> of file-exists-p. If it is called with a symlinked file, valid target,
>> it returns t. If the target doesn't exist, it returns nil.
>>
>> The Tramp implementation returns always t, whether the target exists
>> or not. Wrong.
>
> Subtle behaviour, indeed.
>
>> I've fixed tramp-sh-handle-file-exists-p accordingly. But now, since
>> file-exists-p is used everywhere in Tramp, I must test everything.
>> Sometimes the changed implementation results in new errors, and I must
>> change code to '(or (file-exists-p filename) (file-symlinkp
>> filename))' at places, which have used a simple '(file-exists-p
>> filename)' before.
>>
>> This will take time.
>
> Thanks for looking into this.

Finally, I've applied needed changes to all Tramp backends. Tests pass,
so I have pushed it to master.

Will also be available with next Tramp 2.7.2.3 later this month on GNU
ELPA. This is also planned for merge with the emacs-30 branch.

Closing the bug.

Best regards, Michael.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 14 Apr 2025 11:24:13 GMT) Full text and rfc822 format available.

This bug report was last modified 66 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.