Author: futatuki Date: Fri Oct 23 09:31:25 2020 New Revision: 1882780 URL: http://svn.apache.org/viewvc?rev=1882780&view=rev Log: Avoid UnicodeDecodeError when svnlook returns error message.
* tools/backup/hot-backup.py.in (): Import locale moule for locale.getpreferredencoding. (get_youngest_revision): Use str for I/O in subprocess.Popen on Python 3. Modified: subversion/trunk/tools/backup/hot-backup.py.in Modified: subversion/trunk/tools/backup/hot-backup.py.in URL: http://svn.apache.org/viewvc/subversion/trunk/tools/backup/hot-backup.py.in?rev=1882780&r1=1882779&r2=1882780&view=diff ============================================================================== --- subversion/trunk/tools/backup/hot-backup.py.in (original) +++ subversion/trunk/tools/backup/hot-backup.py.in Fri Oct 23 09:31:25 2020 @@ -36,6 +36,7 @@ ###################################################################### import sys, os, getopt, stat, re, time, shutil, subprocess +import locale import functools ###################################################################### @@ -204,10 +205,18 @@ def get_youngest_revision(): """Examine the repository REPO_DIR using the svnlook binary specified by SVNLOOK, and return the youngest revision.""" - p = subprocess.Popen([svnlook, 'youngest', '--', repo_dir], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) + if b'' == '': + p = subprocess.Popen([svnlook, 'youngest', '--', repo_dir], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + else: + p = subprocess.Popen([svnlook, 'youngest', '--', repo_dir], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + errors='backslashreplace', # foolproof + encoding=locale.getpreferredencoding()) infile, outfile, errfile = p.stdin, p.stdout, p.stderr stdout_lines = outfile.readlines() @@ -220,7 +229,7 @@ def get_youngest_revision(): raise Exception("Unable to find the youngest revision for repository '%s'" ": %s" % (repo_dir, stderr_lines[0].rstrip())) - return stdout_lines[0].strip().decode() + return stdout_lines[0].strip() ###################################################################### # Main