aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar treuherz <e.treuherz@gmail.com>2018-01-26 12:38:01 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-26 12:39:57 -0800
commit6fff4da5f5e436551aa9294b58960da1d64af39a (patch)
treee9bcf78b552e9338e6f9bf89a637c52713078ff0 /tools
parentc6d7607ec5bddb3db14e10050144a95469e9bcc6 (diff)
Make pkg defs Python 2/3 compatible
Use BytesIO instead of StringIO, change strings to bytes throughout the archiving code. Needed to import from Six in a couple of places. As discussed in #1580 Closes #3850. PiperOrigin-RevId: 183429066
Diffstat (limited to 'tools')
-rw-r--r--tools/build_defs/pkg/make_deb.py38
1 files changed, 21 insertions, 17 deletions
diff --git a/tools/build_defs/pkg/make_deb.py b/tools/build_defs/pkg/make_deb.py
index c734536a3c..d6ae54b24c 100644
--- a/tools/build_defs/pkg/make_deb.py
+++ b/tools/build_defs/pkg/make_deb.py
@@ -15,8 +15,8 @@
import gzip
import hashlib
+from io import BytesIO
import os.path
-from StringIO import StringIO
import sys
import tarfile
import textwrap
@@ -93,16 +93,20 @@ def AddArFileEntry(fileobj, filename,
content='', timestamp=0,
owner_id=0, group_id=0, mode=0o644):
"""Add a AR file entry to fileobj."""
- fileobj.write((filename + '/').ljust(16)) # filename (SysV)
- fileobj.write(str(timestamp).ljust(12)) # timestamp
- fileobj.write(str(owner_id).ljust(6)) # owner id
- fileobj.write(str(group_id).ljust(6)) # group id
- fileobj.write(oct(mode).ljust(8)) # mode
- fileobj.write(str(len(content)).ljust(10)) # size
- fileobj.write('\x60\x0a') # end of file entry
+ inputs = [
+ (filename + '/').ljust(16), # filename (SysV)
+ str(timestamp).ljust(12), # timestamp
+ str(owner_id).ljust(6), # owner id
+ str(group_id).ljust(6), # group id
+ oct(mode).ljust(8), # mode
+ str(len(content)).ljust(10), # size
+ '\x60\x0a', # end of file entry
+ ]
+ for i in inputs:
+ fileobj.write(i.encode('ascii'))
fileobj.write(content)
if len(content) % 2 != 0:
- fileobj.write('\n') # 2-byte alignment padding
+ fileobj.write(b'\n') # 2-byte alignment padding
def MakeDebianControlField(name, value, wrap=False):
@@ -130,18 +134,18 @@ def CreateDebControl(extrafiles=None, **kwargs):
if values[1] or (key in kwargs and kwargs[key]):
controlfile += MakeDebianControlField(fieldname, kwargs[key], values[2])
# Create the control.tar file
- tar = StringIO()
+ tar = BytesIO()
with gzip.GzipFile('control.tar.gz', mode='w', fileobj=tar, mtime=0) as gz:
with tarfile.open('control.tar.gz', mode='w', fileobj=gz) as f:
tarinfo = tarfile.TarInfo('control')
tarinfo.size = len(controlfile)
- f.addfile(tarinfo, fileobj=StringIO(controlfile))
+ f.addfile(tarinfo, fileobj=BytesIO(controlfile.encode('utf-8')))
if extrafiles:
for name, (data, mode) in extrafiles.items():
tarinfo = tarfile.TarInfo(name)
tarinfo.size = len(data)
tarinfo.mode = mode
- f.addfile(tarinfo, fileobj=StringIO(data))
+ f.addfile(tarinfo, fileobj=BytesIO(data.encode('utf-8')))
control = tar.getvalue()
tar.close()
return control
@@ -170,9 +174,9 @@ def CreateDeb(output,
control = CreateDebControl(extrafiles=extrafiles, **kwargs)
# Write the final AR archive (the deb package)
- with open(output, 'w') as f:
- f.write('!<arch>\n') # Magic AR header
- AddArFileEntry(f, 'debian-binary', '2.0\n')
+ with open(output, 'wb') as f:
+ f.write(b'!<arch>\n') # Magic AR header
+ AddArFileEntry(f, 'debian-binary', b'2.0\n')
AddArFileEntry(f, 'control.tar.gz', control)
# Tries to preserve the extension name
ext = os.path.basename(data).split('.')[-2:]
@@ -186,7 +190,7 @@ def CreateDeb(output,
ext = '.'.join(ext)
if ext not in ['tar.bz2', 'tar.gz', 'tar.xz', 'tar.lzma']:
ext = 'tar'
- with open(data, 'r') as datafile:
+ with open(data, 'rb') as datafile:
data = datafile.read()
AddArFileEntry(f, 'data.' + ext, data)
@@ -206,7 +210,7 @@ def GetChecksumsFromFile(filename, hash_fns=None):
hash_fns = hash_fns or {'md5': hashlib.md5}
checksums = {k: fn() for (k, fn) in hash_fns.items()}
- with open(filename) as file_handle:
+ with open(filename, 'rb') as file_handle:
while True:
buf = file_handle.read(1048576) # 1 MiB
if not buf: