Your message dated Tue, 04 Jul 2023 03:05:33 +0000 with message-id <e1qgwm9-001q7c...@fasolo.debian.org> and subject line Bug#1031811: fixed in redmine 5.0.4-6 has caused the Debian Bug report #1031811, regarding redmine: mercurial helper broken to be marked as done.
This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact ow...@bugs.debian.org immediately.) -- 1031811: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031811 Debian Bug Tracking System Contact ow...@bugs.debian.org with problems
--- Begin Message ---Package: redmine Version: 5.0.4-4 Tags: patch Dear maintainers, thank you very much for providing redmine and the backport to bullseye! The mercurial integration of redmine relys on a helper shim that is written in python 2 and is not compatible with python 3. The upstream issue[1] already contains a patch[2] that works just fine for us. We only changed the encoding from cp1252 back to utf-8[3]. Find attached the patch which is only modified to use utf-8. It would be great to get the mercurial helper updated for bookworm! thank you and all the best, Adi [1] https://www.redmine.org/issues/33784 [2] https://www.redmine.org/attachments/download/30004/33784_Redmine_5.0.3.patch [3] https://www.redmine.org/issues/33784#note-10diff --git a/lib/redmine/scm/adapters/mercurial/redminehelper.py b/lib/redmine/scm/adapters/mercurial/redminehelper.py index c187df8c2..38ad1c8a1 100644 --- a/lib/redmine/scm/adapters/mercurial/redminehelper.py +++ b/lib/redmine/scm/adapters/mercurial/redminehelper.py @@ -5,6 +5,9 @@ # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. + +# [Nomadia-changes] Patch from Redmine.org #33784 : adapt to Python 3.0 + """helper commands for Redmine to reduce the number of hg calls To test this extension, please try:: @@ -45,17 +48,20 @@ Output example of rhmanifest:: </repository> </rhmanifest> """ -import re, time, cgi, urllib +import re, time, html, urllib from mercurial import cmdutil, commands, node, error, hg, registrar cmdtable = {} command = registrar.command(cmdtable) if hasattr(registrar, 'command') else cmdutil.command(cmdtable) -_x = cgi.escape -_u = lambda s: cgi.escape(urllib.quote(s)) +_x = lambda s: html.escape(s.decode('utf-8')).encode('utf-8') +_u = lambda s: html.escape(urllib.parse.quote(s)).encode('utf-8') + +def unquoteplus(*args, **kwargs): + return urllib.parse.unquote_to_bytes(*args, **kwargs).replace(b'+', b' ') def _changectx(repo, rev): - if isinstance(rev, str): + if isinstance(rev, bytes): rev = repo.lookup(rev) if hasattr(repo, 'changectx'): return repo.changectx(rev) @@ -70,10 +76,10 @@ def _tip(ui, repo): except TypeError: # Mercurial < 1.1 return repo.changelog.count() - 1 tipctx = _changectx(repo, tiprev()) - ui.write('<tip revision="%d" node="%s"/>\n' + ui.write(b'<tip revision="%d" node="%s"/>\n' % (tipctx.rev(), _x(node.hex(tipctx.node())))) -_SPECIAL_TAGS = ('tip',) +_SPECIAL_TAGS = (b'tip',) def _tags(ui, repo): # see mercurial/commands.py:tags @@ -84,7 +90,7 @@ def _tags(ui, repo): r = repo.changelog.rev(n) except error.LookupError: continue - ui.write('<tag revision="%d" node="%s" name="%s"/>\n' + ui.write(b'<tag revision="%d" node="%s" name="%s"/>\n' % (r, _x(node.hex(n)), _u(t))) def _branches(ui, repo): @@ -104,136 +110,145 @@ def _branches(ui, repo): return repo.branchheads(branch) def lookup(rev, n): try: - return repo.lookup(rev) + return repo.lookup(str(rev).encode('utf-8')) except RuntimeError: return n for t, n, r in sorted(iterbranches(), key=lambda e: e[2], reverse=True): if lookup(r, n) in branchheads(t): - ui.write('<branch revision="%d" node="%s" name="%s"/>\n' + ui.write(b'<branch revision="%d" node="%s" name="%s"/>\n' % (r, _x(node.hex(n)), _u(t))) def _manifest(ui, repo, path, rev): ctx = _changectx(repo, rev) - ui.write('<manifest revision="%d" path="%s">\n' + ui.write(b'<manifest revision="%d" path="%s">\n' % (ctx.rev(), _u(path))) known = set() - pathprefix = (path.rstrip('/') + '/').lstrip('/') + pathprefix = (path.decode('utf-8').rstrip('/') + '/').lstrip('/') for f, n in sorted(ctx.manifest().iteritems(), key=lambda e: e[0]): - if not f.startswith(pathprefix): - continue - name = re.sub(r'/.*', '/', f[len(pathprefix):]) + fstr = f.decode('utf-8') + if not fstr.startswith(pathprefix): + continue + name = re.sub(r'/.*', '/', fstr[len(pathprefix):]) if name in known: continue known.add(name) if name.endswith('/'): - ui.write('<dir name="%s"/>\n' - % _x(urllib.quote(name[:-1]))) + ui.write(b'<dir name="%s"/>\n' + % _x(urllib.parse.quote(name[:-1]).encode('utf-8'))) else: fctx = repo.filectx(f, fileid=n) tm, tzoffset = fctx.date() - ui.write('<file name="%s" revision="%d" node="%s" ' - 'time="%d" size="%d"/>\n' + ui.write(b'<file name="%s" revision="%d" node="%s" ' + b'time="%d" size="%d"/>\n' % (_u(name), fctx.rev(), _x(node.hex(fctx.node())), tm, fctx.size(), )) - ui.write('</manifest>\n') + ui.write(b'</manifest>\n') -@command('rhannotate', - [('r', 'rev', '', 'revision'), - ('u', 'user', None, 'list the author (long with -v)'), - ('n', 'number', None, 'list the revision number (default)'), - ('c', 'changeset', None, 'list the changeset'), +@command(b'rhannotate', + [(b'r', b'rev', b'', b'revision'), + (b'u', b'user', None, b'list the author (long with -v)'), + (b'n', b'number', None, b'list the revision number (default)'), + (b'c', b'changeset', None, b'list the changeset'), ], - 'hg rhannotate [-r REV] [-u] [-n] [-c] FILE...') + b'hg rhannotate [-r REV] [-u] [-n] [-c] FILE...') def rhannotate(ui, repo, *pats, **opts): - rev = urllib.unquote_plus(opts.pop('rev', None)) + rev = unquoteplus(opts.pop('rev', b'')) opts['rev'] = rev - return commands.annotate(ui, repo, *map(urllib.unquote_plus, pats), **opts) + return commands.annotate(ui, repo, *map(unquoteplus, pats), **opts) -@command('rhcat', - [('r', 'rev', '', 'revision')], - 'hg rhcat ([-r REV] ...) FILE...') +@command(b'rhcat', + [(b'r', b'rev', b'', b'revision')], + b'hg rhcat ([-r REV] ...) FILE...') def rhcat(ui, repo, file1, *pats, **opts): - rev = urllib.unquote_plus(opts.pop('rev', None)) + rev = unquoteplus(opts.pop('rev', b'')) opts['rev'] = rev - return commands.cat(ui, repo, urllib.unquote_plus(file1), *map(urllib.unquote_plus, pats), **opts) + return commands.cat(ui, repo, unquoteplus(file1), *map(unquoteplus, pats), **opts) -@command('rhdiff', - [('r', 'rev', [], 'revision'), - ('c', 'change', '', 'change made by revision')], - 'hg rhdiff ([-c REV] | [-r REV] ...) [FILE]...') +@command(b'rhdiff', + [(b'r', b'rev', [], b'revision'), + (b'c', b'change', b'', b'change made by revision')], + b'hg rhdiff ([-c REV] | [-r REV] ...) [FILE]...') def rhdiff(ui, repo, *pats, **opts): """diff repository (or selected files)""" change = opts.pop('change', None) if change: # add -c option for Mercurial<1.1 base = _changectx(repo, change).parents()[0].rev() - opts['rev'] = [str(base), change] + opts['rev'] = [base, change] opts['nodates'] = True - return commands.diff(ui, repo, *map(urllib.unquote_plus, pats), **opts) + return commands.diff(ui, repo, *map(unquoteplus, pats), **opts) -@command('rhlog', +@command(b'rhlog', [ - ('r', 'rev', [], 'show the specified revision'), - ('b', 'branch', [], - 'show changesets within the given named branch'), - ('l', 'limit', '', - 'limit number of changes displayed'), - ('d', 'date', '', - 'show revisions matching date spec'), - ('u', 'user', [], - 'revisions committed by user'), - ('', 'from', '', - ''), - ('', 'to', '', - ''), - ('', 'rhbranch', '', - ''), - ('', 'template', '', - 'display with template')], - 'hg rhlog [OPTION]... [FILE]') + (b'r', b'rev', [], b'show the specified revision'), + (b'b', b'branch', [], + b'show changesets within the given named branch'), + (b'l', b'limit', b'', + b'limit number of changes displayed'), + (b'd', b'date', b'', + b'show revisions matching date spec'), + (b'u', b'user', [], + b'revisions committed by user'), + (b'', b'from', b'', + b''), + (b'', b'to', b'', + b''), + (b'', b'rhbranch', b'', + b''), + (b'', b'template', b'', + b'display with template')], + b'hg rhlog [OPTION]... [FILE]') def rhlog(ui, repo, *pats, **opts): rev = opts.pop('rev') bra0 = opts.pop('branch') - from_rev = urllib.unquote_plus(opts.pop('from', None)) - to_rev = urllib.unquote_plus(opts.pop('to' , None)) - bra = urllib.unquote_plus(opts.pop('rhbranch', None)) - from_rev = from_rev.replace('"', '\\"') - to_rev = to_rev.replace('"', '\\"') - if hg.util.version() >= '1.6': - opts['rev'] = ['"%s":"%s"' % (from_rev, to_rev)] - else: - opts['rev'] = ['%s:%s' % (from_rev, to_rev)] - opts['branch'] = [bra] - return commands.log(ui, repo, *map(urllib.unquote_plus, pats), **opts) - -@command('rhmanifest', - [('r', 'rev', '', 'show the specified revision')], - 'hg rhmanifest [-r REV] [PATH]') -def rhmanifest(ui, repo, path='', **opts): + from_rev = unquoteplus(opts.pop('from', b'')) + to_rev = unquoteplus(opts.pop('to' , b'')) + bra = unquoteplus(opts.pop('rhbranch', b'')) + from_rev = from_rev.replace(b'"', b'\\"') + to_rev = to_rev.replace(b'"', b'\\"') + if (from_rev != b'') or (to_rev != b''): + if from_rev != b'': + quotefrom = b'"%s"' % (from_rev) + else: + quotefrom = from_rev + if to_rev != b'': + quoteto = b'"%s"' % (to_rev) + else: + quoteto = to_rev + opts['rev'] = [b'%s:%s' % (quotefrom, quoteto)] + opts['rev'] = rev + if (bra != b''): + opts['branch'] = [bra] + return commands.log(ui, repo, *map(unquoteplus, pats), **opts) + +@command(b'rhmanifest', + [(b'r', b'rev', b'', b'show the specified revision')], + b'hg rhmanifest -r REV [PATH]') +def rhmanifest(ui, repo, path=b'', **opts): """output the sub-manifest of the specified directory""" - ui.write('<?xml version="1.0"?>\n') - ui.write('<rhmanifest>\n') - ui.write('<repository root="%s">\n' % _u(repo.root)) + ui.write(b'<?xml version="1.0"?>\n') + ui.write(b'<rhmanifest>\n') + ui.write(b'<repository root="%s">\n' % _u(repo.root)) try: - _manifest(ui, repo, urllib.unquote_plus(path), urllib.unquote_plus(opts.get('rev'))) + _manifest(ui, repo, unquoteplus(path), unquoteplus(opts.get('rev'))) finally: - ui.write('</repository>\n') - ui.write('</rhmanifest>\n') + ui.write(b'</repository>\n') + ui.write(b'</rhmanifest>\n') -@command('rhsummary',[], 'hg rhsummary') +@command(b'rhsummary', [], b'hg rhsummary') def rhsummary(ui, repo, **opts): """output the summary of the repository""" - ui.write('<?xml version="1.0"?>\n') - ui.write('<rhsummary>\n') - ui.write('<repository root="%s">\n' % _u(repo.root)) + ui.write(b'<?xml version="1.0"?>\n') + ui.write(b'<rhsummary>\n') + ui.write(b'<repository root="%s">\n' % _u(repo.root)) try: _tip(ui, repo) _tags(ui, repo) _branches(ui, repo) # TODO: bookmarks in core (Mercurial>=1.8) finally: - ui.write('</repository>\n') - ui.write('</rhsummary>\n') + ui.write(b'</repository>\n') + ui.write(b'</rhsummary>\n')signature.asc
Description: PGP signature
--- End Message ---
--- Begin Message ---Source: redmine Source-Version: 5.0.4-6 Done: Marc Dequènes (Duck) <d...@duckcorp.org> We believe that the bug you reported is fixed in the latest version of redmine, which is due to be installed in the Debian FTP archive. A summary of the changes between this version and the previous one is attached. Thank you for reporting the bug, which will now be closed. If you have further comments please address them to 1031...@bugs.debian.org, and the maintainer will reopen the bug report if appropriate. Debian distribution maintenance software pp. Marc Dequènes (Duck) <d...@duckcorp.org> (supplier of updated redmine package) (This message was generated automatically at their request; if you believe that there is a problem with it please contact the archive administrators by mailing ftpmas...@ftp-master.debian.org) -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 1.8 Date: Tue, 04 Jul 2023 11:46:13 +0900 Source: redmine Architecture: source Version: 5.0.4-6 Distribution: unstable Urgency: medium Maintainer: Debian Ruby Team <pkg-ruby-extras-maintain...@lists.alioth.debian.org> Changed-By: Marc Dequènes (Duck) <d...@duckcorp.org> Closes: 1031811 Changes: redmine (5.0.4-6) unstable; urgency=medium . [Jakob Haufe] * Patch mercurial helper to work with Python 3 (Closes: #1031811). * Adapt dependencies version requirements. Checksums-Sha1: 38f49f82b8720e04468d6932729c250213d736fc 3375 redmine_5.0.4-6.dsc 95b82341d1f9b9a982ef2fe7a726b9e3fafb5c47 182612 redmine_5.0.4-6.debian.tar.xz ef733ada216dda2b53ad02155100b42020204ffd 14182 redmine_5.0.4-6_amd64.buildinfo Checksums-Sha256: 459bfc8cf96b0c74db335d8bf218443c6488849268cffddf04f43ec6c9f2f76d 3375 redmine_5.0.4-6.dsc e5511672bf81c5ee854bbe2de7ad4a517ac8e07c9ec635d8d29f5eb4137d9b14 182612 redmine_5.0.4-6.debian.tar.xz bd0b783cac05788e8bb8bd8a886fd0688a962e11b82d5f03fe30ab97ecdd64d2 14182 redmine_5.0.4-6_amd64.buildinfo Files: 6936639b3ec39f136a87c46360fd83ff 3375 web optional redmine_5.0.4-6.dsc f1664d2d1fb5ef28bceb76632fb50273 182612 web optional redmine_5.0.4-6.debian.tar.xz 6f9519211b4288a158ec00e07972e242 14182 web optional redmine_5.0.4-6_amd64.buildinfo -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEcpcqg+UmRT3yiF+BVen596wcRD8FAmSjihkACgkQVen596wc RD+Tyw//V/3lDGJoGjQSpoaK8JEXawHTAWiVku8n4MqWyH2iBuLTJ03aujs9g87x 3PJhU0MHF+kKCN2MaKdTjhUf00wHEDFnYNA8kxcAQQTWCkylp3IF9R1i5pNCcHwx p3aYQ+45zkQBwin7eW0ssSTwohoSvs4PDX1RaBpiQqVO7byBGelxQ5Rb6fXg3qSF 7AqJrAounHjbLqJJY6Ko3+I7dGJyoCaGE+g52gdm9ZeADI6XnYje3sO44xPpVKiq vBf/HLAP8rJ21sk5bBFLYibcy0yRKc9g2xAptKsgNrlv3jcSU9mD4+iE3rRcINIB fq0PAGr1g0nECc/nwFXYyxeG3EhcC/chZDSU/PYU+yMjyybCPgstIhhEAPQK6Mu2 YkSIQbH6FOK2Crd7rC8eiDnRCQT/p8zQX+lpKmUdAHIwabh2BNrXermKQNJqNmNq un1Pm6kD6SnoNzoAHqpaFIUDbzOLLMrld90mvUysy8alDcCM6g4EFBMjokmJ3A0K AzuhRWpdekw7CJfGWE+BiCVKEDMR6lgCtgg+piurqP5906PBCKP9gchWIUQLjlyV MGdx29ChVosYnXAWp23uNa65J4r37G3In404Sf7/qBf1L9ZTiWIQaP75G5ozlC4h IB1aPN/fK4WrJvmrcOcYFahjJCsNpZixIaMgqhKFxj9Q8EwRCdI= =GG8l -----END PGP SIGNATURE-----
--- End Message ---
_______________________________________________ Pkg-ruby-extras-maintainers mailing list Pkg-ruby-extras-maintainers@alioth-lists.debian.net https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/pkg-ruby-extras-maintainers