emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r105421: Lisp code shouldn't use set-


From: Chong Yidong
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r105421: Lisp code shouldn't use set-time-zone-rule except through setenv.
Date: Mon, 08 Aug 2011 11:53:35 -0400
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 105421
fixes bug(s): http://debbugs.gnu.org/7337
committer: Chong Yidong <address@hidden>
branch nick: trunk
timestamp: Mon 2011-08-08 11:53:35 -0400
message:
  Lisp code shouldn't use set-time-zone-rule except through setenv.
  
  * time.el (display-time-world-list, display-time-world-display):
  * time-stamp.el (time-stamp-string):
  * vc/add-log.el (add-change-log-entry): Use setenv instead of
  set-time-zone-rule.
  
  * src/editfns.c (Fset_time_zone_rule): Document relationship with the
  setenv function.
modified:
  lisp/ChangeLog
  lisp/time-stamp.el
  lisp/time.el
  lisp/vc/add-log.el
  src/ChangeLog
  src/editfns.c
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2011-08-08 07:11:25 +0000
+++ b/lisp/ChangeLog    2011-08-08 15:53:35 +0000
@@ -1,3 +1,10 @@
+2011-08-08  Chong Yidong  <address@hidden>
+
+       * time.el (display-time-world-list, display-time-world-display):
+       * time-stamp.el (time-stamp-string):
+       * vc/add-log.el (add-change-log-entry): Use setenv instead of
+       set-time-zone-rule (Bug#7337).
+
 2011-08-08  Daiki Ueno  <address@hidden>
 
        * epg.el (epg--status-KEYEXPIRED, epg--status-KEYREVOKED): Fix typo.

=== modified file 'lisp/time-stamp.el'
--- a/lisp/time-stamp.el        2011-04-19 13:44:55 +0000
+++ b/lisp/time-stamp.el        2011-08-08 15:53:35 +0000
@@ -424,10 +424,10 @@
          (let ((ts-real-time-zone (getenv "TZ")))
            (unwind-protect
                (progn
-                 (set-time-zone-rule time-stamp-time-zone)
+                 (setenv "TZ" time-stamp-time-zone)
                  (format-time-string
                   (time-stamp-string-preprocess ts-format)))
-             (set-time-zone-rule ts-real-time-zone)))
+             (setenv "TZ" ts-real-time-zone)))
        (format-time-string
         (time-stamp-string-preprocess ts-format)))
     ;; handle version 1 compatibility

=== modified file 'lisp/time.el'
--- a/lisp/time.el      2011-07-14 14:30:35 +0000
+++ b/lisp/time.el      2011-08-08 15:53:35 +0000
@@ -156,21 +156,24 @@
 (defcustom display-time-world-list
   ;; Determine if zoneinfo style timezones are supported by testing that
   ;; America/New York and Europe/London return different timezones.
-  (let (gmt nyt)
-    (set-time-zone-rule "America/New_York")
-    (setq nyt (format-time-string "%z"))
-    (set-time-zone-rule "Europe/London")
-    (setq gmt (format-time-string "%z"))
-    (set-time-zone-rule nil)
+  (let ((old-tz (getenv "TZ"))
+       gmt nyt)
+    (unwind-protect
+       (progn
+         (setenv "TZ" "America/New_York")
+         (setq nyt (format-time-string "%z"))
+         (setenv "TZ" "Europe/London")
+         (setq gmt (format-time-string "%z")))
+      (setenv "TZ" old-tz))
     (if (string-equal nyt gmt)
         legacy-style-world-list
       zoneinfo-style-world-list))
   "Alist of time zones and places for `display-time-world' to display.
 Each element has the form (TIMEZONE LABEL).
-TIMEZONE should be in the format supported by `set-time-zone-rule' on
-your system.  See the documentation of `zoneinfo-style-world-list' and
-\`legacy-style-world-list' for two widely used formats.
-LABEL is a string to display as the label of that TIMEZONE's time."
+TIMEZONE should be in a format supported by your system.  See the
+documentation of `zoneinfo-style-world-list' and
+\`legacy-style-world-list' for two widely used formats.  LABEL is
+a string to display as the label of that TIMEZONE's time."
   :group 'display-time
   :type '(repeat (list string string))
   :version "23.1")
@@ -521,26 +524,26 @@
 (defun display-time-world-display (alist)
   "Replace current buffer text with times in various zones, based on ALIST."
   (let ((inhibit-read-only t)
-       (buffer-undo-list t))
+       (buffer-undo-list t)
+       (old-tz (getenv "TZ"))
+       (max-width 0)
+       result fmt)
     (erase-buffer)
-    (let ((max-width 0)
-         (result ())
-         fmt)
-      (unwind-protect
-         (dolist (zone alist)
-           (let* ((label (cadr zone))
-                  (width (string-width label)))
-             (set-time-zone-rule (car zone))
-             (push (cons label
-                         (format-time-string display-time-world-time-format))
-                   result)
-             (when (> width max-width)
-               (setq max-width width))))
-       (set-time-zone-rule nil))
-      (setq fmt (concat "%-" (int-to-string max-width) "s %s\n"))
-      (dolist (timedata (nreverse result))
-       (insert (format fmt (car timedata) (cdr timedata)))))
-    (delete-char -1)))
+    (unwind-protect
+       (dolist (zone alist)
+         (let* ((label (cadr zone))
+                (width (string-width label)))
+           (setenv "TZ" (car zone))
+           (push (cons label
+                       (format-time-string display-time-world-time-format))
+                 result)
+           (when (> width max-width)
+             (setq max-width width))))
+      (setenv "TZ" old-tz))
+    (setq fmt (concat "%-" (int-to-string max-width) "s %s\n"))
+    (dolist (timedata (nreverse result))
+      (insert (format fmt (car timedata) (cdr timedata)))))
+  (delete-char -1))
 
 ;;;###autoload
 (defun display-time-world ()

=== modified file 'lisp/vc/add-log.el'
--- a/lisp/vc/add-log.el        2011-05-23 17:57:17 +0000
+++ b/lisp/vc/add-log.el        2011-08-08 15:53:35 +0000
@@ -853,9 +853,9 @@
                             (let ((tz (getenv "TZ")))
                               (unwind-protect
                                   (progn
-                                    (set-time-zone-rule add-log-time-zone-rule)
+                                    (setenv "TZ" add-log-time-zone-rule)
                                     (funcall add-log-time-format))
-                                (set-time-zone-rule tz)))
+                                (setenv "TZ" tz)))
                           (funcall add-log-time-format))
                         "  " full-name
                         "  <" addr ">"))

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2011-08-08 14:49:34 +0000
+++ b/src/ChangeLog     2011-08-08 15:53:35 +0000
@@ -1,5 +1,8 @@
 2011-08-08  Chong Yidong  <address@hidden>
 
+       * editfns.c (Fset_time_zone_rule): Document relationship with the
+       setenv function.
+
        * ftfont.c (ftfont_pattern_entity): Copy the extras argument to
        the font entity extracted from the cache (Bug#8109).
 

=== modified file 'src/editfns.c'
--- a/src/editfns.c     2011-08-07 14:14:54 +0000
+++ b/src/editfns.c     2011-08-08 15:53:35 +0000
@@ -2053,7 +2053,12 @@
 DEFUN ("set-time-zone-rule", Fset_time_zone_rule, Sset_time_zone_rule, 1, 1, 0,
        doc: /* Set the local time zone using TZ, a string specifying a time 
zone rule.
 If TZ is nil, use implementation-defined default time zone information.
-If TZ is t, use Universal Time.  */)
+If TZ is t, use Universal Time.
+
+Instead of calling this function, you typically want (setenv "TZ" TZ).
+That changes both the environment of the Emacs process and the
+variable `process-environment', whereas `set-time-zone-rule' affects
+only the former.  */)
   (Lisp_Object tz)
 {
   const char *tzstring;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]