Fix bug with the file-contents-sorter hook when processing file that does not end in a newline
diff --git a/pre_commit_hooks/file_contents_sorter.py b/pre_commit_hooks/file_contents_sorter.py
index 6fa3bc0..b66cc72 100644
--- a/pre_commit_hooks/file_contents_sorter.py
+++ b/pre_commit_hooks/file_contents_sorter.py
@@ -18,19 +18,18 @@
 
 
 def sort_file_contents(f):
-    before = tuple(f)
+    before = [line.strip(b'\n\r') for line in f if line.strip()]
     after = sorted(before)
 
-    before_string = b''.join(before)
-    after_string = b''.join(after)
-
-    if before_string == after_string:
+    if before == after:
         return PASS
-    else:
-        f.seek(0)
-        f.write(after_string)
-        f.truncate()
-        return FAIL
+
+    after_string = b'\n'.join(after) + b'\n'
+
+    f.seek(0)
+    f.write(after_string)
+    f.truncate()
+    return FAIL
 
 
 def main(argv=None):
diff --git a/tests/file_contents_sorter_test.py b/tests/file_contents_sorter_test.py
index 5f4dc5b..b635eb0 100644
--- a/tests/file_contents_sorter_test.py
+++ b/tests/file_contents_sorter_test.py
@@ -11,12 +11,16 @@
         (b'', PASS, b''),
         (b'lonesome\n', PASS, b'lonesome\n'),
         (b'missing_newline', PASS, b'missing_newline'),
+        (b'newline\nmissing', FAIL, b'missing\nnewline\n'),
+        (b'missing\nnewline', PASS, b'missing\nnewline'),
         (b'alpha\nbeta\n', PASS, b'alpha\nbeta\n'),
         (b'beta\nalpha\n', FAIL, b'alpha\nbeta\n'),
         (b'C\nc\n', PASS, b'C\nc\n'),
         (b'c\nC\n', FAIL, b'C\nc\n'),
         (b'mag ical \n tre vor\n', FAIL, b' tre vor\nmag ical \n'),
         (b'@\n-\n_\n#\n', FAIL, b'#\n-\n@\n_\n'),
+        (b'extra\n\n\nwhitespace\n', PASS, b'extra\n\n\nwhitespace\n'),
+        (b'whitespace\n\n\nextra\n', FAIL, b'extra\nwhitespace\n'),
     )
 )
 def test_integration(input_s, expected_retval, output, tmpdir):