AboutSummaryRefsLogTreeCommitDiffStats
path: root/src/mcron
Commit message (Collapse)AuthorAgeFilesLines
* base: Rewrite 'find-next-jobs' docstring.Mathieu Lirzin2018-03-241-15/+4
| | | | | * src/mcron/base.scm (find-next-jobs): Don't explain the detail of implementation in the docstring.
* base: Add '<schedule>' record data typeMathieu Lirzin2018-03-241-66/+77
| | | | | | | | | | | | | | | | | | 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.
* job-specifier: Use 'simple-format'Mathieu Lirzin2018-03-231-4/+3
| | | | | * src/mcron/job-specifier.scm (job): Use 'simple-format' instead of 'with-output-to-string'.
* utils: Use 'scandir' instead of custom 'for-each-file'Mathieu Lirzin2018-03-203-23/+11
| | | | | | | | | | | | * 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>
* tests: Add 'schedule.sh'Mathieu Lirzin2018-03-161-1/+4
| | | | | | | * tests/schedule.sh: New test. * Makefile.am (TESTS): Add it. * src/mcron/job-specifier.scm (configuration-time): Use SOURCE_DATE_EPOCH for reproducible tests.
* base: Add 'display-schedule' procedureMathieu Lirzin2018-03-164-30/+27
| | | | | | | | | | | | | 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.
* crontab: Extract procedures from 'main'Mathieu Lirzin2018-03-161-35/+34
| | | | | * src/mcron/scripts/crontab.scm (in-access-file?) (hit-server): New procedures.
* mcron: Handle command line arguments in C with argpMathieu Lirzin2017-09-281-60/+27
| | | | | | | | | | | '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.
* build: Remove "--enable-debug" configure optionMathieu Lirzin2017-09-281-1/+8
| | | | | | | | | | | 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.
* Add (mcron core) module.Mathieu Lirzin2017-09-281-0/+32
| | | | | This module is an alias for (mcron base) module. This modules is added to keep backward compatibility with Mcron 1.x.
* base: Add 'run-job' procedure.Mathieu Lirzin2017-09-281-31/+20
| | | | | | * src/mcron/base.scm (run-jobs): Delete. (run-job): New procedure. (run-job-loop): Use it.
* job-specifier: Remove dependency on SRFI-26.Mathieu Lirzin2017-09-281-3/+6
| | | | | * src/mcron/job-specifier.scm (range): Use plain lambda instead of 'cut' and 'cute'.
* base: find-next-jobs: Use functional style.Mathieu Lirzin2016-12-281-40/+29
| | | | | * src/mcron/base.scm (find-next-jobs): Rewrite it using functional style. Add docstring.
* vixie-specification: Do not use 'and-let*'.Mathieu Lirzin2016-12-281-6/+3
| | | | | * src/mcron/vixie-specification.scm (parse-vixie-environment): Use 'and=>' instead of 'and-let*'
* all: Gather module imports.Mathieu Lirzin2016-12-284-37/+26
| | | | | | | * src/mcron/base.scm: Gather module imports. * src/mcron/redirect.scm: Likewise. * src/mcron/vixie-specification.scm: Likewise. * src/mcron/vixie-time.scm: Likewise.
* utils: Remove unneeded 'stdin->string' procedure.Mathieu Lirzin2016-12-283-10/+4
| | | | | | | * 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.
* utils: for-each-file: Use named let.Mathieu Lirzin2016-12-281-3/+6
| | | | * src/mcron/utils.scm (for-each-file): Use named 'let' instead of 'do'.
* build: Rename (mcron main) to (mcron utils).Mathieu Lirzin2016-12-284-5/+5
| | | | | | | | | * 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.
* maint: Reformat copyright notices and copying permission statements.Mathieu Lirzin2016-12-288-185/+190
|
* base: Rewrite 'run-job-loop'.Mathieu Lirzin2016-12-281-44/+33
| | | | | * src/mcron/base.scm (run-job-loop): Use #:optional keyword argument, and 'match'.
* job-specifier: Use #:optional keyword argument.Mathieu Lirzin2016-12-281-26/+28
| | | | | | | | * 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.
* job-specifier: Add %current-action-time parameter object.Mathieu Lirzin2016-12-281-26/+21
| | | | | | * src/mcron/job-specifier.scm (current-action-time): Rename to ... (%current-action-time): ... this. Make it a parameter object. (job, maybe-args): Adapt.
* job-specifier: Rewrite 'bump-time'.Mathieu Lirzin2016-12-281-28/+27
| | | | * src/mcron/job-specifier.scm (bump-time): Use 'match'.
* job-specifier: Use 'inf' thunk.Mathieu Lirzin2016-12-011-6/+6
| | | | | | * src/mcron/job-specifier.scm (%find-best-next): Call 'inf' thunk instead of defining an arbitrary high integer. (bump-time): Adapt to it.
* all: Separate programs in different executables.Mathieu Lirzin2016-12-015-529/+556
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* job-specifier: job: Add #:user keyword argument.Mathieu Lirzin2016-05-071-4/+8
| | | | | * src/mcron/job-specifier.scm (job): Add #:user keyword argument. * doc/mcron.texi (Job specification): Document it.
* base: run-jobs: Ensure that the child process always terminates.Ludovic Courtès2016-05-071-7/+11
| | | | * src/mcron/base.scm (run-jobs): Use 'dynamic-wind' instead of 'begin'.
* base: Rename (mcron core) module to (mcron base).Mathieu Lirzin2016-05-074-7/+8
| | | | | | | | | | | | | | | | | The 'configure' script deletes the 'core.*' files. Having a file named 'base.scm' instead of 'core.scm' simplifies the build process without changing the semantics. * src/mcron/mcron-core.scm: Rename to ... * src/mcron/base.scm: ... this. All module users changed. * Makefile.am (MODULES): Add 'src/mcron/base.scm'. (CP): Remove variable. (src/mcron/core.scm): Remove target. (GEN_MODULES): Remove 'src/mcron/core.scm'. (dist_mcronmodule_DATA): Remove 'src/mcron/mcron-core.scm' * doc/mcron.texi: Adapt to name change. * .gitignore: Update.
* all: Rename 'scm' directory to 'src'.Mathieu Lirzin2016-05-079-0/+2069
* scm/mcron/config.scm.in: Rename to ... * src/mcron/config.scm.in: ... this. * scm/mcron/crontab.scm: Rename to ... * src/mcron/crontab.scm: ... this. * scm/mcron/environment.scm: Rename to ... * src/mcron/environment.scm: ... this. * scm/mcron/job-specifier.scm: Rename to ... * src/mcron/job-specifier.scm: ... this. * scm/mcron/main.scm: Rename to ... * src/mcron/main.scm: ... this. * scm/mcron/mcron-core.scm: Rename to ... * src/mcron/mcron-core.scm: ... this. * scm/mcron/redirect.scm: Rename to ... * src/mcron/redirect.scm: ... this. * scm/mcron/vixie-specification.scm: Rename to ... * src/mcron/vixie-specification.scm: ... this. * scm/mcron/vixie-time.scm: Rename to ... * src/mcron/vixie-time.scm: ... this. * mcron.c: Rename to ... * src/mcron.c: ... this. * Makefile.am: Adapt to them. * build-aux/pre-inst-env.in: Likewise. * configure.ac (AC_CONFIG_FILES): Likewise. (AC_CONFIG_HEADER): Set to 'src/config.h'. * .gitignore: Update.