diff -Nru loggerhead-1.19~bzr501/byov.conf loggerhead-1.19~bzr511/byov.conf --- loggerhead-1.19~bzr501/byov.conf 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/byov.conf 2020-09-18 08:48:28.000000000 +0000 @@ -11,7 +11,7 @@ [loggerhead] vm.release = xenial brz.build_deps = gcc, debhelper, python, python-all-dev, python3-all-dev, python-configobj, python3-configobj, python-docutils, python3-docutils, python-paramiko, python3-paramiko, python-subunit, python3-subunit, python-testtools, python3-testtools, subunit, cython, cython3, python-fastimport, python-dulwich, python-six, python3-six -loggerhead.build_deps = python-setuptools, python3-setuptools, libjs-jquery, python-docutils, python3-docutils, python-pygments, python3-pygments, python-simplejson, python3-simplejson, python-paste, python3-paste, python-pastedeploy, python3-pastedeploy, python-simpletal, python-bleach, python3-bleach +loggerhead.build_deps = python-setuptools, python3-setuptools, libjs-jquery, python-docutils, python3-docutils, python-pygments, python3-pygments, python-paste, python3-paste, python-pastedeploy, python3-pastedeploy, python-simpletal, python-bleach, python3-bleach loggerhead.test_deps = python3-fixtures, python-fixtures vm.packages = {brz.build_deps}, {loggerhead.build_deps}, {loggerhead.test_deps}, bzr, python-junitxml, python3-pip brz.branch = (bzr branch lp:brz ../brz-trunk) diff -Nru loggerhead-1.19~bzr501/debian/changelog loggerhead-1.19~bzr511/debian/changelog --- loggerhead-1.19~bzr501/debian/changelog 2020-06-08 11:52:50.000000000 +0000 +++ loggerhead-1.19~bzr511/debian/changelog 2020-11-25 22:30:00.000000000 +0000 @@ -1,3 +1,11 @@ +loggerhead (1.19~bzr511-1) unstable; urgency=medium + + * New upstream snapshot. + * Add patch isalive.patch: avoid use of removed Thread.IsAlive() on + newer versions of Python. Closes: #975798 + + -- Jelmer Vernooij Wed, 25 Nov 2020 22:30:00 +0000 + loggerhead (1.19~bzr501-1) unstable; urgency=medium * New upstream snapshot. diff -Nru loggerhead-1.19~bzr501/debian/patches/isalive.patch loggerhead-1.19~bzr511/debian/patches/isalive.patch --- loggerhead-1.19~bzr501/debian/patches/isalive.patch 1970-01-01 00:00:00.000000000 +0000 +++ loggerhead-1.19~bzr511/debian/patches/isalive.patch 2020-11-25 22:30:00.000000000 +0000 @@ -0,0 +1,13 @@ +=== modified file 'loggerhead/load_test.py' +--- old/loggerhead/load_test.py 2020-07-08 17:14:19 +0000 ++++ new/loggerhead/load_test.py 2020-11-25 21:25:35 +0000 +@@ -211,7 +211,7 @@ + # And join the controlling thread + for i in range(10): + t.join(self.blocking_timeout / 10.0) +- if not t.isAlive(): ++ if not t.is_alive(): + break + + def _full_url(self, relpath): + diff -Nru loggerhead-1.19~bzr501/debian/patches/series loggerhead-1.19~bzr511/debian/patches/series --- loggerhead-1.19~bzr501/debian/patches/series 2020-06-08 11:52:50.000000000 +0000 +++ loggerhead-1.19~bzr511/debian/patches/series 2020-11-25 22:30:00.000000000 +0000 @@ -1,2 +1,3 @@ paths.patch static-path.patch +isalive.patch diff -Nru loggerhead-1.19~bzr501/docs/index.rst loggerhead-1.19~bzr511/docs/index.rst --- loggerhead-1.19~bzr501/docs/index.rst 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/docs/index.rst 2020-09-18 08:48:28.000000000 +0000 @@ -15,8 +15,6 @@ - SimpleTAL for templating. -- simplejson for producing JSON data. - - Paste for the server. (You need version 1.2 or newer of Paste). - Paste Deploy (optional, needed when proxying through Apache). @@ -30,7 +28,6 @@ .. code-block:: sh $ sudo apt-get install python-simpletal - $ sudo apt-get install python-simplejson $ sudo apt-get install python-paste $ sudo apt-get install python-pastedeploy $ sudo apt-get install python-flup @@ -43,7 +40,6 @@ $ easy_install \ -f http://www.owlfish.com/software/simpleTAL/py2compatible/download.html \ SimpleTAL - $ easy_install simplejson $ easy_install Paste $ easy_install PasteDeploy $ easy_install flup diff -Nru loggerhead-1.19~bzr501/loggerhead/controllers/annotate_ui.py loggerhead-1.19~bzr511/loggerhead/controllers/annotate_ui.py --- loggerhead-1.19~bzr501/loggerhead/controllers/annotate_ui.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/controllers/annotate_ui.py 2020-09-18 08:48:28.000000000 +0000 @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA # +from datetime import datetime import itertools from ..controllers.view_ui import ViewUI @@ -48,7 +49,12 @@ change = change_cache.get(line_revid, None) if change is None: - change = self._history.get_changes([line_revid])[0] + changes = self._history.get_changes([line_revid]) + if changes: + change = changes[0] + else: + change = util.Container( + authors='', date=datetime.now(), revno='') change_cache[line_revid] = change try: diff -Nru loggerhead-1.19~bzr501/loggerhead/controllers/changelog_ui.py loggerhead-1.19~bzr511/loggerhead/controllers/changelog_ui.py --- loggerhead-1.19~bzr501/loggerhead/controllers/changelog_ui.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/controllers/changelog_ui.py 2020-09-18 08:48:28.000000000 +0000 @@ -18,7 +18,7 @@ # Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA # -import simplejson +import json from paste.httpexceptions import HTTPServerError @@ -99,7 +99,7 @@ 'branch': self._branch, 'changes': changes, 'show_tag_col': show_tag_col, - 'data': simplejson.dumps(data), + 'data': json.dumps(data), 'util': util, 'history': history, 'revid': revid, diff -Nru loggerhead-1.19~bzr501/loggerhead/controllers/download_ui.py loggerhead-1.19~bzr511/loggerhead/controllers/download_ui.py --- loggerhead-1.19~bzr501/loggerhead/controllers/download_ui.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/controllers/download_ui.py 2020-09-18 08:48:28.000000000 +0000 @@ -23,6 +23,7 @@ from breezy.errors import ( NoSuchFile, + NoSuchId, NoSuchRevision, ) from breezy import osutils, urlutils @@ -60,7 +61,12 @@ try: path, filename, content = h.get_file(args[1], revid) except (NoSuchFile, NoSuchRevision): - raise httpexceptions.HTTPNotFound() + # Compatibility API for /download/rev_id/file_id/ + try: + path, filename, content = h.get_file_by_fileid( + args[1].encode('UTF-8'), revid) + except (NoSuchId, NoSuchRevision): + raise httpexceptions.HTTPNotFound() mime_type, encoding = mimetypes.guess_type(filename) if mime_type is None: mime_type = 'application/octet-stream' diff -Nru loggerhead-1.19~bzr501/loggerhead/controllers/__init__.py loggerhead-1.19~bzr511/loggerhead/controllers/__init__.py --- loggerhead-1.19~bzr501/loggerhead/controllers/__init__.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/controllers/__init__.py 2020-09-18 08:48:28.000000000 +0000 @@ -17,10 +17,11 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA -import breezy.errors -import simplejson +import json import time +import breezy.errors + from breezy import osutils from paste.httpexceptions import HTTPNotFound, HTTPSeeOther @@ -122,7 +123,7 @@ z = time.time() w = BufferingWriter(writer, 8192) if environ.get('loggerhead.as_json'): - w.write(simplejson.dumps(values, + w.write(json.dumps(values, default=util.convert_to_json_ready).encode('utf-8')) else: self.add_template_values(values) diff -Nru loggerhead-1.19~bzr501/loggerhead/controllers/revision_ui.py loggerhead-1.19~bzr511/loggerhead/controllers/revision_ui.py --- loggerhead-1.19~bzr501/loggerhead/controllers/revision_ui.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/controllers/revision_ui.py 2020-09-18 08:48:28.000000000 +0000 @@ -17,7 +17,7 @@ # Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA # -import simplejson +import json from paste.httpexceptions import HTTPServerError @@ -128,7 +128,7 @@ except (KeyError, ValueError): context_lines = None diff_chunks = diff_chunks_for_file( - self._history._branch.repository, item.file_id, + self._history._branch.repository, path, item.old_revision, item.new_revision, context_lines=context_lines) else: @@ -152,9 +152,9 @@ values.update({ 'history': self._history, - 'link_data': simplejson.dumps(link_data), - 'json_specific_path': simplejson.dumps(path), - 'path_to_id': simplejson.dumps(path_to_id), + 'link_data': json.dumps(link_data), + 'json_specific_path': json.dumps(path), + 'path_to_id': json.dumps(path_to_id), 'directory_breadcrumbs': directory_breadcrumbs, 'navigation': navigation, 'remember': remember, diff -Nru loggerhead-1.19~bzr501/loggerhead/controllers/view_ui.py loggerhead-1.19~bzr511/loggerhead/controllers/view_ui.py --- loggerhead-1.19~bzr501/loggerhead/controllers/view_ui.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/controllers/view_ui.py 2020-09-18 08:48:28.000000000 +0000 @@ -50,13 +50,11 @@ template_name = 'view' def tree_for(self, path, revid): - if not isinstance(path, str): + if not isinstance(path, util.text_type): raise TypeError(path) if not isinstance(revid, bytes): raise TypeError(revid) - rev_tree = self._history.revision_tree(revid) - file_revid = rev_tree.get_file_revision(path) - return self._history._branch.repository.revision_tree(file_revid) + return self._history._branch.repository.revision_tree(revid) def text_lines(self, path, revid): file_name = os.path.basename(path) @@ -76,6 +74,7 @@ breezy.textfile.check_text_lines(file_lines) file_text = file_text.decode(encoding) + file_lines = osutils.split_lines(file_text) if highlight is not None: hl_lines = highlight(file_name, file_text, encoding) diff -Nru loggerhead-1.19~bzr501/loggerhead/history.py loggerhead-1.19~bzr511/loggerhead/history.py --- loggerhead-1.19~bzr501/loggerhead/history.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/history.py 2020-09-18 08:48:28.000000000 +0000 @@ -217,7 +217,7 @@ finally: rev_info_memory_cache_lock.release() -# Used to store locks that prevent multiple threads from building a +# Used to store locks that prevent multiple threads from building a # revision graph for the same branch at the same time, because that can # cause severe performance issues that are so bad that the system seems # to hang. @@ -783,6 +783,20 @@ display_path = path if not display_path.startswith('/'): path = '/' + path + return (display_path, breezy.osutils.basename(path), + rev_tree.get_file_text(path)) + + def get_file_by_fileid(self, fileid, revid): + """Returns (path, filename, file contents)""" + if not isinstance(fileid, bytes): + raise TypeError(fileid) + if not isinstance(revid, bytes): + raise TypeError(revid) + rev_tree = self._branch.repository.revision_tree(revid) + path = rev_tree.id2path(fileid) + display_path = path + if not display_path.startswith('/'): + path = '/' + path return (display_path, breezy.osutils.basename(path), rev_tree.get_file_text(path)) diff -Nru loggerhead-1.19~bzr501/loggerhead/load_test.py loggerhead-1.19~bzr511/loggerhead/load_test.py --- loggerhead-1.19~bzr501/loggerhead/load_test.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/load_test.py 2020-09-18 08:48:28.000000000 +0000 @@ -70,7 +70,7 @@ except ImportError: # Python < 3 from Queue import Queue, Empty -import simplejson +import json from breezy import ( errors, @@ -157,7 +157,9 @@ @classmethod def parse(cls, content): script = cls() - json_dict = simplejson.loads(content) + if isinstance(content, bytes): + content = content.decode('UTF-8') + json_dict = json.loads(content) if 'parameters' not in json_dict: raise ValueError('Missing "parameters" section') if 'requests' not in json_dict: diff -Nru loggerhead-1.19~bzr501/loggerhead/static/javascript/custom.js loggerhead-1.19~bzr511/loggerhead/static/javascript/custom.js --- loggerhead-1.19~bzr501/loggerhead/static/javascript/custom.js 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/static/javascript/custom.js 2020-09-18 08:48:28.000000000 +0000 @@ -106,7 +106,7 @@ if (this._loading) return; if (callback) callback(); this.is_open = true; - }); + }.bind(this)); } Collapsable.prototype._load_finished = function(data, callback) @@ -174,7 +174,7 @@ Collapsable.prototype.open = function(callback) { - this.expand_icon.src = expanded_icon_path; + this.expand_icon[0].src = expanded_icon_path; this._ensure_container(); @@ -223,7 +223,7 @@ var anim = $(this.container).animate( { marginBottom: [0, close_height - open_height]}, - 0.2, "swing", this.closeComplete); + 0.2, "swing", this.closeComplete.bind(this)); }; Collapsable.prototype.closeComplete = function () { @@ -232,7 +232,7 @@ $(this.close_node).css({'display': 'block'}); } $(this.container).css({'marginBottom': 0}); - this.expand_icon.set('src', collapsed_icon_path); + this.expand_icon[0].src = collapsed_icon_path; this.is_open = false; }; diff -Nru loggerhead-1.19~bzr501/loggerhead/static/javascript/diff.js loggerhead-1.19~bzr511/loggerhead/static/javascript/diff.js --- loggerhead-1.19~bzr501/loggerhead/static/javascript/diff.js 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/static/javascript/diff.js 2020-09-18 08:48:28.000000000 +0000 @@ -1,6 +1,6 @@ var unified = true; -function make_unified(chunk) { +function make_unified(index) { var pending_added = []; function flush_adds(before) { for (var i = 0; i < pending_added.length; i++) { @@ -8,24 +8,25 @@ } pending_added.length = 0; } - chunk.get('children').filter(".pseudorow").each( + $(this).children().filter(".pseudorow").each( function (i, line) { + line = $(line); if (line.hasClass("context-row")) { flush_adds(line); - line.removeChild($(line).find('.code')); + line.find('.code')[0].remove(); } else if (line.hasClass("both-row")) { - var added_line = line.create('
 
 
'); + var added_line = $('
 
 
'); var clear = $(added_line).find('.clear'); $(line).find('.lineNumber.second').insertBefore(clear); $(line).find('.code.insert').insertBefore(clear); pending_added[pending_added.length] = added_line; $('
 
