kopia lustrzana https://github.com/jupyterhub/repo2docker
Merge pull request #1205 from sgaist/implement_dockerignore_support
Implement support for dockerignore and containerignorepull/1331/head
commit
6aad2bcce2
|
@ -11,6 +11,7 @@ from functools import lru_cache
|
||||||
|
|
||||||
import escapism
|
import escapism
|
||||||
import jinja2
|
import jinja2
|
||||||
|
from docker.utils.build import exclude_paths
|
||||||
|
|
||||||
# Only use syntax features supported by Docker 17.09
|
# Only use syntax features supported by Docker 17.09
|
||||||
TEMPLATE = r"""
|
TEMPLATE = r"""
|
||||||
|
@ -590,16 +591,16 @@ class BuildPack:
|
||||||
|
|
||||||
tar.addfile(dockerfile_tarinfo, io.BytesIO(dockerfile))
|
tar.addfile(dockerfile_tarinfo, io.BytesIO(dockerfile))
|
||||||
|
|
||||||
def _filter_tar(tar):
|
def _filter_tar(tarinfo):
|
||||||
# We need to unset these for build_script_files we copy into tar
|
# We need to unset these for build_script_files we copy into tar
|
||||||
# Otherwise they seem to vary each time, preventing effective use
|
# Otherwise they seem to vary each time, preventing effective use
|
||||||
# of the cache!
|
# of the cache!
|
||||||
# https://github.com/docker/docker-py/pull/1582 is related
|
# https://github.com/docker/docker-py/pull/1582 is related
|
||||||
tar.uname = ""
|
tarinfo.uname = ""
|
||||||
tar.gname = ""
|
tarinfo.gname = ""
|
||||||
tar.uid = int(build_args.get("NB_UID", DEFAULT_NB_UID))
|
tarinfo.uid = int(build_args.get("NB_UID", DEFAULT_NB_UID))
|
||||||
tar.gid = int(build_args.get("NB_UID", DEFAULT_NB_UID))
|
tarinfo.gid = int(build_args.get("NB_UID", DEFAULT_NB_UID))
|
||||||
return tar
|
return tarinfo
|
||||||
|
|
||||||
for src in sorted(self.get_build_script_files()):
|
for src in sorted(self.get_build_script_files()):
|
||||||
dest_path, src_path = self.generate_build_context_filename(src)
|
dest_path, src_path = self.generate_build_context_filename(src)
|
||||||
|
@ -608,7 +609,34 @@ class BuildPack:
|
||||||
for fname in ("repo2docker-entrypoint", "python3-login"):
|
for fname in ("repo2docker-entrypoint", "python3-login"):
|
||||||
tar.add(os.path.join(HERE, fname), fname, filter=_filter_tar)
|
tar.add(os.path.join(HERE, fname), fname, filter=_filter_tar)
|
||||||
|
|
||||||
tar.add(".", "src/", filter=_filter_tar)
|
exclude = []
|
||||||
|
|
||||||
|
for ignore_file_name in [".dockerignore", ".containerignore"]:
|
||||||
|
ignore_file_name = self.binder_path(ignore_file_name)
|
||||||
|
if os.path.exists(ignore_file_name):
|
||||||
|
with open(ignore_file_name) as ignore_file:
|
||||||
|
cleaned_lines = [
|
||||||
|
line.strip() for line in ignore_file.read().splitlines()
|
||||||
|
]
|
||||||
|
exclude.extend(
|
||||||
|
[
|
||||||
|
line
|
||||||
|
for line in cleaned_lines
|
||||||
|
if line != "" and line[0] != "#"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
files_to_add = exclude_paths(".", exclude)
|
||||||
|
|
||||||
|
if files_to_add:
|
||||||
|
for item in files_to_add:
|
||||||
|
tar.add(item, f"src/{item}", filter=_filter_tar)
|
||||||
|
else:
|
||||||
|
# Either the source was empty or everything was filtered out.
|
||||||
|
# In any case, create an src dir so the build can proceed.
|
||||||
|
src = tarfile.TarInfo("src")
|
||||||
|
src.type = tarfile.DIRTYPE
|
||||||
|
tar.addfile(src)
|
||||||
|
|
||||||
tar.close()
|
tar.close()
|
||||||
tarf.seek(0)
|
tarf.seek(0)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
binder/
|
|
@ -0,0 +1 @@
|
||||||
|
binder/
|
Ładowanie…
Reference in New Issue