From b091bec824137f286b22084be5f8d397d21b9abb Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Wed, 20 Sep 2017 23:57:56 +0200 Subject: bpo-31536: Avoid wholesale rebuild after `make regen-all` (#3678) * bpo-31536: Avoid wholesale rebuild after `make regen-all` * Add NEWS --- Tools/scripts/update_file.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Tools/scripts/update_file.py (limited to 'Tools/scripts/update_file.py') diff --git a/Tools/scripts/update_file.py b/Tools/scripts/update_file.py new file mode 100644 index 0000000000..224585c69b --- /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 " % (sys.argv[0],)) + sys.exit(1) + main(sys.argv[1], sys.argv[2]) -- cgit v1.2.1