changeset 8300:9d3ac5963e4e

diff: fix two-way diff for added or removed files Viewing the two-way diff of an added file gives following exception: File "_base_root_html", line 211, in render_body File "_base_base_html", line 42, in render_body File "files_diff_2way_html", line 197, in render_main File ".../kallithea/lib/vcs/nodes.py", line 411, in is_binary return b'\0' in self.content TypeError: 'in <string>' requires string as left operand, not bytes At this point, self.content was '' (empty string). Commit 9203621cae03a03bbf8cfb4b667daa656780a93e made that node content is always bytes, but this also had to be reflected in EmptyChangeset. Add a basic test that catches this behavior.
author Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
date Wed, 25 Mar 2020 16:24:26 +0100
parents 6f9970a36190
children afe30226491e
files kallithea/lib/vcs/backends/base.py kallithea/tests/vcs/test_nodes.py
diffstat 2 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/lib/vcs/backends/base.py	Sun Mar 22 21:22:23 2020 +0100
+++ b/kallithea/lib/vcs/backends/base.py	Wed Mar 25 16:24:26 2020 +0100
@@ -1024,7 +1024,7 @@
         return self
 
     def get_file_content(self, path):
-        return ''
+        return b''
 
     def get_file_size(self, path):
         return 0
--- a/kallithea/tests/vcs/test_nodes.py	Sun Mar 22 21:22:23 2020 +0100
+++ b/kallithea/tests/vcs/test_nodes.py	Wed Mar 25 16:24:26 2020 +0100
@@ -3,6 +3,7 @@
 
 import pytest
 
+from kallithea.lib.vcs.backends.base import EmptyChangeset
 from kallithea.lib.vcs.nodes import DirNode, FileNode, Node, NodeError, NodeKind
 
 
@@ -182,3 +183,8 @@
         data = """\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f??a\x00\x00\x00\x04gAMA\x00\x00\xaf?7\x05\x8a?\x00\x00\x00\x19tEXtSoftware\x00Adobe ImageReadyq?e<\x00\x00\x025IDAT8?\xa5\x93?K\x94Q\x14\x87\x9f\xf7?Q\x1bs4?\x03\x9a\xa8?B\x02\x8b$\x10[U;i\x13?6h?&h[?"\x14j?\xa2M\x7fB\x14F\x9aQ?&\x842?\x0b\x89"\x82??!?\x9c!\x9c2l??{N\x8bW\x9dY\xb4\t/\x1c?=\x9b?}????\xa9*;9!?\x83\x91?[?\\v*?D\x04\'`EpNp\xa2X\'U?pVq"Sw.\x1e?\x08\x01D?jw????\xbc??7{|\x9b?\x89$\x01??W@\x15\x9c\x05q`Lt/\x97?\x94\xa1d?\x18~?\x18?\x18W[%\xb0?\x83??\x14\x88\x8dB?\xa6H\tL\tl\x19>/\x01`\xac\xabx?\x9cl\nx\xb0\x98\x07\x95\x88D$"q[\x19?d\x00(o\n\xa0??\x7f\xb9\xa4?\x1bF\x1f\x8e\xac\xa8?j??eUU}?.?\x9f\x8cE??x\x94??\r\xbdtoJU5"0N\x10U?\x00??V\t\x02\x9f\x81?U?\x00\x9eM\xae2?r\x9b7\x83\x82\x8aP3????.?&"?\xb7ZP \x0c<?O\xa5\t}\xb8?\x99\xa6?\x87?\x1di|/\xa0??0\xbe\x1fp?d&\x1a\xad\x95\x8a\x07?\t*\x10??b:?d?.\x13C\x8a?\x12\xbe\xbf\x8e?{???\x08?\x80\xa7\x13+d\x13>J?\x80\x15T\x95\x9a\x00??S\x8c\r?\xa1\x03\x07?\x96\x9b\xa7\xab=E??\xa4\xb3?\x19q??B\x91=\x8d??k?J\x0bV"??\xf7x?\xa1\x00?\\.\x87\x87???\x02F@D\x99],??\x10#?X\xb7=\xb9\x10?Z\x1by???cI??\x1ag?\x92\xbc?T?t[\x92\x81?<_\x17~\x92\x88?H%?\x10Q\x02\x9f\n\x81qQ\x0bm?\x1bX?\xb1AK\xa6\x9e\xb9?u\xb2?1\xbe|/\x92M@\xa2!F?\xa9>"\r<DT?>\x92\x8e?>\x9a9Qv\x127?a\xac?Y?8?:??]X???9\x80\xb7?u?\x0b#BZ\x8d=\x1d?p\x00\x00\x00\x00IEND\xaeB`\x82"""
         filenode = FileNode('calendar.png', content=data)
         assert filenode.is_binary
+
+    def test_if_binary_empty(self):
+        empty_cs = EmptyChangeset()
+        filenode = FileNode('foo', changeset=empty_cs)
+        assert not filenode.is_binary