commit:     386f0b197e4d2fe0170058163c932a463bad1e82
Author:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Sat Dec  9 20:48:50 2023 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Sat Dec  9 20:48:50 2023 +0000
URL:        
https://gitweb.gentoo.org/proj/pkgcore/pkgdev.git/commit/?id=386f0b19

tatt: add support for extra env files

Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>

 data/share/bash-completion/completions/pkgdev | 11 +++++++++++
 src/pkgdev/scripts/pkgdev_tatt.py             | 26 +++++++++++++++++++++++++-
 src/pkgdev/tatt/template.sh.jinja             |  3 +++
 3 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/data/share/bash-completion/completions/pkgdev 
b/data/share/bash-completion/completions/pkgdev
index 4bc29e7..bbad831 100644
--- a/data/share/bash-completion/completions/pkgdev
+++ b/data/share/bash-completion/completions/pkgdev
@@ -214,6 +214,7 @@ _pkgdev() {
                 --template-file
                 --logs-dir
                 --emerge-opts
+                --extra-env-file
             "
 
             case "${prev}" in
@@ -226,6 +227,16 @@ _pkgdev() {
                 --logs-dir)
                     COMPREPLY=($(compgen -d -- "${cur}"))
                     ;;
+                --extra-env-file)
+                    if [[ -d /etc/portage/env/ ]]; then
+                        pushd /etc/portage/env/ >& /dev/null
+                        local SETS=( * )
+                        COMPREPLY=($(compgen -W "${SETS[*]}" -- "${cur}" ))
+                        popd >& /dev/null
+                    else
+                        COMPREPLY=()
+                    fi
+                    ;;
                 *)
                     COMPREPLY+=($(compgen -W "${subcmd_options}" -- "${cur}"))
                     ;;

diff --git a/src/pkgdev/scripts/pkgdev_tatt.py 
b/src/pkgdev/scripts/pkgdev_tatt.py
index 16b2bc6..37454fc 100644
--- a/src/pkgdev/scripts/pkgdev_tatt.py
+++ b/src/pkgdev/scripts/pkgdev_tatt.py
@@ -150,6 +150,11 @@ template_opts.add_argument(
                 Options to be passed to emerge invocations. Taken from
                 ``--emerge-opts``.
 
+            ``extra_env_files``
+                A list of extra /etc/portage/env/ file names, to be added to
+                ``package.env`` entry when testing the package. Taken from
+                ``--extra-env-file``.
+
             ``log_dir``
                 irectory to save build logs for failing tasks. Taken from
                 ``--logs-dir``.
@@ -172,6 +177,17 @@ template_opts.add_argument(
         to ``emerge`` invocations.
     """,
 )
+template_opts.add_argument(
+    "--extra-env-file",
+    default=[],
+    metavar="ENV_FILE",
+    action=arghparse.CommaSeparatedValuesAppend,
+    help="Extra /etc/portage/env/ file names, to be used while testing 
packages. Can be passed multiple times.",
+    docs="""
+        Comma separated filenames under /etc/portage/env/, which will all be
+        included in the package.env entry when testing the package.
+    """,
+)
 
 portage_config = Path("/etc/portage")
 portage_accept_keywords = portage_config / "package.accept_keywords"
@@ -180,6 +196,13 @@ portage_package_env = portage_config / "package.env"
 portage_env = portage_config / "env"
 
 
+@tatt.bind_final_check
+def _tatt_validate(parser, namespace):
+    for filename in namespace.extra_env_file:
+        if not (env_file := portage_env / filename).exists():
+            parser.error(f"extra env file '{env_file}' doesn't exist")
+
+
 @tatt.bind_final_check
 def _validate_args(parser, namespace):
     if namespace.bug is not None:
@@ -254,7 +277,7 @@ def _groupby_use_expand(
     return use_flags, use_expand_dict
 
 
-def _build_job(namespace, pkg, is_test):
+def _build_job(namespace, pkg, is_test: bool):
     use_expand_prefixes = tuple(s.lower() + "_" for s in 
namespace.domain.profile.use_expand)
     default_on_iuse = tuple(use[1:] for use in pkg.iuse if use.startswith("+"))
     immutable, enabled, _disabled = 
namespace.domain.get_package_use_unconfigured(pkg)
@@ -373,6 +396,7 @@ def main(options, out, err):
         job_name=job_name,
         log_dir=options.logs_dir,
         emerge_opts=options.emerge_opts,
+        extra_env_files=options.extra_env_file,
         cleanup_files=cleanup_files,
     )
     with open(script_name := job_name + ".sh", "w") as output:

diff --git a/src/pkgdev/tatt/template.sh.jinja 
b/src/pkgdev/tatt/template.sh.jinja
index 1123822..5c9d6fb 100644
--- a/src/pkgdev/tatt/template.sh.jinja
+++ b/src/pkgdev/tatt/template.sh.jinja
@@ -102,6 +102,9 @@ tatt_test_pkg() {
         printf "%s pkgdev_tatt_{{ job_name }}_no_test\n" "${1:?}" > 
"/etc/portage/package.env/pkgdev_tatt_{{ job_name }}/${CP}"
         local TFEATURES="${FEATURES}"
     fi
+    {% for env in extra_env_files %}
+    printf "%s {{env}}\n" "${1}" >> "/etc/portage/package.env/pkgdev_tatt_{{ 
job_name }}/${CP}"
+    {% endfor %}
 
     printf "%s %s\n" "${1:?}" "${TUSE}" > 
"/etc/portage/package.use/pkgdev_tatt_{{ job_name }}/${CP}"
 

Reply via email to