mirror of https://github.com/docker/docker-py.git
Use tempfiles instead of memfiles for build contexts
This commit is contained in:
parent
c31ce82d2c
commit
d0c54361d9
|
@ -6,6 +6,7 @@ import re
|
||||||
import six
|
import six
|
||||||
import shlex
|
import shlex
|
||||||
import tarfile
|
import tarfile
|
||||||
|
import tempfile
|
||||||
import six
|
import six
|
||||||
import httplib
|
import httplib
|
||||||
import socket
|
import socket
|
||||||
|
@ -121,27 +122,25 @@ class Client(requests.Session):
|
||||||
}
|
}
|
||||||
|
|
||||||
def _mkbuildcontext(self, dockerfile):
|
def _mkbuildcontext(self, dockerfile):
|
||||||
memfile = StringIO()
|
f = tempfile.TemporaryFile()
|
||||||
try:
|
t = tarfile.open(mode='w', fileobj=f)
|
||||||
t = tarfile.open(mode='w', fileobj=memfile)
|
if isinstance(dockerfile, StringIO):
|
||||||
if isinstance(dockerfile, StringIO):
|
dfinfo = tarfile.TarInfo('Dockerfile')
|
||||||
dfinfo = tarfile.TarInfo('Dockerfile')
|
dfinfo.size = dockerfile.len
|
||||||
dfinfo.size = dockerfile.len
|
else:
|
||||||
else:
|
dfinfo = t.gettarinfo(fileobj=dockerfile, arcname='Dockerfile')
|
||||||
dfinfo = t.gettarinfo(fileobj=dockerfile, arcname='Dockerfile')
|
t.addfile(dfinfo, dockerfile)
|
||||||
t.addfile(dfinfo, dockerfile)
|
t.close()
|
||||||
return memfile.getvalue()
|
f.seek(0)
|
||||||
finally:
|
return f
|
||||||
memfile.close()
|
|
||||||
|
|
||||||
def _tar(self, path):
|
def _tar(self, path):
|
||||||
memfile = StringIO()
|
f = tempfile.TemporaryFile()
|
||||||
try:
|
t = tarfile.open(mode='w', fileobj=f)
|
||||||
t = tarfile.open(mode='w', fileobj=memfile)
|
t.add(path, arcname='.')
|
||||||
t.add(path, arcname='.')
|
t.close()
|
||||||
return memfile.getvalue()
|
f.seek(0)
|
||||||
finally:
|
return f
|
||||||
memfile.close()
|
|
||||||
|
|
||||||
def _post_json(self, url, data, **kwargs):
|
def _post_json(self, url, data, **kwargs):
|
||||||
# Go <1.1 can't unserialize null to a string
|
# Go <1.1 can't unserialize null to a string
|
||||||
|
@ -233,6 +232,8 @@ class Client(requests.Session):
|
||||||
headers = { 'Content-Type': 'application/tar' }
|
headers = { 'Content-Type': 'application/tar' }
|
||||||
res = self._result(self.post(u, context, params=params,
|
res = self._result(self.post(u, context, params=params,
|
||||||
headers=headers, stream=True))
|
headers=headers, stream=True))
|
||||||
|
if context is not None:
|
||||||
|
context.close()
|
||||||
srch = r'Successfully built ([0-9a-f]+)'
|
srch = r'Successfully built ([0-9a-f]+)'
|
||||||
match = re.search(srch, res)
|
match = re.search(srch, res)
|
||||||
if not match:
|
if not match:
|
||||||
|
|
Loading…
Reference in New Issue