[Rd] Sys.timezone (timedatectl) unnecessarily warns loudly

Jan Gorecki j@gorecki @ending from wit@edu@pl
Sun May 6 06:46:09 CEST 2018


Dear R-devels,

timedatectl binary used by Sys.timezone does not always work reliably.
If it doesn't the warning is raised, unnecessarily because later on
Sys.timezone gets timezone successfully from /etc/timezone. This
obviously might not be true for different linux OSes, but it solves
the issue for simple dockerized Ubuntu 16.04.

Current behavior R Under development (unstable) (2018-05-04 r74695) --
"Unsuffered Consequences"

  Sys.timezone()
  #Failed to create bus connection: No such file or directory
  #[1] "Etc/UTC"
  #Warning message:
  #In system("timedatectl", intern = TRUE) :
  #  running command 'timedatectl' had status 1

There was small discussion where I initially put comment about it in:
https://github.com/wch/r-source/commit/9866ac2ad1e2f1c4565ae829ba33b5b98a08d10d#r28867164

Below patch makes timedatectl call silent, both suppressWarnings and
ignore.stderr are required to deal with R warning, and warning printed
directly to console from timedatectl.

diff --git src/library/base/R/datetime.R src/library/base/R/datetime.R
index 6b34267936..b81c049f3e 100644
--- src/library/base/R/datetime.R
+++ src/library/base/R/datetime.R
@@ -73,7 +73,7 @@ Sys.timezone <- function(location = TRUE)
     ## First try timedatectl: should work on any modern Linux
     ## as part of systemd (and probably nowhere else)
     if (nzchar(Sys.which("timedatectl"))) {
-        inf <- system("timedatectl", intern = TRUE)
+        inf <- suppressWarnings(system("timedatectl", intern = TRUE,
ignore.stderr=TRUE))
         ## typical format:
         ## "       Time zone: Europe/London (GMT, +0000)"
         ## "       Time zone: Europe/Vienna (CET, +0100)"

Regards,
Jan Gorecki



More information about the R-devel mailing list