[Pkg-fonts-devel] Bug#890280: ufo2ft: please make the output reproducible

Chris Lamb lamby at debian.org
Mon Feb 12 21:40:31 UTC 2018


Source: ufo2ft
Version: 1.1.0-1
Severity: wishlist
Tags: patch
User: reproducible-builds at lists.alioth.debian.org
Usertags: toolchain timestamps
X-Debbugs-Cc: reproducible-bugs at lists.alioth.debian.org

Hi,

Whilst working on the Reproducible Builds effort [0], we noticed
that ufo2ft generates .otf files that are not reproducible.

For example, here is showotf output of fonts-league-spartan:

│ │ │ │ │  HEAD table (at 188)
│ │ │ │ │  	Version=1
│ │ │ │ │  	fontRevision=2
│ │ │ │ │ -	checksumAdj=e32dbbe4
│ │ │ │ │ +	checksumAdj=e3309724
│ │ │ │ │  	magicNumber=5f0f3cf5 (0x5f0f3cf5, diff=0)
│ │ │ │ │  	flags=3 baseline_at_0 lsb_at_0 
│ │ │ │ │  	unitsPerEm=1250
│ │ │ │ │  	create[0]=0
│ │ │ │ │ -	 create[1]=d580d7b0
│ │ │ │ │ -	File created: Tue Jul  4 05:27:12 2017
│ │ │ │ │ +	 create[1]=d57f6a10
│ │ │ │ │ +	File created: Mon Jul  3 03:27:12 2017

… which shows that it varies on the timezone.

Patch attached:

  --- a/Lib/ufo2ft/fontInfoData.py
  +++ b/Lib/ufo2ft/fontInfoData.py
  @@ -13,6 +13,7 @@ used externally as well.
   
   from __future__ import print_function, division, absolute_import, unicode_literals
   
  +import datetime
   import logging
   import math
   import time
  @@ -516,7 +517,8 @@ def intListToNum(intList, start, length):
   
   def dateStringToTimeValue(date):
       try:
  -        t = time.strptime(date, "%Y/%m/%d %H:%M:%S")
  -        return int(time.mktime(t))
  -    except OverflowError:
  +        dt = datetime.datetime.strptime(date, "%Y/%m/%d %H:%M:%S")
  +        dt = dt.replace(tzinfo=datetime.timezone.utc)
  +        return int(dt.timestamp())
  +    except ValueError:
           return 0


 [0] https://reproducible-builds.org/


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby at debian.org / chris-lamb.co.uk
       `-
-------------- next part --------------
diff --git a/Lib/ufo2ft/fontInfoData.py b/Lib/ufo2ft/fontInfoData.py
index 786823a..a487c62 100644
--- a/Lib/ufo2ft/fontInfoData.py
+++ b/Lib/ufo2ft/fontInfoData.py
@@ -13,6 +13,7 @@ used externally as well.
 
 from __future__ import print_function, division, absolute_import, unicode_literals
 
+import datetime
 import logging
 import math
 import time
@@ -516,7 +517,8 @@ def intListToNum(intList, start, length):
 
 def dateStringToTimeValue(date):
     try:
-        t = time.strptime(date, "%Y/%m/%d %H:%M:%S")
-        return int(time.mktime(t))
-    except OverflowError:
+        dt = datetime.datetime.strptime(date, "%Y/%m/%d %H:%M:%S")
+        dt = dt.replace(tzinfo=datetime.timezone.utc)
+        return int(dt.timestamp())
+    except ValueError:
         return 0


More information about the Pkg-fonts-devel mailing list