From cd595b508c34308c144d496d070af6f5402153d0 Mon Sep 17 00:00:00 2001 From: jomae Date: Sun, 21 Apr 2024 20:04:35 +0000 Subject: [PATCH] 1.6.1dev: fix an error while rendering diff of a changeset if `[trac] use_chunked_encoding` disabled (closes #13625) git-svn-id: http://trac.edgewall.org/intertrac/log:/branches/1.6-stable@17776 af82e41b-90c4-0310-8c96-b1721e28e2e2 --- trac/versioncontrol/tests/functional.py | 36 +++++++++++++++++++++++++ trac/versioncontrol/web_ui/changeset.py | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/trac/versioncontrol/tests/functional.py b/trac/versioncontrol/tests/functional.py index e41eb920a0..2c332b11be 100755 --- a/trac/versioncontrol/tests/functional.py +++ b/trac/versioncontrol/tests/functional.py @@ -16,6 +16,7 @@ import tempfile import unittest +from trac.util import create_file, read_file from trac.admin.tests.functional import AuthorizationTestCaseSetup from trac.tests.contentgen import random_page, random_word, \ random_unique_camel @@ -418,6 +419,40 @@ def runTest(self): tc.find(r'No node missing.txt at revision 2\b') +class RegressionTestTicket13625(FunctionalTestCaseSetup): + def runTest(self): + """Test for regression of https://trac.edgewall.org/ticket/13625 + fix for rendering diff with use_chunked_encoding option disabled. + """ + env = self._testenv.get_trac_environment() + rev = self._testenv.svn_add('ticket13625.txt', 'New file\n') + tc.go(self._tester.url + '/changeset/%d' % rev) + + expected = b"""\ +Index: /ticket13625.txt\r +===================================================================\r +--- /ticket13625.txt\t(revision %(rev)d)\r ++++ /ticket13625.txt\t(revision %(rev)d)\r +@@ -0,0 +1,1 @@\r ++New file\r +""" % {b'rev': rev} + + def test_diff(**options): + for option, value in options.items(): + env.config.set('trac', option, value) + env.config.save() + code, content = tc.download_link('Unified Diff') + self.assertEqual(200, code) + self.assertEqual(expected, content) + + saved = read_file(env.config.filename, 'rb') + try: + test_diff(use_chunked_encoding='enabled') + test_diff(use_chunked_encoding='disabled') + finally: + create_file(env.config.filename, saved, 'wb') + + def functionalSuite(suite=None): if not suite: import trac.tests.functional @@ -440,6 +475,7 @@ def functionalSuite(suite=None): suite.addTest(RegressionTestTicket11618()) suite.addTest(RegressionTestTicket11777()) suite.addTest(RegressionTestTicket13401()) + suite.addTest(RegressionTestTicket13625()) suite.addTest(RegressionTestRev5877()) else: print("SKIP: versioncontrol/tests/functional.py (no svn bindings)") diff --git a/trac/versioncontrol/web_ui/changeset.py b/trac/versioncontrol/web_ui/changeset.py index 9208797647..874b4a93a0 100644 --- a/trac/versioncontrol/web_ui/changeset.py +++ b/trac/versioncontrol/web_ui/changeset.py @@ -686,7 +686,7 @@ def _render_diff(self, req, filename, repos, data): if Chrome(self.env).use_chunked_encoding: length = None else: - output = ''.join(output) + output = b''.join(output) length = len(output) req.send_response(200)