Coverage for debputy/installdeb_emulation.py: 0%

51 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2023-01-22 14:29 +0100

1import os.path 

2import shutil 

3from typing import List, Optional, Tuple 

4 

5from debputy.debhelper_emulation import dhe_generated_file, dhe_pkgfile, dhe_install_path, debhelper_script_subst, \ 

6 dhe_filedoublearray, dhe_autoscript_expanded_snippet, DHConfigFileLine 

7from debputy.maintscript_snippet import STD_CONTROL_SCRIPTS 

8from debputy.packages import BinaryPackage 

9from debputy.substitution import Substitution 

10from debputy.util import PKGNAME_REGEX, PKGVERSION_REGEX, debputy_autoscript_tagline, escape_shell 

11 

12 

13def install_triggers(binary_package: BinaryPackage, root_dir: str) -> None: 

14 dest_file = os.path.join(root_dir, 'DEBIAN', 'triggers') 

15 

16 provided_triggers = dhe_pkgfile(binary_package, 'triggers') 

17 generated_triggers = dhe_generated_file(binary_package, 'triggers', mkdirs=False) 

18 

19 all_trigger_files = [ 

20 f for f in (provided_triggers, generated_triggers) if f is not None and os.path.isfile(f) 

21 ] 

22 

23 if not all_trigger_files: 

24 return 

25 if len(all_trigger_files) == 1: 

26 dhe_install_path(all_trigger_files[0], dest_file, mode=0o0644) 

27 return 

28 with open(dest_file, 'wt') as wfd: 

29 for trigger_file in all_trigger_files: 

30 with open(trigger_file, 'rt') as rfd: 

31 shutil.copyfileobj(rfd, wfd) 

32 os.chmod(trigger_file, 0o644) 

33 

34 

35def _validate_rm_mv_conffile(package: str, 

36 config_line: DHConfigFileLine, 

37 ) -> Tuple[str, str, Optional[str], Optional[str], Optional[str]]: 

38 cmd, *args = config_line.tokens 

39 if '--' in config_line.tokens: 

40 raise ValueError(f'The maintscripts file "{config_line.config_file}" for {package} includes a "--" in line' 

41 f' {config_line.line_no}. The offending line is: {config_line.original_line}') 

42 if cmd == 'rm_conffile': 

43 min_args = 1 

44 max_args = 3 

45 else: 

46 min_args = 2 

47 max_args = 4 

48 if len(args) > max_args or len(args) < min_args: 

49 raise ValueError(f'The "{cmd}" command takes at least {min_args} and at most {max_args} arguments. However,' 

50 f' in "{config_line.config_file}" line {config_line.line_no} (for {package}), there' 

51 f' are {len(args)} arguments. The offending line is: {config_line.original_line}') 

52 

53 obsolete_conffile = args[0] 

54 new_conffile = args[1] if cmd == 'mv_conffile' else None 

55 prior_version = args[min_args] if len(args) > min_args else None 

56 owning_package = args[min_args + 1] if len(args) > min_args + 1 else None 

57 if not obsolete_conffile.startswith('/'): 

58 raise ValueError(f'The (old-)conffile parameter for {cmd} must be absolute (i.e., start with "/"). However,' 

59 f' in "{config_line.config_file}" line {config_line.line_no} (for {package}), it was specified' 

60 f' as "{obsolete_conffile}". The offending line is: {config_line.original_line}') 

61 if new_conffile is not None and not new_conffile.startswith('/'): 

62 raise ValueError(f'The new-conffile parameter for {cmd} must be absolute (i.e., start with "/"). However,' 

63 f' in "{config_line.config_file}" line {config_line.line_no} (for {package}), it was specified' 

64 f' as "{new_conffile}". The offending line is: {config_line.original_line}') 

65 if prior_version is not None and not PKGVERSION_REGEX.fullmatch(prior_version): 

66 raise ValueError(f'The prior-version parameter for {cmd} must be a valid package version (i.e., match' 

67 f' {PKGVERSION_REGEX}). However, in "{config_line.config_file}" line {config_line.line_no}' 

68 f' (for {package}), it was specified as "{prior_version}". The offending line is:' 

69 f' {config_line.original_line}') 

70 if owning_package is not None and not PKGNAME_REGEX.fullmatch(owning_package): 

71 raise ValueError(f'The package parameter for {cmd} must be a valid package name (i.e., match {PKGNAME_REGEX}).' 

72 f' However, in "{config_line.config_file}" line {config_line.line_no} (for {package}), it' 

73 f' was specified as "{owning_package}". The offending line is: {config_line.original_line}') 

74 return cmd, obsolete_conffile, new_conffile, prior_version, owning_package 

75 

76 

77def dh_installdeb_emulation(binary_package: BinaryPackage, 

78 root_dir: str, 

79 ) -> None: 

80 

81 for script in STD_CONTROL_SCRIPTS: 

82 debhelper_script_subst(binary_package, root_dir, script, None) 

83 

84 install_triggers(binary_package, root_dir)