diff options
Diffstat (limited to 'Tools/scripts')
-rw-r--r-- | Tools/scripts/update_file.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Tools/scripts/update_file.py b/Tools/scripts/update_file.py new file mode 100644 index 0000000..224585c --- /dev/null +++ b/Tools/scripts/update_file.py @@ -0,0 +1,28 @@ +""" +A script that replaces an old file with a new one, only if the contents +actually changed. If not, the new file is simply deleted. + +This avoids wholesale rebuilds when a code (re)generation phase does not +actually change the in-tree generated code. +""" + +import os +import sys + + +def main(old_path, new_path): + with open(old_path, 'rb') as f: + old_contents = f.read() + with open(new_path, 'rb') as f: + new_contents = f.read() + if old_contents != new_contents: + os.replace(new_path, old_path) + else: + os.unlink(new_path) + + +if __name__ == '__main__': + if len(sys.argv) != 3: + print("Usage: %s <path to be updated> <path with new contents>" % (sys.argv[0],)) + sys.exit(1) + main(sys.argv[1], sys.argv[2]) |