Over at Can you modify text files when committing to subversion? Grant suggested that I block commits instead.
However I don't know how to check a file ends with a newline. How can you detect that the file ends with a newline?
Over at Can you modify text files when committing to subversion? Grant suggested that I block commits instead.
However I don't know how to check a file ends with a newline. How can you detect that the file ends with a newline?
You should be able to do it via a SVN pre-commit hook.
See this example.
You could use something like this as your pre-commit script:
#! /usr/bin/perl while (<>) { $last = $_; } if (! ($last =~ m/\n$/)) { print STDERR "File doesn't end with \\n!\n"; exit 1; }
Using only bash
:
x=`tail -n 1 your_textfile`
if [ "$x" == "" ]; then echo "empty line"; fi
(Take care to copy the whitespaces correctly!)
@grom:
tail does not return an empty line
Damn. My test file didn't end on \n
but on \n\n
. Apparently vim
can't create files that don't end on \n
(?). Anyway, as long as the “get last byte” option works, all's well.
@Konrad: tail does not return an empty line. I made a file that has some text that doesn't end in newline and a file that does. Here is the output from tail:
$ cat test_no_newline.txt
this file doesn't end in newline$
$ cat test_with_newline.txt
this file ends in newline
$
Though I found that tail has get last byte option. So I modified your script to:
#!/bin/sh
c=`tail -c 1 $1`
if [ "$c" != "" ]; then echo "no newline"; fi
Or even simpler:
#!/bin/sh
test `tail -c 1 $1` && echo "no newline at eof: $1"