').insertBefore($(line).find('.code.delete')); - line.replaceClass("both-row", "delete-row"); + line.addClass('delete-row').removeClass('both-row'); } else if (line.hasClass("insert-row")) { flush_adds(line); - line.removeChild($(line).find('.blank')); + line.find('.blank').remove(); } else if (line.hasClass("delete-row")) { $(line).find('.blank').remove(); @@ -33,10 +34,10 @@ } }); flush_adds(null); - chunk.replaceClass('sbs', 'unified'); + $(this).addClass('unified').removeClass('sbs'); } -function make_sbs(chunk) { +function make_sbs(index) { var added = []; var removed = []; function clear_bufs(before) { @@ -45,33 +46,34 @@ for (var i = 0; i < common; i++) { var a = added[i]; var r = removed[i]; - a.ancestor().removeChild(a); - r.removeChild($(r).find('.lineNumber.second')); + a.remove(); + r.find('.lineNumber.second').remove(); $(a).find('.lineNumber.second').insertBefore($(r).find('.clear')); $(a).find('.code.insert').insertBefore($(r).find('.clear')); - r.replaceClass('removed-row', 'both-row'); + r.addClass('both-row').removeClass('removed-row'); } if (added.length > removed.length) { for (var j = common; j < added.length; j++) { a = $(added[j]); - $('
 
