Subject: 28.2; nnmaildir silently deletes messages upon expiration

From: Łukasz Stelmach <[email-masked]>
Date: Tue, 19 Dec 2023 00:10:11 +0100

I believe I've found a bug leading to a data loss situation.

Steps to reproduce.

1. Setup a maildir virtual server

2. Create two or more groups in it.

3. Set expire-age and expire-group parameters (G p) for one so that
   messages would be moved to the other.

4. Exit Gnus and Emacs

5. Deliver a message to that group (let's call it source group) with a
   date older than expire-age (for example using the script below)

6. Run Gnus

7. (Optional) M-x describe-function nnmaildir--pgname. Go to the
function and C-u M-x eval-defun.

8. Enter the source group.

9. (Optional) The debugger will stop in nnmaildir--pgname. Go step by
   step and notice the prefix (inside the let) will become an empty
   string. This string will be also set as the prefix of the server
   passed to the function.

10. (Optional though recommended) Enable debugging for
    nnmaildir-request-expire-articles.

11. Mark the message delivered in point 5 as expirable (E)

12. Exit the group.

13. (Optional depending on point 10) The debugger will stop in
    nnmaildir-request-expire-articles. Skip to the point where the pgname
    variable is set. With debugging enabled for nnmaildir--pgname you
    can follow the entire process and notice that pgname won't have
    appropriate prefix and will be (most probably) equal to gname. Go on
    to the point where the target variable is set

--8<---------------cut here---------------start------------->8---
    target (if force nil
             (save-excursion
               (save-restriction
                 (nnmaildir--param pgname 'expire-group)))))
--8<---------------cut here---------------end--------------->8---

   At this point when nnmaildir--param is set with a group name without
   a prefix it will return nil which will prevent the message from being
   moved in the next few lines

--8<---------------cut here---------------start------------->8---
             (when (and (stringp target)
                        (not (string-equal target pgname))) ;; Move it.
--8<---------------cut here---------------end--------------->8---

   but not from being unlinked near the end of the
   nnmaildir-request-expire-articls function.
   
14. The message gets totally removed.

The major problem seems to araise from gnus-group-prefixed-name not
finding proper group prefix, which happens because the method field of
nnmaildir--srv doesn't seem to be properly set in nnmaildir--prepare.

I am digging deeper and deeper but I can't find anything obvious, so I
think this is the moment I will share me findings anyway.

As far as I can tell this scenario takes place only when I mark as
expirable messages that are alredy older than expire-age. Those which
get marked early after receiving and wait as expirable, apparently make
it nicely to the archive.

BTW. Judging by diff between emacs-28.2 and master there were very
little changes in nnmaildir, so I guess the bug (if it's a bug, but hey
my misconfiguration should be handled better anyway) still exists.

--8<---------------cut here---------------start------------->8---
#!/bin/sh

DIR=$1
if [ ! -d "$DIR" ]; then
        echo $DIR does not exist
        exit 1;
fi

FILE=$(date +%s.M%6N)P$$.$(hostname)

cat >$DIR/tmp/$FILE <<EOF
From: <[email-masked]>
To: <[email-masked]>
Subject: test test test
Date: $(date -d '1 year ago' -R)
Message-ID: <$(date | sha256sum | cut -f1 -d\ )@example.com>

EOF
fortune >>$DIR/tmp/$FILE
mv $DIR/tmp/$FILE $DIR/new/$FILE
--8<---------------cut here---------------end--------------->8---

In GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.37, cairo version 1.16.0)
 of 2023-05-14, modified by Debian built on x86-ubc-01
Windowing system distributor 'The X.Org Foundation', version 11.0.12101007
System Description: Debian GNU/Linux 12 (bookworm)

Configured using:
 'configure --build x86_64-linux-gnu --prefix=/usr
 --sharedstatedir=/var/lib --libexecdir=/usr/libexec
 --localstatedir=/var/lib --infodir=/usr/share/info
 --mandir=/usr/share/man --with-libsystemd --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/28.2/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/28.2/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils
 --with-native-compilation --build x86_64-linux-gnu --prefix=/usr
 --sharedstatedir=/var/lib --libexecdir=/usr/libexec
 --localstatedir=/var/lib --infodir=/usr/share/info
 --mandir=/usr/share/man --with-libsystemd --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/28.2/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/28.2/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils
 --with-native-compilation --with-cairo --with-x=yes
 --with-x-toolkit=gtk3 --with-toolkit-scroll-bars 'CFLAGS=-g -O2
 -ffile-prefix-map=/build/emacs-mPr7Vr/emacs-28.2+1=. -fstack-protector-strong
 -Wformat -Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time
 -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES
NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF
TOOLKIT_SCROLL_BARS X11 XDBE XIM XPM GTK3 ZLIB

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

Major mode: Fundamental

Minor modes in effect:
  electric-pair-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t

Load-path shadows:
/usr/share/emacs/site-lisp/elpa/dash-2.17.0/dash hides /usr/share/emacs/site-lisp/elpa/dash-2.19.1/dash
/usr/share/emacs/site-lisp/elpa/dash-2.17.0/dash-autoloads hides /usr/share/emacs/site-lisp/elpa/dash-2.19.1/dash-autoloads
/usr/share/emacs/site-lisp/elpa/dash-2.17.0/dash-pkg hides /usr/share/emacs/site-lisp/elpa/dash-2.19.1/dash-pkg
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-fnmatch hides /usr/share/emacs/site-lisp/elpa/editorconfig-0.8.2/editorconfig-fnmatch
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-pkg hides /usr/share/emacs/site-lisp/elpa/editorconfig-0.8.2/editorconfig-pkg
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-autoloads hides /usr/share/emacs/site-lisp/elpa/editorconfig-0.8.2/editorconfig-autoloads
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-core-handle hides /usr/share/emacs/site-lisp/elpa/editorconfig-0.8.2/editorconfig-core-handle
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig hides /usr/share/emacs/site-lisp/elpa/editorconfig-0.8.2/editorconfig
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-conf-mode hides /usr/share/emacs/site-lisp/elpa/editorconfig-0.8.2/editorconfig-conf-mode
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-core hides /usr/share/emacs/site-lisp/elpa/editorconfig-0.8.2/editorconfig-core
/usr/share/emacs/site-lisp/elpa/git-commit-2.99.0/git-commit-pkg hides /usr/share/emacs/site-lisp/elpa/git-commit-3.3.0/git-commit-pkg
/usr/share/emacs/site-lisp/elpa/git-commit-2.99.0/git-commit hides /usr/share/emacs/site-lisp/elpa/git-commit-3.3.0/git-commit
/usr/share/emacs/site-lisp/elpa/git-commit-2.99.0/git-commit-autoloads hides /usr/share/emacs/site-lisp/elpa/git-commit-3.3.0/git-commit-autoloads
/usr/share/emacs/site-lisp/elpa/debian-el-37/debian-autoloads hides /usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/debian-autoloads
/usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot hides /usr/share/emacs/site-lisp/elpa/gnuplot-mode-20141231/gnuplot
/usr/share/emacs/site-lisp/elpa/debian-el-37/debian-autoloads hides /usr/share/emacs/site-lisp/elpa/gnuplot-mode-20141231/debian-autoloads
/usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-context hides /usr/share/emacs/site-lisp/elpa/gnuplot-mode-20141231/gnuplot-context
/usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-gui hides /usr/share/emacs/site-lisp/elpa/gnuplot-mode-20141231/gnuplot-gui
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-mode hides /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-mode
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-guru hides /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-guru
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-mode-autoloads hides /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-mode-autoloads
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-rename hides /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-rename
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-mode-pkg hides /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-mode-pkg
/usr/share/emacs/site-lisp/elpa/htmlize-1.55/htmlize hides /usr/share/emacs/site-lisp/elpa/htmlize-1.56/htmlize
/usr/share/emacs/site-lisp/elpa/htmlize-1.55/htmlize-pkg hides /usr/share/emacs/site-lisp/elpa/htmlize-1.56/htmlize-pkg
/usr/share/emacs/site-lisp/elpa/htmlize-1.55/htmlize-autoloads hides /usr/share/emacs/site-lisp/elpa/htmlize-1.56/htmlize-autoloads
/usr/share/emacs/site-lisp/elpa/lua-mode-20151025/init-tryout hides /usr/share/emacs/site-lisp/elpa/lua-mode-20210802/init-tryout
/usr/share/emacs/site-lisp/elpa/lua-mode-20151025/lua-mode-pkg hides /usr/share/emacs/site-lisp/elpa/lua-mode-20210802/lua-mode-pkg
/usr/share/emacs/site-lisp/elpa/lua-mode-20151025/lua-mode-autoloads hides /usr/share/emacs/site-lisp/elpa/lua-mode-20210802/lua-mode-autoloads
/usr/share/emacs/site-lisp/elpa/lua-mode-20151025/lua-mode hides /usr/share/emacs/site-lisp/elpa/lua-mode-20210802/lua-mode
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-section hides /usr/share/emacs/site-lisp/elpa/magit-section-3.3.0/magit-section
/usr/share/emacs/site-lisp/elpa/with-editor-3.0.2/with-editor hides /usr/share/emacs/site-lisp/elpa/with-editor-3.0.5/with-editor
/usr/share/emacs/site-lisp/elpa/with-editor-3.0.2/with-editor-pkg hides /usr/share/emacs/site-lisp/elpa/with-editor-3.0.5/with-editor-pkg
/usr/share/emacs/site-lisp/elpa/with-editor-3.0.2/with-editor-autoloads hides /usr/share/emacs/site-lisp/elpa/with-editor-3.0.5/with-editor-autoloads
/usr/share/emacs/site-lisp/elpa/dash-2.17.0/dash hides /usr/share/emacs/site-lisp/elpa-src/dash-2.19.1/dash
/usr/share/emacs/site-lisp/elpa/dash-2.17.0/dash-autoloads hides /usr/share/emacs/site-lisp/elpa-src/dash-2.19.1/dash-autoloads
/usr/share/emacs/site-lisp/elpa/dash-2.17.0/dash-pkg hides /usr/share/emacs/site-lisp/elpa-src/dash-2.19.1/dash-pkg
/usr/share/emacs/site-lisp/elpa/debian-el-37/deb-view hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/deb-view
/usr/share/emacs/site-lisp/elpa/debian-el-37/debian-el-autoloads hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-el-autoloads
/usr/share/emacs/site-lisp/elpa/debian-el-37/debian-el hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-el
/usr/share/emacs/site-lisp/elpa/debian-el-37/preseed hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/preseed
/usr/share/emacs/site-lisp/elpa/debian-el-37/debian-el-pkg hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-el-pkg
/usr/share/emacs/site-lisp/elpa/debian-el-37/debian-bug hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-bug
/usr/share/emacs/site-lisp/elpa/debian-el-37/apt-sources hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/apt-sources
/usr/share/emacs/site-lisp/elpa/debian-el-37/apt-utils hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/apt-utils
/usr/share/emacs/site-lisp/elpa/debian-el-37/gnus-BTS hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/gnus-BTS
/usr/share/emacs/site-lisp/elpa/debian-el-37/debian-autoloads hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-autoloads
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-pkg hides /usr/share/emacs/site-lisp/elpa-src/editorconfig-0.8.2/editorconfig-pkg
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-autoloads hides /usr/share/emacs/site-lisp/elpa-src/editorconfig-0.8.2/editorconfig-autoloads
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig hides /usr/share/emacs/site-lisp/elpa-src/editorconfig-0.8.2/editorconfig
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-conf-mode hides /usr/share/emacs/site-lisp/elpa-src/editorconfig-0.8.2/editorconfig-conf-mode
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-fnmatch hides /usr/share/emacs/site-lisp/elpa-src/editorconfig-0.8.2/editorconfig-fnmatch
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-core-handle hides /usr/share/emacs/site-lisp/elpa-src/editorconfig-0.8.2/editorconfig-core-handle
/usr/share/emacs/site-lisp/elpa/editorconfig-0.8.1/editorconfig-core hides /usr/share/emacs/site-lisp/elpa-src/editorconfig-0.8.2/editorconfig-core
/usr/share/emacs/site-lisp/elpa/git-commit-2.99.0/git-commit-pkg hides /usr/share/emacs/site-lisp/elpa-src/git-commit-3.3.0/git-commit-pkg
/usr/share/emacs/site-lisp/elpa/git-commit-2.99.0/git-commit hides /usr/share/emacs/site-lisp/elpa-src/git-commit-3.3.0/git-commit
/usr/share/emacs/site-lisp/elpa/git-commit-2.99.0/git-commit-autoloads hides /usr/share/emacs/site-lisp/elpa-src/git-commit-3.3.0/git-commit-autoloads
/usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot
/usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-autoloads hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot-autoloads
/usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-pkg hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot-pkg
/usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-gui hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot-gui
/usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-context hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot-context
/usr/share/emacs/site-lisp/elpa/debian-el-37/debian-autoloads hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/debian-autoloads
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-mode-autoloads
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-mode hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-mode
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-mode-pkg
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-guru hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-guru
/usr/share/emacs/site-lisp/elpa/go-mode-1.5.0/go-rename hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-rename
/usr/share/emacs/site-lisp/elpa/htmlize-1.55/htmlize hides /usr/share/emacs/site-lisp/elpa-src/htmlize-1.56/htmlize
/usr/share/emacs/site-lisp/elpa/htmlize-1.55/htmlize-pkg hides /usr/share/emacs/site-lisp/elpa-src/htmlize-1.56/htmlize-pkg
/usr/share/emacs/site-lisp/elpa/htmlize-1.55/htmlize-autoloads hides /usr/share/emacs/site-lisp/elpa-src/htmlize-1.56/htmlize-autoloads
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-fonts hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-fonts
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-reconcile hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-reconcile
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-flymake hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-flymake
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-occur hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-occur
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-sort hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-sort
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-pkg hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-pkg
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-test hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-test
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-regex hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-regex
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-fontify hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-fontify
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-navigate hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-navigate
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-check hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-check
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-post hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-post
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-xact hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-xact
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-report hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-report
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-mode hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-mode
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-texi hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-texi
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-autoloads hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-autoloads
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-complete hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-complete
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-state hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-state
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-context hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-context
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-init hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-init
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-commodities hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-commodities
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-schedule hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-schedule
/usr/share/emacs/site-lisp/elpa/ledger-3.1.2/ledger-exec hides /usr/share/emacs/site-lisp/elpa-src/ledger-3.1.2/ledger-exec
/usr/share/emacs/site-lisp/elpa/lua-mode-20151025/lua-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/lua-mode-20210802/lua-mode-pkg
/usr/share/emacs/site-lisp/elpa/lua-mode-20151025/lua-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/lua-mode-20210802/lua-mode-autoloads
/usr/share/emacs/site-lisp/elpa/lua-mode-20151025/init-tryout hides /usr/share/emacs/site-lisp/elpa-src/lua-mode-20210802/init-tryout
/usr/share/emacs/site-lisp/elpa/lua-mode-20151025/lua-mode hides /usr/share/emacs/site-lisp/elpa-src/lua-mode-20210802/lua-mode
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-process hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-process
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-core hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-core
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-branch hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-branch
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-remote hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-remote
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-patch hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-patch
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-gitignore hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-gitignore
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-status hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-status
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-repos hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-repos
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-wip hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-wip
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-push hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-push
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-utils hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-utils
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-log hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-log
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-mode hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-mode
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-submodule hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-submodule
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-subtree hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-subtree
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-autoloads hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-autoloads
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-fetch hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-fetch
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-stash hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-stash
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-extras hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-extras
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-refs hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-refs
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-tag hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-tag
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-worktree hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-worktree
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-bookmark hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-bookmark
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/git-rebase hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/git-rebase
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-bisect hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-bisect
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-commit hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-commit
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-pkg hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-pkg
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-imenu hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-imenu
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-merge hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-merge
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-reflog hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-reflog
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-ediff hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-ediff
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-sequence hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-sequence
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-autorevert hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-autorevert
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-margin hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-margin
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-clone hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-clone
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-diff hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-diff
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-section hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-section
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-transient hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-transient
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-obsolete hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-obsolete
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-git hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-git
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-reset hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-reset
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-files hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-files
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-blame hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-blame
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-pull hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-pull
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-apply hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-apply
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-notes hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-notes
/usr/share/emacs/site-lisp/elpa/magit-section-3.3.0/magit-section-autoloads hides /usr/share/emacs/site-lisp/elpa-src/magit-section-3.3.0/magit-section-autoloads
/usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-section hides /usr/share/emacs/site-lisp/elpa-src/magit-section-3.3.0/magit-section
/usr/share/emacs/site-lisp/elpa/magit-section-3.3.0/magit-section-pkg hides /usr/share/emacs/site-lisp/elpa-src/magit-section-3.3.0/magit-section-pkg
/usr/share/emacs/site-lisp/elpa/with-editor-3.0.2/with-editor-pkg hides /usr/share/emacs/site-lisp/elpa-src/with-editor-3.0.5/with-editor-pkg
/usr/share/emacs/site-lisp/elpa/with-editor-3.0.2/with-editor-autoloads hides /usr/share/emacs/site-lisp/elpa-src/with-editor-3.0.5/with-editor-autoloads
/usr/share/emacs/site-lisp/elpa/with-editor-3.0.2/with-editor hides /usr/share/emacs/site-lisp/elpa-src/with-editor-3.0.5/with-editor
/usr/share/emacs/site-lisp/elpa/transient-0.2.0.30/transient hides /usr/share/emacs/28.2/lisp/transient

Features:
(shadow sort hashcash mail-extr spam spam-stat bbdb-com pcase crm
gnus-uu yenc gnus-delay gnus-draft gnus-agent gnus-srvr gnus-score
score-mode nnvirtual nntp gnus-cache gnus-msg gnus-art mm-uu mml2015
mm-view mml-smime smime dig gnus-sum shr kinsoku svg dom nndraft nnmh
gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap
utf7 netrc nnoo parse-time gnus-spec gnus-win nnmail gnus-int gnus-range
mail-source gnus nnheader emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec epa epg rfc6068 epg-config gnus-util rmail
rmail-loaddefs text-property-search mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils cus-start bbdb derived
bbdb-site timezone polish-holidays diary-lib diary-loaddefs ob-ditaa
edmacro kmacro elec-pair dvc-autoloads dvc-core dvc-lisp dvc-buffers
dvc-ui dvc-register dvc-utils dvc-emacs ewoc dvc-defs dvc-site
ledger-mode ledger-check ledger-texi ledger-test ledger-sort
ledger-report ledger-reconcile ledger-occur ledger-fonts ledger-fontify
ledger-state ledger-complete ledger-schedule ledger-init ledger-xact
ledger-post ledger-exec ledger-navigate eshell esh-cmd esh-ext esh-opt
esh-proc esh-io esh-module esh-groups ledger-context ledger-commodities
org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote
org-src ob-comint org-pcomplete pcomplete comint ansi-color ring
org-list org-faces org-entities noutline outline easy-mmode org-version
ob-emacs-lisp ob-core ob-eval org-table oc-basic bibtex iso8601
time-date ol org-keys oc org-compat advice org-macs org-loaddefs
format-spec find-func cal-menu calendar cal-loaddefs esh-arg esh-util
cus-edit pp cus-load wid-edit ledger-regex bbdb-loaddefs info debian-el
comp comp-cstr warnings rx cl-extra help-mode finder-inf package
browse-url url url-proxy url-privacy url-expand url-methods url-history
url-cookie url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache json subr-x map url-vars seq byte-opt gv bytecomp
byte-compile cconv cl-loaddefs cl-lib iso-transl tooltip eldoc paren
electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-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 cl-generic 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 simple abbrev obarray cl-preloaded nadvice
button loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo
move-toolbar gtk x-toolkit x multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 335714 29687)
 (symbols 48 26479 5)
 (strings 32 92598 10136)
 (string-bytes 1 3242882)
 (vectors 16 46242)
 (vector-slots 8 741112 16021)
 (floats 8 319 14)
 (intervals 56 496 0)
 (buffers 992 15))

-- 
Miłego dnia,
Łukasz Stelmach