Coverage for dlabel/dockerfile.py: 74%

35 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-07-26 23:07 +0000

1from logging import getLogger 

2 

3import docker 

4 

5from .util import get_archives, get_diff 

6 

7_log = getLogger(__name__) 

8 

9 

10def get_dockerfile( 

11 container: docker.models.containers.Container, ignore, labels, do_output: bool 

12): 

13 """make Dockerfile from running container""" 

14 import shlex 

15 

16 deleted, added, modified, link = get_diff(container, ignore) 

17 if do_output: 17 ↛ 18line 17 didn't jump to line 18 because the condition on line 17 was never true

18 ignore_str = """* 

19!added.tar.gz 

20!modified.tar.gz 

21""" 

22 yield ".dockerignore", ignore_str.encode() 

23 added_tar = get_archives(container, added, ignore) 

24 if added_tar: 

25 yield "added.tar.gz", added_tar 

26 modified_tar = get_archives(container, modified, ignore) 

27 if modified_tar: 

28 yield "modified.tar.gz", modified_tar 

29 from_image = container.attrs.get("Config", {}).get("Image") 

30 res: list[str] = [] 

31 res.append(f"FROM {from_image}") 

32 if deleted: 

33 res.append("RUN rm -rf " + shlex.join(sorted(deleted))) 

34 if added: 

35 res.append("ADD added.tar.gz /") 

36 if modified: 

37 res.append("ADD modified.tar.gz /") 

38 for k, v in sorted(link.items()): 38 ↛ 39line 38 didn't jump to line 39 because the loop on line 38 never started

39 res.append(f"RUN ln -sf {shlex.quote(v)} {shlex.quote(k)}") 

40 if labels: 

41 image_labels = container.image.labels 

42 for k, v in container.labels.items(): 

43 if k.startswith("com.docker.compose."): 

44 continue 

45 if image_labels.get(k) != v: 

46 res.append(f"LABEL {shlex.quote(k)}={shlex.quote(v)}") 

47 yield "Dockerfile", "\n".join(res + [""]).encode()