Subject: bug#49030: 28.0.50; Tramp archive error

From: Juri Linkov <[email-masked]>
Date: Tue, 15 Jun 2021 01:17:50 +0300

This regression is caused by some change during the previous month.
Here is 100% reproducible test case:

0. emacs -Q -l dired-x
   or (require 'dired-x) after start,
   i.e. the problem is reproducible only when dired-x is loaded.

1. create a .tar or .tgz archive with e.g. `tar zcvf test.tgz file`

2. in Dired flag this archive for deletion with 'd' and type 'x' or just 'D',
   confirm the deletion.

Such error is signaled:

  Tramp: Opening connection for file%3A%2F%2F%2Ftmp%2Ftest.tgz using archive...failed
  file-error: org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1
  Error when getting information for file “/tmp/test.tgz”: No such file or directory

I discovered this problem after saveplace.el started to fail
when in a Dired buffer the current file is a .tar archive:

Debugger entered--Lisp error: (file-error "org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1 Error when getting information for file “/tmp/test.tar”: No such file or directory")
  signal(file-error ("org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1 Error when getting information for file “/tmp/test.tar”: No such file or directory"))
  tramp-error((tramp-file-name "archive" nil nil "file%3A%2F%2F%2Ftmp%2Ftest.tar" nil "/" nil) file-error "org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1 Error when getting information for file “/tmp/test.tar”: No such file or directory")
  tramp-gvfs-dbus-event-error((dbus-event :session 3 33 ":1.3" ":1.251" nil nil "org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1" ignore (:string "Error when getting information for file “/tmp/test.tar”: No such file or directory")) (dbus-error "org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1 Error when getting information for file “/tmp/test.tar”: No such file or directory"))
  run-hook-with-args(tramp-gvfs-dbus-event-error (dbus-event :session 3 33 ":1.3" ":1.251" nil nil "org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1" ignore (:string "Error when getting information for file “/tmp/test.tar”: No such file or directory")) (dbus-error "org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1 Error when getting information for file “/tmp/test.tar”: No such file or directory"))
  dbus-handle-event((dbus-event :session 3 33 ":1.3" ":1.251" nil nil "org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1" ignore (:string "Error when getting information for file “/tmp/test.tar”: No such file or directory")))
  funcall-interactively(dbus-handle-event (dbus-event :session 3 33 ":1.3" ":1.251" nil nil "org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1" ignore (:string "Error when getting information for file “/tmp/test.tar”: No such file or directory")))
  command-execute(dbus-handle-event nil [(dbus-event :session 3 33 ":1.3" ":1.251" nil nil "org.gtk.GDBus.UnmappedGError.Quark._g_2dio_2derror_2dquark.Code1" ignore (:string "Error when getting information for file “/tmp/test.tar”: No such file or directory"))] t)
  read-event(nil nil 0.1)
  tramp-gvfs-maybe-open-connection((tramp-file-name "archive" nil nil "file%3A%2F%2F%2Ftmp%2Ftest.tar" nil "/" nil))
  tramp-gvfs-send-command((tramp-file-name "archive" nil nil "file%3A%2F%2F%2Ftmp%2Ftest.tar" nil "/" nil) "gvfs-info" "archive://file%253A%252F%252F%252Ftmp%252Ftest.tar/")
  tramp-gvfs-get-root-attributes("/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-gvfs-get-file-attributes("/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-gvfs-handle-file-attributes("/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  apply(tramp-gvfs-handle-file-attributes "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-gvfs-file-name-handler(file-attributes "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  apply(tramp-gvfs-file-name-handler file-attributes "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-file-name-handler(file-attributes "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-handle-file-exists-p("/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  apply(tramp-handle-file-exists-p "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-gvfs-file-name-handler(file-exists-p "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  apply(tramp-gvfs-file-name-handler file-exists-p "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-file-name-handler(file-exists-p "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  file-exists-p("/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-gvfs-handle-file-readable-p("/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  apply(tramp-gvfs-handle-file-readable-p "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-gvfs-file-name-handler(file-readable-p "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  apply(tramp-gvfs-file-name-handler file-readable-p "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-file-name-handler(file-readable-p "/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  file-readable-p("/archive:file%3A%2F%2F%2Ftmp%2Ftest.tar:/")
  tramp-archive-handle-file-readable-p("/tmp/test.tar/")
  apply(tramp-archive-handle-file-readable-p "/tmp/test.tar/")
  tramp-archive-file-name-handler(file-readable-p "/tmp/test.tar/")
  save-place-forget-unreadable-files()
  save-place-alist-to-file()
  save-place-kill-emacs-hook()