SummaryRefsLogTreeCommitDiffStats
path: root/src
Commit message (Expand)AuthorAgeFilesLines
* base: Call 'child-cleanup' when 'select' returns an empty set....Previously, on Guile >= 2.2, we'd lose this opportunity to call 'child-cleanup', possibly leaving zombies behind us. * src/mcron/base.scm (run-job-loop): Define 'select*'. Don't expect 'select*' to throw upon EINTR or EAGAIN. Ludovic Courtès2020-02-271-14/+26
* Add missing #include directives....<libguile.h> in Guile 2.x used to include these, but this is no longer the case with 3.0. * src/cron.c, src/mcron.h: Include <string.h>. * src/utils.c: Include <stdio.h>. Ludovic Courtès2020-02-273-0/+3
* build: Add '--with-sendmail' configure option...This allows users to configure the Mail Transfert Agent (MTA) of their choice. * configure.ac: Add '--with-sendmail' option. (SENDMAIL): Default to 'sendmail -t'. * NEWS: Announce it. * src/mcron/redirect.scm (with-mail-out): Assume the MTA is reading the message for recipients. * build-aux/guix.scm: Remove 'which' from the native-inputs. 宋文武2018-10-071-4/+4
* vixie-time: Refactor 'parse-vixie-time'...* src/mcron/vixie-time.scm (parse-vixie-time): Use 'match' to avoid complex 'car' and 'cdr' usage. Mathieu Lirzin2018-04-081-68/+63
* vixie-time: Refactor 'interpolate-weekdays'...* src/mcron/vixie-time.scm (interpolate-weekdays): Avoid mutation and add 'range-wday' inner procedure. Mathieu Lirzin2018-04-081-18/+11
* vixie-time: Adapt to '%find-best-next' possible infinite result...This is a follow up to commit ae6deb8ea23570c02a7b575a53bba37048aab59f. * src/mcron/vixie-time.scm (increment-time-component): Check if '%find-best-next' returns '+inf.0' not 9999. Mathieu Lirzin2018-04-011-10/+13
* utils: Remove 'parse-args'...It seems that it is not useful to catch 'misc-error exception when calling 'getopt-long'. Since 'parse-args' purpose was only to catch this particular error, it can be deleted. * src/mcron/utils.scm (parse-args): Remove. Mathieu Lirzin2018-03-273-13/+5
* job-specifier: Box 'configuration-user' global variable...* src/mcron/job-specifier.scm (configuration-user): Box it using SRFI-111 to be explicit about the mutability of this object. (job): Adapt. (set-configuration-user): Adapt and use 'get-user'. * tests/job-specifier.scm ("set-configuration-user: passwd entry") ("set-configuration-user: invalid uid", "set-configuration-user: uid") ("set-configuration-user: invalid spec") ("set-configuration-user: name"): New tests. Mathieu Lirzin2018-03-271-6/+4
* job-specifier: Fix typo "implement" => "implementation"...* src/mcron/job-specifier.scm (%find-best-next): Fix typo. Mathieu Lirzin2018-03-271-1/+2
* job-specifier: Adapt 'bump-time' to 'next-...-from' procedures...This is a follow-up to commit 913e3c65e4f56476e8ac69f4892cf92c125751ec. Since 'next-...-from' procedures now uses an '#:optional' argument instead of a dotted optional arguments list, 'bump-time' doesn't need to unwrap VALUE-LIST anymore. * src/mcron/job-specifier.scm (bump-time): Pass VALUE-LIST directly to '%find-best-next'. * tests/job-specifier.scm ("next-hour-from"): New test. * NEWS: Update. Reported-by: Ludovic Courtès <ludo@gnu.org> Mathieu Lirzin2018-03-261-15/+9
* job-specifier: Preserve '%find-best-next' arguments exactness...The behavior of the 'min' procedure which converts its parameters to inexact numbers when at least one of them is inexact was causing '%find-best-next' to always return real numbers. * src/mcron/job-specifier.scm (%find-best-next): Preserve the exactness of numbers in NEXT-LIST. * tests/job-specifier.scm ("%find-best-next: exact"): New test. Reported-by: Ludovic Courtès <ludo@gnu.org> Mathieu Lirzin2018-03-261-2/+6
* utils: It's 2018!...* src/mcron/utils.scm (show-version): Update copyright. Mathieu Lirzin2018-03-251-1/+1
* environment: Refactor configuration environment handling...* src/mcron/environment.scm (current-environment-mods): Rename to ... (%current-environment-mods): ... this. Box it using SRFI-111 to be explicit about the mutability of this object. (get-current-environment-mods-copy, clear-environment-mods) (append-environment-mods): New '#:ENVIRON' argument. Mathieu Lirzin2018-03-241-35/+38
* base: Box 'number-children'...* src/mcron/base.scm (number-children): Box it using SRFI-111 to be explicit about the mutability of this object. (update-number-children!): New procedure. (run-job, child-cleanup): Use it. * tests/base.scm ("update-number-children!: 1+") ("number-children: init", "update-number-children!: 1-"): New tests. Mathieu Lirzin2018-03-241-6/+15
* base: Rewrite 'child-cleanup'...* src/mcron/base.scm (child-cleanup): Use recursion instead of 'do'. Mathieu Lirzin2018-03-241-6/+6
* utils: Add 'get-user'...* src/mcron/utils.scm (get-user): New procedure. * src/mcron/job-specifier.scm (job): Use it. * src/mcron/base.scm (remove-user-jobs): Likewise. Mathieu Lirzin2018-03-243-8/+17
* base: Rewrite 'find-next-jobs' docstring....* src/mcron/base.scm (find-next-jobs): Don't explain the detail of implementation in the docstring. Mathieu Lirzin2018-03-241-15/+4
* base: Add '<schedule>' record data type...Reifying the notion of a schedule helps reasoning about the code. Passing a schedule as an argument to related procedures allows writing simpler unit tests. * src/mcron/base.scm(<schedule>): New record data type. (make-schedule, schedule-user, set-schedule-user!) (schedule-system, set-schedule-system!) (schedule-current, set-schedule-current!): New procedures. (system-job-list, user-job-list, configuration-source): Replace those global variables with ... (%global-schedule): ... this global <schedule> instance. * src/mcron/base.scm (use-system-job-list, use-user-job-list) (remove-user-jobs, clear-system-jobs, add-job, find-next-jobs) (display-schedule, run-job-loop): Add '#:SCHEDULE' keyword argument. * doc/mcron.texi (The base module): Update documentation. Mathieu Lirzin2018-03-241-66/+77
* job-specifier: Use 'simple-format'...* src/mcron/job-specifier.scm (job): Use 'simple-format' instead of 'with-output-to-string'. Mathieu Lirzin2018-03-231-4/+3
* 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> Mathieu Lirzin2018-03-203-23/+11
* tests: Add 'schedule.sh'...* tests/schedule.sh: New test. * Makefile.am (TESTS): Add it. * src/mcron/job-specifier.scm (configuration-time): Use SOURCE_DATE_EPOCH for reproducible tests. Mathieu Lirzin2018-03-161-1/+4
* base: Add 'display-schedule' procedure...This procedure is a more generic and less coupled version of 'get-schedule' which has been kept for backward compatibility and deprecated. * src/mcron/base.scm (display-schedule): New procedure. (get-schedule): Move to ... * src/mcron/core.scm: ... here. * src/mcron/scripts/cron.scm (main): Use 'display-schedule'. * src/mcron/scripts/mcron.scm (main): Likewise. * doc/mcron.texi (The base module): Document it. Mathieu Lirzin2018-03-164-30/+27
* crontab: Extract procedures from 'main'...* src/mcron/scripts/crontab.scm (in-access-file?) (hit-server): New procedures. Mathieu Lirzin2018-03-161-35/+34
* utils: Add 'assq_symbol_set_x' function...* src/utils.c (assq_symbol_set_x): New function. * src/mcron.c (parse_opt): Use it. Mathieu Lirzin2017-09-285-16/+18
* mcron: Handle command line arguments in C with argp...'argp' is a convenient and maintainable way to parse command line arguments. Guile doesn't offer an equivalent of this, so the command line handling has been moved to C. * src/mcron.c (parse_args, parse_opt): New functions. (inner_main): Call 'parse_args'. * src/mcron/scripts/mcron.scm (show-help, %options): Delete. (main): Remove command line handling. Mathieu Lirzin2017-09-282-61/+108
* Replace generic C wrapper with individual programs...* src/wrapper.c: Delete. * src/crontab.c: New file. * src/mcron.c: Likewise. * src/cron.c: Likewise. * configure.ac: Adapt 'AC_CONFIG_DIR' to use "src/mcron.c". * Makefile.am (bin_crontab_SOURCES, bin_cron_SOURCES) (bin_mcron_SOURCES): Use new files. (bin_cron_CPPFLAGS, bin_mcron_CPPFLAGS, bin_crontab_CPPFLAGS): Delete. Mathieu Lirzin2017-09-283-21/+109
* wrapper: Move 'wrap_env_path' to a new 'utils' module....* src/wrapper.c: Move 'wrap_env_path' to ... * src/utils.h: ... here. New module. * src/utils.c: New file. * configure.ac: Use AC_PROG_RANLIB and AM_PROG_AR. * Makefile.am (noinst_LIBRARIES, src_libmcron_a_SOURCES): New variables. (LDADD): Add 'src/libmcron.a'. Mathieu Lirzin2017-09-283-24/+72
* build: Remove "--enable-debug" configure option...Unlike C code where debugging impose the "-g" compilation flags. This debugging option only affects Guile code, so using an environment variable works better since it doesn't impose to recompile Mcron or to edit "config.scm". * configure.ac: Remove "--enable-debug" configure option. * src/mcron/config.scm.in (config-debug): Use MCRON_DEBUG environment variable to trigger the debug mode at runtime. Mathieu Lirzin2017-09-281-1/+8
* Add (mcron core) module....This module is an alias for (mcron base) module. This modules is added to keep backward compatibility with Mcron 1.x. Mathieu Lirzin2017-09-281-0/+32
* base: Add 'run-job' procedure....* src/mcron/base.scm (run-jobs): Delete. (run-job): New procedure. (run-job-loop): Use it. Mathieu Lirzin2017-09-281-31/+20
* job-specifier: Remove dependency on SRFI-26....* src/mcron/job-specifier.scm (range): Use plain lambda instead of 'cut' and 'cute'. Mathieu Lirzin2017-09-281-3/+6
* build: Define PACKAGE_LOAD_COMPILED_PATH macro....* Makefile.am (AM_CPPFLAGS): Define PACKAGE_LOAD_COMPILED_PATH macro. * src/wrapper.c (main): Use it. Mathieu Lirzin2017-09-271-1/+1
* wrapper: Avoid 'scm_c_eval_string' usage....* src/wrapper.c (wrap_env_path): New function. (main): Use it. (inner_main): Let 'wrap_env_path' set the environment variables. Don't use 'scm_c_eval_string' when calling 'main' procedure. * Makefile.am (AM_CPPFLAGS): Define _GNU_SOURCE for 'asprintf'. Mathieu Lirzin2017-09-271-11/+39
* base: find-next-jobs: Use functional style....* src/mcron/base.scm (find-next-jobs): Rewrite it using functional style. Add docstring. Mathieu Lirzin2016-12-281-40/+29
* vixie-specification: Do not use 'and-let*'....* src/mcron/vixie-specification.scm (parse-vixie-environment): Use 'and=>' instead of 'and-let*' Mathieu Lirzin2016-12-281-6/+3
* all: Gather module imports....* src/mcron/base.scm: Gather module imports. * src/mcron/redirect.scm: Likewise. * src/mcron/vixie-specification.scm: Likewise. * src/mcron/vixie-time.scm: Likewise. Mathieu Lirzin2016-12-284-37/+26
* utils: Remove unneeded 'stdin->string' procedure....* src/mcron/utils.scm: Re-export 'read-string'. (stdin->string): Delete. * src/mcron/scripts/crontab.scm (main): Use 'read-string' instead. * src/mcron/scripts/mcron.scm (process-user-file): Likewise. Mathieu Lirzin2016-12-283-10/+4
* utils: for-each-file: Use named let....* src/mcron/utils.scm (for-each-file): Use named 'let' instead of 'do'. Mathieu Lirzin2016-12-281-3/+6
* build: Rename (mcron main) to (mcron utils)....* src/mcron/main.scm: Rename to ... * src/mcron/utils.scm: ... this. * src/mcron/scripts/cron.scm: Adapt. * src/mcron/scripts/crontab.scm: Likewise. * src/mcron/scripts/mcron.scm: Likewise. * Makefile.am (dist_mcronmodule_DATA): Likewise. Mathieu Lirzin2016-12-284-5/+5
* maint: Reformat copyright notices and copying permission statements.Mathieu Lirzin2016-12-289-187/+192
* build: Rename 'mcron.c' to 'wrapper.c'....* src/mcron.c: Rename to ... * src/wrapper.c: ... this. * Makefile.am (mcron_SOURCES, cron_SOURCES, crontab_SOURCES): Adapt to it. * configure.ac (AC_CONFIG_SRCDIR): Likewise. Mathieu Lirzin2016-12-281-3/+2
* base: Rewrite 'run-job-loop'....* src/mcron/base.scm (run-job-loop): Use #:optional keyword argument, and 'match'. Mathieu Lirzin2016-12-281-44/+33
* job-specifier: Use #:optional keyword argument....* src/mcron/job-specifier.scm (next-year, next-year-from, next-month) (next-month-from, next-day, next-day-from, next-hour, next-hour-from) (next-minute, next-minute-from, next-second, next-second-from): Use #:optional keyword argument. (maybe-args): Remove unneeded procedure. Mathieu Lirzin2016-12-281-26/+28
* job-specifier: Add %current-action-time parameter object....* src/mcron/job-specifier.scm (current-action-time): Rename to ... (%current-action-time): ... this. Make it a parameter object. (job, maybe-args): Adapt. Mathieu Lirzin2016-12-281-26/+21
* job-specifier: Rewrite 'bump-time'....* src/mcron/job-specifier.scm (bump-time): Use 'match'. Mathieu Lirzin2016-12-281-28/+27
* job-specifier: Use 'inf' thunk....* src/mcron/job-specifier.scm (%find-best-next): Call 'inf' thunk instead of defining an arbitrary high integer. (bump-time): Adapt to it. Mathieu Lirzin2016-12-011-6/+6
* build: Define PACKAGE_LOAD_PATH in Makefile....Previously PACKAGE_LOAD_PATH was set in config header which wasn't correctly expanded due to the presence of ${prefix} in ${moduledir}. Let 'make' handle the expansion. * Makefile.am (AM_CPPFLAGS): New variable. (cron_CPPFLAGS, crontab_CPPFLAGS, mcron_CPPFLAGS): Use it. * configure.ac (PACKAGE_LOAD_PATH): Undefine it. (AC_CONFIG_HEADER): Remove macro. * src/mcron.c: Adapt to it. Mathieu Lirzin2016-12-011-1/+0
* all: Separate programs in different executables....This improves readability and complies with the GNU Coding Standards by making the behavior of the programs independent of the name used to invoke them. * src/mcron/scripts/cron.scm: New file. * src/mcron/scripts/crontab.scm: Likewise. * src/mcron/scripts/mcron.scm: Likewise. * Makefile.am (dist_mcronmodule_DATA): Remove 'src/mcron/crontab.scm'. (bin_PROGRAMS): Add 'crontab'. (sbin_PROGRAMS): Add 'cron'. (mcron_CFLAGS, mcron_LDADD): Rename to ... (AM_CFLAGS, LDADD): ... these. (cron_SOURCES, cron_CPPFLAGS, cron_DEPENDENCIES) (crontab_SOURCES, crontab_CPPFLAGS, crontab_DEPENDENCIES) (mcron_CPPFLAGS, mcronscriptdir, dist_mcronscript_DATA): New variables. (modules): Redefine it in terms of other '_DATA' variables. * src/mcron/crontab.scm: Remove file. * src/mcron/main.scm (parse-args): New procedure. (command-name, command-type, options): Remove. (show-version): Adapt. (show-help, process-files-in-system-directory, cron-file-descriptors) (main, process-user-file, process-files-in-user-directory): Move procedures in the new files. * src/mcron.c (inner_main): Define the current module at compile time. * TODO: Update. * .gitignore: Likewise. Mathieu Lirzin2016-12-016-530/+557
* job-specifier: job: Add #:user keyword argument....* src/mcron/job-specifier.scm (job): Add #:user keyword argument. * doc/mcron.texi (Job specification): Document it. Mathieu Lirzin2016-05-071-4/+8
* base: run-jobs: Ensure that the child process always terminates....* src/mcron/base.scm (run-jobs): Use 'dynamic-wind' instead of 'begin'. Ludovic Courtès2016-05-071-7/+11