peritus / bumpversion

Version-bump your software with a single command
https://pypi.python.org/pypi/bumpversion
MIT License
1.5k stars 147 forks source link

Harmonize line endings amongst source file and search/replace text. #72

Open thebjorn opened 9 years ago

thebjorn commented 9 years ago

We want to keep the line endings in the source file, regardless of what the line endings in the config file is. The algorithm for finding the line ending, and the decision to only look at the first line, is inspired by ConfigObj (https://github.com/DiffSK/configobj/blob/0daebcb55aec2b5a18b287bbb2f4f6f03599f00e/configobj.py#L1294).

This fixes the windows test failure of test_search_replace_expanding_changelog.

pombreda commented 9 years ago

@thebjorn This is quite nice, but IMHO looking at the first line only can be misleading and is not fool proof. FWIW mixed line endings are possible. It may be better instead to avoid any line ending changes by just keeping them as them were in the original files.

thebjorn commented 9 years ago

@pombreda that's actually what this code tries to do ;-) The problem here is that the line endings in the replacement text has no relation to the line endings in the file. We shouldn't try to change line endings in the file, and we should definitely not introduce mixed line endings. If the file has consistent line endings, then it is sufficient to look at the first line. If the file does not have consistent line endings, then no choice of line endings will be correct (making it sufficient to also look at the first line only). IIRC then the current code always adds \r\n on windows, which will corrupt files containing only \n (I seem to remember that I found this in a makefile, but it's a while ago).