Return-Path: X-Original-To: apmail-subversion-commits-archive@minotaur.apache.org Delivered-To: apmail-subversion-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id CCCC419D8B for ; Sat, 23 Apr 2016 20:53:53 +0000 (UTC) Received: (qmail 5376 invoked by uid 500); 23 Apr 2016 20:53:53 -0000 Delivered-To: apmail-subversion-commits-archive@subversion.apache.org Received: (qmail 5335 invoked by uid 500); 23 Apr 2016 20:53:53 -0000 Mailing-List: contact commits-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@subversion.apache.org Delivered-To: mailing list commits@subversion.apache.org Received: (qmail 5318 invoked by uid 99); 23 Apr 2016 20:53:53 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 23 Apr 2016 20:53:53 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 2E032C1175 for ; Sat, 23 Apr 2016 20:53:53 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.054 X-Spam-Level: * X-Spam-Status: No, score=1.054 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, KAM_LOTSOFHASH=0.25, RP_MATCHES_RCVD=-0.996] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id B4wzgr9NvFTW for ; Sat, 23 Apr 2016 20:53:50 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTP id 1F4DC5F239 for ; Sat, 23 Apr 2016 20:53:50 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 07B46E0230 for ; Sat, 23 Apr 2016 20:53:48 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id A28393A0051 for ; Sat, 23 Apr 2016 20:53:48 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: svn commit: r1740671 - in /subversion/trunk/tools/dist: backport.pl backport/merger.py backport_tests.py backport_unicode_entry.dump detect-conflicting-backports.py merge-approved-backports.py Date: Sat, 23 Apr 2016 20:53:48 -0000 To: commits@subversion.apache.org From: danielsh@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20160423205348.A28393A0051@svn01-us-west.apache.org> Author: danielsh Date: Sat Apr 23 20:53:47 2016 New Revision: 1740671 URL: http://svn.apache.org/viewvc?rev=1740671&view=rev Log: backport: Support Unicode STATUS entries. (See r1739442.) * tools/dist/backport.pl: Set 'config:miscellany:log-encoding=UTF-8'. * tools/dist/backport/merger.py: (invoke_svn): Ditto. * tools/dist/merge-approved-backports.py: Explicitly specify the STATUS file's encoding. * tools/dist/detect-conflicting-backports.py: Ditto; not covered by tests. * tools/dist/backport_tests.py (backport_unicode_entry): New test. (test_list): Document the UUID convention for multidigit test numbers. * tools/dist/backport_unicode_entry.dump: New expected output file. Added: subversion/trunk/tools/dist/backport_unicode_entry.dump Modified: subversion/trunk/tools/dist/backport.pl subversion/trunk/tools/dist/backport/merger.py subversion/trunk/tools/dist/backport_tests.py subversion/trunk/tools/dist/detect-conflicting-backports.py subversion/trunk/tools/dist/merge-approved-backports.py Modified: subversion/trunk/tools/dist/backport.pl URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dist/backport.pl?rev=1740671&r1=1740670&r2=1740671&view=diff ============================================================================== --- subversion/trunk/tools/dist/backport.pl (original) +++ subversion/trunk/tools/dist/backport.pl Sat Apr 23 20:53:47 2016 @@ -51,6 +51,7 @@ use Tie::File (); # # TODO: document which are interpreted by sh and which should point to binary. my $SVN = $ENV{SVN} || 'svn'; # passed unquoted to sh +$SVN .= " --config-option=config:miscellany:log-encoding=UTF-8"; my $SHELL = $ENV{SHELL} // '/bin/sh'; my $VIM = 'vim'; my $EDITOR = $ENV{SVN_EDITOR} // $ENV{VISUAL} // $ENV{EDITOR} // 'ed'; Modified: subversion/trunk/tools/dist/backport/merger.py URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dist/backport/merger.py?rev=1740671&r1=1740670&r2=1740671&view=diff ============================================================================== --- subversion/trunk/tools/dist/backport/merger.py (original) +++ subversion/trunk/tools/dist/backport/merger.py Sat Apr 23 20:53:47 2016 @@ -50,7 +50,8 @@ def invoke_svn(argv): # TODO(interactive mode): disable --non-interactive child_env = os.environ.copy() child_env.update({'LC_ALL': 'C'}) - child = subprocess.Popen([SVN, '--non-interactive'] + argv, + argv = [SVN, '--non-interactive', '--config-option=config:miscellany:log-encoding=UTF-8'] + argv + child = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=child_env) Modified: subversion/trunk/tools/dist/backport_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dist/backport_tests.py?rev=1740671&r1=1740670&r2=1740671&view=diff ============================================================================== --- subversion/trunk/tools/dist/backport_tests.py (original) +++ subversion/trunk/tools/dist/backport_tests.py Sat Apr 23 20:53:47 2016 @@ -646,6 +646,22 @@ def backport_STATUS_mods(sbox): expected_stdout, expected_stderr) #---------------------------------------------------------------------- +@BackportTest('76cee987-25c9-4d6c-ad40-000000000012') +def backport_unicode_entry(sbox): + "an entry containing literal UTF-8" + + # r6: nominate r4 + approved_entries = [ + make_entry([4], notes="Hello 🗺"), + ] + sbox.simple_append(STATUS, serialize_STATUS(approved_entries)) + sbox.simple_commit(message='Nominate r4') + + # Run it. + run_backport(sbox) + + +#---------------------------------------------------------------------- ######################################################################## # Run the tests @@ -663,8 +679,9 @@ test_list = [ None, backport_branch_with_original_revision, backport_otherproject_change, backport_STATUS_mods, + backport_unicode_entry, # When adding a new test, include the test number in the last - # 6 bytes of the UUID. + # 6 bytes of the UUID, in decimal. ] if __name__ == '__main__': Added: subversion/trunk/tools/dist/backport_unicode_entry.dump URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dist/backport_unicode_entry.dump?rev=1740671&view=auto ============================================================================== --- subversion/trunk/tools/dist/backport_unicode_entry.dump (added) +++ subversion/trunk/tools/dist/backport_unicode_entry.dump Sat Apr 23 20:53:47 2016 @@ -0,0 +1,524 @@ +SVN-fs-dump-format-version: 2 + +UUID: 76cee987-25c9-4d6c-ad40-000000000012 + +Revision-number: 0 +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + +Revision-number: 1 +Prop-content-length: 83 +Content-length: 83 + +K 10 +svn:author +V 7 +jrandom +K 7 +svn:log +V 27 +Log message for revision 1. +PROPS-END + +Node-path: A +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: A/B +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: A/B/E +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: A/B/E/alpha +Node-kind: file +Node-action: add +Text-content-md5: d1fa4a3ced98961674a441930a51f2d3 +Text-content-sha1: b347d1da69df9a6a70433ceeaa0d46c8483e8c03 +Prop-content-length: 10 +Text-content-length: 26 +Content-length: 36 + +PROPS-END +This is the file 'alpha'. + + +Node-path: A/B/E/beta +Node-kind: file +Node-action: add +Text-content-md5: 67c756078f24f946f6ec2d00d02f50e1 +Text-content-sha1: d001710ac8e622c6d1fe59b1e265a3908acdd2a3 +Prop-content-length: 10 +Text-content-length: 25 +Content-length: 35 + +PROPS-END +This is the file 'beta'. + + +Node-path: A/B/F +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: A/B/lambda +Node-kind: file +Node-action: add +Text-content-md5: 911c7a8d869b8c1e566f57da54d889c6 +Text-content-sha1: 784a9298366863da2b65ebf82b4e1123755a2421 +Prop-content-length: 10 +Text-content-length: 27 +Content-length: 37 + +PROPS-END +This is the file 'lambda'. + + +Node-path: A/C +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: A/D +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: A/D/G +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: A/D/G/pi +Node-kind: file +Node-action: add +Text-content-md5: adddfc3e6b605b5f90ceeab11b4e8ab6 +Text-content-sha1: 411e258dc14b42701fdc29b75f653e93f8686415 +Prop-content-length: 10 +Text-content-length: 23 +Content-length: 33 + +PROPS-END +This is the file 'pi'. + + +Node-path: A/D/G/rho +Node-kind: file +Node-action: add +Text-content-md5: 82f2211cf4ab22e3555fc7b835fbc604 +Text-content-sha1: 56388a031dffbf9df7c32e1f299b1d5d7ef60881 +Prop-content-length: 10 +Text-content-length: 24 +Content-length: 34 + +PROPS-END +This is the file 'rho'. + + +Node-path: A/D/G/tau +Node-kind: file +Node-action: add +Text-content-md5: 9936e2716e469bb686deb98c280ead58 +Text-content-sha1: 62e8c07d56bee94ea4577e80414fa8805aaf0175 +Prop-content-length: 10 +Text-content-length: 24 +Content-length: 34 + +PROPS-END +This is the file 'tau'. + + +Node-path: A/D/H +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: A/D/H/chi +Node-kind: file +Node-action: add +Text-content-md5: 8f5ebad6d1f7775c2682e54417cbe4d3 +Text-content-sha1: abeac1bf62099ab66b44779198dc19f40e3244f4 +Prop-content-length: 10 +Text-content-length: 24 +Content-length: 34 + +PROPS-END +This is the file 'chi'. + + +Node-path: A/D/H/omega +Node-kind: file +Node-action: add +Text-content-md5: fe4ec8bdd3d2056db4f55b474a10fadc +Text-content-sha1: c06e671bf15a6af55086176a0931d3b5034c82e6 +Prop-content-length: 10 +Text-content-length: 26 +Content-length: 36 + +PROPS-END +This is the file 'omega'. + + +Node-path: A/D/H/psi +Node-kind: file +Node-action: add +Text-content-md5: e81f8f68ba50e749c200cb3c9ce5d2b1 +Text-content-sha1: 9c438bde39e8ccbbd366df2638e3cb6700950204 +Prop-content-length: 10 +Text-content-length: 24 +Content-length: 34 + +PROPS-END +This is the file 'psi'. + + +Node-path: A/D/gamma +Node-kind: file +Node-action: add +Text-content-md5: 412138bd677d64cd1c32fafbffe6245d +Text-content-sha1: 74b75d7f2e1a0292f17d5a57c570bd89783f5d1c +Prop-content-length: 10 +Text-content-length: 26 +Content-length: 36 + +PROPS-END +This is the file 'gamma'. + + +Node-path: A/mu +Node-kind: file +Node-action: add +Text-content-md5: baf78ae06a2d5b7d9554c5f1280d3fa8 +Text-content-sha1: b4d00c56351d1a752e24d839d41a362d8da4a4c7 +Prop-content-length: 10 +Text-content-length: 23 +Content-length: 33 + +PROPS-END +This is the file 'mu'. + + +Node-path: iota +Node-kind: file +Node-action: add +Text-content-md5: 2d18c5e57e84c5b8a5e9a6e13fa394dc +Text-content-sha1: 2c0aa9014a0cd07f01795a333d82485ef6d083e2 +Prop-content-length: 10 +Text-content-length: 25 +Content-length: 35 + +PROPS-END +This is the file 'iota'. + + +Revision-number: 2 +Prop-content-length: 68 +Content-length: 68 + +K 10 +svn:author +V 7 +jrandom +K 7 +svn:log +V 12 +Create trunk +PROPS-END + +Node-path: subversion +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: subversion/branches +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: subversion/tags +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: subversion/trunk +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: subversion/trunk/A +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 1 +Node-copyfrom-path: A + + +Node-path: subversion/trunk/iota +Node-kind: file +Node-action: add +Node-copyfrom-rev: 1 +Node-copyfrom-path: iota +Text-copy-source-md5: 2d18c5e57e84c5b8a5e9a6e13fa394dc +Text-copy-source-sha1: 2c0aa9014a0cd07f01795a333d82485ef6d083e2 + + +Node-path: A +Node-action: delete + + +Node-path: iota +Node-action: delete + + +Revision-number: 3 +Prop-content-length: 87 +Content-length: 87 + +K 10 +svn:author +V 7 +jrandom +K 7 +svn:log +V 31 +Create branch, with STATUS file +PROPS-END + +Node-path: branch +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 2 +Node-copyfrom-path: subversion/trunk + + +Node-path: branch/STATUS +Node-kind: file +Node-action: add +Text-content-md5: d41d8cd98f00b204e9800998ecf8427e +Text-content-sha1: da39a3ee5e6b4b0d3255bfef95601890afd80709 +Prop-content-length: 10 +Text-content-length: 0 +Content-length: 10 + +PROPS-END + + +Revision-number: 4 +Prop-content-length: 68 +Content-length: 68 + +K 10 +svn:author +V 7 +jrandom +K 7 +svn:log +V 12 +First change +PROPS-END + +Node-path: subversion/trunk/iota +Node-kind: file +Node-action: change +Text-content-md5: 67f471c2ecc2c9e561d122d6e6b0f847 +Text-content-sha1: 750accb6e7f880a1d05ce725c19eb60183bb4b26 +Text-content-length: 38 +Content-length: 38 + +This is the file 'iota'. +First change + + +Revision-number: 5 +Prop-content-length: 69 +Content-length: 69 + +K 10 +svn:author +V 7 +jrandom +K 7 +svn:log +V 13 +Second change +PROPS-END + +Node-path: subversion/trunk/A/mu +Node-kind: file +Node-action: change +Text-content-md5: eab751301b4e650c83324dfef4aad667 +Text-content-sha1: ab36cad564c7c50dec5ac1eb0bf879cf4e3a5f99 +Text-content-length: 37 +Content-length: 37 + +This is the file 'mu'. +Second change + + +Revision-number: 6 +Prop-content-length: 67 +Content-length: 67 + +K 10 +svn:author +V 7 +jrandom +K 7 +svn:log +V 11 +Nominate r4 +PROPS-END + +Node-path: branch/STATUS +Node-kind: file +Node-action: change +Text-content-md5: d231ec40c1bf173586fb850acb0df85e +Text-content-sha1: 22e99a1d851ed1e4b5dfed1f18934b039d7f8c22 +Text-content-length: 263 +Content-length: 263 + +Status of 1.8.x: + +Candidate changes: +================== + +Random new subheading: +====================== + +Veto-blocked changes: +===================== + +Approved changes: +================= + + * r4 + default logsummary + Notes: Hello 🗺 + Votes: + +1: jrandom + + + +Revision-number: 7 +Prop-content-length: 153 +Content-length: 153 + +K 10 +svn:author +V 6 +daniel +K 7 +svn:log +V 98 +Merge r4 from trunk: + + * r4 + default logsummary + Notes: Hello 🗺 + Votes: + +1: jrandom + +PROPS-END + +Node-path: branch +Node-kind: dir +Node-action: change +Prop-content-length: 54 +Content-length: 54 + +K 13 +svn:mergeinfo +V 19 +/subversion/trunk:4 +PROPS-END + + +Node-path: branch/STATUS +Node-kind: file +Node-action: change +Text-content-md5: 6f71fec92afeaa5c1ebe02349f548ca9 +Text-content-sha1: eece02003d9c51610249e3fdd0d4e191e02ba3b7 +Text-content-length: 185 +Content-length: 185 + +Status of 1.8.x: + +Candidate changes: +================== + +Random new subheading: +====================== + +Veto-blocked changes: +===================== + +Approved changes: +================= + + +Node-path: branch/iota +Node-kind: file +Node-action: change +Text-content-md5: 67f471c2ecc2c9e561d122d6e6b0f847 +Text-content-sha1: 750accb6e7f880a1d05ce725c19eb60183bb4b26 +Text-content-length: 38 +Content-length: 38 + +This is the file 'iota'. +First change + + Modified: subversion/trunk/tools/dist/detect-conflicting-backports.py URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dist/detect-conflicting-backports.py?rev=1740671&r1=1740670&r2=1740671&view=diff ============================================================================== --- subversion/trunk/tools/dist/detect-conflicting-backports.py (original) +++ subversion/trunk/tools/dist/detect-conflicting-backports.py Sat Apr 23 20:53:47 2016 @@ -69,7 +69,7 @@ if sys.argv[1:]: sys.exit(0) backport.merger.no_local_mods('./STATUS') -sf = backport.status.StatusFile(open('./STATUS')) +sf = backport.status.StatusFile(open('./STATUS', encoding="UTF-8")) ERRORS = collections.defaultdict(list) Modified: subversion/trunk/tools/dist/merge-approved-backports.py URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dist/merge-approved-backports.py?rev=1740671&r1=1740670&r2=1740671&view=diff ============================================================================== --- subversion/trunk/tools/dist/merge-approved-backports.py (original) +++ subversion/trunk/tools/dist/merge-approved-backports.py Sat Apr 23 20:53:47 2016 @@ -40,7 +40,7 @@ if sys.argv[1:]: sys.exit(0) backport.merger.no_local_mods('./STATUS') -sf = backport.status.StatusFile(open('./STATUS')) +sf = backport.status.StatusFile(open('./STATUS', encoding="UTF-8")) # Duplicate sf.paragraphs, since merge() will be removing elements from it. entries_paras = list(sf.entries_paras())