only rewrite utility files if contents changed
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License version 2 as
|
||||
# published by the Free Software Foundation.
|
||||
|
||||
import os
|
||||
import io
|
||||
import sys
|
||||
import os.path
|
||||
|
||||
ROOTDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
sys.path.insert(0, os.path.realpath(ROOTDIR))
|
||||
@@ -11,3 +16,32 @@ def path(*segments, join=os.path.join):
|
||||
result = join(ROOTDIR, *segments)
|
||||
os.makedirs(os.path.dirname(result), exist_ok=True)
|
||||
return result
|
||||
|
||||
|
||||
class lazy():
|
||||
|
||||
def __init__(self, path):
|
||||
self.path = path
|
||||
self.buffer = io.StringIO()
|
||||
|
||||
def __enter__(self):
|
||||
return self.buffer
|
||||
|
||||
def __exit__(self, exc, value, tb):
|
||||
# get content of old file
|
||||
try:
|
||||
with open(self.path, encoding="utf-8") as fp:
|
||||
old = fp.read()
|
||||
except Exception:
|
||||
old = None
|
||||
|
||||
# get new content
|
||||
new = self.buffer.getvalue()
|
||||
|
||||
if new != old:
|
||||
# rewrite entire file
|
||||
with open(self.path, "w", encoding="utf-8") as fp:
|
||||
fp.write(new)
|
||||
else:
|
||||
# only update atime and mtime
|
||||
os.utime(self.path)
|
||||
|
||||
Reference in New Issue
Block a user