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
« 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
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
13def install_triggers(binary_package: BinaryPackage, root_dir: str) -> None:
14 dest_file = os.path.join(root_dir, 'DEBIAN', 'triggers')
16 provided_triggers = dhe_pkgfile(binary_package, 'triggers')
17 generated_triggers = dhe_generated_file(binary_package, 'triggers', mkdirs=False)
19 all_trigger_files = [
20 f for f in (provided_triggers, generated_triggers) if f is not None and os.path.isfile(f)
21 ]
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)
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}')
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
77def dh_installdeb_emulation(binary_package: BinaryPackage,
78 root_dir: str,
79 ) -> None:
81 for script in STD_CONTROL_SCRIPTS:
82 debhelper_script_subst(binary_package, root_dir, script, None)
84 install_triggers(binary_package, root_dir)