Hi Ben, On Fri, 31 May 2019 at 07:08, Ben Coman <btc@openinworld.com> wrote:
I'm on Windows wanting to write a text file with LF endings. The code developed on Linux is thus... (destinationDirectory / 'README.md') ensureCreateFile writeStreamDo: [ :stream | stream nextPutAll: class comment ]
I've come across this so many times that I always add a couple of methods to my image: ZnEncodedStream>>asNewLineStream "Answer the receiver wrapped with a ZnNewLineWriterStream" ^ZnNewLineWriterStream on: self! ! ZnNewLineWriterStream>>asNewLineStream "Answer the receiver wrapped with a ZnNewLineWriterStream" ^self! ! You could then modify the example above to be: stream asNewLineStream forLf nextPutAll: class comment Cheers, Alistair
and I am stuck with CR line endings. The specific symptom is that it screws `git diff` Here is a simple experiment... testfile := 'README.md' asFileReference. testfile ensureCreateFile writeStreamDo: [ :stream | stream nextPutAll: 'aa bb' ]. testfile binaryReadStream contents at: 3 "==> Character cr "
I think its safe to assume on Linux that will result in "==> Character lf " but can someone please confirm?
So my issue is that I've got #ensureCreateFile - returns a FileReference and :stream - is a ZnCharacterWriteStream wrapping a ZnBufferedWriteStream wrapping BinaryFileStream.
and neither seem to have an easily accessible defaultLineEnding setting. Indeed, line endings are not a property of FileReference and Binary & Characters have nothing to do with line endings, and questionable if Buffering is related.
Its more a property of a File, but IIUC that is being deprecated (??)
MultiByteFileStream has #lineEndConvention: but IIUC that also is being deprecated.
So what is the proper way to force default line endings?
------ Now while composing this email I discovered String>>withUnixLineEndings. So I have a solution... testfile := 'README.md' asFileReference. testfile ensureCreateFile writeStreamDo: [ :stream | stream nextPutAll: 'aa bb' withUnixLineEndings ]. (testfile binaryReadStream contents at: 3) asCharacter "==> Character lf "
but that seems to imply that on Windows... 'aa bb' at: 3 "==> Character cr "
and on Linux (someone please confirm)... 'aa bb' at: 3 "==> Character lf "
and that is *very* curious. Strange that I never noticed it before and obviously that hasn't hurt me, but considering the Principal Of Least Surprise it leaves me feeling somewhat violated :)