utils: stop using datetime.utcfromtimestamp() deprecated in Python 3.12 stable
authorMads Kiilerich <mads@kiilerich.com>
Tue, 27 Jun 2023 13:51:50 +0200
branchstable
changeset 50752 faccec1edc2c
parent 50750 fa2eca7423f3
child 50753 a2df74853f8d
utils: stop using datetime.utcfromtimestamp() deprecated in Python 3.12 Python3.12 made tests fail with warnings: DeprecationWarning: datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.fromtimestamp(timestamp, datetime.UTC). Computing the diff while in timestamp seconds seems to preserve to the original intent from ae04af1ce78d. It would be nice to have some doctest coverage of this, with the problematic corner cases that has popped up over time...
hgext/convert/common.py
mercurial/utils/dateutil.py
--- a/hgext/convert/common.py	Thu Jul 06 16:04:36 2023 +0200
+++ b/hgext/convert/common.py	Tue Jun 27 13:51:50 2023 +0200
@@ -567,8 +567,10 @@
 
 def makedatetimestamp(t):
     """Like dateutil.makedate() but for time t instead of current time"""
-    delta = datetime.datetime.utcfromtimestamp(
+    tz = round(
         t
-    ) - datetime.datetime.fromtimestamp(t)
-    tz = delta.days * 86400 + delta.seconds
+        - datetime.datetime.fromtimestamp(t)
+        .replace(tzinfo=datetime.timezone.utc)
+        .timestamp()
+    )
     return t, tz
--- a/mercurial/utils/dateutil.py	Thu Jul 06 16:04:36 2023 +0200
+++ b/mercurial/utils/dateutil.py	Tue Jun 27 13:51:50 2023 +0200
@@ -83,10 +83,14 @@
         raise error.InputError(
             _(b"negative timestamp: %d") % timestamp, hint=hint
         )
-    delta = datetime.datetime.utcfromtimestamp(
+    tz = round(
         timestamp
-    ) - datetime.datetime.fromtimestamp(timestamp)
-    tz = delta.days * 86400 + delta.seconds
+        - datetime.datetime.fromtimestamp(
+            timestamp,
+        )
+        .replace(tzinfo=datetime.timezone.utc)
+        .timestamp()
+    )
     return timestamp, tz