* bug#67890: 28.2; nnmaildir silently deletes messages upon expiration
@ 2023-12-18 23:10 Łukasz Stelmach
2023-12-23 9:54 ` Eli Zaretskii
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Łukasz Stelmach @ 2023-12-18 23:10 UTC (permalink / raw)
To: 67890
[-- Attachment #1: Type: text/plain, Size: 29435 bytes --]
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: <42@example.com>
To: <2137@example.com>
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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 617 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#67890: 28.2; nnmaildir silently deletes messages upon expiration
2023-12-18 23:10 bug#67890: 28.2; nnmaildir silently deletes messages upon expiration Łukasz Stelmach
@ 2023-12-23 9:54 ` Eli Zaretskii
2023-12-24 16:38 ` Eric Abrahamsen
2024-01-04 16:32 ` Eric Abrahamsen
2024-01-04 16:32 ` Eric Abrahamsen
2 siblings, 1 reply; 7+ messages in thread
From: Eli Zaretskii @ 2023-12-23 9:54 UTC (permalink / raw)
To: Łukasz Stelmach, Eric Abrahamsen, Lars Ingebrigtsen; +Cc: 67890
> From: Łukasz Stelmach <stlman@poczta.fm>
> 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: <42@example.com>
> To: <2137@example.com>
> 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---
Adding Eric and Lars to the discussion.
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#67890: 28.2; nnmaildir silently deletes messages upon expiration
2023-12-23 9:54 ` Eli Zaretskii
@ 2023-12-24 16:38 ` Eric Abrahamsen
2024-01-09 19:58 ` Eli Zaretskii
0 siblings, 1 reply; 7+ messages in thread
From: Eric Abrahamsen @ 2023-12-24 16:38 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: Lars Ingebrigtsen, 67890, Łukasz Stelmach
On 12/23/23 11:54 AM, Eli Zaretskii wrote:
>> From: Łukasz Stelmach <stlman@poczta.fm>
>> Date: Tue, 19 Dec 2023 00:10:11 +0100
>>
>> I believe I've found a bug leading to a data loss situation.
[...]
> Adding Eric and Lars to the discussion.
I'll get to this soon after Christmas!
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#67890: 28.2; nnmaildir silently deletes messages upon expiration
2023-12-24 16:38 ` Eric Abrahamsen
@ 2024-01-09 19:58 ` Eli Zaretskii
0 siblings, 0 replies; 7+ messages in thread
From: Eli Zaretskii @ 2024-01-09 19:58 UTC (permalink / raw)
To: Eric Abrahamsen; +Cc: larsi, 67890, stlman
> From: Eric Abrahamsen <eric@ericabrahamsen.net>
> Cc: Łukasz Stelmach <stlman@poczta.fm>, Lars Ingebrigtsen
> <larsi@gnus.org>,
> 67890@debbugs.gnu.org
> Date: Sun, 24 Dec 2023 08:38:27 -0800
>
>
> On 12/23/23 11:54 AM, Eli Zaretskii wrote:
> >> From: Łukasz Stelmach <stlman@poczta.fm>
> >> Date: Tue, 19 Dec 2023 00:10:11 +0100
> >>
> >> I believe I've found a bug leading to a data loss situation.
>
> [...]
>
> > Adding Eric and Lars to the discussion.
>
> I'll get to this soon after Christmas!
Ping! Any progress here?
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#67890: 28.2; nnmaildir silently deletes messages upon expiration
2023-12-18 23:10 bug#67890: 28.2; nnmaildir silently deletes messages upon expiration Łukasz Stelmach
2023-12-23 9:54 ` Eli Zaretskii
@ 2024-01-04 16:32 ` Eric Abrahamsen
2024-01-04 16:32 ` Eric Abrahamsen
2 siblings, 0 replies; 7+ messages in thread
From: Eric Abrahamsen @ 2024-01-04 16:32 UTC (permalink / raw)
To: Łukasz Stelmach; +Cc: 67890
Łukasz Stelmach <stlman@poczta.fm> writes:
> I believe I've found a bug leading to a data loss situation.
>
> Steps to reproduce.
Thanks for the very detailed report! Obviously the `nnmaildir--pgname'
problem needs to be fixed, but otherwise it seems like the unlinking
step is also a clear bug: we should not be deleting the message if it
wasn't successfully expired someplace, right?
I'm thinking the end of the `t` clause in the cond there should look
like this:
(when (and (stringp target)
(not (string-equal target pgname))) ;; Move it.
(erase-buffer)
(nnheader-insert-file-contents nnmaildir--file)
(let ((group-art (gnus-request-accept-article
target nil nil 'no-encode)))
(if group-art
(progn
(when (consp group-art)
;; Maybe also copy: dormant forward reply save tick
;; (gnus-add-mark? gnus-request-set-mark?)
(gnus-group-mark-article-read target (cdr group-art)))
;; Article was successfully moved, delete the original.
(nnmaildir--unlink nnmaildir--file)
(nnmaildir--expired-article group article))
;; Leave it here.
(setq didnt (cons (nnmaildir--art-num article) didnt)))))
It looks to me like `gnus-request-accept-article` can return a
(group . article) cons, a symbol, or nil for failure. If we get a nil,
we shouldn't remove the original article.
Does that seem reasonable?
Eric
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#67890: 28.2; nnmaildir silently deletes messages upon expiration
2023-12-18 23:10 bug#67890: 28.2; nnmaildir silently deletes messages upon expiration Łukasz Stelmach
2023-12-23 9:54 ` Eli Zaretskii
2024-01-04 16:32 ` Eric Abrahamsen
@ 2024-01-04 16:32 ` Eric Abrahamsen
2024-01-10 19:18 ` Łukasz Stelmach
2 siblings, 1 reply; 7+ messages in thread
From: Eric Abrahamsen @ 2024-01-04 16:32 UTC (permalink / raw)
To: stlman; +Cc: Eli Zaretskii, 67890
Weird, this is in my Sent folder, but obviously never was actually sent.
I was wondering why no one responded...
Łukasz Stelmach <stlman@poczta.fm> writes:
> I believe I've found a bug leading to a data loss situation.
>
> Steps to reproduce.
Thanks for the very detailed report! Obviously the `nnmaildir--pgname'
problem needs to be fixed, but otherwise it seems like the unlinking
step is also a clear bug: we should not be deleting the message if it
wasn't successfully expired someplace, right?
I'm thinking the end of the `t` clause in the cond there should look
like this:
(when (and (stringp target)
(not (string-equal target pgname))) ;; Move it.
(erase-buffer)
(nnheader-insert-file-contents nnmaildir--file)
(let ((group-art (gnus-request-accept-article
target nil nil 'no-encode)))
(if group-art
(progn
(when (consp group-art)
;; Maybe also copy: dormant forward reply save tick
;; (gnus-add-mark? gnus-request-set-mark?)
(gnus-group-mark-article-read target (cdr group-art)))
;; Article was successfully moved, delete the original.
(nnmaildir--unlink nnmaildir--file)
(nnmaildir--expired-article group article))
;; Leave it here.
(setq didnt (cons (nnmaildir--art-num article) didnt)))))
It looks to me like `gnus-request-accept-article` can return a
(group . article) cons, a symbol, or nil for failure. If we get a nil,
we shouldn't remove the original article.
Does that seem reasonable?
Eric
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#67890: 28.2; nnmaildir silently deletes messages upon expiration
2024-01-04 16:32 ` Eric Abrahamsen
@ 2024-01-10 19:18 ` Łukasz Stelmach
0 siblings, 0 replies; 7+ messages in thread
From: Łukasz Stelmach @ 2024-01-10 19:18 UTC (permalink / raw)
To: Eric Abrahamsen; +Cc: Eli Zaretskii, 67890, stlman
[-- Attachment #1: Type: text/plain, Size: 471 bytes --]
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> Weird, this is in my Sent folder, but obviously never was actually sent.
> I was wondering why no one responded...
[...]
I got the first one. I am trying to make sense of it. I mean it looks OK
to me, but I am not sure *I* understand all the consequences. Could you
resend the piece of code as a patch so we can see better how it fits
with the rest?
Kind regards,
--
Miłego dnia,
Łukasz Stelmach
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 617 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-01-10 19:18 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-18 23:10 bug#67890: 28.2; nnmaildir silently deletes messages upon expiration Łukasz Stelmach
2023-12-23 9:54 ` Eli Zaretskii
2023-12-24 16:38 ` Eric Abrahamsen
2024-01-09 19:58 ` Eli Zaretskii
2024-01-04 16:32 ` Eric Abrahamsen
2024-01-04 16:32 ` Eric Abrahamsen
2024-01-10 19:18 ` Łukasz Stelmach
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.