# HG changeset patch # User Thomas De Schampheleire # Date 1585149866 -3600 # 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 -r 6f9970a36190 -r 9d3ac5963e4e kallithea/lib/vcs/backends/base.py --- 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 diff -r 6f9970a36190 -r 9d3ac5963e4e kallithea/tests/vcs/test_nodes.py --- 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 \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