SummaryRefsLogTreeCommitDiffStats
diff options
context:
space:
mode:
authorMathieu Lirzin <mthl@gnu.org>2018-03-20 14:44:54 +0100
committerMathieu Lirzin <mthl@gnu.org>2018-03-20 19:27:10 +0100
commitf908c5395c24da621e5e30814a7a3e4fb76abcbc (patch)
tree27746720c8c9768f63c1bf4e95ad88407fc8551b
parent09e452b62a82845736e638eecd762a911d95a349 (diff)
downloadmcron-f908c5395c24da621e5e30814a7a3e4fb76abcbc.tar.gz
mcron-f908c5395c24da621e5e30814a7a3e4fb76abcbc.tar.bz2
mcron-f908c5395c24da621e5e30814a7a3e4fb76abcbc.zip
utils: Use 'scandir' instead of custom 'for-each-file'
* src/mcron/utils.scm (for-each-file): Delete. * src/mcron/scripts/cron.scm (process-files-in-system-directory): Use 'scandir' which has the benefit of being deterministic. * src/mcron/scripts/mcron.scm (process-files-in-user-directory): Likewise. * tests/schedule.sh: Update expected output which is now more reliable. * NEWS: Update. Suggested-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r--NEWS2
-rw-r--r--src/mcron/scripts/cron.scm7
-rw-r--r--src/mcron/scripts/mcron.scm12
-rw-r--r--src/mcron/utils.scm15
-rw-r--r--tests/schedule.sh26
5 files changed, 26 insertions, 36 deletions
diff --git a/NEWS b/NEWS
index 528b4d3..cf51e2c 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,8 @@ GNU Mcron NEWS -*- outline -*-
Some basic tests for the installed programs can be run after 'make install'
with 'make installcheck'.
+ The configuration files are now processed using a deterministic order.
+
* Noteworthy changes in release 1.1 (2018-03-19) [stable]
** New features
diff --git a/src/mcron/scripts/cron.scm b/src/mcron/scripts/cron.scm
index 5052c32..323499e 100644
--- a/src/mcron/scripts/cron.scm
+++ b/src/mcron/scripts/cron.scm
@@ -1,6 +1,6 @@
;;;; cron -- daemon for running jobs at scheduled times
;;; Copyright © 2003, 2012 Dale Mellor <dale_mellor@users.sourceforge.net>
-;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
+;;; Copyright © 2015, 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
;;;
;;; This file is part of GNU Mcron.
;;;
@@ -18,6 +18,7 @@
;;; along with GNU Mcron. If not, see <http://www.gnu.org/licenses/>.
(define-module (mcron scripts cron)
+ #:use-module (ice-9 ftw)
#:use-module (mcron base)
#:use-module (mcron config)
#:use-module (mcron job-specifier)
@@ -84,13 +85,13 @@ operation. The permissions on the /var/cron/tabs directory enforce this."
(catch #t
(λ ()
- (for-each-file
+ (for-each
(λ (user)
(and-let* ((entry (user-entry user))) ;crontab without user?
(set-configuration-user entry)
(catch-mcron-error
(read-vixie-file (string-append config-spool-dir "/" user)))))
- config-spool-dir))
+ (scandir config-spool-dir)))
(λ (key . args)
(mcron-error 4
"You do not have permission to access the system crontabs."))))
diff --git a/src/mcron/scripts/mcron.scm b/src/mcron/scripts/mcron.scm
index afb380f..6545ada 100644
--- a/src/mcron/scripts/mcron.scm
+++ b/src/mcron/scripts/mcron.scm
@@ -1,6 +1,6 @@
;;;; mcron -- run jobs at scheduled times
;;; Copyright © 2003, 2012 Dale Mellor <dale_mellor@users.sourceforge.net>
-;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
+;;; Copyright © 2015, 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
;;;
;;; This file is part of GNU Mcron.
;;;
@@ -18,6 +18,7 @@
;;; along with GNU Mcron. If not, see <http://www.gnu.org/licenses/>.
(define-module (mcron scripts mcron)
+ #:use-module (ice-9 ftw)
#:use-module (mcron base)
#:use-module (mcron config)
#:use-module (mcron job-specifier) ;for user/system files
@@ -49,11 +50,10 @@ $XDG_CONFIG_HOME is not defined uses ~/.config/cron instead)."
(map (λ (dir)
(catch #t
(λ ()
- (for-each-file
- (λ (file)
- (process-user-file (string-append dir "/" file)
- #:input input-type))
- dir))
+ (for-each (λ (file)
+ (process-user-file (string-append dir "/" file)
+ #:input input-type))
+ (scandir dir)))
(λ (key . args)
(set! errors (1+ errors)))))
(list (string-append home-directory "/.cron")
diff --git a/src/mcron/utils.scm b/src/mcron/utils.scm
index 062e756..bb23f4a 100644
--- a/src/mcron/utils.scm
+++ b/src/mcron/utils.scm
@@ -1,6 +1,6 @@
;;;; utils.scm -- helper procedures
;;; Copyright © 2003, 2012 Dale Mellor <dale_mellor@users.sourceforge.net>
-;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
+;;; Copyright © 2015, 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
;;;
;;; This file is part of GNU Mcron.
;;;
@@ -29,7 +29,6 @@
parse-args
show-version
show-package-information
- for-each-file
process-update-request)
#:re-export (option-ref
read-string))
@@ -81,18 +80,6 @@ General help using GNU software: <http://www.gnu.org/gethelp/>\n"
config-package-name
config-package-url))
-(define (for-each-file proc directory)
- "Apply PROC to each file in DIRECTORY. DIRECTORY must be a valid directory name.
-PROC must be a procedure that take one file name argument. The return value
-is not specified"
- (let ((dir (opendir directory)))
- (let loop ((file-name (readdir dir)))
- (if (eof-object? file-name)
- (closedir dir)
- (begin
- (proc file-name)
- (loop (readdir dir)))))))
-
(define (process-update-request fdes-list)
"Read a user name from the socket, dealing with the /etc/crontab special
case, remove all the user's jobs from the job list, and then re-read the
diff --git a/tests/schedule.sh b/tests/schedule.sh
index 5ea79e5..d403f1d 100644
--- a/tests/schedule.sh
+++ b/tests/schedule.sh
@@ -41,14 +41,10 @@ EOF
cat > expected <<EOF
Thu Jan 1 00:00:01 1970 +0000
-(display foo
-)
-
-Thu Jan 1 00:00:01 1970 +0000
(display bar
)
-Thu Jan 1 00:00:02 1970 +0000
+Thu Jan 1 00:00:01 1970 +0000
(display foo
)
@@ -56,7 +52,7 @@ Thu Jan 1 00:00:02 1970 +0000
(display bar
)
-Thu Jan 1 00:00:03 1970 +0000
+Thu Jan 1 00:00:02 1970 +0000
(display foo
)
@@ -64,7 +60,7 @@ Thu Jan 1 00:00:03 1970 +0000
(display bar
)
-Thu Jan 1 00:00:04 1970 +0000
+Thu Jan 1 00:00:03 1970 +0000
(display foo
)
@@ -72,7 +68,7 @@ Thu Jan 1 00:00:04 1970 +0000
(display bar
)
-Thu Jan 1 00:00:05 1970 +0000
+Thu Jan 1 00:00:04 1970 +0000
(display foo
)
@@ -80,7 +76,7 @@ Thu Jan 1 00:00:05 1970 +0000
(display bar
)
-Thu Jan 1 00:00:06 1970 +0000
+Thu Jan 1 00:00:05 1970 +0000
(display foo
)
@@ -88,7 +84,7 @@ Thu Jan 1 00:00:06 1970 +0000
(display bar
)
-Thu Jan 1 00:00:07 1970 +0000
+Thu Jan 1 00:00:06 1970 +0000
(display foo
)
@@ -96,7 +92,7 @@ Thu Jan 1 00:00:07 1970 +0000
(display bar
)
-Thu Jan 1 00:00:08 1970 +0000
+Thu Jan 1 00:00:07 1970 +0000
(display foo
)
@@ -104,7 +100,7 @@ Thu Jan 1 00:00:08 1970 +0000
(display bar
)
-Thu Jan 1 00:00:09 1970 +0000
+Thu Jan 1 00:00:08 1970 +0000
(display foo
)
@@ -112,7 +108,7 @@ Thu Jan 1 00:00:09 1970 +0000
(display bar
)
-Thu Jan 1 00:00:10 1970 +0000
+Thu Jan 1 00:00:09 1970 +0000
(display foo
)
@@ -120,6 +116,10 @@ Thu Jan 1 00:00:10 1970 +0000
(display bar
)
+Thu Jan 1 00:00:10 1970 +0000
+(display foo
+)
+
EOF
mcron --schedule=10 > output