Gnus development mailing list
 help / color / mirror / Atom feed
* check mtime of newsrc.eld before saving it
@ 2014-10-07  3:11 Ted Zlatanov
  2014-10-07  3:49 ` Eric Abrahamsen
  2015-01-27  1:40 ` Lars Ingebrigtsen
  0 siblings, 2 replies; 88+ messages in thread
From: Ted Zlatanov @ 2014-10-07  3:11 UTC (permalink / raw)
  To: ding

[-- 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)))))

^ permalink raw reply	[flat|nested] 88+ messages in thread

end of thread, other threads:[~2016-09-30 18:29 UTC | newest]

Thread overview: 88+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-10-07  3:11 check mtime of newsrc.eld before saving it Ted Zlatanov
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

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).