').insertBefore(a.find('.lineNumber.second')); + a.find('.lineNumber.second').before('
 
'); } } else if (added.length < removed.length) { for (var j = common; j < removed.length; j++) { r = $(removed[j]); r.find('.code.delete').insertBefore(r.find('.lineNumber.second')); - r.create('
 
').insertBefore(r.find('.clear')); + r.find('.clear').before('
 
') } } added.length = 0; removed.length = 0; } - chunk.get('children').filter(".pseudorow").each( + $(this).children().filter(".pseudorow").each( function (i, line) { + line = $(line); if (line.hasClass("context-row")) { clear_bufs(line); - $(line).find('.code').cloneNode(true).insertBefore($(line).find(".second")); + $(line).find(".second").before($(line).find('.code').clone()); } else if (line.hasClass("insert-row")) { added[added.length] = line; @@ -81,7 +83,7 @@ } }); clear_bufs(null); - chunk.replaceClass('unified', 'sbs'); + $(this).addClass('sbs').removeClass('unified'); } @@ -91,12 +93,12 @@ if (unified) { pts && pts.each(make_sbs); unified = false; - $("#toggle_unified_sbs").set('innerHTML', "Show unified diffs"); + $("#toggle_unified_sbs").html("Show unified diffs"); } else { pts && pts.each(make_unified); unified = true; - $("#toggle_unified_sbs").set('innerHTML', "Show diffs side-by-side"); + $("#toggle_unified_sbs").html("Show diffs side-by-side"); } } @@ -109,7 +111,7 @@ var diffs = $('.diff'); if (diffs == null) return; diffs.each( - function(item, i) + function(i, item) { var collapsable = item.collapsable; if(action == 'close') @@ -149,7 +151,7 @@ function node_process(node) { if (!unified) { - node.get('children').filter('.pseudotable').each(make_sbs); + node.children().filter('.pseudotable').each(make_sbs); } } @@ -166,18 +168,18 @@ var original_diff_download_link = null; function compute_diff_links() { - var numlines = $('#contextLines').value; + var numlines = $('#contextLines').val(); $('.diff').each( function(i, item) { item.collapsable.source = global_path + '+filediff/' + link_data[item.id] + '?context=' + numlines; }); - if(original_diff_download_link == null) original_diff_download_link = $('#download_link').href; - $('#download_link').href = original_diff_download_link + '?context=' + numlines; + if(original_diff_download_link == null) original_diff_download_link = $('#download_link').attr('href'); + $('#download_link').attr('href', original_diff_download_link + '?context=' + numlines); } function get_num_lines() { - var numlines = $('#contextLines').value; + var numlines = $('#contextLines').val(); return numlines; } @@ -195,7 +197,7 @@ } var diffs = $('.diff'); if (diffs == null) return; - var numlines = $('#contextLines').value; + var numlines = $('#contextLines').val(); diffs.each( function(i, item) { @@ -204,7 +206,7 @@ 'click', function(e) { e.preventDefault(); - item.collapsable.source = global_path + '+filediff/' + link_data[item.id] + '?context=' + $('#contextLines').value; + item.collapsable.source = global_path + '+filediff/' + link_data[item.id] + '?context=' + $('#contextLines').val(); collapsable.toggle(); }); var collapsable = new Collapsable( diff -Nru loggerhead-1.19~bzr501/loggerhead/templatefunctions.py loggerhead-1.19~bzr511/loggerhead/templatefunctions.py --- loggerhead-1.19~bzr501/loggerhead/templatefunctions.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/templatefunctions.py 2020-09-18 08:48:28.000000000 +0000 @@ -201,9 +201,6 @@ # TODO: On old Python versions, elementtree may be used. - import simplejson - versions.append(('simplejson', simplejson.__version__)) - try: Dozer = pkg_resources.get_distribution('Dozer') except pkg_resources.DistributionNotFound: diff -Nru loggerhead-1.19~bzr501/loggerhead/tests/test_controllers.py loggerhead-1.19~bzr511/loggerhead/tests/test_controllers.py --- loggerhead-1.19~bzr501/loggerhead/tests/test_controllers.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/loggerhead/tests/test_controllers.py 2020-09-18 08:48:28.000000000 +0000 @@ -148,6 +148,22 @@ revision_ui.add_template_values(values) self.assertIs(values['diff_chunks'], None) + def test_add_template_values_with_changes(self): + branch_app = self.make_branch_app_for_revision_ui( + [('file', b'content\n')], [('file', b'new content\n')]) + env = {'SCRIPT_NAME': '/', + 'PATH_INFO': '/revision/1/file', + 'QUERY_STRING':'start_revid=1', + 'REQUEST_METHOD': 'GET', + 'wsgi.url_scheme': 'http', + 'SERVER_NAME': 'localhost', + 'SERVER_PORT': '80'} + revision_ui = branch_app.lookup_app(env) + path = revision_ui.parse_args(env) + values = revision_ui.get_values(path, revision_ui.kwargs, {}) + revision_ui.add_template_values(values) + self.assertEqual(len(values['diff_chunks']), 1) + def test_get_values_smoke(self): branch_app = self.make_branch_app_for_revision_ui( [('file', b'content\n'), ('other-file', b'other\n')], @@ -200,7 +216,7 @@ # A lot of this state is set up by __call__, but we'll do it directly # here. ann_ui.args = ['rev2'] - annotate_info = ann_ui.get_values('filename', + annotate_info = ann_ui.get_values(u'filename', kwargs={'file_id': 'file_id'}, headers={}) annotated = annotate_info['annotated'] self.assertEqual(2, len(annotated)) @@ -213,7 +229,7 @@ ann_ui = self.make_annotate_ui_for_file_history(b'file_id', history) ann_ui.args = ['rev2'] ann_ui.get_values( - 'filename', kwargs={'file_id': 'file_id'}, headers={}) + u'filename', kwargs={'file_id': 'file_id'}, headers={}) def test_annotate_file_zero_sized(self): # Test against a zero-sized file without breaking. No annotation @@ -221,7 +237,7 @@ history = [(b'rev1', b'', '.')] ann_ui = self.make_annotate_ui_for_file_history(b'file_id', history) ann_ui.args = ['rev1'] - annotate_info = ann_ui.get_values('filename', + annotate_info = ann_ui.get_values(u'filename', kwargs={'file_id': 'file_id'}, headers={}) annotated = annotate_info['annotated'] self.assertEqual(0, len(annotated)) @@ -231,14 +247,14 @@ ann_ui = self.make_annotate_ui_for_file_history(b'file_id', history) ann_ui.args = ['rev1'] self.assertRaises( - HTTPNotFound, ann_ui.get_values, 'not-filename', {}, {}) + HTTPNotFound, ann_ui.get_values, u'not-filename', {}, {}) def test_annotate_nonexistent_rev(self): history = [(b'rev1', b'', '.')] ann_ui = self.make_annotate_ui_for_file_history(b'file_id', history) ann_ui.args = ['norev'] self.assertRaises( - HTTPNotFound, ann_ui.get_values, 'not-filename', {}, {}) + HTTPNotFound, ann_ui.get_values, u'not-filename', {}, {}) class TestFileDiffUI(BasicTests): @@ -391,6 +407,15 @@ self.assertEqual( b'some\nmultiline\ndata\nwith elements in file views, fixing misaligned line numbers in some browsers. (Colin Watson) + - Drop dependency on simplejson in favour of the standard library's json + module in Python >= 2.6. (Colin Watson) + 1.18.2 [12Sep2012] ------------------ diff -Nru loggerhead-1.19~bzr501/requirements.txt loggerhead-1.19~bzr511/requirements.txt --- loggerhead-1.19~bzr501/requirements.txt 1970-01-01 00:00:00.000000000 +0000 +++ loggerhead-1.19~bzr511/requirements.txt 2020-09-18 08:48:28.000000000 +0000 @@ -0,0 +1,8 @@ +Paste >= 1.6 +dulwich == 0.19.16; python_version < "3" +dulwich; python_version >= "3" +testtools +breezy +bleach +https://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-4.3.tar.gz; python_version < "3" +https://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-5.2.tar.gz; python_version >= "3" diff -Nru loggerhead-1.19~bzr501/setup.py loggerhead-1.19~bzr511/setup.py --- loggerhead-1.19~bzr501/setup.py 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/setup.py 2020-09-18 08:48:28.000000000 +0000 @@ -56,6 +56,6 @@ 'loggerheadd', 'breezy.conf']), ], - install_requires=['simplejson', 'paste', 'bleach'], + install_requires=['paste', 'bleach'], testsuite='loggerhead.tests.test_suite', ) diff -Nru loggerhead-1.19~bzr501/tox.ini loggerhead-1.19~bzr511/tox.ini --- loggerhead-1.19~bzr501/tox.ini 1970-01-01 00:00:00.000000000 +0000 +++ loggerhead-1.19~bzr511/tox.ini 2020-09-18 08:48:28.000000000 +0000 @@ -0,0 +1,8 @@ +[tox] +envlist = py27,py35,py36,py37,py38 +skipsdist=True + +[testenv] +deps = -rrequirements.txt +commands = brz selftest -v breezy.plugins.loggerhead --strict +setenv = BRZ_PLUGINS_AT = loggerhead@{toxinidir} diff -Nru loggerhead-1.19~bzr501/.travis.yml loggerhead-1.19~bzr511/.travis.yml --- loggerhead-1.19~bzr501/.travis.yml 2020-06-08 10:03:32.660000000 +0000 +++ loggerhead-1.19~bzr511/.travis.yml 2020-09-18 08:48:28.000000000 +0000 @@ -22,7 +22,7 @@ install: - sudo apt install subunit adduser libjs-jquery - travis_retry pip install -U setuptools - - travis_retry pip install -U pip coverage codecov flake8 testtools configobj cython testscenarios six docutils python-subunit dulwich bzr+lp:brz pygments simplejson paste http://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-$TAL_VERSION.tar.gz bleach + - travis_retry pip install -U pip coverage codecov flake8 testtools configobj cython testscenarios six docutils python-subunit dulwich bzr+lp:brz pygments paste http://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-$TAL_VERSION.tar.gz bleach after_success: - codecov