# HG changeset patch # User Thomas De Schampheleire # Date 2020-03-25 16:24:26 # Node ID 9d3ac5963e4ef836f1600bff67253b982cb089a8 # Parent 6f9970a3619086509dd190a771bd862d21d3437a 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 ' 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. diff --git a/kallithea/lib/vcs/backends/base.py b/kallithea/lib/vcs/backends/base.py --- a/kallithea/lib/vcs/backends/base.py +++ b/kallithea/lib/vcs/backends/base.py @@ -1024,7 +1024,7 @@ class EmptyChangeset(BaseChangeset): return self def get_file_content(self, path): - return '' + return b'' def get_file_size(self, path): return 0 diff --git a/kallithea/tests/vcs/test_nodes.py b/kallithea/tests/vcs/test_nodes.py --- a/kallithea/tests/vcs/test_nodes.py +++ b/kallithea/tests/vcs/test_nodes.py @@ -3,6 +3,7 @@ import stat 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 @@ class TestNodeContent(object): 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 \x0cJ?\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\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