Skip to content
Browse files

Improve handling of newlines in release scripts

Under WSL, Python in text mode will translate `\n` into `\r\n`, even
though other tools and utilities use `\n` (because WSL is basically
Linux). This leads to the update scripts leaving the files with
Windows newlines even though git and similar expect them to have
Linux newlines.

By instead handling files in binary mode, we can keep the original
newlines. This commits switches parts of the update process to
binary mode, but not all because some of the will require a lot of
work to fix.
  • Loading branch information...
horenmar committed Aug 3, 2019
1 parent 7a4beed commit 06bc20cf37b8b7754989569be91e5f62a1c3d1b9
Showing with 15 additions and 16 deletions.
  1. +15 −16 scripts/
@@ -100,29 +100,28 @@ def updateReadmeFile(version):

def updateCmakeFile(version):
with open(cmakePath, 'r') as file:
with open(cmakePath, 'rb') as file:
lines = file.readlines()
with open(cmakePath, 'w') as file:
replacementRegex = re.compile(b'project\\(Catch2 LANGUAGES CXX VERSION \\d+\\.\\d+\\.\\d+\\)')
replacement = 'project(Catch2 LANGUAGES CXX VERSION {0})'.format(version.getVersionString()).encode('ascii')
with open(cmakePath, 'wb') as file:
for line in lines:
if 'project(Catch2 LANGUAGES CXX VERSION ' in line:
file.write('project(Catch2 LANGUAGES CXX VERSION {0})\n'.format(version.getVersionString()))
file.write(replacementRegex.sub(replacement, line))

def updateVersionDefine(version):
with open(definePath, 'r') as file:
# First member of the tuple is the compiled regex object, the second is replacement if it matches
replacementRegexes = [(re.compile(b'#define CATCH_VERSION_MAJOR \\d+'),'#define CATCH_VERSION_MAJOR {}'.format(version.majorVersion).encode('ascii')),
(re.compile(b'#define CATCH_VERSION_MINOR \\d+'),'#define CATCH_VERSION_MINOR {}'.format(version.minorVersion).encode('ascii')),
(re.compile(b'#define CATCH_VERSION_PATCH \\d+'),'#define CATCH_VERSION_PATCH {}'.format(version.patchNumber).encode('ascii')),
with open(definePath, 'rb') as file:
lines = file.readlines()
with open(definePath, 'w') as file:
with open(definePath, 'wb') as file:
for line in lines:
if '#define CATCH_VERSION_MAJOR' in line:
file.write('#define CATCH_VERSION_MAJOR {}\n'.format(version.majorVersion))
elif '#define CATCH_VERSION_MINOR' in line:
file.write('#define CATCH_VERSION_MINOR {}\n'.format(version.minorVersion))
elif '#define CATCH_VERSION_PATCH' in line:
file.write('#define CATCH_VERSION_PATCH {}\n'.format(version.patchNumber))
for replacement in replacementRegexes:
line = replacement[0].sub(replacement[1], line)

def updateVersionPlaceholder(filename, version):

0 comments on commit 06bc20c

Please sign in to comment.
You can’t perform that action at this time.