From: Eric Abrahamsen <eric@ericabrahamsen.net>
To: Michael Heerdegen <michael_heerdegen@web.de>
Cc: 33005@debbugs.gnu.org
Subject: bug#33005: 27.0.50; Data loss with Gnus registry
Date: Thu, 17 Oct 2019 08:53:11 -0700 [thread overview]
Message-ID: <87sgnr74ig.fsf@ericabrahamsen.net> (raw)
In-Reply-To: <87lftjkcj7.fsf@web.de> (Michael Heerdegen's message of "Thu, 17 Oct 2019 10:21:32 +0200")
Michael Heerdegen <michael_heerdegen@web.de> writes:
> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> People are expected to use `gnus-mock-start' to start it, which does
>> "emacs -Q" internally.
>
> Ah, I remember.
>
>> The only requirement is that the emacs be run
>> from a build directory, and not an installation.
>
> I tried it from my normal Emacs session and got this:
>
> Debugger entered--Lisp error: (buffer-read-only #<buffer .newsrc.eld>)
> replace-match("/tmp/emacs-gnus-mock-738lXO" t)
> gnus-mock-start()
> funcall-interactively(gnus-mock-start)
> call-interactively(gnus-mock-start record nil)
> command-execute(gnus-mock-start record)
>
> Is that because it is an installed Emacs, or something else? Should I
> investigate?
Man, who would have guessed this would be so difficult... I have no idea
why a data file that ships with the package would become read-only.
I suppose I could wrap that in `inhibit-read-only', but if it's read
only for a reason that will only fail later down the line. Can you check
two things, and then I'll give up for now?
1. Put a breakpoint or edebug or otherwise slow the function down, and
after the data directory has been copied to /tmp, make sure that it
belongs to your user and you have the right permissions?
2. Try this version of gnus-mock-start and see if it works:
(defun gnus-mock-start ()
(interactive)
(let ((mock-tmp-dir (make-temp-file "emacs-gnus-mock-" t)))
(condition-case-unless-debug err
(let ((init-file (expand-file-name "init.el" mock-tmp-dir)))
(with-temp-buffer
(let ((standard-output (current-buffer))
(print-circle nil))
(prin1
`(setq gnus-home-directory ,mock-tmp-dir
init-file-user "mockturtle"
sendmail-program
,(expand-file-name gnus-mock-sendmail-program
mock-tmp-dir)
message-directory ,mock-tmp-dir
gnus-startup-file
,(expand-file-name ".newsrc" mock-tmp-dir)
gnus-init-file
,(expand-file-name ".gnus.el" mock-tmp-dir)
nndraft-directory
,(expand-file-name "drafts/" mock-tmp-dir)
gnus-agent-directory
,(expand-file-name "agent/" mock-tmp-dir)
gnus-directory
,(expand-file-name "News/" mock-tmp-dir)))
(princ "\n\n")
;; Constant that can be checked if we need to know it's a mock
;; session.
(prin1 '(defconst gnus-mock-p t))
(princ "\n")
;; Constant for use in `gnus-mock-reload', which is defined in
;; the .gnus.el startup file.
(prin1 `(defconst gnus-mock-data-dir ,gnus-mock-data-dir))
(when gnus-mock-cleanup-p
(princ "\n")
(prin1 `(add-hook 'kill-emacs-hook
(lambda () (delete-directory
,mock-tmp-dir t)))))
(when gnus-mock-use-images
(princ "\n")
(prin1 `(add-to-list 'load-path
,(format "%s/data" mock-tmp-dir))))
(write-file init-file)))
;; Put our data and config in place.
(copy-directory
gnus-mock-data-dir
(file-name-as-directory mock-tmp-dir) nil nil t)
;; Git doesn't let us commit empty directories, so create our
;; necessary empty maildir bits, and draft directories.
(mapc (lambda (path) (make-directory path t))
(mapcar (lambda (dir)
(format "%s/test/%s" mock-tmp-dir dir))
'("Welcome/new" "Welcome/tmp" "Welcome/.nnmaildir/marks"
"incoming/tmp" "incoming/new" "incoming/cur"
"incoming/.nnmaildir/marks" "incoming/.nnmaildir/nov"
"mails/tmp" "mails/new" "mails/.nnmaildir/marks")))
(make-directory (format "%s/drafts/drafts" mock-tmp-dir) t)
(make-directory (format "%s/drafts/queue" mock-tmp-dir))
;; Possibly insert additional config.
(when gnus-mock-init-file
(with-temp-buffer
(insert-file-contents gnus-mock-init-file)
(append-to-file
(point-min) (point-max) init-file)))
(when gnus-mock-gnus-file
(with-temp-buffer
(insert-file-contents gnus-mock-gnus-file)
(append-to-file
(point-min) (point-max)
(expand-file-name ".gnus.el" mock-tmp-dir))))
;; Possibly add an nnimap server.
(when gnus-mock-dovecot-imap-program
(with-temp-buffer
(insert "\n\n")
(prin1
`(add-to-list
'gnus-secondary-select-methods
(quote (nnimap
"Mocky"
(nnimap-stream shell)
(nnimap-shell-program
,(concat
gnus-mock-dovecot-imap-program
(format " -o mail_location=maildir:%s/imapmail/mail"
mock-tmp-dir))))))
(current-buffer))
(append-to-file
(point-min) (point-max)
(expand-file-name ".gnus.el" mock-tmp-dir))))
;; There are absolute paths in the .newsrc.eld file, so doctor
;; that file.
(let ((inhibit-read-only t))
(with-current-buffer (find-file-noselect
(expand-file-name ".newsrc.eld" mock-tmp-dir))
(while (re-search-forward "REPLACE_ME" (point-max) t)
(replace-match mock-tmp-dir t))
(when gnus-mock-dovecot-imap-program
(goto-char (point-max))
(insert "\n\n")
(prin1
'(setq
gnus-newsrc-alist
(append
gnus-newsrc-alist
'(("nnimap+Mocky:INBOX" 3 nil ((unexist) (seen (1 . 32)))
"nnimap:Mocky" ((modseq . "33") (uidvalidity . "1541087103")
(active 1 . 32)
(permanent-flags %Answered %Flagged %Deleted
%Seen %Draft %*)))
("nnimap+Mocky:emacs-devel" 3 nil ((unexist 0))
"nnimap:Mocky" ((modseq . "21") (uidvalidity . "1541087104")
(active 0 . 20)
(permanent-flags %Answered %Flagged %Deleted
%Seen %Draft %*)))
("nnimap+Mocky:\320\237\321\200\320\270\320\262\320\265\321\202\320\274\320\270\321\200"
3 nil ((unexist) (seen 1))
"nnimap:Mocky" ((modseq . "2") (uidvalidity . "1541087105")
(active 1 . 1)
(permanent-flags %Answered %Flagged %Deleted
%Seen %Draft %*))))))
(current-buffer)))
(basic-save-buffer)))
(let ((default-directory
(expand-file-name
"lisp/gnus"
(file-name-as-directory
(expand-file-name "../.."
gnus-mock-emacs-program)))))
(make-process :name "gnus-mock" :buffer nil
:command (list gnus-mock-emacs-program
"-Q" "--load" init-file)
:stderr "*gnus mock errors*")))
(error (when (and gnus-mock-cleanup-p
(file-exists-p mock-tmp-dir))
(delete-directory mock-tmp-dir t))
(signal (car err) (cdr err))))))
next prev parent reply other threads:[~2019-10-17 15:53 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-10 13:24 bug#33005: 27.0.50; Data loss with Gnus registry Michael Heerdegen
2018-10-10 14:56 ` Eric Abrahamsen
2018-10-10 15:17 ` Michael Heerdegen
2018-10-10 16:08 ` Eric Abrahamsen
2018-10-10 20:23 ` Michael Heerdegen
2018-10-10 21:24 ` Michael Heerdegen
2018-10-10 23:05 ` Eric Abrahamsen
2018-10-11 12:44 ` Michael Heerdegen
2018-10-11 13:10 ` Michael Heerdegen
2018-10-11 18:12 ` Eric Abrahamsen
2018-10-11 20:28 ` Michael Heerdegen
2018-10-11 22:09 ` Eric Abrahamsen
2018-10-11 22:20 ` Michael Heerdegen
2018-10-11 22:26 ` Eric Abrahamsen
2018-10-12 14:22 ` Michael Heerdegen
2018-10-12 16:57 ` Eric Abrahamsen
2018-10-11 18:53 ` Eli Zaretskii
2018-10-11 18:57 ` Eric Abrahamsen
2018-10-11 20:08 ` Michael Heerdegen
2018-10-12 4:24 ` Eli Zaretskii
2018-10-12 11:04 ` Michael Heerdegen
2018-10-12 12:51 ` Eli Zaretskii
2018-10-12 14:46 ` Michael Heerdegen
2018-10-12 16:58 ` Eric Abrahamsen
2019-09-24 1:35 ` Michael Heerdegen
2019-09-24 3:34 ` Eric Abrahamsen
2019-10-01 23:37 ` Eric Abrahamsen
2019-10-14 9:53 ` Michael Heerdegen
2019-10-14 17:51 ` Eric Abrahamsen
2019-10-15 14:28 ` Michael Heerdegen
2019-10-15 20:11 ` Eric Abrahamsen
2019-10-16 9:03 ` Michael Heerdegen
2019-10-16 15:46 ` Eric Abrahamsen
2019-10-17 8:21 ` Michael Heerdegen
2019-10-17 15:53 ` Eric Abrahamsen [this message]
2019-10-18 9:18 ` Michael Heerdegen
2019-10-18 14:44 ` Michael Heerdegen
2019-10-19 2:05 ` Phil Sainty
2019-10-19 14:31 ` Michael Heerdegen
2019-10-19 22:12 ` Phil Sainty
2019-10-26 8:02 ` Michael Heerdegen
2019-10-26 15:35 ` Eric Abrahamsen
2019-11-18 9:17 ` Phil Sainty
2019-10-18 14:46 ` Michael Heerdegen
2019-10-18 19:07 ` Eric Abrahamsen
2019-10-18 19:09 ` Eric Abrahamsen
2019-10-18 19:23 ` Michael Heerdegen
2019-10-18 19:24 ` Eric Abrahamsen
2019-10-19 14:25 ` Michael Heerdegen
2019-10-19 18:06 ` Eric Abrahamsen
2019-10-18 19:06 ` Eric Abrahamsen
2019-10-16 9:30 ` Michael Heerdegen
2019-10-16 15:49 ` Eric Abrahamsen
2019-10-17 8:32 ` Michael Heerdegen
2019-10-17 10:23 ` Michael Heerdegen
2019-10-17 15:54 ` Eric Abrahamsen
2019-10-18 3:08 ` Richard Stallman
2019-10-18 9:50 ` Michael Heerdegen
2019-11-26 0:17 ` Michael Heerdegen
2019-11-26 0:51 ` Eric Abrahamsen
2019-11-26 16:32 ` Michael Heerdegen
2019-11-26 18:45 ` Eric Abrahamsen
2019-11-26 20:08 ` Michael Heerdegen
2019-11-26 20:41 ` Eric Abrahamsen
2019-11-26 20:45 ` Michael Heerdegen
2019-11-26 20:48 ` Eric Abrahamsen
2019-11-26 20:54 ` Michael Heerdegen
2019-11-28 8:43 ` Eric Abrahamsen
2019-11-28 16:25 ` Michael Heerdegen
2019-11-28 23:55 ` Eric Abrahamsen
2019-11-29 12:36 ` Michael Heerdegen
2019-12-03 9:19 ` Eric Abrahamsen
2019-12-04 16:10 ` Michael Heerdegen
2019-12-04 17:26 ` Eric Abrahamsen
2019-12-04 20:41 ` Michael Heerdegen
2019-12-04 20:53 ` Eric Abrahamsen
2019-12-04 21:02 ` Michael Heerdegen
2019-12-04 21:16 ` Eric Abrahamsen
2019-12-04 21:51 ` Michael Heerdegen
2019-12-05 0:51 ` Eric Abrahamsen
2019-12-08 15:48 ` Michael Heerdegen
2019-12-08 20:52 ` Eric Abrahamsen
2019-12-09 19:38 ` Michael Heerdegen
2019-12-09 22:29 ` Eric Abrahamsen
2019-12-09 23:07 ` Michael Heerdegen
2019-12-10 0:24 ` Eric Abrahamsen
2019-12-10 2:30 ` Michael Heerdegen
2019-12-10 23:31 ` Eric Abrahamsen
2019-12-15 17:07 ` Michael Heerdegen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sgnr74ig.fsf@ericabrahamsen.net \
--to=eric@ericabrahamsen.net \
--cc=33005@debbugs.gnu.org \
--cc=michael_heerdegen@web.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).