55https://mustache.github.io/
66"""
77
8- import hashlib
98import logging
109import pathlib
1110
1615log = logging .getLogger (__name__ )
1716
1817
19- def _md5 (data ):
20- return hashlib .md5 (data ).digest ()
21-
22-
2318class Renderer :
2419 """ Template renderer using mustache templates in the `templates` directory """
2520
26- def __init__ (self , dryrun = False ):
27- """ Construct the renderer, which will not write anything if `dryrun` is `True` """
21+ def __init__ (self ):
2822 self .r = pystache .Renderer (search_dirs = str (paths .lib_dir / "templates" ), escape = lambda u : u )
2923 self .generator = paths .exe_file .relative_to (paths .swift_dir )
30- self .dryrun = dryrun
3124 self .written = set ()
32- self .skipped = set ()
33- self .erased = set ()
34-
35- @property
36- def done_something (self ):
37- return bool (self .written or self .erased )
38-
39- @property
40- def rendered (self ):
41- return self .written | self .skipped
4225
4326 def render (self , data , output : pathlib .Path ):
4427 """ Render `data` to `output`.
@@ -50,27 +33,14 @@ def render(self, data, output: pathlib.Path):
5033 mnemonic = type (data ).__name__
5134 output .parent .mkdir (parents = True , exist_ok = True )
5235 data = self .r .render_name (data .template , data , generator = self .generator )
53- if output .is_file ():
54- with open (output , "rb" ) as file :
55- if _md5 (data .encode ()) == _md5 (file .read ()):
56- log .debug (f"skipped { output .name } " )
57- self .skipped .add (output )
58- return
59- if self .dryrun :
60- log .error (f"would have generated { mnemonic } { output .name } " )
61- else :
62- with open (output , "w" ) as out :
63- out .write (data )
64- log .info (f"generated { mnemonic } { output .name } " )
36+ with open (output , "w" ) as out :
37+ out .write (data )
38+ log .debug (f"generated { mnemonic } { output .name } " )
6539 self .written .add (output )
6640
6741 def cleanup (self , existing ):
6842 """ Remove files in `existing` for which no `render` has been called """
69- for f in existing - self .written - self . skipped :
43+ for f in existing - self .written :
7044 if f .is_file ():
71- if self .dryrun :
72- log .error (f"would have removed { f .name } " )
73- else :
74- f .unlink ()
75- log .info (f"removed { f .name } " )
76- self .erased .add (f )
45+ f .unlink ()
46+ log .info (f"removed { f .name } " )
0 commit comments