summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-09-17 18:12:25 (GMT)
committerGitHub <noreply@github.com>2021-09-17 18:12:25 (GMT)
commitc5a677da9e7b2b2aa43b0b6dfb3813c0212379c0 (patch)
tree9b854c73182d5a4274358a956974f0431648f260 /Tools
parent778b07565e38cc94aa90318eb47b9cd09716756a (diff)
downloadcpython-c5a677da9e7b2b2aa43b0b6dfb3813c0212379c0.zip
cpython-c5a677da9e7b2b2aa43b0b6dfb3813c0212379c0.tar.gz
cpython-c5a677da9e7b2b2aa43b0b6dfb3813c0212379c0.tar.bz2
bpo-45231: update_file.py preserves end of line (GH-28411)
The update_file.py tool now preserves the end of line of the updated file. Fix the "make regen-frozen" command: it no longer changes the end of line of PCbuild/ files on Unix. Git changes the end of line depending on the platform.
Diffstat (limited to 'Tools')
-rw-r--r--Tools/scripts/update_file.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/Tools/scripts/update_file.py b/Tools/scripts/update_file.py
index cfc4e2b..5e22486 100644
--- a/Tools/scripts/update_file.py
+++ b/Tools/scripts/update_file.py
@@ -28,7 +28,19 @@ def updating_file_with_tmpfile(filename, tmpfile=None):
elif os.path.isdir(tmpfile):
tmpfile = os.path.join(tmpfile, filename + '.tmp')
- with open(tmpfile, 'w') as outfile:
+ with open(filename, 'rb') as infile:
+ line = infile.readline()
+
+ if line.endswith(b'\r\n'):
+ newline = "\r\n"
+ elif line.endswith(b'\r'):
+ newline = "\r"
+ elif line.endswith(b'\n'):
+ newline = "\n"
+ else:
+ raise ValueError(f"unknown end of line: {filename}: {line!a}")
+
+ with open(tmpfile, 'w', newline=newline) as outfile:
with open(filename) as infile:
yield infile, outfile
update_file_with_tmpfile(filename, tmpfile)