From: Ted Zlatanov <tzz@lifelogs.com>
To: ding@gnus.org
Subject: check mtime of newsrc.eld before saving it
Date: Mon, 06 Oct 2014 23:11:40 -0400 [thread overview]
Message-ID: <m2sij060b7.fsf@lifelogs.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 584 bytes --]
I sometimes update my newsrc.eld in a directory shared between multiple
machines. I wanted a way to stop Gnus from overwriting the updated
file.
I came up with the following untested patch, which adds a customizable
option to do that check and saves the last modification time. But I
didn't finish testing or commit it because I had two questions:
1) is there a more elegant way to do this with file reverting? It seems
like Emacs can usually tell if the file needs to be reverted.
2) should I make and use a new newsrc pre-save hook?
Let me know what you think...
Thanks
Ted
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: save-newsrc-check.patch --]
[-- Type: text/x-patch, Size: 3071 bytes --]
diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el
index 766e7c2..53e88a9 100644
--- a/lisp/gnus-start.el
+++ b/lisp/gnus-start.el
@@ -442,6 +442,14 @@ See also `gnus-before-startup-hook'."
:group 'gnus-newsrc
:type 'hook)
+(defcustom gnus-save-newsrc-file-check-timestamp nil
+ "Check the modification time of the newsrc.eld file before saving it.
+When the newsrc.eld file is updated by multiple machines,
+checking the file's modification time is a good way to avoid
+overwriting updated data."
+ :group 'gnus-newsrc
+ :type 'boolean)
+
(defcustom gnus-save-newsrc-hook nil
"A hook called before saving any of the newsrc files."
:group 'gnus-newsrc
@@ -2783,6 +2791,7 @@ If FORCE is non-nil, the .newsrc file is read."
'msdos-long-file-names
(lambda () t))))
+(defvar gnus-save-newsrc-file-last-timestamp nil)
(defun gnus-save-newsrc-file (&optional force)
"Save .newsrc file."
;; Note: We cannot save .newsrc file if all newsgroups are removed
@@ -2821,12 +2830,24 @@ If FORCE is non-nil, the .newsrc file is read."
(erase-buffer)
(gnus-message 5 "Saving %s.eld..." gnus-current-startup-file)
+ ;; check timestamp of `gnus-current-startup-file'.eld against
+ ;; `gnus-save-newsrc-file-last-timestamp'
+ (when gnus-save-newsrc-file-check-timestamp
+ (let* ((checkfile (concat gnus-current-startup-file ".eld"))
+ (mtime (nth 5 (file-attributes checkfile))))
+ (when (and gnus-save-newsrc-file-last-timestamp
+ (time-less-p gnus-save-newsrc-file-last-timestamp
+ mtime))
+ (error "Couldn't save %s because it was updated" checkfile))))
+
(if gnus-save-startup-file-via-temp-buffer
(let ((coding-system-for-write gnus-ding-file-coding-system)
(standard-output (current-buffer)))
(gnus-gnus-to-quick-newsrc-format)
(gnus-run-hooks 'gnus-save-quick-newsrc-hook)
- (save-buffer))
+ (save-buffer)
+ (setq gnus-save-newsrc-file-last-timestamp
+ (nth 5 (file-attributes buffer-file-name))))
(let ((coding-system-for-write gnus-ding-file-coding-system)
(version-control gnus-backup-startup-file)
(startup-file (concat gnus-current-startup-file ".eld"))
@@ -2861,7 +2882,9 @@ If FORCE is non-nil, the .newsrc file is read."
;; Replace the existing startup file with the temp file.
(rename-file working-file startup-file t)
- (gnus-set-file-modes startup-file setmodes)))
+ (gnus-set-file-modes startup-file setmodes)
+ (setq gnus-save-newsrc-file-last-timestamp
+ (nth 5 (file-attributes startup-file)))))
(condition-case nil
(delete-file working-file)
(file-error nil)))))
next reply other threads:[~2014-10-07 3:11 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-07 3:11 Ted Zlatanov [this message]
2014-10-07 3:49 ` Eric Abrahamsen
2014-10-14 19:41 ` Ted Zlatanov
2015-01-27 1:40 ` Lars Ingebrigtsen
2015-02-04 11:39 ` Ted Zlatanov
2015-02-04 21:05 ` Steinar Bang
2015-02-04 22:40 ` Ted Zlatanov
2015-05-20 15:53 ` Any cloudy news...? (Was: check mtime of newsrc.eld before saving it) Steinar Bang
2015-06-07 21:28 ` Trying to get gnus-sync working with plink (Was: Any cloudy news...?) Steinar Bang
2015-06-08 16:15 ` Trying to get gnus-sync working with plink Steinar Bang
2015-06-08 16:25 ` Steinar Bang
2015-06-09 10:24 ` Sivaram Neelakantan
2015-06-09 14:47 ` Steinar Bang
2016-03-07 14:10 ` gnus-sync work (was: Trying to get gnus-sync working with plink) Ted Zlatanov
2016-05-19 22:45 ` gnus-sync work Dave Abrahams
2016-05-20 17:43 ` Steinar Bang
2016-05-24 19:17 ` Ted Zlatanov
2016-05-31 21:33 ` Dave Abrahams
2016-06-01 5:38 ` Steinar Bang
2016-06-05 20:27 ` Dave Abrahams
2016-06-07 18:22 ` Ted Zlatanov
2016-06-07 19:53 ` Steinar Bang
2016-06-15 18:55 ` gnus-cloud work (was: gnus-sync work) Ted Zlatanov
2016-06-17 20:21 ` gnus-cloud work Ted Zlatanov
2016-06-20 12:21 ` Steinar Bang
2016-06-20 19:10 ` Steinar Bang
2016-06-20 19:56 ` Steinar Bang
2016-06-21 15:39 ` Steinar Bang
2016-06-21 17:35 ` Andreas Schwab
2016-06-21 18:05 ` Steinar Bang
2016-06-21 18:52 ` Steinar Bang
2016-06-27 14:09 ` Ted Zlatanov
2016-06-27 15:07 ` Steinar Bang
2016-06-27 15:43 ` Ted Zlatanov
2016-07-03 10:10 ` Steinar Bang
2016-07-03 17:05 ` Steinar Bang
2016-07-05 2:39 ` Ted Zlatanov
2016-07-06 21:19 ` Steinar Bang
2016-07-07 12:52 ` Ted Zlatanov
2016-06-27 14:08 ` Ted Zlatanov
2016-06-30 14:42 ` Eric Abrahamsen
2016-06-30 15:02 ` Ted Zlatanov
2016-07-01 2:00 ` Eric Abrahamsen
2016-07-01 4:27 ` Eric Abrahamsen
2016-07-01 17:44 ` Ted Zlatanov
2016-07-02 1:00 ` Ted Zlatanov
2016-07-06 14:50 ` Ted Zlatanov
2016-07-20 12:58 ` Ted Zlatanov
2016-07-23 20:27 ` Steinar Bang
2016-07-24 13:33 ` Steinar Bang
2016-07-24 13:38 ` Steinar Bang
2016-07-24 14:46 ` Steinar Bang
2016-07-25 13:00 ` Ted Zlatanov
2016-07-25 17:42 ` Andreas Schwab
2016-07-26 2:09 ` Ted Zlatanov
2016-07-26 8:15 ` Steinar Bang
2016-07-26 14:14 ` Ted Zlatanov
2016-07-26 18:42 ` Steinar Bang
2016-07-26 18:55 ` Steinar Bang
2016-07-26 19:46 ` Ted Zlatanov
2016-07-26 21:19 ` Steinar Bang
2016-07-27 14:00 ` Ted Zlatanov
2016-07-27 15:59 ` Steinar Bang
2016-07-28 13:37 ` Ted Zlatanov
2016-07-28 17:18 ` Steinar Bang
2016-07-28 17:41 ` Ted Zlatanov
2016-07-28 20:50 ` Steinar Bang
2016-07-29 20:35 ` Steinar Bang
2016-07-29 23:04 ` What happenend Gmane? (Was: Re: gnus-cloud work) Byung-Hee HWANG (황병희)
2016-07-30 6:36 ` What happenend Gmane? Steinar Bang
2016-07-30 8:40 ` Byung-Hee HWANG (황병희)
2016-08-01 16:28 ` gnus-cloud work Ted Zlatanov
2016-08-01 19:34 ` Steinar Bang
2016-08-02 9:59 ` Ted Zlatanov
2016-08-03 7:20 ` Steinar Bang
2016-08-03 7:44 ` gnus-cloud: Invalid base64 data (Was: gnus-cloud work) Steinar Bang
2016-09-19 0:06 ` gnus-cloud work Dave Abrahams
2016-09-20 12:54 ` Ted Zlatanov
2016-09-30 18:27 ` Dave Abrahams
2016-09-30 18:29 ` Dave Abrahams
2016-07-23 20:32 ` Steinar Bang
2016-07-24 7:33 ` Steinar Bang
2015-02-05 3:13 ` check mtime of newsrc.eld before saving it Lars Ingebrigtsen
2015-02-05 4:08 ` Ted Zlatanov
2015-02-05 4:40 ` Lars Ingebrigtsen
2015-02-05 10:49 ` Steinar Bang
2015-02-05 10:59 ` Ted Zlatanov
2015-02-13 6:25 ` Lars Ingebrigtsen
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m2sij060b7.fsf@lifelogs.com \
--to=tzz@lifelogs.com \
--cc=ding@gnus.org \
/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.
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 NNTP newsgroup(s).