From d5a37b6ad51fa9e2bc2c9b44d68fb1a59be7f29b Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Aug 26 2020 10:21:32 +0000 Subject: [PATCH 1/8] remove systemd and python2 from spec --- diff --git a/koji.spec b/koji.spec index 6d3b2ae..00b0210 100644 --- a/koji.spec +++ b/koji.spec @@ -1,78 +1,8 @@ -%bcond_without python3 -%bcond_without python2 %global _python_bytecompile_extra 0 -# We can build varying amounts of Koji for python2 and python3 based on -# the py[23]_support macro values. Valid values are: -# undefined or 0 -- do not build -# 1 -- build just the cli and lib -# 2 -- build everything we can -# For executable scripts, py3 wins if we build it -# The following rules tweak these settings based on options and environment - -# Default to building both fully -%define py2_support 2 -%define py3_support 2 - -%if 0%{?rhel} >= 8 -# and no python2 on rhel8+ -%define py2_support 0 -%else -%if 0%{?rhel} -# No python3 for older rhel -%define py3_support 0 -%endif -%endif - -%if 0%{?fedora} >= 33 -# no py2 after F33 -%define py2_support 0 -%define py3_support 2 -%else -%if 0%{?fedora} >= 30 -%define py2_support 1 -%define py3_support 2 -%else -%if 0%{?fedora} -# match what the older Fedoras already have -%define py2_support 2 -%define py3_support 1 -%endif -%endif -%endif - -# Lastly enforce the bcond parameters -%if %{without python2} -%define py2_support 0 -%endif -%if %{without python3} -%define py3_support 0 -%endif - -%if ! %{py2_support} -# use python3 -%define __python %{__python3} -%endif - -# Compatibility with RHEL. These macros have been added to EPEL but -# not yet to RHEL proper. -# https://bugzilla.redhat.com/show_bug.cgi?id=1307190 -%{!?__python2: %global __python2 /usr/bin/python2} -%{!?python2_sitelib: %global python2_sitelib %(%{__python2} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} -%{!?python2_sitearch: %global python2_sitearch %(%{__python2} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} -%{!?py2_build: %global py2_build %{expand: CFLAGS="%{optflags}" %{__python2} setup.py %{?py_setup_args} build --executable="%{__python2} -s"}} -%{!?py2_install: %global py2_install %{expand: CFLAGS="%{optflags}" %{__python2} setup.py %{?py_setup_args} install -O1 --skip-build --root %{buildroot}}} - # If the definition isn't available for python3_pkgversion, define it %{?!python3_pkgversion:%global python3_pkgversion 3} -%if 0%{?fedora} || 0%{?rhel} >= 7 -%global use_systemd 1 -%else -%global use_systemd 0 -%global install_opt TYPE=sysv -%endif - %define baserelease 1 #build with --define 'testbuild 1' to have a timestamp appended to release %if "x%{?testbuild}" == "x1" @@ -91,49 +21,16 @@ URL: https://pagure.io/koji Source: https://releases.pagure.org/koji/koji-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch -%if 0%{py3_support} Requires: python%{python3_pkgversion}-%{name} = %{version}-%{release} Requires: python%{python3_pkgversion}-libcomps -%else -Requires: python2-%{name} = %{version}-%{release} -%if 0%{?fedora} || 0%{?rhel} >= 7 -Requires: python-libcomps -%endif -%endif -%if %{use_systemd} BuildRequires: systemd BuildRequires: pkgconfig -%endif + %description Koji is a system for building and tracking RPMS. The base package contains shared libraries and the command-line interface. -%if 0%{py2_support} -%package -n python2-%{name} -Summary: Build system tools python library -%{?python_provide:%python_provide python2-%{name}} -%if 0%{?fedora} >= 30 -BuildRequires: python2-devel -%else -BuildRequires: python-devel -%endif -%if 0%{?fedora} || 0%{?rhel} >= 8 -Requires: python2-rpm -%else -Requires: rpm-python -%endif -Requires: pyOpenSSL -Requires: python-requests -Requires: python-requests-kerberos -Requires: python-dateutil -Requires: python-six - -%description -n python2-%{name} -desc -%endif - -%if 0%{py3_support} %package -n python%{python3_pkgversion}-%{name} Summary: Build system tools python library %{?python_provide:%python_provide python%{python3_pkgversion}-%{name}} @@ -155,22 +52,7 @@ Requires: python%{python3_pkgversion}-six %description -n python%{python3_pkgversion}-%{name} desc -%endif -%if 0%{py2_support} -%package -n python2-%{name}-cli-plugins -Summary: Koji client plugins -Group: Applications/Internet -License: LGPLv2 -Requires: python2-%{name} = %{version}-%{release} -Obsoletes: python2-%{name}-sidetag-plugin-cli < %{version}-%{release} -Provides: python2-%{name}-sidetag-plugin-cli = %{version}-%{release} - -%description -n python2-%{name}-cli-plugins -Plugins to the koji command-line interface -%endif - -%if 0%{py3_support} %package -n python%{python3_pkgversion}-%{name}-cli-plugins Summary: Koji client plugins Group: Applications/Internet @@ -181,9 +63,7 @@ Provides: python%{python3_pkgversion}-%{name}-sidetag-plugin-cli = %{version}-%{ %description -n python%{python3_pkgversion}-%{name}-cli-plugins Plugins to the koji command-line interface -%endif -%if 0%{py3_support} > 1 %package hub Summary: Koji XMLRPC interface Group: Applications/Internet @@ -241,7 +121,6 @@ Provides: python%{python3_pkgversion}-%{name}-sidetag-plugin-hub = %{version}-%{ %description -n python%{python3_pkgversion}-%{name}-hub-plugins Plugins to the koji XMLRPC interface -%endif %package builder-plugins Summary: Koji builder plugins @@ -261,30 +140,17 @@ License: LGPLv2 and GPLv2+ Requires: mock >= 0.9.14 Requires(pre): /usr/sbin/useradd Requires: squashfs-tools -%if %{use_systemd} Requires(post): systemd Requires(preun): systemd Requires(postun): systemd -%else -Requires(post): /sbin/chkconfig -Requires(post): /sbin/service -Requires(preun): /sbin/chkconfig -Requires(preun): /sbin/service -%endif Requires: /usr/bin/cvs Requires: /usr/bin/svn Requires: /usr/bin/git Requires: createrepo >= 0.9.2 -%if 0%{py3_support} > 1 Requires: python%{python3_pkgversion}-%{name} = %{version}-%{release} Requires: python%{python3_pkgversion}-librepo Requires: python%{python3_pkgversion}-multilib Requires: python%{python3_pkgversion}-cheetah -%else -Requires: python2-%{name} = %{version}-%{release} -Requires: python2-multilib -Requires: python-cheetah -%endif %description builder koji-builder is the daemon that runs on build machines and executes @@ -295,23 +161,11 @@ Summary: Koji virtual machine management daemon Group: Applications/System License: LGPLv2 Requires: %{name} = %{version}-%{release} -%if %{use_systemd} Requires(post): systemd Requires(preun): systemd Requires(postun): systemd -%else -Requires(post): /sbin/chkconfig -Requires(post): /sbin/service -Requires(preun): /sbin/chkconfig -Requires(preun): /sbin/service -%endif -%if 0%{py3_support} > 1 Requires: python%{python3_pkgversion}-libvirt Requires: python%{python3_pkgversion}-libxml2 -%else -Requires: libvirt-python -Requires: libxml2-python -%endif Requires: /usr/bin/virt-clone Requires: qemu-img @@ -324,25 +178,16 @@ Summary: Koji Utilities Group: Applications/Internet License: LGPLv2 Requires: %{name} = %{version}-%{release} -%if 0%{py3_support} > 1 Requires: python%{python3_pkgversion}-psycopg2 Obsoletes: python%{python3_pkgversion}-koji-sidetag-plugin-tools < %{version}-%{release} Provides: python%{python3_pkgversion}-koji-sidetag-plugin-tools = %{version}-%{release} -%else -Requires: python-psycopg2 -Obsoletes: python2-koji-sidetag-plugin-tools < %{version}-%{release} -Provides: python2-koji-sidetag-plugin-tools = %{version}-%{release} -%endif -%if %{use_systemd} Requires(post): systemd Requires(preun): systemd Requires(postun): systemd -%endif %description utils Utilities for the Koji system -%if 0%{py3_support} > 1 %package web Summary: Koji Web UI Group: Applications/Internet @@ -371,7 +216,6 @@ Provides: %{name}-web-code = %{version}-%{release} %description -n python%{python3_pkgversion}-%{name}-web koji-web is a web UI to the Koji system. -%endif %prep %autosetup -p1 @@ -381,47 +225,17 @@ koji-web is a web UI to the Koji system. %install rm -rf $RPM_BUILD_ROOT -%if 0%{py2_support} < 2 && 0%{py3_support} < 2 -echo "At least one python must be built with full support" -exit 1 -%endif - -# python2 build -%if 0%{py2_support} > 1 -make DESTDIR=$RPM_BUILD_ROOT PYTHON=%{__python2} %{?install_opt} install -%else -%if 0%{py2_support} -for d in koji cli plugins ; do - pushd $d - make DESTDIR=$RPM_BUILD_ROOT KOJI_MINIMAL=1 PYTHON=%{__python2} %{?install_opt} install - popd -done -%endif -%endif - - -# python3 build -%if 0%{py3_support} > 1 -make DESTDIR=$RPM_BUILD_ROOT PYTHON=%{__python3} %{?install_opt} install +make DESTDIR=$RPM_BUILD_ROOT install # alter python interpreter in koji CLI scripts='%{_bindir}/koji %{_sbindir}/kojid %{_sbindir}/kojira %{_sbindir}/koji-shadow %{_sbindir}/koji-gc %{_sbindir}/kojivmd %{_sbindir}/koji-sweep-db %{_sbindir}/koji-sidetag-cleanup' -for fn in $scripts ; do - sed -i 's|#!/usr/bin/python2|#!/usr/bin/python3|' $RPM_BUILD_ROOT$fn -done -%else -%if 0%{py3_support} # minimal for d in koji cli plugins ; do pushd $d - make DESTDIR=$RPM_BUILD_ROOT KOJI_MINIMAL=1 PYTHON=%{__python3} %{?install_opt} install + make DESTDIR=$RPM_BUILD_ROOT KOJI_MINIMAL=1 install popd done -# alter python interpreter in koji CLI -sed -i 's|#!/usr/bin/python2|#!/usr/bin/python3|' $RPM_BUILD_ROOT/usr/bin/koji -%endif -%endif %if 0%{?fedora} # handle extra byte compilation @@ -431,35 +245,10 @@ extra_dirs=' %{_datadir}/koji-hub %{_datadir}/koji-web/lib/kojiweb %{_datadir}/koji-web/scripts' -%if 0%{py2_support} > 1 -for fn in $extra_dirs ; do - %py_byte_compile %{__python2} %{buildroot}$fn -done -%endif -%if 0%{py3_support} > 1 for fn in $extra_dirs ; do %py_byte_compile %{__python3} %{buildroot}$fn done %endif -%endif - -# in case, we're building only py2, delete all py3 content -%if 0%{py3_support} < 1 && 0%{py2_support} > 0 - rm -rf %{buildroot}%{_datadir}/koji-web - rm -rf %{buildroot}%{_datadir}/koji-hub - rm -rf %{buildroot}%{_prefix}/lib/koji-hub-plugins - rm -f %{buildroot}/etc/httpd/conf.d/kojihub.conf - rm -f %{buildroot}/etc/httpd/conf.d/kojiweb.conf - rm -f %{buildroot}/etc/koji-hub/hub.conf - rm -f %{buildroot}/etc/koji-hub/plugins/protonmsg.conf - rm -f %{buildroot}/etc/koji-hub/plugins/rpm2maven.conf - rm -f %{buildroot}/etc/koji-hub/plugins/save_failed_tree.conf - rm -f %{buildroot}/etc/koji-hub/plugins/sidetag.conf - rm -f %{buildroot}/etc/kojiweb/web.conf - rm -f %{buildroot}%{_prefix}/lib/systemd/system/koji-sweep-db.service - rm -f %{buildroot}%{_prefix}/lib/systemd/system/koji-sweep-db.timer - rm -f %{buildroot}%{_prefix}/sbin/koji-sweep-db -%endif %clean rm -rf $RPM_BUILD_ROOT @@ -470,45 +259,24 @@ rm -rf $RPM_BUILD_ROOT %dir /etc/koji.conf.d %doc docs Authors COPYING LGPL -%if 0%{py2_support} -%files -n python2-%{name} -%{python2_sitelib}/%{name} -%{python2_sitelib}/koji_cli -%endif - -%if 0%{py3_support} %files -n python%{python3_pkgversion}-koji %{python3_sitelib}/%{name} %{python3_sitelib}/koji_cli -%endif -%if 0%{py2_support} -%files -n python2-%{name}-cli-plugins -%{python2_sitelib}/koji_cli_plugins -# we don't have config files for default plugins yet -#%%dir %%{_sysconfdir}/koji/plugins -#%%config(noreplace) %%{_sysconfdir}/koji/plugins/*.conf -%endif - -%if 0%{py3_support} %files -n python%{python3_pkgversion}-%{name}-cli-plugins %{python3_sitelib}/koji_cli_plugins # we don't have config files for default plugins yet #%%dir %%{_sysconfdir}/koji/plugins #%%config(noreplace) %%{_sysconfdir}/koji/plugins/*.conf -%endif -%if 0%{py3_support} > 1 %files hub %config(noreplace) /etc/httpd/conf.d/kojihub.conf %dir /etc/koji-hub %config(noreplace) /etc/koji-hub/hub.conf %dir /etc/koji-hub/hub.conf.d %{_sbindir}/koji-sweep-db -%if %{use_systemd} %{_unitdir}/koji-sweep-db.service %{_unitdir}/koji-sweep-db.timer -%endif %files -n python%{python3_pkgversion}-%{name}-hub %{_datadir}/koji-hub/*.py @@ -521,24 +289,19 @@ rm -rf $RPM_BUILD_ROOT %files -n python%{python3_pkgversion}-%{name}-hub-plugins %{_prefix}/lib/koji-hub-plugins/*.py %{_prefix}/lib/koji-hub-plugins/__pycache__ -%endif %files builder-plugins %dir /etc/kojid/plugins %config(noreplace) /etc/kojid/plugins/*.conf %dir %{_prefix}/lib/koji-builder-plugins %{_prefix}/lib/koji-builder-plugins/*.py* -%if 0%{py3_support} > 1 %{_prefix}/lib/koji-builder-plugins/__pycache__ -%endif %files utils %{_sbindir}/kojira -%if %{use_systemd} %{_unitdir}/koji-gc.service %{_unitdir}/koji-gc.timer %{_unitdir}/kojira.service -%endif %dir /etc/kojira %config(noreplace) /etc/kojira/kojira.conf %{_sbindir}/koji-gc @@ -550,7 +313,6 @@ rm -rf $RPM_BUILD_ROOT %config(noreplace) /etc/koji-shadow/koji-shadow.conf %{_sbindir}/koji-sidetag-cleanup -%if 0%{py3_support} > 1 %files web %dir /etc/kojiweb %config(noreplace) /etc/kojiweb/web.conf @@ -559,20 +321,10 @@ rm -rf $RPM_BUILD_ROOT %files -n python%{python3_pkgversion}-%{name}-web %{_datadir}/koji-web -%endif %files builder %{_sbindir}/kojid -%if 0%{py2_support} > 1 -%dir %{_libexecdir}/kojid -%{_libexecdir}/kojid/mergerepos -%endif -%if %{use_systemd} %{_unitdir}/kojid.service -%else -%{_initrddir}/kojid -%config(noreplace) /etc/sysconfig/kojid -%endif %dir /etc/kojid %config(noreplace) /etc/kojid/kojid.conf %attr(-,kojibuilder,kojibuilder) /etc/mock/koji @@ -580,8 +332,6 @@ rm -rf $RPM_BUILD_ROOT %pre builder /usr/sbin/useradd -r -s /bin/bash -G mock -d /builddir -M kojibuilder 2>/dev/null ||: -%if %{use_systemd} - %post builder %systemd_post kojid.service @@ -591,33 +341,14 @@ rm -rf $RPM_BUILD_ROOT %postun builder %systemd_postun kojid.service -%else - -%post builder -/sbin/chkconfig --add kojid - -%preun builder -if [ $1 = 0 ]; then - /sbin/service kojid stop &> /dev/null - /sbin/chkconfig --del kojid -fi -%endif - %files vm %{_sbindir}/kojivmd #dir %%{_datadir}/kojivmd %{_datadir}/kojivmd/kojikamid -%if %{use_systemd} %{_unitdir}/kojivmd.service -%else -%{_initrddir}/kojivmd -%config(noreplace) /etc/sysconfig/kojivmd -%endif %dir /etc/kojivmd %config(noreplace) /etc/kojivmd/kojivmd.conf -%if %{use_systemd} - %post vm %systemd_post kojivmd.service @@ -627,19 +358,6 @@ fi %postun vm %systemd_postun kojivmd.service -%else - -%post vm -/sbin/chkconfig --add kojivmd - -%preun vm -if [ $1 = 0 ]; then - /sbin/service kojivmd stop &> /dev/null - /sbin/chkconfig --del kojivmd -fi - -%if %{use_systemd} - %post utils %systemd_post kojira.service @@ -649,18 +367,6 @@ fi %postun utils %systemd_postun kojira.service -%else -%post utils -/sbin/chkconfig --add kojira -/sbin/service kojira condrestart &> /dev/null || : -%preun utils -if [ $1 = 0 ]; then - /sbin/service kojira stop &> /dev/null || : - /sbin/chkconfig --del kojira -fi -%endif -%endif - %changelog * Tue Jul 28 2020 Mike McLean - 1.22.0-1 - PR#2404: release bump and changelog From 9a189e2b2d90eaf7eeffb40b5239c69c5ebbd310 Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Aug 26 2020 12:36:57 +0000 Subject: [PATCH 2/8] fix Makefile --- diff --git a/Makefile b/Makefile index 24b830d..7b7f631 100644 --- a/Makefile +++ b/Makefile @@ -75,19 +75,8 @@ clean: git-clean: @git clean -d -q -x -test: test2 test3 - @echo "All tests are finished for python 2&3" - -test2: - coverage2 erase - PYTHONPATH=.:plugins/builder/.:plugins/cli/.:cli/.:www/lib coverage2 run \ - --source . -m nose tests/test_builder tests/test_cli tests/test_lib \ - tests/test_plugins/test*builder.py tests/test_plugins/test*cli.py - coverage2 report - coverage2 html - @echo Full coverage report at file://${CURDIR}/htmlcov/py2/index.html - -test3: +test: + @echo "All tests are finished for python 3" coverage3 erase --rcfile .coveragerc3 PYTHONPATH=hub/.:plugins/hub/.:plugins/builder/.:plugins/cli/.:cli/.:www/lib coverage3 run \ --rcfile .coveragerc3 --source . -m nose From aac5bccd0e002c492c455af00b9fd79e4ded97b1 Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Aug 26 2020 12:37:13 +0000 Subject: [PATCH 3/8] remove basic py2 code --- diff --git a/Makefile b/Makefile index 7b7f631..d5911a4 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ SPECFILE = $(firstword $(wildcard *.spec)) SUBDIRS = hub builder koji cli util www plugins vm ifndef PYTHON -export PYTHON=python2 +export PYTHON=python3 endif ifdef DIST @@ -109,13 +109,7 @@ test-rpm: tarball pypi: rm -rf dist - python setup.py sdist - # py2 - virtualenv -p /usr/bin/python2 build_py2 - build_py2/bin/pip install --upgrade pip setuptools wheel virtualenv - build_py2/bin/python setup.py bdist_wheel - rm -rf build_py2 - # py3 + python3 setup.py sdist python3 -m venv build_py3 build_py3/bin/pip install --upgrade pip setuptools wheel virtualenv build_py3/bin/python setup.py bdist_wheel diff --git a/builder/kojid b/builder/kojid index 0553716..79ce31b 100755 --- a/builder/kojid +++ b/builder/kojid @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # Koji build daemon # Copyright (c) 2005-2014 Red Hat, Inc. @@ -5140,10 +5140,7 @@ Status: %(status)s\r message = self.message_templ % locals() # ensure message is in UTF-8 - message = koji.fixEncoding(message) - # binary for python3 - if six.PY3: - message = message.encode('utf8') + message = koji.fixEncoding(message).encode('utf8') server = smtplib.SMTP(self.options.smtphost) if self.options.smtp_user is not None and self.options.smtp_pass is not None: server.login(self.options.smtp_user, self.options.smtp_pass) @@ -5364,10 +5361,7 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r subject = self.subject_templ % locals() message = self.message_templ % locals() # ensure message is in UTF-8 - message = koji.fixEncoding(message) - # binary for python3 - if six.PY3: - message = message.encode('utf8') + message = koji.fixEncoding(message).encode('utf8') server = smtplib.SMTP(self.options.smtphost) if self.options.smtp_user is not None and self.options.smtp_pass is not None: server.login(self.options.smtp_user, self.options.smtp_pass) @@ -5592,23 +5586,16 @@ class CreaterepoTask(BaseTaskHandler): if merge_mode == 'simple': if mergerepo_c_version and mergerepo_c_version >= (0, 13, 0): cmd = ['/usr/bin/mergerepo_c', '--koji', '--simple'] - elif six.PY3: - # koji's mergerepos script only works on python2 + else: raise koji.GenericError("mergerepo_c is not installed or has low version: " "%s (0.13.0 needed for --simple)" % ".".join([str(d) for d in mergerepo_c_version or [None]])) - else: - cmd = ['/usr/libexec/kojid/mergerepos', - '--mode', 'simple', - '--tempdir', self.workdir] elif merge_mode == 'bare': # "bare" merge mode for repos with modular metadata # forces use of mergerepo_c cmd = ['/usr/bin/mergerepo_c', '--pkgorigins', '--all'] - elif self.options.use_createrepo_c or six.PY3: - cmd = ['/usr/bin/mergerepo_c', '--koji'] else: - cmd = ['/usr/libexec/kojid/mergerepos', '--tempdir', self.workdir] + cmd = ['/usr/bin/mergerepo_c', '--koji'] if merge_mode != 'bare': blocklist = self.repodir + '/blocklist' diff --git a/builder/mergerepos b/builder/mergerepos index a6c5a35..ad0d892 100755 --- a/builder/mergerepos +++ b/builder/mergerepos @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/cli/koji b/cli/koji index 3e9c563..5b60765 100755 --- a/cli/koji +++ b/cli/koji @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # coding=utf-8 # command line interface for the Koji build system diff --git a/devtools/fakehub b/devtools/fakehub index c1b777d..57b4904 100755 --- a/devtools/fakehub +++ b/devtools/fakehub @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 from __future__ import absolute_import, print_function diff --git a/devtools/fakeweb b/devtools/fakeweb index 12454e3..8a8d339 100755 --- a/devtools/fakeweb +++ b/devtools/fakeweb @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 from __future__ import absolute_import, print_function diff --git a/docs/source/configuring_jenkins.rst b/docs/source/configuring_jenkins.rst index e6265fe..1c739fa 100644 --- a/docs/source/configuring_jenkins.rst +++ b/docs/source/configuring_jenkins.rst @@ -98,30 +98,14 @@ Configuration # setup virtual environment rm -rf kojienv - if [ -x /usr/bin/python3 ] ; then - python3 -m venv --system-site-packages kojienv - else - virtualenv --system-site-packages kojienv - fi + python3 -m venv --system-site-packages kojienv source kojienv/bin/activate # install python requirements via pip, you can also specify exact versions here - if [ $NODE_NAME == "EL6" ] ; then - pip install "psycopg2<2.7" "urllib3<1.24" "requests<2.20" "requests-mock<1.5" \ - "Markdown<3.1" "mock<3.0.0" nose python-qpid-proton coverage \ - python-multilib Cheetah --upgrade --ignore-installed - else - pip install pip packaging --upgrade --ignore-installed - pip install setuptools --upgrade --ignore-installed - pip install psycopg2 requests-mock nose python-qpid-proton mock coverage \ - python-multilib flake8 --upgrade --ignore-installed - if [ -x /usr/bin/python3 ] ; then - pip install Cheetah3 nose-cover3 --upgrade --ignore-installed - else - pip install Cheetah --upgrade --ignore-installed - fi - fi - + pip install pip packaging --upgrade --ignore-installed + pip install setuptools --upgrade --ignore-installed + pip install psycopg2 requests-mock nose python-qpid-proton mock coverage \ + python-multilib flake8 Cheetah3 nose-cover3 --upgrade --ignore-installed # rehash package to be sure updated versions are used hash -r @@ -146,12 +130,7 @@ Configuration #pylint . > pylint_report.txt #pep8 . > pep8_report.txt - if [ $NODE_NAME == "EL6" ] ; then - # fake report, flake8 is not available for old python - echo > flake8_report.txt - else - flake8 cli hub builder plugins koji util www vm devtools tests --output-file flake8_report.txt - fi + flake8 cli hub builder plugins koji util www vm devtools tests --output-file flake8_report.txt # kill virtual environment deactivate diff --git a/docs/source/writing_a_plugin.rst b/docs/source/writing_a_plugin.rst index aabc186..b7d150a 100644 --- a/docs/source/writing_a_plugin.rst +++ b/docs/source/writing_a_plugin.rst @@ -267,9 +267,7 @@ Koji provides some important functions via in the client cli library Final command has to be saved in python system-wide library path - e.g. in ``/usr/lib/python3.4/site-packages/koji_cli_plugins``. Filename doesn't matter -as all files in this directory are searched for ``@export_cli`` macros. Note, -that python 3 variant of CLI is looking to different directory than python 2 -one. +as all files in this directory are searched for ``@export_cli`` macros. CLI plugins structure will be extended (made configurable and allowing more than just adding commands - e.g. own authentication methods, etc.) in future. @@ -277,10 +275,7 @@ than just adding commands - e.g. own authentication methods, etc.) in future. Pull requests ------------- -These plugins have to be written in python 2.6+/3.x compatible way. We are -using `six` library to support this, so we will also prefer pull requests -written this way. CLI (and client library) is meant to be fully compatible -with python 3 from koji 1.13. +These plugins have to be written in python 3.x. Tests are also recommended for PR. For example one see ``tests/test_plugins/test_runroot_cli.py``. diff --git a/docs/source/writing_koji_code.rst b/docs/source/writing_koji_code.rst index 0c10676..bd5a45e 100644 --- a/docs/source/writing_koji_code.rst +++ b/docs/source/writing_koji_code.rst @@ -601,21 +601,8 @@ Here are some guidelines on producing preferable pull requests. - Please adhere to `PEP8 `__. While much of the older code in Koji does not, we try to stick to it with new code -- Code which is imported into CLI or needed for stand-alone API calls must - run in both 2.6+ and 3.x python versions. We use the python-six library - for compatibility. The affected files are: - - - ``cli/*`` - - ``koji/__init__.py`` - - ``koji/auth.py`` - - ``koji/tasks.py`` - - ``koji/util.py`` - - ``tests/test_lib/*`` - - ``tests/test_cli/*`` - - Check, that unit tests are not broken. Simply run ``make test`` in main - directory of your branch to check both python2/3 compatible-code. Or you can - also use ``make test2`` or ``make test3`` target for each of them. + directory of your branch. Note that the core development team for Koji is small, so it may take a few days for someone to reply to your request. diff --git a/koji/__init__.py b/koji/__init__.py index 43a557c..79757ac 100644 --- a/koji/__init__.py +++ b/koji/__init__.py @@ -825,7 +825,7 @@ def rip_rpm_hdr(src): def _ord(s): - # in python2 it is char/str, while in py3 it is already int/bytes + # in py3 it is already int/bytes if isinstance(s, int): return s else: @@ -2082,8 +2082,6 @@ def read_config_files(config_files, raw=False): if raw: parser = six.moves.configparser.RawConfigParser - elif six.PY2: - parser = six.moves.configparser.SafeConfigParser else: # In python3, ConfigParser is "safe", and SafeConfigParser is a # deprecated alias @@ -2645,12 +2643,7 @@ class ClientSession(object): handler = self.baseurl + '/ssllogin' else: handler = self.baseurl - request = dumps(args, name, allow_none=1) - if six.PY3: - # For python2, dumps() without encoding specified means return a str - # encoded as UTF-8. For python3 it means "return a str with an appropriate - # xml declaration for encoding as UTF-8". - request = request.encode('utf-8') + request = dumps(args, name, allow_none=1).encode('utf-8') headers = [ # connection class handles Host ('User-Agent', 'koji/1'), @@ -3487,12 +3480,9 @@ def removeNonprintable(value): def _fix_print(value): """Fix a string so it is suitable to print - In python2, this means we return a utf8 encoded str - In python3, this means we return unicode + return unicode string """ - if six.PY2 and isinstance(value, six.text_type): - return value.encode('utf8') - elif six.PY3 and isinstance(value, six.binary_type): + if isinstance(value, six.binary_type): return value.decode('utf8') else: return value @@ -3514,35 +3504,16 @@ def fix_encoding(value, fallback='iso8859-15', remove_nonprintable=False): """ Adjust string to work around encoding issues - In python2, unicode strings are encoded as utf8. For normal - strings, we attempt to fix encoding issues. The fallback option - is the encoding to use if the string is not valid utf8. - If remove_nonprintable is True, then nonprintable characters are filtered out. In python3 this is mostly a no-op, but remove_nonprintable is still honored """ - # play encoding tricks for py2 strings - if six.PY2: - if isinstance(value, unicode): # noqa: F821 - # just convert it to a utf8-encoded str - value = value.encode('utf8') - elif isinstance(value, str): - # value is a str, but may be encoded in utf8 or some - # other non-ascii charset. Try to verify it's utf8, and if not, - # decode it using the fallback encoding. - try: - value = value.decode('utf8').encode('utf8') - except UnicodeDecodeError: - value = value.decode(fallback).encode('utf8') - # remove nonprintable characters, if requested if remove_nonprintable and isinstance(value, str): # NOTE: we test for str instead of six.text_type deliberately # - on py3, we're leaving bytes alone - # - on py2, we've just decoded any unicode value = removeNonprintable(value) return value diff --git a/koji/xmlrpcplus.py b/koji/xmlrpcplus.py index 0ca2793..1958192 100644 --- a/koji/xmlrpcplus.py +++ b/koji/xmlrpcplus.py @@ -51,10 +51,6 @@ class ExtendedMarshaller(xmlrpc_client.Marshaller): dispatch[int] = dump_int -if six.PY2: - ExtendedMarshaller.dispatch[long] = ExtendedMarshaller.dump_int # noqa: F821 - - def dumps(params, methodname=None, methodresponse=None, encoding=None, allow_none=1, marshaller=None): """encode an xmlrpc request or response diff --git a/runtests b/runtests index 29ab808..d7d6710 100755 --- a/runtests +++ b/runtests @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 import subprocess import tempfile @@ -26,10 +26,6 @@ def checkout_run(cmd, ref='HEAD'): return output -def run_test2(): - return checkout_run(['make', 'test2']) - - def run_test3(): return checkout_run(['make', 'test3']) @@ -38,7 +34,7 @@ def main(): """Run our test targets in parallel using fresh checkouts of HEAD""" print("Running tests...") p = Pool(2) - results = [p.apply_async(f) for f in [run_test2, run_test3]] + results = [p.apply_async(f) for f in [run_test3]] for r in results: print(r.get().decode('utf-8')) p.close() diff --git a/setup.py b/setup.py index b7bb760..5762f96 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,5 @@ from __future__ import absolute_import -import sys - from setuptools import setup @@ -16,16 +14,11 @@ def get_install_requires(): 'requests', 'requests-gssapi', 'six', + 'pyOpenSSL', # 'libcomps', # 'rpm-py-installer', # it is optional feature # 'rpm', ] - # since pyOpenSSL-18.0.0, py26 support is dropped - # see https://pagure.io/koji/issue/1060 - if sys.version_info[0] == 2 and sys.version_info[1] < 7: - requires.append('pyOpenSSL<18.0.0') - else: - requires.append('pyOpenSSL') return requires @@ -46,8 +39,6 @@ setup( "Intended Audience :: Developers", "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)", "Natural Language :: English", - "Programming Language :: Python :: 2.6", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Operating System :: POSIX :: Linux", "Topic :: Utilities" @@ -69,6 +60,6 @@ setup( 'util/koji-sweep-db', 'util/kojira', ], - python_requires='>=2.6', + python_requires='>=3.0', install_requires=get_install_requires(), ) diff --git a/tests/test_cli/test_hello.py b/tests/test_cli/test_hello.py index e345c2a..df59c86 100644 --- a/tests/test_cli/test_hello.py +++ b/tests/test_cli/test_hello.py @@ -22,9 +22,6 @@ class TestPrintUnicode(utils.CliTestCase): def test_printable_unicode(self): for s in self.greetings: - # make sure the type is unicode before convert in python2 - if six.PY2: - self.assertEqual(type(s), type(unicode())) result = _printable_unicode(s) self.assertEqual(type(result), type(str())) diff --git a/tests/test_lib/test_fixEncoding.py b/tests/test_lib/test_fixEncoding.py index ab26399..07b8ebd 100644 --- a/tests/test_lib/test_fixEncoding.py +++ b/tests/test_lib/test_fixEncoding.py @@ -1,16 +1,12 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # coding=utf-8 """Test the __init__.py module""" from __future__ import absolute_import import koji -import mock import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest class FixEncodingTestCase(unittest.TestCase): diff --git a/tests/test_lib/test_parsers.py b/tests/test_lib/test_parsers.py index 8c67f67..1213c35 100644 --- a/tests/test_lib/test_parsers.py +++ b/tests/test_lib/test_parsers.py @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 """Test the __init__.py module""" @@ -6,10 +6,7 @@ from __future__ import absolute_import import mock import os import rpm -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji diff --git a/tests/test_plugins/test_save_failed_tree_builder.py b/tests/test_plugins/test_save_failed_tree_builder.py index 909e8a3..920f605 100644 --- a/tests/test_plugins/test_save_failed_tree_builder.py +++ b/tests/test_plugins/test_save_failed_tree_builder.py @@ -2,10 +2,7 @@ from __future__ import absolute_import import mock import os import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest # alter pythonpath to not load hub plugin sys.path = [os.path.join(os.path.dirname(__file__), '../../plugins/builder')] + sys.path diff --git a/util/koji-gc b/util/koji-gc index 18ea5fd..56bb128 100755 --- a/util/koji-gc +++ b/util/koji-gc @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # koji-gc: a garbage collection tool for Koji # Copyright (c) 2007-2014 Red Hat, Inc. diff --git a/util/koji-shadow b/util/koji-shadow index 2cbef13..22b1778 100755 --- a/util/koji-shadow +++ b/util/koji-shadow @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # koji-shadow: a tool to shadow builds between koji instances # Copyright (c) 2007-2016 Red Hat, Inc. diff --git a/util/koji-sidetag-cleanup b/util/koji-sidetag-cleanup index e99e533..bf1cbc4 100644 --- a/util/koji-sidetag-cleanup +++ b/util/koji-sidetag-cleanup @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 import sys import configparser diff --git a/util/koji-sweep-db b/util/koji-sweep-db index c4c72bb..98fdd89 100755 --- a/util/koji-sweep-db +++ b/util/koji-sweep-db @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 import os from optparse import OptionParser diff --git a/util/kojira b/util/kojira index daea9a6..067c045 100755 --- a/util/kojira +++ b/util/kojira @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # Koji Repository Administrator (kojira) # Copyright (c) 2005-2014 Red Hat, Inc. diff --git a/vm/kojikamid.py b/vm/kojikamid.py index b4de858..d286dc5 100755 --- a/vm/kojikamid.py +++ b/vm/kojikamid.py @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # Koji daemon that runs in a Windows VM and executes commands associated # with a task. diff --git a/vm/kojivmd b/vm/kojivmd index 8320281..573450c 100755 --- a/vm/kojivmd +++ b/vm/kojivmd @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # Koji virtual machine management daemon # Copyright (c) 2010-2014 Red Hat, Inc. From 4d8befe62d8de9d5f27fe073c851908ad8e48c88 Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Aug 26 2020 12:53:26 +0000 Subject: [PATCH 4/8] remove six --- diff --git a/.coveragerc3 b/.coveragerc3 index e7f85d3..b578a4a 100644 --- a/.coveragerc3 +++ b/.coveragerc3 @@ -1,18 +1,10 @@ [run] data_file = .coverage3 -; extra omissions for py3 for now - -omit = - setup.py - /usr/* - tests/* - [report] exclude_lines = pragma: no cover no cover 3.x - if six.PY2 [html] directory = htmlcov/py3 diff --git a/builder/kojid b/builder/kojid index 79ce31b..c3ef302 100755 --- a/builder/kojid +++ b/builder/kojid @@ -20,9 +20,6 @@ # Authors: # Mike McLean # Mike Bonnet - -from __future__ import absolute_import, division - import copy import glob import grp @@ -42,6 +39,7 @@ import sys import time import traceback import xml.dom.minidom +import xmlrpc.client import zipfile from fnmatch import fnmatch from gzip import GzipFile @@ -50,8 +48,6 @@ from optparse import SUPPRESS_HELP, OptionParser import Cheetah.Template import requests import rpm -import six -import six.moves.xmlrpc_client from multilib import multilib import koji @@ -340,7 +336,7 @@ class BuildRoot(object): id_suffix = 'repo' name_prefix = 'Repository for Koji' for dep in self.deps: - if isinstance(dep, six.integer_types): + if isinstance(dep, int): # dep is a task ID, the url points to the task output directory repo_type = 'task' dep_url = pi.task(dep) @@ -847,8 +843,7 @@ class BuildRoot(object): origin_idx = {} # don't use 'with GzipFile' as it is not supported on py2.6 fo2 = GzipFile(fileobj=fo, mode='r') - if six.PY3: - fo2 = io.TextIOWrapper(fo2, encoding='utf-8') + fo2 = io.TextIOWrapper(fo2, encoding='utf-8') for line in fo2: parts = line.split(None, 2) if len(parts) < 2: @@ -1290,7 +1285,7 @@ class BuildTask(BaseTaskHandler): brmap = {} logs = {} built_srpm = None - for (arch, task_id) in six.iteritems(subtasks): + for (arch, task_id) in subtasks.items(): result = results[task_id] self.logger.debug("DEBUG: %r : %r " % (arch, result,)) brootid = result['brootid'] @@ -1823,7 +1818,7 @@ class BuildMavenTask(BaseBuildTask): for filepath in logs: self.uploadFile(os.path.join(outputdir, filepath), relPath=os.path.dirname(filepath)) - for relpath, files in six.iteritems(output_files): + for relpath, files in output_files.items(): for filename in files: self.uploadFile(os.path.join(outputdir, relpath, filename), relPath=relpath) @@ -2287,7 +2282,7 @@ class ChainMavenTask(MultiPlatformTask): pkg_to_wrap = params['buildrequires'][0] to_wrap = self.done[pkg_to_wrap] - if isinstance(to_wrap, six.integer_types): + if isinstance(to_wrap, int): task_to_wrap = self.session.getTaskInfo(to_wrap, request=True) build_to_wrap = None else: @@ -2307,7 +2302,7 @@ class ChainMavenTask(MultiPlatformTask): del todo[package] try: results = self.wait(to_list(running.keys())) - except (six.moves.xmlrpc_client.Fault, koji.GenericError): + except (xmlrpc.client.Fault, koji.GenericError): # One task has failed, wait for the rest to complete before the # chainmaven task fails. self.wait(all=True) should thrown an exception. self.wait(all=True) @@ -3061,7 +3056,7 @@ class ImageTask(BaseTaskHandler): self.ks.handler.repo.repoList = [] # delete whatever the ks file told us if opts.get('repo'): user_repos = opts['repo'] - if isinstance(user_repos, six.string_types): + if isinstance(user_repos, str): user_repos = user_repos.split(',') index = 0 for user_repo in user_repos: @@ -5434,7 +5429,7 @@ class NewRepoTask(BaseTaskHandler): data = {} if subtasks: results = self.wait(to_list(subtasks.values()), all=True, failany=True) - for (arch, task_id) in six.iteritems(subtasks): + for (arch, task_id) in subtasks.items(): data[arch] = results[task_id] self.logger.debug("DEBUG: %r : %r " % (arch, data[arch],)) @@ -5578,9 +5573,7 @@ class CreaterepoTask(BaseTaskHandler): ext_url = ext_url.replace('$arch', arch) repos.append(ext_url) - mergerepo_c_version = None - if self.options.use_createrepo_c or six.PY3: - mergerepo_c_version = self._get_mergerepo_c_version() + mergerepo_c_version = self._get_mergerepo_c_version() # construct command if merge_mode == 'simple': @@ -5660,7 +5653,7 @@ class NewDistRepoTask(BaseTaskHandler): parent=self.id, arch='noarch') # wait for 64-bit subtasks to finish self.wait(to_list(subtasks.values()), all=True, failany=True) - for (arch, task_id) in six.iteritems(subtasks): + for (arch, task_id) in subtasks.items(): if task_opts['multilib'] and arch in arch32s: # already moved above continue @@ -6311,9 +6304,9 @@ class WaitrepoTask(BaseTaskHandler): if not targets: raise koji.GenericError("No build target for tag: %s" % taginfo['name']) - if isinstance(newer_than, six.string_types) and newer_than.lower() == "now": + if isinstance(newer_than, str) and newer_than.lower() == "now": newer_than = start - if not isinstance(newer_than, tuple(to_list(six.integer_types) + [type(None), float])): + if not isinstance(newer_than, (str, float, type(None))): raise koji.GenericError("Invalid value for newer_than: %s" % newer_than) if newer_than and nvrs: diff --git a/builder/mergerepos b/builder/mergerepos index ad0d892..3be1bbf 100755 --- a/builder/mergerepos +++ b/builder/mergerepos @@ -21,8 +21,6 @@ # Largely borrowed from the mergerepo script included in createrepo and # written by Seth Vidal -from __future__ import absolute_import - import os.path import shutil import sys diff --git a/cli/koji b/cli/koji index 5b60765..013bbb8 100755 --- a/cli/koji +++ b/cli/koji @@ -24,18 +24,12 @@ # Mike Bonnet # Cristian Balint -from __future__ import absolute_import, division - import logging import os import re import sys from optparse import SUPPRESS_HELP, OptionParser -import six -import six.moves.configparser -import six.moves.xmlrpc_client - import koji import koji.plugin import koji.util @@ -48,8 +42,8 @@ def register_plugin(plugin): Handlers are functions marked with one of the decorators defined in koji.plugin """ - for v in six.itervalues(vars(plugin)): - if isinstance(v, six.class_types): + for v in vars(plugin).values(): + if isinstance(v, type): # skip classes continue if callable(v): @@ -160,7 +154,7 @@ def get_options(): assert False # pragma: no cover # update options according to local config - for name, value in six.iteritems(result): + for name, value in result.items(): if getattr(options, name, None) is None: setattr(options, name, value) diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index ca07dce..ffd8163 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import, division - import ast import fnmatch import itertools @@ -14,13 +12,11 @@ import sys import textwrap import time import traceback +import xmlrpc from collections import OrderedDict, defaultdict from optparse import SUPPRESS_HELP, OptionParser import dateutil.parser -import six -import six.moves.xmlrpc_client -from six.moves import filter, map, range, zip import koji from koji.util import base64encode, md5_constructor, to_list @@ -59,13 +55,6 @@ except ImportError: # pragma: no cover yumcomps = None -def _printable_unicode(s): - if six.PY2: - return s.encode('utf-8') - else: # no cover: 2.x - return s - - def handle_add_group(goptions, session, args): "[admin] Add a group to a tag" usage = _("usage: %prog add-group ") @@ -1406,9 +1395,6 @@ def _import_comps(session, filename, tag, options): } if pkg.type == libcomps.PACKAGE_TYPE_CONDITIONAL: pkgopts['requires'] = pkg.requires - for k in pkgopts.keys(): - if six.PY2 and isinstance(pkgopts[k], unicode): # noqa: F821 - pkgopts[k] = str(pkgopts[k]) s_opts = ', '.join(["'%s': %r" % (k, pkgopts[k]) for k in sorted(pkgopts.keys())]) print(" Package: %s: {%s}" % (pkg.name, s_opts)) session.groupPackageListAdd(tag, group.id, pkg.name, force=force, **pkgopts) @@ -1439,9 +1425,6 @@ def _import_comps_alt(session, filename, tag, options): # no cover 3.x pkgopts = {'type': ptype} if ptype == 'conditional': pkgopts['requires'] = pdata[pkg] - for k in pkgopts.keys(): - if six.PY2 and isinstance(pkgopts[k], unicode): # noqa: F821 - pkgopts[k] = str(pkgopts[k]) s_opts = ', '.join(["'%s': %r" % (k, pkgopts[k]) for k in sorted(pkgopts.keys())]) print(" Package: %s: {%s}" % (pkg, s_opts)) session.groupPackageListAdd(tag, group.groupid, pkg, force=force, **pkgopts) @@ -1832,7 +1815,7 @@ def handle_prune_signed_copies(goptions, session, args): build_space = 0 if not by_sig and options.debug: print("(build has no signatures)") - for sigkey, rpms in six.iteritems(by_sig): + for sigkey, rpms in by_sig.items(): mycount = 0 archdirs = {} sigdirs = {} @@ -3540,12 +3523,12 @@ def handle_clone_tag(goptions, session, args): dstgroups[group['name']] = group # construct to-do lists. paddlist = [] # list containing new packages to be added from src tag - for (package_name, pkg) in six.iteritems(srcpkgs): + for (package_name, pkg) in srcpkgs.items(): if package_name not in dstpkgs: paddlist.append(pkg) paddlist.sort(key=lambda x: x['package_name']) pdellist = [] # list containing packages no more present in dst tag - for (package_name, pkg) in six.iteritems(dstpkgs): + for (package_name, pkg) in dstpkgs.items(): if package_name not in srcpkgs: pdellist.append(pkg) pdellist.sort(key=lambda x: x['package_name']) @@ -3553,11 +3536,11 @@ def handle_clone_tag(goptions, session, args): bdellist = [] # list containing new builds to be removed from dst tag if options.delete: # remove builds for packages that are absent from src tag - for (pkg, dstblds) in six.iteritems(dstbldsbypkg): + for (pkg, dstblds) in dstbldsbypkg.items(): if pkg not in srcbldsbypkg: bdellist.extend(dstblds.values()) # add and/or remove builds from dst to match src contents and order - for (pkg, srcblds) in six.iteritems(srcbldsbypkg): + for (pkg, srcblds) in srcbldsbypkg.items(): dstblds = dstbldsbypkg[pkg] ablds = [] dblds = [] @@ -3567,7 +3550,7 @@ def handle_clone_tag(goptions, session, args): if options.delete: # mark the extra builds for deletion dnvrs = [] - for (dstnvr, dstbld) in six.iteritems(dstblds): + for (dstnvr, dstbld) in dstblds.items(): if dstnvr in removed_nvrs: dnvrs.append(dstnvr) dblds.append(dstbld) @@ -3579,19 +3562,19 @@ def handle_clone_tag(goptions, session, args): # in the no-delete case, the extra builds should be forced # to last in the tag bld_order = OrderedDict() - for (dstnvr, dstbld) in six.iteritems(dstblds): + for (dstnvr, dstbld) in dstblds.items(): if dstnvr in removed_nvrs: bld_order[dstnvr] = dstbld - for (nvr, srcbld) in six.iteritems(srcblds): + for (nvr, srcbld) in srcblds.items(): bld_order[nvr] = srcbld # secondly, add builds from src tag and adjust the order - for (nvr, srcbld) in six.iteritems(bld_order): + for (nvr, srcbld) in bld_order.items(): found = False out_of_order = [] # note that dstblds is trimmed as we go, so we are only # considering the tail corresponding to where we are at # in the srcblds loop - for (dstnvr, dstbld) in six.iteritems(dstblds): + for (dstnvr, dstbld) in dstblds.items(): if nvr == dstnvr: found = True break @@ -3614,15 +3597,15 @@ def handle_clone_tag(goptions, session, args): bdellist.sort(key=lambda x: x['package_name']) gaddlist = [] # list containing new groups to be added from src tag - for (grpname, group) in six.iteritems(srcgroups): + for (grpname, group) in srcgroups.items(): if grpname not in dstgroups: gaddlist.append(group) gdellist = [] # list containing groups to be removed from src tag - for (grpname, group) in six.iteritems(dstgroups): + for (grpname, group) in dstgroups.items(): if grpname not in srcgroups: gdellist.append(group) grpchanges = OrderedDict() # dict of changes to make in shared groups - for (grpname, group) in six.iteritems(srcgroups): + for (grpname, group) in srcgroups.items(): if grpname in dstgroups: dstgroup = dstgroups[grpname] grpchanges[grpname] = {'adds': [], 'dels': []} @@ -4009,15 +3992,15 @@ def _printInheritance(tags, sibdepths=None, reverse=False): if depth < currtag['currdepth']: outspacing = depth - outdepth sys.stdout.write(' ' * (outspacing * 3 - 1)) - sys.stdout.write(_printable_unicode(u'\u2502')) + sys.stdout.write('\u2502') outdepth = depth sys.stdout.write(' ' * ((currtag['currdepth'] - outdepth) * 3 - 1)) if siblings: - sys.stdout.write(_printable_unicode(u'\u251c')) + sys.stdout.write('\u251c') else: - sys.stdout.write(_printable_unicode(u'\u2514')) - sys.stdout.write(_printable_unicode(u'\u2500')) + sys.stdout.write('\u2514') + sys.stdout.write('\u2500') if reverse: sys.stdout.write('%(name)s (%(tag_id)i)\n' % currtag) else: @@ -6812,7 +6795,7 @@ def anon_handle_download_logs(options, session, args): # with current code, failed task results should always be faults, # but that could change in the future content = pprint.pformat(result) - except (six.moves.xmlrpc_client.Fault, koji.GenericError): + except (xmlrpc.client.Fault, koji.GenericError): etype, e = sys.exc_info()[:2] content = ''.join(traceback.format_exception_only(etype, e)) full_filename = os.path.normpath(os.path.join(task_log_dir, FAIL_LOG)) @@ -7334,7 +7317,7 @@ def handle_moshimoshi(options, session, args): if not u: print("Not authenticated") u = {'name': 'anonymous user'} - print("%s, %s!" % (_printable_unicode(random.choice(greetings)), u["name"])) + print("%s, %s!" % (random.choice(greetings), u["name"])) print("") print("You are using the hub at %s" % session.baseurl) authtype = u.get('authtype', getattr(session, 'authtype', None)) diff --git a/cli/koji_cli/lib.py b/cli/koji_cli/lib.py index 6454ef9..9295adf 100644 --- a/cli/koji_cli/lib.py +++ b/cli/koji_cli/lib.py @@ -1,6 +1,4 @@ # coding=utf-8 -from __future__ import absolute_import, division - import hashlib import optparse import os @@ -9,11 +7,10 @@ import socket import string import sys import time +import xmlrpc.client from contextlib import closing import requests -import six -from six.moves import range import koji # import parse_arches to current namespace for backward compatibility @@ -165,7 +162,7 @@ class TaskWatcher(object): error = None try: self.session.getTaskResult(self.id) - except (six.moves.xmlrpc_client.Fault, koji.GenericError) as e: + except (xmlrpc.client.Fault, koji.GenericError) as e: error = e if error is None: # print("%s: complete" % self.str()) @@ -324,11 +321,8 @@ def watch_tasks(session, tasklist, quiet=False, poll_interval=60, ki_handler=Non def bytes_to_stdout(contents): """Helper function for writing bytes to stdout""" - if six.PY2: - sys.stdout.write(contents) - else: - sys.stdout.buffer.write(contents) - sys.stdout.buffer.flush() + sys.stdout.buffer.write(contents) + sys.stdout.buffer.flush() def watch_logs(session, tasklist, opts, poll_interval): @@ -355,7 +349,7 @@ def watch_logs(session, tasklist, opts, poll_interval): output = list_task_output_all_volumes(session, task_id) # convert to list of (file, volume) files = [] - for filename, volumes in six.iteritems(output): + for filename, volumes in output.items(): files += [(filename, volume) for volume in volumes] if opts.log: diff --git a/devtools/fakehub b/devtools/fakehub index 57b4904..aa4d39c 100755 --- a/devtools/fakehub +++ b/devtools/fakehub @@ -1,15 +1,13 @@ #!/usr/bin/python3 -from __future__ import absolute_import, print_function - import ast +import io import os import os.path import pprint import sys -from six.moves import cStringIO -from six.moves.urllib.parse import quote +from urllib.parse import quote sys.path.insert(0, os.getcwd()) sys.path.insert(1, os.path.join(os.getcwd(), 'hub')) @@ -94,7 +92,7 @@ def main(): environ['SERVER_NAME'] = 'myserver' environ['SERVER_PORT'] = '443' environ['REQUEST_URI'] = get_url(environ) - environ['wsgi.input'] = cStringIO(get_request()) + environ['wsgi.input'] = io.StringIO(get_request()) environ['REQUEST_METHOD'] = 'POST' environ['CONTENT_TYPE'] = 'text/xml' set_config(environ) diff --git a/devtools/fakeweb b/devtools/fakeweb index 8a8d339..a58b1d2 100755 --- a/devtools/fakeweb +++ b/devtools/fakeweb @@ -1,17 +1,14 @@ #!/usr/bin/python3 -from __future__ import absolute_import, print_function - import mimetypes import os import os.path import pprint import sys +from urllib.parse import quote from wsgiref.simple_server import make_server from wsgiref.util import setup_testing_defaults -from six.moves.urllib.parse import quote - CWD = os.getcwd() sys.path.insert(0, CWD) sys.path.insert(1, os.path.join(CWD, 'www/lib')) diff --git a/hub/kojihub.py b/hub/kojihub.py index c2c807e..cf6389f 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -22,8 +22,6 @@ # Mike Bonnet # Cristian Balint -from __future__ import absolute_import - import base64 import calendar import datetime diff --git a/koji.spec b/koji.spec index 00b0210..24293cb 100644 --- a/koji.spec +++ b/koji.spec @@ -48,7 +48,6 @@ Requires: python%{python3_pkgversion}-requests-gssapi Requires: python%{python3_pkgversion}-requests-kerberos %endif Requires: python%{python3_pkgversion}-dateutil -Requires: python%{python3_pkgversion}-six %description -n python%{python3_pkgversion}-%{name} desc diff --git a/koji/__init__.py b/koji/__init__.py index 79757ac..723d0dd 100644 --- a/koji/__init__.py +++ b/koji/__init__.py @@ -22,12 +22,12 @@ # Mike Bonnet -from __future__ import absolute_import, division - import base64 +import configparser import datetime import errno import hashlib +import http import imp import logging import logging.handlers @@ -44,6 +44,7 @@ import sys import tempfile import time import traceback +import urllib import warnings import weakref import xml.sax @@ -52,15 +53,11 @@ from fnmatch import fnmatch import dateutil.parser import requests -import six -import six.moves.configparser -import six.moves.http_client -import six.moves.urllib from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry -from six.moves import range, zip -from koji.xmlrpcplus import Fault, dumps, getparser, loads, xmlrpc_client +import xmlrpc +from koji.xmlrpcplus import Fault, dumps, getparser, loads from . import util SSL_Error = None @@ -95,7 +92,7 @@ def _(args): ## Constants ## -RPM_HEADER_MAGIC = six.b('\x8e\xad\xe8') +RPM_HEADER_MAGIC = b'\x8e\xad\xe8' RPM_TAG_HEADERSIGNATURES = 62 RPM_TAG_FILEDIGESTALGO = 5011 RPM_SIGTAG_PGP = 1002 @@ -509,7 +506,7 @@ def decode_args2(args, names, strict=True): def decode_int(n): """If n is not an integer, attempt to convert it""" - if isinstance(n, six.integer_types): + if isinstance(n, int): return n # else return int(n) @@ -611,7 +608,7 @@ def rpm_hdr_size(f, ofs=None): f = filename or file object ofs = offset of the header """ - if isinstance(f, six.string_types): + if isinstance(f, str): fo = open(f, 'rb') else: fo = f @@ -641,7 +638,7 @@ def rpm_hdr_size(f, ofs=None): # add eight bytes for section header hdrsize = hdrsize + 8 - if not isinstance(f, six.string_types): + if not isinstance(f, str): fo.close() return hdrsize @@ -694,11 +691,11 @@ class RawHeader(object): print("Store at offset %d (%0x)" % (store, store)) # sort entries by offset, dtype # also rearrange: tag, dtype, offset, count -> offset, dtype, tag, count - order = sorted([(x[2], x[1], x[0], x[3]) for x in six.itervalues(self.index)]) + order = sorted([(x[2], x[1], x[0], x[3]) for x in self.index.values()]) next = store # map some rpmtag codes tags = {} - for name, code in six.iteritems(rpm.__dict__): + for name, code in rpm.__dict__.items(): if name.startswith('RPMTAG_') and isinstance(code, int): tags[code] = name[7:].lower() for entry in order: @@ -736,7 +733,7 @@ class RawHeader(object): next = pos elif dtype == 6: # string (null terminated) - end = self.header.find(six.b('\0'), pos) + end = self.header.find(b'\0', pos) print("String(%d): %r" % (end - pos, self.header[pos:end])) next = end + 1 elif dtype == 7: @@ -745,14 +742,14 @@ class RawHeader(object): elif dtype == 8: # string array for i in range(count): - end = self.header.find(six.b('\0'), pos) + end = self.header.find(b'\0', pos) print("String(%d): %r" % (end - pos, self.header[pos:end])) pos = end + 1 next = pos elif dtype == 9: # unicode string array for i in range(count): - end = self.header.find(six.b('\0'), pos) + end = self.header.find(b'\0', pos) print("i18n(%d): %r" % (end - pos, self.header[pos:end])) pos = end + 1 next = pos @@ -951,7 +948,7 @@ def get_rpm_header(f, ts=None): if ts is None: ts = rpm.TransactionSet() ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES | rpm._RPMVSF_NODIGESTS) - if isinstance(f, six.string_types): + if isinstance(f, str): fo = open(f, "rb") else: fo = f @@ -963,9 +960,7 @@ def get_rpm_header(f, ts=None): def _decode_item(item): """Decode rpm header byte strings to str in py3""" - if six.PY2: - return item - elif isinstance(item, bytes): + if isinstance(item, bytes): try: return item.decode() except UnicodeDecodeError: @@ -997,7 +992,7 @@ def get_header_field(hdr, name, src_arch=False): # HACK: workaround for https://bugzilla.redhat.com/show_bug.cgi?id=991329 if result is None: result = [] - elif isinstance(result, six.integer_types): + elif isinstance(result, int): result = [result] sizetags = ('SIZE', 'ARCHIVESIZE', 'FILESIZES', 'SIGSIZE') @@ -1125,7 +1120,7 @@ def check_NVR(nvr, strict=False): def _check_NVR(nvr): - if isinstance(nvr, six.string_types): + if isinstance(nvr, str): nvr = parse_NVR(nvr) if '-' in nvr['version']: raise GenericError('The "-" character not allowed in version field') @@ -1154,7 +1149,7 @@ def check_NVRA(nvra, strict=False): def _check_NVRA(nvra): - if isinstance(nvra, six.string_types): + if isinstance(nvra, str): nvra = parse_NVRA(nvra) if '-' in nvra['version']: raise GenericError('The "-" character not allowed in version field') @@ -1614,7 +1609,7 @@ def genMockConfig(name, arch, managed=False, repoid=None, tag_name=None, **opts) if opts.get('maven_opts'): mavenrc = 'export MAVEN_OPTS="%s"\n' % ' '.join(opts['maven_opts']) if opts.get('maven_envs'): - for name, val in six.iteritems(opts['maven_envs']): + for name, val in opts['maven_envs'].items(): mavenrc += 'export %s="%s"\n' % (name, val) if mavenrc: files['etc/mavenrc'] = mavenrc @@ -1712,7 +1707,7 @@ name=build if bind_opts: for key in bind_opts.keys(): - for mnt_src, mnt_dest in six.iteritems(bind_opts.get(key)): + for mnt_src, mnt_dest in bind_opts.get(key).items(): parts.append( "config_opts['plugin_conf']['bind_mount_opts'][%r].append((%r, %r))\n" % (key, mnt_src, mnt_dest)) @@ -1842,7 +1837,7 @@ def check_rpm_file(rpmfile): This check is used to detect issues with RPMs before they break builds See: https://pagure.io/koji/issue/290 """ - if isinstance(rpmfile, six.string_types): + if isinstance(rpmfile, str): with open(rpmfile, 'rb') as fo: return _check_rpm_file(fo) else: @@ -2064,12 +2059,12 @@ def read_config_files(config_files, raw=False): ConfigurationError: See config_files if strict is true OSError: Directory in config_files is not accessible """ - if isinstance(config_files, six.string_types): + if isinstance(config_files, str): config_files = [(config_files, False)] elif isinstance(config_files, (list, tuple)): fcfgs = [] for i in config_files: - if isinstance(i, six.string_types): + if isinstance(i, str): fcfgs.append((i, False)) elif isinstance(i, (list, tuple)) and 0 < len(i) <= 2: fcfgs.append((i[0], i[1] if len(i) == 2 else False)) @@ -2081,11 +2076,11 @@ def read_config_files(config_files, raw=False): raise GenericError('invalid type: %s' % type(config_files)) if raw: - parser = six.moves.configparser.RawConfigParser + parser = configparser.RawConfigParser else: # In python3, ConfigParser is "safe", and SafeConfigParser is a # deprecated alias - parser = six.moves.configparser.ConfigParser + parser = configparser.ConfigParser config = parser() cfgs = [] # append dir contents @@ -2302,7 +2297,7 @@ def is_conn_error(e): # these values, this is a connection error. if getattr(e, 'errno', None) in (errno.ECONNRESET, errno.ECONNABORTED, errno.EPIPE): return True - if isinstance(e, six.moves.http_client.BadStatusLine): + if isinstance(e, http.client.BadStatusLine): return True try: if isinstance(e, requests.exceptions.ConnectionError): @@ -2311,7 +2306,7 @@ def is_conn_error(e): e2 = getattr(e, 'args', [None])[0] if isinstance(e2, requests.packages.urllib3.exceptions.ProtocolError): e3 = getattr(e2, 'args', [None, None])[1] - if isinstance(e3, six.moves.http_client.BadStatusLine): + if isinstance(e3, http.client.BadStatusLine): return True # same check as unwrapped socket error if getattr(e2, 'errno', None) in (errno.ECONNRESET, errno.ECONNABORTED, errno.EPIPE): @@ -2387,7 +2382,7 @@ def grab_session_options(options): ) # cert is omitted for now if isinstance(options, dict): - return dict((k, v) for k, v in six.iteritems(options) if k in s_opts and v is not None) + return dict((k, v) for k, v in options.items() if k in s_opts and v is not None) ret = {} for key in s_opts: if not hasattr(options, key): @@ -2481,7 +2476,7 @@ class ClientSession(object): ) # force https old_baseurl = self.baseurl - uri = six.moves.urllib.parse.urlsplit(self.baseurl) + uri = urllib.parse.urlsplit(self.baseurl) if uri[0] != 'https': self.baseurl = 'https://%s%s' % (uri[1], uri[2]) @@ -2550,7 +2545,7 @@ class ClientSession(object): # when API is changed # force https - uri = six.moves.urllib.parse.urlsplit(self.baseurl) + uri = urllib.parse.urlsplit(self.baseurl) if uri[0] != 'https': self.baseurl = 'https://%s%s' % (uri[1], uri[2]) @@ -2638,7 +2633,7 @@ class ClientSession(object): sinfo = self.sinfo.copy() sinfo['callnum'] = self.callnum self.callnum += 1 - handler = "%s?%s" % (self.baseurl, six.moves.urllib.parse.urlencode(sinfo)) + handler = "%s?%s" % (self.baseurl, urllib.parse.urlencode(sinfo)) elif name == 'sslLogin': handler = self.baseurl + '/ssllogin' else: @@ -2691,7 +2686,7 @@ class ClientSession(object): for _key in callopts: _val = callopts[_key] if _key == 'data': - if six.PY3 and isinstance(_val, bytes): + if isinstance(_val, bytes): # convert to hex-string _val = '0x' + _val.hex() if len(_val) > 1024: @@ -2944,17 +2939,17 @@ class ClientSession(object): args['volume'] = volume size = len(chunk) self.callnum += 1 - handler = "%s?%s" % (self.baseurl, six.moves.urllib.parse.urlencode(args)) + handler = "%s?%s" % (self.baseurl, urllib.parse.urlencode(args)) headers = [ ('User-Agent', 'koji/1'), ("Content-Type", "application/octet-stream"), ("Content-length", str(size)), ] request = chunk - if six.PY3 and isinstance(chunk, str): + if isinstance(chunk, str): request = chunk.encode('utf-8') else: - # py2 or bytes + # bytes request = chunk return handler, headers, request @@ -3236,7 +3231,7 @@ class DBHandler(logging.Handler): values = [] data = {} record.message = record.getMessage() - for key, value in six.iteritems(self.mapping): + for key, value in self.mapping.items(): value = str(value) if value.find("%(asctime)") >= 0: if self.formatter: @@ -3265,7 +3260,7 @@ def formatTime(value): """Format a timestamp so it looks nicer""" if not value and not isinstance(value, (int, float)): return '' - if isinstance(value, xmlrpc_client.DateTime): + if isinstance(value, xmlrpc.client.DateTime): value = datetime.datetime.strptime(value.value, "%Y%m%dT%H:%M:%S") elif isinstance(value, (int, float)): value = datetime.datetime.fromtimestamp(value) @@ -3286,9 +3281,9 @@ def formatTimeLong(value): """ if not value and not isinstance(value, (int, float)): return '' - if isinstance(value, six.string_types): + if isinstance(value, str): t = dateutil.parser.parse(value) - elif isinstance(value, xmlrpc_client.DateTime): + elif isinstance(value, xmlrpc.client.DateTime): t = dateutil.parser.parse(value.value) elif isinstance(value, (int, float)): t = datetime.datetime.fromtimestamp(value) @@ -3465,16 +3460,12 @@ def _taskLabel(taskInfo): CONTROL_CHARS = [chr(i) for i in range(32)] NONPRINTABLE_CHARS = ''.join([c for c in CONTROL_CHARS if c not in '\r\n\t']) -if six.PY3: - NONPRINTABLE_CHARS_TABLE = dict.fromkeys(map(ord, NONPRINTABLE_CHARS), None) +NONPRINTABLE_CHARS_TABLE = dict.fromkeys(map(ord, NONPRINTABLE_CHARS), None) def removeNonprintable(value): # expects raw-encoded string, not unicode - if six.PY2: - return value.translate(None, NONPRINTABLE_CHARS) - else: - return value.translate(NONPRINTABLE_CHARS_TABLE) + return value.translate(NONPRINTABLE_CHARS_TABLE) def _fix_print(value): @@ -3482,7 +3473,7 @@ def _fix_print(value): return unicode string """ - if isinstance(value, six.binary_type): + if isinstance(value, bytes): return value.decode('utf8') else: return value @@ -3512,8 +3503,6 @@ def fix_encoding(value, fallback='iso8859-15', remove_nonprintable=False): # remove nonprintable characters, if requested if remove_nonprintable and isinstance(value, str): - # NOTE: we test for str instead of six.text_type deliberately - # - on py3, we're leaving bytes alone value = removeNonprintable(value) return value diff --git a/koji/auth.py b/koji/auth.py index ee42277..6542d7d 100644 --- a/koji/auth.py +++ b/koji/auth.py @@ -19,15 +19,11 @@ # Mike McLean # Mike Bonnet -from __future__ import absolute_import - import random import re import socket import string - -import six -from six.moves import range, urllib, zip +import urllib import koji from .context import context @@ -613,7 +609,7 @@ class Session(object): if krb_princ_check: self.checkKrbPrincipal(krb_principal) select = """SELECT id FROM users WHERE %s""" - if isinstance(name, six.integer_types): + if isinstance(name, int): user_condition = 'id = %(name)i' else: user_condition = 'name = %(name)s' @@ -638,7 +634,7 @@ class Session(object): ON users.id = user_krb_principals.user_id WHERE %s AND krb_principal = %%(krb_principal)s""" - if isinstance(name, six.integer_types): + if isinstance(name, int): user_condition = 'id = %(name)i' else: user_condition = 'name = %(name)s' diff --git a/koji/context.py b/koji/context.py index 5d75871..4423332 100644 --- a/koji/context.py +++ b/koji/context.py @@ -23,10 +23,7 @@ # - request data # - auth data -from __future__ import absolute_import - -import six -import six.moves._thread +import _thread class _data(object): @@ -39,7 +36,7 @@ class ThreadLocal(object): # should probably be getattribute, but easier to debug this way def __getattr__(self, key): - id = six.moves._thread.get_ident() + id = _thread.get_ident() tdict = object.__getattribute__(self, '_tdict') if id not in tdict: raise AttributeError(key) @@ -47,7 +44,7 @@ class ThreadLocal(object): return object.__getattribute__(data, key) def __setattr__(self, key, value): - id = six.moves._thread.get_ident() + id = _thread.get_ident() tdict = object.__getattribute__(self, '_tdict') if id not in tdict: tdict[id] = _data() @@ -55,7 +52,7 @@ class ThreadLocal(object): return object.__setattr__(data, key, value) def __delattr__(self, key): - id = six.moves._thread.get_ident() + id = _thread.get_ident() tdict = object.__getattribute__(self, '_tdict') if id not in tdict: raise AttributeError(key) @@ -66,14 +63,14 @@ class ThreadLocal(object): return ret def __str__(self): - id = six.moves._thread.get_ident() + id = _thread.get_ident() tdict = object.__getattribute__(self, '_tdict') return "(current thread: %s) {" % id + \ - ", ".join(["%s : %s" % (k, v.__dict__) for (k, v) in six.iteritems(tdict)]) + \ + ", ".join(["%s : %s" % (k, v.__dict__) for (k, v) in tdict.items()]) + \ "}" def _threadclear(self): - id = six.moves._thread.get_ident() + id = _thread.get_ident() tdict = object.__getattribute__(self, '_tdict') if id not in tdict: return diff --git a/koji/daemon.py b/koji/daemon.py index 4edf6d7..fdf8e2f 100644 --- a/koji/daemon.py +++ b/koji/daemon.py @@ -20,8 +20,6 @@ # Mike McLean # Mike Bonnet -from __future__ import absolute_import, division - import errno import hashlib import logging @@ -31,11 +29,9 @@ import subprocess import sys import time import traceback +import urllib from fnmatch import fnmatch -import six -from six.moves import range, urllib - import koji import koji.tasks import koji.xmlrpcplus @@ -132,9 +128,7 @@ def log_output(session, path, args, outfile, uploadpath, cwd=None, logerror=0, a if logerror: os.dup2(fd, 2) # echo the command we're running into the logfile - msg = '$ %s\n' % ' '.join(args) - if six.PY3: - msg = msg.encode('utf-8') + msg = '$ %s\n' % ' '.join(args).encode('utf-8') os.write(fd, msg) environ = os.environ.copy() if env: @@ -144,10 +138,7 @@ def log_output(session, path, args, outfile, uploadpath, cwd=None, logerror=0, a msg = ''.join(traceback.format_exception(*sys.exc_info())) if fd: try: - if six.PY3: - os.write(fd, msg.encode('utf-8')) - else: - os.write(fd, msg) + os.write(fd, msg.encode('utf-8')) os.close(fd) except Exception: pass @@ -566,9 +557,7 @@ class SCM(object): status = proc.wait() if status != 0: raise koji.GenericError('Error getting commit hash for git') - fragment = out.strip() - if six.PY3: - fragment = fragment.decode() + fragment = out.strip().decode() scheme = self.scheme[:-3] netloc = self.host path = self.repository diff --git a/koji/db.py b/koji/db.py index 784c04b..c62ebfa 100644 --- a/koji/db.py +++ b/koji/db.py @@ -21,8 +21,6 @@ # Mike McLean -from __future__ import absolute_import - import logging # import psycopg2.extensions # # don't convert timestamp fields to DateTime objects diff --git a/koji/plugin.py b/koji/plugin.py index a3022e3..a862c35 100644 --- a/koji/plugin.py +++ b/koji/plugin.py @@ -19,15 +19,11 @@ # Mike McLean # Mike Bonnet -from __future__ import absolute_import - import imp import logging import sys import traceback -import six - import koji from koji.util import encode_datetime_recurse @@ -98,7 +94,7 @@ class PluginTracker(object): return self.plugins.get(name) def pathlist(self, path): - if isinstance(path, six.string_types): + if isinstance(path, str): return [path] else: return path diff --git a/koji/policy.py b/koji/policy.py index 729e02e..d26e59b 100644 --- a/koji/policy.py +++ b/koji/policy.py @@ -17,13 +17,9 @@ # Authors: # Mike McLean -from __future__ import absolute_import - import fnmatch import logging -import six - import koji from koji.util import to_list @@ -388,7 +384,7 @@ def findSimpleTests(namespace): namespace = (namespace,) ret = {} for ns in namespace: - for key, value in six.iteritems(ns): + for key, value in ns.items(): if value is BaseSimpleTest: # skip this abstract base class if we encounter it # this module contains generic tests, so it is valid to include it diff --git a/koji/rpmdiff.py b/koji/rpmdiff.py index fdd34af..28c0de8 100644 --- a/koji/rpmdiff.py +++ b/koji/rpmdiff.py @@ -18,21 +18,17 @@ # This library and program is heavily based on rpmdiff from the rpmlint package # It was modified to be used as standalone library for the Koji project. -from __future__ import absolute_import - import hashlib import itertools import json import os import rpm -import six -from six.moves import zip class BytesJSONEncoder(json.JSONEncoder): def default(self, o): - if six.PY3 and isinstance(o, bytes): + if isinstance(o, bytes): return o.decode('utf-8') return json.JSONEncoder.default(self, o) @@ -119,8 +115,8 @@ class Rpmdiff: old_files_dict = self.__fileIteratorToDict(old.fiFromHeader()) new_files_dict = self.__fileIteratorToDict(new.fiFromHeader()) - files = sorted(set(itertools.chain(six.iterkeys(old_files_dict), - six.iterkeys(new_files_dict)))) + files = sorted(set(itertools.chain(old_files_dict.keys(), + new_files_dict.keys()))) self.old_data['files'] = old_files_dict self.new_data['files'] = new_files_dict @@ -238,7 +234,5 @@ class Rpmdiff: data = self.old_data if not data: raise ValueError("rpm header data are empty") - s = json.dumps(data, sort_keys=True, cls=BytesJSONEncoder) - if six.PY3: - s = s.encode('utf-8') + s = json.dumps(data, sort_keys=True, cls=BytesJSONEncoder).encode('utf-8') return hashlib.sha256(s).hexdigest() diff --git a/koji/tasks.py b/koji/tasks.py index 678b513..dbbf461 100644 --- a/koji/tasks.py +++ b/koji/tasks.py @@ -19,17 +19,13 @@ # Authors: # Mike McLean # Mike Bonnet -from __future__ import absolute_import - import logging import os import pprint import random import signal import time - -import six.moves.xmlrpc_client -from six.moves import range +import xmlrpc.client import koji import koji.plugin @@ -411,7 +407,7 @@ class BaseTaskHandler(object): try: self.session.getTaskResult(task) checked.add(task) - except (koji.GenericError, six.moves.xmlrpc_client.Fault): + except (koji.GenericError, xmlrpc.client.Fault): self.logger.info( "task %s failed or was canceled, cancelling unfinished tasks" % task) diff --git a/koji/util.py b/koji/util.py index 1d4da3b..512467e 100644 --- a/koji/util.py +++ b/koji/util.py @@ -18,8 +18,6 @@ # Mike McLean # Mike Bonnet -from __future__ import absolute_import, division - import base64 import calendar import datetime @@ -38,9 +36,6 @@ import warnings from fnmatch import fnmatch from zlib import adler32 -import six -from six.moves import range, zip - import koji from koji.xmlrpcplus import DateTime @@ -155,9 +150,6 @@ def base64encode(s, as_bytes=False): This function returns a string unless as_bytes is True """ - if six.PY2: - return base64.b64encode(s) - if isinstance(s, str): s = s.encode('utf8') data = base64.b64encode(s) @@ -191,7 +183,7 @@ def multi_fnmatch(s, patterns): If patterns is a string, it will be split() first """ - if isinstance(patterns, six.string_types): + if isinstance(patterns, str): patterns = patterns.split() for pat in patterns: if fnmatch(s, pat): @@ -385,11 +377,11 @@ class LazyDict(dict): return [(key, lazy_eval(val)) for key, val in super(LazyDict, self).items()] def itervalues(self): - for val in six.itervalues(super(LazyDict, self)): + for val in super(LazyDict, self).values(): yield lazy_eval(val) def iteritems(self): - for key, val in six.iteritems(super(LazyDict, self)): + for key, val in super(LazyDict, self).items(): yield key, lazy_eval(val) def pop(self, key, *args, **kwargs): @@ -655,14 +647,14 @@ class adler32_constructor(object): # mimicing the hashlib constructors def __init__(self, arg=''): - if six.PY3 and isinstance(arg, str): + if isinstance(arg, str): arg = bytes(arg, 'utf-8') self._value = adler32(arg) & 0xffffffff # the bitwise and works around a bug in some versions of python # see: https://bugs.python.org/issue1202 def update(self, arg): - if six.PY3 and isinstance(arg, str): + if isinstance(arg, str): arg = bytes(arg, 'utf-8') self._value = adler32(arg, self._value) & 0xffffffff @@ -692,11 +684,11 @@ def tsort(parts): parts = parts.copy() result = [] while True: - level = set([name for name, deps in six.iteritems(parts) if not deps]) + level = set([name for name, deps in parts.items() if not deps]) if not level: break result.append(level) - parts = dict([(name, deps - level) for name, deps in six.iteritems(parts) + parts = dict([(name, deps - level) for name, deps in parts.items() if name not in level]) if parts: raise ValueError('total ordering not possible') @@ -855,7 +847,7 @@ def to_list(lst): Helper function for py2/py3 compatibility used e.g. in list(dict.keys()) - Don't use it for structures like list(zip(x, y)), where six.moves.zip is + Don't use it for structures like list(zip(x, y)), where zip is used, so it is always an iterator. """ diff --git a/koji/xmlrpcplus.py b/koji/xmlrpcplus.py index 1958192..a1ea23a 100644 --- a/koji/xmlrpcplus.py +++ b/koji/xmlrpcplus.py @@ -2,23 +2,19 @@ Custom xmlrpc handling for Koji """ -from __future__ import absolute_import - import types - -import six -import six.moves.xmlrpc_client as xmlrpc_client +import xmlrpc.client # duplicate a few values that we need -getparser = xmlrpc_client.getparser -loads = xmlrpc_client.loads -Fault = xmlrpc_client.Fault -DateTime = xmlrpc_client.DateTime +getparser = xmlrpc.client.getparser +loads = xmlrpc.client.loads +Fault = xmlrpc.client.Fault +DateTime = xmlrpc.client.DateTime -class ExtendedMarshaller(xmlrpc_client.Marshaller): +class ExtendedMarshaller(xmlrpc.client.Marshaller): - dispatch = xmlrpc_client.Marshaller.dispatch.copy() + dispatch = xmlrpc.client.Marshaller.dispatch.copy() def _dump(self, value, write): # Parent class is unfriendly to subclasses :-/ @@ -41,13 +37,13 @@ class ExtendedMarshaller(xmlrpc_client.Marshaller): # but can unmarshall it correctly. if (value > self.MAXI8 or value < self.MINI8): raise OverflowError("long int exceeds XML-RPC limits") - elif (value > xmlrpc_client.MAXINT or - value < xmlrpc_client.MININT): + elif (value > xmlrpc.client.MAXINT or + value < xmlrpc.client.MININT): write("") write(str(int(value))) write("\n") else: - return xmlrpc_client.Marshaller.dump_int(self, value, write) + return xmlrpc.client.Marshaller.dump_int(self, value, write) dispatch[int] = dump_int @@ -86,9 +82,6 @@ def dumps(params, methodname=None, methodresponse=None, encoding=None, # standard XML-RPC wrappings if methodname: # a method call - if six.PY2 and isinstance(methodname, six.text_type): - # Do we need this? - methodname = methodname.encode(encoding, 'xmlcharrefreplace') parts = ( xmlheader, "\n" diff --git a/plugins/builder/runroot.py b/plugins/builder/runroot.py index e5c0561..6d0ef4a 100644 --- a/plugins/builder/runroot.py +++ b/plugins/builder/runroot.py @@ -1,13 +1,11 @@ # kojid plugin -from __future__ import absolute_import - import os import platform import re import subprocess -import six.moves.configparser +import configparser import koji import koji.tasks @@ -92,7 +90,7 @@ class RunRootTask(koji.tasks.BaseTaskHandler): 'fstype': cp.get(section_name, 'fstype'), 'options': cp.get(section_name, 'options'), }) - except six.moves.configparser.NoOptionError: + except configparser.NoOptionError: raise koji.GenericError("bad config: missing options in %s section" % section_name) for path in self.config['default_mounts'] + self.config['safe_roots'] + \ diff --git a/plugins/builder/save_failed_tree.py b/plugins/builder/save_failed_tree.py index 0a4aa05..2091264 100644 --- a/plugins/builder/save_failed_tree.py +++ b/plugins/builder/save_failed_tree.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - import fnmatch import os import sys diff --git a/plugins/cli/runroot.py b/plugins/cli/runroot.py index f31e950..3667611 100644 --- a/plugins/cli/runroot.py +++ b/plugins/cli/runroot.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - import sys import time from optparse import OptionParser diff --git a/plugins/cli/save_failed_tree.py b/plugins/cli/save_failed_tree.py index 91dca02..e602f56 100644 --- a/plugins/cli/save_failed_tree.py +++ b/plugins/cli/save_failed_tree.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - from optparse import OptionParser import koji diff --git a/plugins/cli/sidetag_cli.py b/plugins/cli/sidetag_cli.py index f44ac40..a57c15b 100644 --- a/plugins/cli/sidetag_cli.py +++ b/plugins/cli/sidetag_cli.py @@ -3,8 +3,6 @@ # # SPDX-License-Identifier: GPL-2.0-or-later -from __future__ import absolute_import - from argparse import ArgumentParser import koji diff --git a/setup.py b/setup.py index 5762f96..15bd97d 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - from setuptools import setup @@ -13,7 +11,6 @@ def get_install_requires(): 'python-dateutil', 'requests', 'requests-gssapi', - 'six', 'pyOpenSSL', # 'libcomps', # 'rpm-py-installer', # it is optional feature diff --git a/tests/test_builder/loadkojid.py b/tests/test_builder/loadkojid.py index 298ed91..642e8b2 100644 --- a/tests/test_builder/loadkojid.py +++ b/tests/test_builder/loadkojid.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import os import sys diff --git a/tests/test_builder/test_build_notification.py b/tests/test_builder/test_build_notification.py index da92ba5..2f26b46 100644 --- a/tests/test_builder/test_build_notification.py +++ b/tests/test_builder/test_build_notification.py @@ -1,22 +1,16 @@ -from __future__ import absolute_import - import json import locale import os import tempfile import time +import unittest import mock -import six import koji import koji.util from .loadkojid import kojid -try: - import unittest2 as unittest -except ImportError: - import unittest @@ -110,7 +104,5 @@ class TestBuildNotification(unittest.TestCase): fn = os.path.join(os.path.dirname(__file__), 'data/calls', 'build_notif_1', 'message.txt') with open(fn, 'rb') as fp: msg_expect = fp.read() - if six.PY2: - msg_expect = msg_expect.decode() self.assertMultiLineEqual(message.decode(), msg_expect.decode()) locale.resetlocale() diff --git a/tests/test_builder/test_choose_taskarch.py b/tests/test_builder/test_choose_taskarch.py index e5cd0dd..ebc692d 100644 --- a/tests/test_builder/test_choose_taskarch.py +++ b/tests/test_builder/test_choose_taskarch.py @@ -1,14 +1,9 @@ -from __future__ import absolute_import import mock import rpm import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from .loadkojid import kojid -from six.moves import range class FakeHeader(dict): diff --git a/tests/test_builder/test_delay_times.py b/tests/test_builder/test_delay_times.py index 068d267..733c969 100644 --- a/tests/test_builder/test_delay_times.py +++ b/tests/test_builder/test_delay_times.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji.daemon import koji diff --git a/tests/test_builder/test_taskparams.py b/tests/test_builder/test_taskparams.py index 69e9152..a943e1c 100644 --- a/tests/test_builder/test_taskparams.py +++ b/tests/test_builder/test_taskparams.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import import inspect import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import koji.tasks diff --git a/tests/test_builder/test_volume_id.py b/tests/test_builder/test_volume_id.py index c37f622..12554a4 100644 --- a/tests/test_builder/test_volume_id.py +++ b/tests/test_builder/test_volume_id.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import import mock import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from .loadkojid import kojid import logging diff --git a/tests/test_cli/data/cli_plugins1/plugin1.py b/tests/test_cli/data/cli_plugins1/plugin1.py index 4d562ca..a6ec426 100644 --- a/tests/test_cli/data/cli_plugins1/plugin1.py +++ b/tests/test_cli/data/cli_plugins1/plugin1.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import from koji.plugin import export_cli, export_as diff --git a/tests/test_cli/fakeclient.py b/tests/test_cli/fakeclient.py index d0b07d0..6c652c8 100644 --- a/tests/test_cli/fakeclient.py +++ b/tests/test_cli/fakeclient.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import mock import koji diff --git a/tests/test_cli/loadcli.py b/tests/test_cli/loadcli.py index c2800ac..fc87c85 100644 --- a/tests/test_cli/loadcli.py +++ b/tests/test_cli/loadcli.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import os #import sys diff --git a/tests/test_cli/test_activate_session.py b/tests/test_cli/test_activate_session.py index 70c099e..e33c8f3 100644 --- a/tests/test_cli/test_activate_session.py +++ b/tests/test_cli/test_activate_session.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import import mock import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.lib import activate_session diff --git a/tests/test_cli/test_add_group.py b/tests/test_cli/test_add_group.py index dc1582c..0e373e1 100644 --- a/tests/test_cli/test_add_group.py +++ b/tests/test_cli/test_add_group.py @@ -1,11 +1,6 @@ -from __future__ import absolute_import - +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_add_group from . import utils @@ -22,7 +17,7 @@ class TestAddGroup(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_group(self, activate_session_mock, stdout): tag = 'tag' @@ -51,7 +46,7 @@ class TestAddGroup(utils.CliTestCase): session.groupListAdd.assert_called_once_with(tag, group) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_group_dupl(self, activate_session_mock, stderr): tag = 'tag' @@ -81,8 +76,8 @@ class TestAddGroup(utils.CliTestCase): session.getTagGroups.assert_called_once_with(tag, inherit=False) session.groupListAdd.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_group_help( self, @@ -111,7 +106,7 @@ class TestAddGroup(utils.CliTestCase): session.getTagGroups.assert_not_called() session.groupListAdd.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_group_no_perm(self, activate_session_mock, stdout): tag = 'tag' @@ -140,7 +135,7 @@ class TestAddGroup(utils.CliTestCase): session.getTagGroups.assert_not_called() session.groupListAdd.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_group_no_tag(self, activate_session_mock, stderr): tag = 'tag' diff --git a/tests/test_cli/test_add_group_pkg.py b/tests/test_cli/test_add_group_pkg.py index 1531c19..5aa4209 100644 --- a/tests/test_cli/test_add_group_pkg.py +++ b/tests/test_cli/test_add_group_pkg.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_add_group_pkg from . import utils diff --git a/tests/test_cli/test_add_group_req.py b/tests/test_cli/test_add_group_req.py index d8dd90d..8056c74 100644 --- a/tests/test_cli/test_add_group_req.py +++ b/tests/test_cli/test_add_group_req.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_add_group_req from . import utils diff --git a/tests/test_cli/test_add_host.py b/tests/test_cli/test_add_host.py index 511e46e..d65063d 100644 --- a/tests/test_cli/test_add_host.py +++ b/tests/test_cli/test_add_host.py @@ -1,7 +1,6 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys import koji @@ -13,7 +12,7 @@ class TestAddHost(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host(self, activate_session_mock, stdout): host = 'host' @@ -43,7 +42,7 @@ class TestAddHost(utils.CliTestCase): session.addHost.assert_called_once_with(host, arches, **kwargs) self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_no_krb_principal( self, activate_session_mock, stdout): @@ -70,7 +69,7 @@ class TestAddHost(utils.CliTestCase): session.addHost.assert_called_once_with(host, arches, force=False) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_dupl(self, activate_session_mock, stderr): host = 'host' @@ -98,8 +97,8 @@ class TestAddHost(utils.CliTestCase): session.getHost.assert_called_once_with(host) session.addHost.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_help(self, activate_session_mock, stderr, stdout): arguments = [] @@ -129,7 +128,7 @@ class TestAddHost(utils.CliTestCase): session.hasHost.assert_not_called() session.addHost.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_failed(self, activate_session_mock, stderr): host = 'host' diff --git a/tests/test_cli/test_add_host_to_channel.py b/tests/test_cli/test_add_host_to_channel.py index 1c3c245..54aaee0 100644 --- a/tests/test_cli/test_add_host_to_channel.py +++ b/tests/test_cli/test_add_host_to_channel.py @@ -1,13 +1,8 @@ -from __future__ import absolute_import - +import io import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_add_host_to_channel from . import utils @@ -17,7 +12,7 @@ class TestAddHostToChannel(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_to_channel(self, activate_session_mock, stdout): host = 'host' @@ -46,7 +41,7 @@ class TestAddHostToChannel(utils.CliTestCase): session.addHostToChannel.assert_called_once_with(host, channel) self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_to_channel_list( self, activate_session_mock, stdout): @@ -74,7 +69,7 @@ class TestAddHostToChannel(utils.CliTestCase): session.addHostToChannel.assert_not_called() self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_to_channel_new( self, activate_session_mock, stdout): @@ -105,7 +100,7 @@ class TestAddHostToChannel(utils.CliTestCase): host, channel, **kwargs) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_to_channel_no_channel( self, activate_session_mock, stderr): @@ -134,7 +129,7 @@ class TestAddHostToChannel(utils.CliTestCase): session.getHost.assert_not_called() session.addHostToChannel.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_to_channel_no_host( self, activate_session_mock, stderr): @@ -165,8 +160,8 @@ class TestAddHostToChannel(utils.CliTestCase): session.getHost.assert_called_once_with(host) session.addHostToChannel.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_host_to_channel_help( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_add_notification.py b/tests/test_cli/test_add_notification.py index 7e121d4..98256e7 100644 --- a/tests/test_cli/test_add_notification.py +++ b/tests/test_cli/test_add_notification.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import +import io import koji import mock -try: - import unittest2 as unittest -except ImportError: - import unittest -from six.moves import StringIO +import unittest from koji_cli.commands import handle_add_notification @@ -62,7 +58,7 @@ class TestAddNotification(unittest.TestCase): @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_add_notification_no_pkg_no_tag(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() @@ -77,7 +73,7 @@ class TestAddNotification(unittest.TestCase): @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_add_notification_user_no_admin(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() self.session.hasPerm.return_value = False @@ -93,7 +89,7 @@ class TestAddNotification(unittest.TestCase): @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_add_notification_user_admin(self, sys_stderr, sys_exit): self.session.hasPerm.return_value = True self.session.getPackageID.return_value = 1234 @@ -109,7 +105,7 @@ class TestAddNotification(unittest.TestCase): @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_add_notification_args(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() diff --git a/tests/test_cli/test_add_pkg.py b/tests/test_cli/test_add_pkg.py index e8d5b28..30c9bb0 100644 --- a/tests/test_cli/test_add_pkg.py +++ b/tests/test_cli/test_add_pkg.py @@ -1,13 +1,8 @@ -from __future__ import absolute_import - +import io import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import call @@ -20,7 +15,7 @@ class TestAddPkg(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_pkg(self, activate_session_mock, stdout): tag = 'tag' @@ -65,7 +60,7 @@ class TestAddPkg(utils.CliTestCase): session.multiCall.assert_called_once_with(strict=True) self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_pkg_multi_pkg(self, activate_session_mock, stdout): tag = 'tag' @@ -109,7 +104,7 @@ class TestAddPkg(utils.CliTestCase): call.multiCall(strict=True)]) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_pkg_owner_no_exists( self, activate_session_mock, stderr): @@ -143,7 +138,7 @@ class TestAddPkg(utils.CliTestCase): self.assertEqual(session.mock_calls, [call.getUser(owner)]) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_pkg_tag_no_exists(self, activate_session_mock, stdout): tag = 'tag' @@ -179,8 +174,8 @@ class TestAddPkg(utils.CliTestCase): [call.getUser(owner), call.getTag(tag)]) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_pkg_no_owner( self, activate_session_mock, stderr, stdout): @@ -217,8 +212,8 @@ class TestAddPkg(utils.CliTestCase): session.listPackages.assert_not_called() session.packageListAdd.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_pkg_no_arg( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_add_tag.py b/tests/test_cli/test_add_tag.py index c24c3e3..0b2a652 100644 --- a/tests/test_cli/test_add_tag.py +++ b/tests/test_cli/test_add_tag.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_add_tag from . import utils @@ -22,7 +18,7 @@ class TestAddTag(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_tag( self, diff --git a/tests/test_cli/test_add_user.py b/tests/test_cli/test_add_user.py index 388f60e..3cc9e12 100644 --- a/tests/test_cli/test_add_user.py +++ b/tests/test_cli/test_add_user.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import io +import unittest from koji_cli.commands import handle_add_user from . import utils @@ -22,7 +18,7 @@ class TestAddUser(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_user( self, diff --git a/tests/test_cli/test_add_volume.py b/tests/test_cli/test_add_volume.py index 0710321..802db0a 100644 --- a/tests/test_cli/test_add_volume.py +++ b/tests/test_cli/test_add_volume.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_add_volume from . import utils @@ -22,8 +18,8 @@ class TestAddVolume(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_add_volume( self, diff --git a/tests/test_cli/test_assign_task.py b/tests/test_cli/test_assign_task.py index c68ef79..4b07bb0 100644 --- a/tests/test_cli/test_assign_task.py +++ b/tests/test_cli/test_assign_task.py @@ -1,12 +1,6 @@ -from __future__ import absolute_import +import io import mock -import os -import six -import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from koji_cli.commands import handle_assign_task @@ -25,7 +19,7 @@ class TestAssignTask(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_assign_task( self, activate_session_mock, stdout): @@ -38,14 +32,12 @@ class TestAssignTask(utils.CliTestCase): session = mock.MagicMock() session.getTaskInfo.return_value = None - with six.assertRaisesRegex(self, koji.GenericError, - "No such task: %s" % task_id): + with self.assertRaisesRegex(koji.GenericError, "No such task: %s" % task_id): handle_assign_task(options, session, arguments) session.getTaskInfo.return_value = "task_info" session.getHost.return_value = None - with six.assertRaisesRegex(self, koji.GenericError, - "No such host: %s" % hostname): + with self.assertRaisesRegex(koji.GenericError, "No such host: %s" % hostname): handle_assign_task(options, session, arguments) arguments.append("--force") @@ -84,8 +76,8 @@ class TestAssignTask(utils.CliTestCase): activate_session_mock.assert_called_with(session, options) session.assignTask.assert_called_with(int(task_id), hostname, True) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_assign_task_help( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_block_group.py b/tests/test_cli/test_block_group.py index a626a66..78a8d21 100644 --- a/tests/test_cli/test_block_group.py +++ b/tests/test_cli/test_block_group.py @@ -1,7 +1,5 @@ -from __future__ import absolute_import - +import io import mock -import six from koji_cli.commands import handle_block_group from . import utils @@ -18,7 +16,7 @@ class TestBlockGroup(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_block_group_nonexistent_tag(self, activate_session_mock, stderr): tag = 'nonexistent-tag' @@ -46,7 +44,7 @@ class TestBlockGroup(utils.CliTestCase): session.getTagGroups.assert_not_called() session.groupListBlock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_block_group_nonexistent_group(self, activate_session_mock, stderr): tag = 'tag' @@ -75,7 +73,7 @@ class TestBlockGroup(utils.CliTestCase): session.getTagGroups.assert_called_once_with(tag, inherit=False) session.groupListBlock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_block_group(self, activate_session_mock, stdout): tag = 'tag' @@ -104,7 +102,7 @@ class TestBlockGroup(utils.CliTestCase): session.groupListBlock.assert_called_once_with(tag, group) self.assertEqual(rv, None) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_block_group_error_handling(self, activate_session_mock, stdout): session = mock.MagicMock() diff --git a/tests/test_cli/test_block_group_pkg.py b/tests/test_cli/test_block_group_pkg.py index da56e13..30edf06 100644 --- a/tests/test_cli/test_block_group_pkg.py +++ b/tests/test_cli/test_block_group_pkg.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_block_group_pkg from . import utils diff --git a/tests/test_cli/test_block_group_req.py b/tests/test_cli/test_block_group_req.py index 39d4253..081d2d9 100644 --- a/tests/test_cli/test_block_group_req.py +++ b/tests/test_cli/test_block_group_req.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_block_group_req from . import utils diff --git a/tests/test_cli/test_block_pkg.py b/tests/test_cli/test_block_pkg.py index 3a906ca..201e7da 100644 --- a/tests/test_cli/test_block_pkg.py +++ b/tests/test_cli/test_block_pkg.py @@ -1,7 +1,6 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys from mock import call @@ -15,7 +14,7 @@ class TestBlockPkg(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_block_pkg(self, activate_session_mock, stdout): tag = 'tag' @@ -47,7 +46,7 @@ class TestBlockPkg(utils.CliTestCase): session.multiCall.assert_called_once_with(strict=True) self.assertFalse(rv) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_block_pkg_multi_pkg(self, activate_session_mock, stdout): tag = 'tag' @@ -85,7 +84,7 @@ class TestBlockPkg(utils.CliTestCase): call.multiCall(strict=True)]) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_block_pkg_no_package(self, activate_session_mock, stderr): tag = 'tag' @@ -119,7 +118,7 @@ class TestBlockPkg(utils.CliTestCase): session.packageListBlock.assert_not_called() session.multiCall.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_block_pkg_tag_no_exists( self, activate_session_mock, stderr): @@ -148,8 +147,8 @@ class TestBlockPkg(utils.CliTestCase): session.listPackages.assert_not_called() session.packageListBlock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_block_pkg_help( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_build.py b/tests/test_cli/test_build.py index 3c6477a..1821134 100644 --- a/tests/test_cli/test_build.py +++ b/tests/test_cli/test_build.py @@ -1,7 +1,6 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys from koji_cli.commands import handle_build, _progress_callback @@ -33,7 +32,7 @@ https://docs.pagure.org/koji/HOWTO/#package-organization %s: error: {message} """ % (self.progname, self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -85,7 +84,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -134,8 +133,8 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -173,8 +172,8 @@ Task info: weburl/taskinfo?taskID=1 self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -241,8 +240,8 @@ Options: self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -283,7 +282,7 @@ Options: self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -329,7 +328,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -369,7 +368,7 @@ Task info: weburl/taskinfo?taskID=1 self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -413,7 +412,7 @@ Task info: weburl/taskinfo?taskID=1 self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -457,7 +456,7 @@ Task info: weburl/taskinfo?taskID=1 self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -513,7 +512,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -562,7 +561,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=True) @@ -613,7 +612,7 @@ Task info: weburl/taskinfo?taskID=1 watch_tasks_mock.assert_not_called() self.assertIsNone(rv) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -666,7 +665,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -716,7 +715,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -770,7 +769,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.unique_path', return_value='random_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) diff --git a/tests/test_cli/test_call.py b/tests/test_cli/test_call.py index dfba8b8..a6e8c16 100644 --- a/tests/test_cli/test_call.py +++ b/tests/test_cli/test_call.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import +import io import json import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_call from . import utils @@ -23,7 +19,7 @@ class TestCall(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_call(self, activate_session_mock, stdout): """Test handle_call function""" @@ -40,7 +36,7 @@ class TestCall(utils.CliTestCase): session.ssl_login.assert_called_with('debug', cert='/etc/pki/cert') self.assert_console_message(stdout, "'%s'\n" % response) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_call_python_syntax(self, activate_session_mock, stdout): """Test handle_call with python syntax""" @@ -63,7 +59,7 @@ class TestCall(utils.CliTestCase): session.ssl_login.assert_called_with(cert='/etc/pki/cert') self.assert_console_message(stdout, "'%s'\n" % response[1]) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_call_json_output(self, activate_session_mock, stdout): """Test handle_call with json output""" @@ -90,7 +86,7 @@ class TestCall(utils.CliTestCase): expect = json.dumps(response, indent=2, separators=(',', ': ')) self.assert_console_message(stdout, '%s\n' % expect) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_call_errors(self, activate_session_mock, stderr): """Test handle_call error messages""" diff --git a/tests/test_cli/test_chain_build.py b/tests/test_cli/test_chain_build.py index f98b7c9..ae84d31 100644 --- a/tests/test_cli/test_chain_build.py +++ b/tests/test_cli/test_chain_build.py @@ -1,13 +1,8 @@ -from __future__ import absolute_import - +import io import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_chain_build from . import utils @@ -25,7 +20,7 @@ class TestChainBuild(utils.CliTestCase): # Mock out the xmlrpc server self.session = mock.MagicMock() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -85,8 +80,8 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -125,8 +120,8 @@ Task info: weburl/taskinfo?taskID=1 self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -169,7 +164,7 @@ Options: self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -218,7 +213,7 @@ Options: self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -277,7 +272,7 @@ Options: self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -365,7 +360,7 @@ Target target is not usable for a chain-build self.session.getBuildTarget.return_value = target_info self.session.getTag.return_value = dest_tag_info self.session.getFullInheritance.return_value = tag_tree - with mock.patch('sys.stderr', new_callable=six.StringIO) as stderr: + with mock.patch('sys.stderr', new_callable=io.StringIO) as stderr: # Run it and check immediate output # args: target badnvr : http://scm2 http://scm3 n-v-r-1 : n-v-r-2 n-v-r-3 # expected: failed, src is neither scm nor good n-v-r @@ -387,7 +382,7 @@ Target target is not usable for a chain-build self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - with mock.patch('sys.stderr', new_callable=six.StringIO) as stderr: + with mock.patch('sys.stderr', new_callable=io.StringIO) as stderr: source_args = [ 'path/n-v-r', ':', @@ -407,7 +402,7 @@ Target target is not usable for a chain-build expected = '"path/n-v-r" is not a SCM URL or package N-V-R\n' self.assertMultiLineEqual(actual, expected) - with mock.patch('sys.stderr', new_callable=six.StringIO) as stderr: + with mock.patch('sys.stderr', new_callable=io.StringIO) as stderr: source_args = [ 'badn-vr', ':', @@ -427,7 +422,7 @@ Target target is not usable for a chain-build expected = '"badn-vr" is not a SCM URL or package N-V-R\n' self.assertMultiLineEqual(actual, expected) - with mock.patch('sys.stderr', new_callable=six.StringIO) as stderr: + with mock.patch('sys.stderr', new_callable=io.StringIO) as stderr: source_args = [ 'badn-v-r.rpm', ':', @@ -447,7 +442,7 @@ Target target is not usable for a chain-build expected = '"badn-v-r.rpm" is not a SCM URL or package N-V-R\n' self.assertMultiLineEqual(actual, expected) - with mock.patch('sys.stderr', new_callable=six.StringIO) as stderr: + with mock.patch('sys.stderr', new_callable=io.StringIO) as stderr: source_args = ['http://scm'] args = [target] + source_args @@ -467,7 +462,7 @@ If there are no dependencies, use the build command instead """ % (progname, progname) self.assertMultiLineEqual(actual, expected) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -531,7 +526,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -594,7 +589,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=True) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -656,7 +651,7 @@ Task info: weburl/taskinfo?taskID=1 watch_tasks_mock.assert_not_called() self.assertIsNone(rv) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) diff --git a/tests/test_cli/test_clone_tag.py b/tests/test_cli/test_clone_tag.py index 3e457a3..aa803da 100644 --- a/tests/test_cli/test_clone_tag.py +++ b/tests/test_cli/test_clone_tag.py @@ -1,13 +1,8 @@ -from __future__ import absolute_import - +import io import mock -import six +import unittest from mock import call -try: - import unittest2 as unittest -except ImportError: - import unittest from koji_cli.commands import handle_clone_tag from . import utils @@ -138,7 +133,7 @@ clone-tag will create the destination tag if it does not already exist self.activate_session.getTag.has_called([mock.call('src-tag'), mock.call('dst-tag')]) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_handle_clone_tag_new_dsttag(self, stdout): args = ['src-tag', 'dst-tag', '--all', '-v'] self.session.listPackages.return_value = [{'package_id': 1, @@ -313,7 +308,7 @@ List of changes: [new] bpkg group2 """) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_handle_clone_tag_existing_dsttag(self, stdout): args = ['src-tag', 'dst-tag', '--all', '-v'] self.session.multiCall.return_value = [] @@ -622,7 +617,7 @@ List of changes: [blk] cpkg group2 """) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_handle_clone_tag_existing_dsttag_nodelete(self, stdout): args = ['src-tag', 'dst-tag', '--all', '-v', '--no-delete'] self.session.multiCall.return_value = [] @@ -681,7 +676,7 @@ List of changes: ------- ---------------------------- ---------------------------- """) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_handle_clone_tag_existing_dsttag_nodelete_1(self, stdout): args = ['src-tag', 'dst-tag', '--all', '-v', '--no-delete'] self.session.multiCall.return_value = [] @@ -757,7 +752,7 @@ List of changes: ------- ---------------------------- ---------------------------- """) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_handle_clone_tag_existing_dsttag_nodelete_2(self, stdout): args = ['src-tag', 'dst-tag', '--all', '-v', '--no-delete'] self.session.multiCall.return_value = [] diff --git a/tests/test_cli/test_disable_host.py b/tests/test_cli/test_disable_host.py index e8824e6..ab00bb0 100644 --- a/tests/test_cli/test_disable_host.py +++ b/tests/test_cli/test_disable_host.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import call from koji_cli.commands import handle_disable_host @@ -24,8 +20,8 @@ class TestDisableHost(utils.CliTestCase): """ % (self.progname, self.progname) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_disable_host( self, @@ -96,7 +92,7 @@ class TestDisableHost(utils.CliTestCase): call('host2', comment='disable host test')]) self.assert_console_message(stdout, '') - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_disable_host_no_argument(self, activate_session_mock, stdout): """Test %s function without arguments""" % handle_disable_host.__name__ diff --git a/tests/test_cli/test_disable_user.py b/tests/test_cli/test_disable_user.py index ef1f83c..d57c7f3 100644 --- a/tests/test_cli/test_disable_user.py +++ b/tests/test_cli/test_disable_user.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_disable_user from . import utils @@ -22,7 +18,7 @@ class TestDisableUser(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_disable_user( self, diff --git a/tests/test_cli/test_dist_repo.py b/tests/test_cli/test_dist_repo.py index 0056fa2..8e19bbd 100644 --- a/tests/test_cli/test_dist_repo.py +++ b/tests/test_cli/test_dist_repo.py @@ -1,13 +1,7 @@ -from __future__ import absolute_import -from __future__ import print_function import copy +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest - +import unittest from koji_cli.commands import handle_dist_repo from . import utils @@ -84,7 +78,7 @@ via 'koji edit-tag -x distrepo.cancel_others=True' def __run_test_handle_dist_repo(self, arguments, return_value=None, expected=''): expected = expected + "Creating dist repo for tag " + self.tag_name + "\n" - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: rv = handle_dist_repo(self.options, self.session, arguments) self.assertEqual(rv, return_value) self.assert_console_message(stdout, expected) diff --git a/tests/test_cli/test_download_file.py b/tests/test_cli/test_download_file.py index c0bb333..c1dcef0 100644 --- a/tests/test_cli/test_download_file.py +++ b/tests/test_cli/test_download_file.py @@ -1,25 +1,14 @@ -from __future__ import absolute_import +import io import mock -import six -import shutil -import tempfile import os -import requests_mock import requests -try: - import unittest2 as unittest -except ImportError: - import unittest +import requests_mock +import shutil +import tempfile +import unittest from koji_cli.lib import download_file, _download_progress -def mock_open(): - """Return the right patch decorator for open""" - if six.PY2: - return mock.patch('__builtin__.open') - else: - return mock.patch('builtins.open') - class TestDownloadFile(unittest.TestCase): # Show long diffs in error output... @@ -35,8 +24,8 @@ class TestDownloadFile(unittest.TestCase): def setUp(self): self.tempdir = tempfile.mkdtemp() self.filename = self.tempdir + "/filename" - self.stdout = mock.patch('sys.stdout', new_callable=six.StringIO).start() - self.stderr = mock.patch('sys.stderr', new_callable=six.StringIO).start() + self.stdout = mock.patch('sys.stdout', new_callable=io.StringIO).start() + self.stderr = mock.patch('sys.stderr', new_callable=io.StringIO).start() self.requests_get = mock.patch('requests.get', create=True, name='requests.get').start() # will work when contextlib.closing will be removed in future #self.requests_get = self.requests_get.return_value.__enter__ @@ -57,7 +46,7 @@ class TestDownloadFile(unittest.TestCase): else: self.assertEqual(cm.exception.args, (21, 'Is a directory')) - @mock_open() + @mock.patch('builtins.open') def test_handle_download_file(self, m_open): self.reset_mock() response = mock.MagicMock() @@ -77,7 +66,7 @@ class TestDownloadFile(unittest.TestCase): response.iter_content.assert_called_once() self.assertIsNone(rv) - @mock_open() + @mock.patch('builtins.open') def test_handle_download_file_undefined_length(self, m_open): self.reset_mock() response = mock.MagicMock() @@ -135,7 +124,7 @@ class TestDownloadProgress(unittest.TestCase): maxDiff = None def setUp(self): - self.stdout = mock.patch('sys.stdout', new_callable=six.StringIO).start() + self.stdout = mock.patch('sys.stdout', new_callable=io.StringIO).start() def tearDown(self): mock.patch.stopall() diff --git a/tests/test_cli/test_download_logs.py b/tests/test_cli/test_download_logs.py index 982ad15..883b82d 100644 --- a/tests/test_cli/test_download_logs.py +++ b/tests/test_cli/test_download_logs.py @@ -1,7 +1,7 @@ -from __future__ import absolute_import +import builtins +import io import mock from mock import call -import six from . import utils from koji_cli.commands import anon_handle_download_logs @@ -23,15 +23,11 @@ class TestDownloadLogs(utils.CliTestCase): self.ensuredir = mock.patch('koji.ensuredir').start() self.download_file = mock.patch('koji_cli.commands.download_file').start() self.activate_session = mock.patch('koji_cli.commands.activate_session').start() - self.stdout = mock.patch('sys.stdout', new_callable=six.StringIO).start() - self.stderr = mock.patch('sys.stderr', new_callable=six.StringIO).start() + self.stdout = mock.patch('sys.stdout', new_callable=io.StringIO).start() + self.stderr = mock.patch('sys.stderr', new_callable=io.StringIO).start() self.builtin_open = None - if six.PY2: - self.builtin_open = __builtins__['open'] - else: - import builtins - self.builtin_open = builtins.open + self.builtin_open = builtins.open self.custom_open = {} def tearDown(self): @@ -85,14 +81,10 @@ class TestDownloadLogs(utils.CliTestCase): 'file2_not_log': ['volume2'], } self.session.downloadTaskOutput.side_effect = ['abcde', ''] - out_file = six.StringIO() + out_file = io.StringIO() self.custom_open['kojilogs/x86_64-123456/volume1/file1.log'] = out_file - if six.PY2: - target = '__builtin__.open' - else: - target = 'builtins.open' - with mock.patch(target, new=self.mock_builtin_open): + with mock.patch('builtins.open', new=self.mock_builtin_open): anon_handle_download_logs(self.options, self.session, [str(task_id)]) self.session.getTaskInfo.assert_called_once_with(task_id) diff --git a/tests/test_cli/test_download_task.py b/tests/test_cli/test_download_task.py index 3918454..f455193 100644 --- a/tests/test_cli/test_download_task.py +++ b/tests/test_cli/test_download_task.py @@ -1,8 +1,7 @@ -from __future__ import absolute_import +import io import mock from mock import call import os -import six import sys from koji_cli.commands import anon_handle_download_task @@ -18,7 +17,7 @@ class TestDownloadTask(utils.CliTestCase): def gen_calls(self, task_output, pattern, blacklist=[], arch=None): params = [(k, v) for k, vl in - six.iteritems(task_output) + task_output.items() if k not in blacklist for v in vl] total = len(params) @@ -48,8 +47,8 @@ class TestDownloadTask(utils.CliTestCase): self.ensuredir = mock.patch('koji.ensuredir').start() self.download_file = mock.patch('koji_cli.commands.download_file').start() self.ensure_connection = mock.patch('koji_cli.commands.ensure_connection').start() - self.stdout = mock.patch('sys.stdout', new_callable=six.StringIO).start() - self.stderr = mock.patch('sys.stderr', new_callable=six.StringIO).start() + self.stdout = mock.patch('sys.stdout', new_callable=io.StringIO).start() + self.stderr = mock.patch('sys.stderr', new_callable=io.StringIO).start() def tearDown(self): mock.patch.stopall() diff --git a/tests/test_cli/test_edit_external_repo.py b/tests/test_cli/test_edit_external_repo.py index dda7bdd..5142a49 100644 --- a/tests/test_cli/test_edit_external_repo.py +++ b/tests/test_cli/test_edit_external_repo.py @@ -1,11 +1,7 @@ # coding=utf-8 -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from koji_cli.commands import handle_edit_external_repo @@ -26,8 +22,8 @@ class TestEditExternalRepo(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_external_repo_error( self, diff --git a/tests/test_cli/test_edit_host.py b/tests/test_cli/test_edit_host.py index 578db7a..ece14e4 100644 --- a/tests/test_cli/test_edit_host.py +++ b/tests/test_cli/test_edit_host.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import call @@ -18,7 +14,7 @@ class TestEditHost(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_host(self, activate_session_mock, stdout): host = 'host' @@ -57,7 +53,7 @@ class TestEditHost(utils.CliTestCase): self.assertEqual(session.multiCall.call_count, 2) self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_host_failed(self, activate_session_mock, stdout): host = 'host' @@ -96,7 +92,7 @@ class TestEditHost(utils.CliTestCase): self.assertEqual(session.multiCall.call_count, 2) self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_multi_host(self, activate_session_mock, stdout): hosts = ['host1', 'host2'] @@ -142,8 +138,8 @@ class TestEditHost(utils.CliTestCase): call.multiCall(strict=True)]) self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_host_no_arg( self, activate_session_mock, stderr, stdout): @@ -178,7 +174,7 @@ class TestEditHost(utils.CliTestCase): session.editHost.assert_not_called() session.multiCall.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_host_no_host(self, activate_session_mock, stderr): host = 'host' diff --git a/tests/test_cli/test_edit_notification.py b/tests/test_cli/test_edit_notification.py index b265df1..17023d2 100644 --- a/tests/test_cli/test_edit_notification.py +++ b/tests/test_cli/test_edit_notification.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import import koji +import io import mock -try: - import unittest2 as unittest -except ImportError: - import unittest -from six.moves import StringIO +import unittest from koji_cli.commands import handle_edit_notification @@ -60,7 +56,7 @@ class TestEditNotification(unittest.TestCase): @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_edit_notification_bogus(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() @@ -71,7 +67,7 @@ class TestEditNotification(unittest.TestCase): @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_edit_notification_no_id(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() @@ -82,7 +78,7 @@ class TestEditNotification(unittest.TestCase): @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_edit_notification_no_opts(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() diff --git a/tests/test_cli/test_edit_tag.py b/tests/test_cli/test_edit_tag.py index 128bbab..09c83cd 100644 --- a/tests/test_cli/test_edit_tag.py +++ b/tests/test_cli/test_edit_tag.py @@ -1,7 +1,6 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys from koji_cli.commands import handle_edit_tag @@ -14,7 +13,7 @@ class TestEditTag(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_tag(self, activate_session_mock, stdout): tag = 'tag' @@ -33,7 +32,7 @@ class TestEditTag(utils.CliTestCase): args.append('--rename=' + rename) args.append('--maven-support') args.append('--include-all') - for k, x in six.iteritems(extra): + for k, x in extra.items(): args.append('-x') args.append(k + '=' + str(x)) for r in remove_extra: @@ -91,8 +90,8 @@ class TestEditTag(utils.CliTestCase): session.editTag2.assert_called_once_with(tag, **opts) self.assertEqual(rv, None) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_tag_help(self, activate_session_mock, stderr, stdout): args = ['--help'] @@ -138,8 +137,8 @@ Options: activate_session_mock.assert_not_called() session.editTag2.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_tag_no_arg(self, activate_session_mock, stderr, stdout): args = [] diff --git a/tests/test_cli/test_edit_user.py b/tests/test_cli/test_edit_user.py index 5c79920..c0dc6f0 100644 --- a/tests/test_cli/test_edit_user.py +++ b/tests/test_cli/test_edit_user.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_edit_user @@ -19,7 +15,7 @@ class TestEditUser(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_user(self, activate_session_mock, stdout): user = 'user' @@ -54,8 +50,8 @@ class TestEditUser(utils.CliTestCase): session.reset_mock() activate_session_mock.reset_mock() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_user_help(self, activate_session_mock, stderr, stdout): args = ['--help'] @@ -89,8 +85,8 @@ Options: session.editUser.assert_not_called() self.assertEqual(cm.exception.code, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_edit_user_no_arg(self, activate_session_mock, stderr, stdout): args = [] diff --git a/tests/test_cli/test_enable_host.py b/tests/test_cli/test_enable_host.py index fc5941f..a3c3c9a 100644 --- a/tests/test_cli/test_enable_host.py +++ b/tests/test_cli/test_enable_host.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import call from koji_cli.commands import handle_enable_host @@ -23,8 +19,8 @@ class TestEnableHost(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_enable_host( self, @@ -96,7 +92,7 @@ class TestEnableHost(utils.CliTestCase): call('host2', comment='disable host test')]) self.assert_console_message(stdout, '') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_enable_host_no_argument(self, activate_session_mock, stdout): """Test %s function without arguments""" % handle_enable_host.__name__ diff --git a/tests/test_cli/test_enable_user.py b/tests/test_cli/test_enable_user.py index 8145c97..ba00515 100644 --- a/tests/test_cli/test_enable_user.py +++ b/tests/test_cli/test_enable_user.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_enable_user from . import utils @@ -22,7 +18,7 @@ class TestEnableUser(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_enable_user( self, diff --git a/tests/test_cli/test_grant_cg_access.py b/tests/test_cli/test_grant_cg_access.py index f445eea..65feb7e 100644 --- a/tests/test_cli/test_grant_cg_access.py +++ b/tests/test_cli/test_grant_cg_access.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_grant_cg_access from . import utils @@ -22,7 +18,7 @@ class TestGrantCGAccess(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_grant_cg_access( self, diff --git a/tests/test_cli/test_grant_permission.py b/tests/test_cli/test_grant_permission.py index 2cc8290..c9f7986 100644 --- a/tests/test_cli/test_grant_permission.py +++ b/tests/test_cli/test_grant_permission.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_grant_permission from . import utils @@ -22,7 +18,7 @@ class TestGrantPermission(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_grant_permission( self, diff --git a/tests/test_cli/test_hello.py b/tests/test_cli/test_hello.py index df59c86..3aaff4d 100644 --- a/tests/test_cli/test_hello.py +++ b/tests/test_cli/test_hello.py @@ -1,31 +1,13 @@ # coding=utf-8 -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji -from koji_cli.commands import handle_moshimoshi, _printable_unicode +from koji_cli.commands import handle_moshimoshi from . import utils -class TestPrintUnicode(utils.CliTestCase): - - greetings = (u'céad míle fáilte', - u'hylô', - u'你好', - u'こんにちは', - u'안녕하세요') - - def test_printable_unicode(self): - for s in self.greetings: - result = _printable_unicode(s) - self.assertEqual(type(result), type(str())) - - class TestHello(utils.CliTestCase): # Show long diffs in error output... @@ -34,14 +16,12 @@ class TestHello(utils.CliTestCase): def setUp(self): self.huburl = "https://%s.local/%shub" % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('koji_cli.commands._printable_unicode') + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_moshimoshi( self, activate_session_mock, - print_unicode_mock, stderr, stdout): """Test handle_moshimoshi function""" @@ -53,7 +33,6 @@ class TestHello(utils.CliTestCase): session = mock.MagicMock(baseurl=self.huburl, authtype=None) session.getLoggedInUser.return_value = None session.krb_principal = user['krb_principal'] - print_unicode_mock.return_value = "Hello" expect = """Usage: %s moshimoshi [options] (Specify the --help global option for a list of other help options) @@ -78,23 +57,23 @@ class TestHello(utils.CliTestCase): cert } - message = "Not authenticated\n" + "Hello, anonymous user!" + message = "Not authenticated\n.+, anonymous user!" hubinfo = "You are using the hub at %s" % self.huburl handle_moshimoshi(options, session, []) - self.assert_console_message( - stdout, "{0}\n\n{1}\n".format(message, hubinfo)) + self.assert_console_message(stdout, "{0}\n\n{1}\n".format(message, hubinfo), + regex=True) session.getLoggedInUser.return_value = user - message = "Hello, %s!" % self.progname + message = ".+, %s!" % self.progname options.cert = cert for authtype, authinfo in auth_tests.items(): session.authtype = authtype - print_unicode_mock.reset_mock() - print_unicode_mock.return_value = "Hello" + #print_unicode_mock.reset_mock() + #print_unicode_mock.return_value = "Hello" handle_moshimoshi(options, session, []) - print_unicode_mock.assert_called_once() + #print_unicode_mock.assert_called_once() self.assert_console_message( - stdout, "{0}\n\n{1}\n{2}\n".format(message, hubinfo, authinfo)) + stdout, "{0}\n\n{1}\n{2}\n".format(message, hubinfo, authinfo), regex=True) def test_handle_moshimoshi_help(self): self.assert_help( diff --git a/tests/test_cli/test_image_build.py b/tests/test_cli/test_image_build.py index e1c3adb..afcdb54 100644 --- a/tests/test_cli/test_image_build.py +++ b/tests/test_cli/test_image_build.py @@ -1,22 +1,14 @@ -from __future__ import absolute_import +import io import mock -import six import os -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest +from configparser import ConfigParser import koji from koji_cli.commands import handle_image_build, _build_image_oz from . import utils -if six.PY2: - ConfigParser = six.moves.configparser.SafeConfigParser -else: - ConfigParser = six.moves.configparser.ConfigParser - TASK_OPTIONS = { "background": None, "disk_size": "20", @@ -60,13 +52,6 @@ TASK_OPTIONS = { "wait": None, } -def mock_open(): - """Return the right patch decorator for open""" - if six.PY2: - return mock.patch('__builtin__.open') - else: - return mock.patch('builtins.open') - class Options(object): def __init__(self, init_dict): @@ -129,7 +114,7 @@ class TestBuildImageOz(utils.CliTestCase): self.session.getBuildTarget.return_value = self.target_info self.session.getTag.return_value = self.tag_info self.session.buildImageOz.return_value = task_id - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image_oz( self.options, self.task_options, self.session, self.args) expected = "Created task: %d" % task_id + "\n" @@ -149,7 +134,7 @@ class TestBuildImageOz(utils.CliTestCase): self.session.buildImageOz.return_value = task_id self.task_options.background = True self.running_in_bg.return_value = True - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image_oz( self.options, self.task_options, self.session, self.args) expected = "Created task: %d" % task_id + "\n" @@ -173,7 +158,7 @@ class TestBuildImageOz(utils.CliTestCase): self.task_options.background = True self.running_in_bg.return_value = True - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image_oz( self.options, self.task_options, self.session, self.args) expected = '' + '\n' @@ -225,7 +210,7 @@ class TestImageBuild(utils.CliTestCase): def setUp(self): self.options = mock.MagicMock() self.session = mock.MagicMock() - self.configparser = mock.patch('six.moves.configparser.ConfigParser').start() + self.configparser = mock.patch('configparser.ConfigParser').start() self.error_format = """Usage: %s image-build [options] [ ...] %s image-build --config diff --git a/tests/test_cli/test_image_build_indirection.py b/tests/test_cli/test_image_build_indirection.py index dfc0d67..41b3277 100644 --- a/tests/test_cli/test_image_build_indirection.py +++ b/tests/test_cli/test_image_build_indirection.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji @@ -81,7 +77,7 @@ class TestBuildImageIndirection(utils.CliTestCase): expected = "Created task: %d" % self.task_id + "\n" expected += "Task info: %s/taskinfo?taskID=%s" % (self.weburl, self.task_id) + "\n" - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image_indirection( self.options, self.task_opts, self.session, []) self.assert_console_message(stdout, expected) @@ -94,7 +90,7 @@ class TestBuildImageIndirection(utils.CliTestCase): self.task_opts.indirection_template_url = None self.task_opts.scratch = True - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image_indirection( self.options, self.task_opts, self.session, []) self.assert_console_message(stdout, expected) @@ -108,7 +104,7 @@ class TestBuildImageIndirection(utils.CliTestCase): self.task_opts.indirection_template_url = None self.task_opts.scratch = True self.task_opts.noprogress = True - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image_indirection( self.options, self.task_opts, self.session, []) self.assert_console_message(stdout, expected) @@ -150,7 +146,7 @@ class TestBuildImageIndirection(utils.CliTestCase): expected = "Missing the following required options: " expected += "--" + r.replace('_', '-') + "\n" with self.assertRaises(koji.GenericError) as cm: - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image_indirection( self.options, self.task_opts, self.session, []) self.assert_console_message(stdout, expected) diff --git a/tests/test_cli/test_import.py b/tests/test_cli/test_import.py index 623567f..660c31f 100644 --- a/tests/test_cli/test_import.py +++ b/tests/test_cli/test_import.py @@ -1,22 +1,12 @@ -from __future__ import absolute_import +import io import mock import os -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from koji_cli.commands import handle_import from . import utils -def md5_to_bytes(s): - if six.PY2: - return bytearray.fromhex(unicode(s)) - else: - return bytearray.fromhex(s) - class TestImport(utils.CliTestCase): # Show long diffs in error output... @@ -54,7 +44,7 @@ class TestImport(utils.CliTestCase): self.srpm_header = { 'sourcepackage': 1, 'name': 'bash', - 'sigmd5': md5_to_bytes(self.md5), + 'sigmd5': bytearray.fromhex(self.md5), 'epoch': None, 'version': '4.4.12', 'release': '5.fc26', @@ -65,7 +55,7 @@ class TestImport(utils.CliTestCase): self.rpm_header = { 'sourcepackage': None, 'name': 'bash', - 'sigmd5': md5_to_bytes(self.md5), + 'sigmd5': bytearray.fromhex(self.md5), 'epoch': None, 'version': '4.4.12', 'release': '5.fc26', @@ -97,7 +87,7 @@ class TestImport(utils.CliTestCase): with mock.patch('koji.get_header_fields') as get_header_fields_mock: with mock.patch('koji_cli.commands.unique_path') as unique_path_mock: with mock.patch('koji_cli.commands.activate_session') as activate_session_mock: - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: with upload_rpm_mock: get_header_fields_mock.return_value = rpm_header unique_path_mock.return_value = fake_srv_path @@ -138,7 +128,7 @@ class TestImport(utils.CliTestCase): with mock.patch('koji.get_header_fields') as get_header_fields_mock: with mock.patch('koji_cli.commands.activate_session') as activate_session_mock: - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: get_header_fields_mock.return_value = rpm_header handle_import(options, session, arguments) @@ -310,7 +300,7 @@ class TestImport(utils.CliTestCase): expected = "Build %s state is %s. Skipping import\n" % (nvr, 'FAILED') with mock.patch('koji.get_header_fields') as get_header_fields_mock: with mock.patch('koji_cli.commands.activate_session') as activate_session_mock: - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: get_header_fields_mock.return_value = self.srpm_header handle_import(options, session, arguments) activate_session_mock.assert_called_with(session, options) @@ -349,8 +339,8 @@ class TestImport(utils.CliTestCase): for k in ['name', 'version', 'release', 'epoch']) session.createEmptyBuild.assert_called_with(**kwarg) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji.get_header_fields') @mock.patch('koji_cli.commands.activate_session') def test_handle_import_binary_rpm_import_with_no_build_exist( @@ -396,8 +386,8 @@ class TestImport(utils.CliTestCase): for k in ['name', 'version', 'release', 'epoch']) session.createEmptyBuild.assert_called_with(**kwarg) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_import_binary_rpm_with_exist_build( self, @@ -473,7 +463,7 @@ class TestImport(utils.CliTestCase): for k in ['name', 'version', 'release', 'epoch']) session.createEmptyBuild.assert_called_with(**kwarg) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.get_header_fields') @mock.patch('koji_cli.commands.unique_path') @mock.patch('koji_cli.commands.activate_session') @@ -531,7 +521,7 @@ class TestImport(utils.CliTestCase): session.createEmptyBuild.assert_not_called() session.importRPM.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.get_header_fields') @mock.patch('koji_cli.commands.unique_path') @mock.patch('koji_cli.commands.activate_session') @@ -587,8 +577,8 @@ class TestImport(utils.CliTestCase): kwarg['epoch'] = int(epoch) session.createEmptyBuild.assert_called_with(**kwarg) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji.get_header_fields') @mock.patch('koji_cli.commands.activate_session') def test_handle_import_has_build_states_test( @@ -642,7 +632,7 @@ class TestImport(utils.CliTestCase): session.getRPM.assert_not_called() session.importRPM.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_import_argument_error( self, diff --git a/tests/test_cli/test_import_cg.py b/tests/test_cli/test_import_cg.py index 1875a51..dbfe9d2 100644 --- a/tests/test_cli/test_import_cg.py +++ b/tests/test_cli/test_import_cg.py @@ -1,18 +1,12 @@ -from __future__ import absolute_import +import io import mock -import six +import os +import unittest from mock import call from koji_cli.commands import handle_import_cg from . import utils -import os - -try: - import unittest2 as unittest -except ImportError: - import unittest - class TestImportCG(utils.CliTestCase): @@ -33,7 +27,7 @@ class TestImportCG(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands._progress_callback') @mock.patch('koji_cli.commands.unique_path') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @@ -88,7 +82,7 @@ class TestImportCG(utils.CliTestCase): unique_path_mock.return_value = fake_srv_path # Case 1, running in fg, progress on - with mock.patch(utils.get_builtin_open()): + with mock.patch('builtins.open'): handle_import_cg(options, session, arguments) calls, expected = gen_value("Uploading %s\n", progress_callback_mock) @@ -98,7 +92,7 @@ class TestImportCG(utils.CliTestCase): session.CGImport.assert_called_with(metadata, fake_srv_path, None) # Case 2, running in fg, progress off - with mock.patch(utils.get_builtin_open()): + with mock.patch('builtins.open'): handle_import_cg(options, session, arguments + ['--noprogress']) calls, expected = gen_value("Uploading %s", None) @@ -113,7 +107,7 @@ class TestImportCG(utils.CliTestCase): session.CGImport.reset_mock() # Case 3, --test option - with mock.patch(utils.get_builtin_open()): + with mock.patch('builtins.open'): handle_import_cg(options, session, arguments + ['--test']) linked_upload_mock.assert_not_called() @@ -124,7 +118,7 @@ class TestImportCG(utils.CliTestCase): for item in metadata['output']] # Case 4, --link option - with mock.patch(utils.get_builtin_open()): + with mock.patch('builtins.open'): handle_import_cg(options, session, arguments + ['--link']) linked_upload_mock.assert_has_calls(calls) @@ -178,7 +172,7 @@ class TestImportCG(utils.CliTestCase): # is matched return the value we expected. self.custom_os_path_exists['/real/path/filename'] = False - with mock.patch(utils.get_builtin_open()): + with mock.patch('builtins.open'): with mock.patch('os.path.exists', new=self.mock_os_path_exists): with mock.patch('koji_cli.commands.json') as json_mock: diff --git a/tests/test_cli/test_import_comps.py b/tests/test_cli/test_import_comps.py index 18abae4..6d86f2a 100644 --- a/tests/test_cli/test_import_comps.py +++ b/tests/test_cli/test_import_comps.py @@ -1,13 +1,9 @@ -from __future__ import absolute_import +import io import json import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest try: import libcomps @@ -29,7 +25,7 @@ class TestImportComps(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.libcomps') @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._import_comps') @@ -69,7 +65,7 @@ class TestImportComps(utils.CliTestCase): mock_import_comps_alt.assert_not_called() self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.libcomps', new=None) @mock.patch('koji_cli.commands.yumcomps', create=True) @mock.patch('koji_cli.commands.activate_session') @@ -110,7 +106,7 @@ class TestImportComps(utils.CliTestCase): session, filename, tag, local_options) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.libcomps', new=None) @mock.patch('koji_cli.commands.yumcomps', new=None, create=True) @mock.patch('koji_cli.commands.activate_session') @@ -148,7 +144,7 @@ class TestImportComps(utils.CliTestCase): mock_import_comps.assert_not_called() mock_import_comps_alt.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._import_comps') @mock.patch('koji_cli.commands._import_comps_alt') @@ -184,8 +180,8 @@ class TestImportComps(utils.CliTestCase): mock_import_comps.assert_not_called() mock_import_comps_alt.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._import_comps') @mock.patch('koji_cli.commands._import_comps_alt') @@ -223,7 +219,7 @@ class TestImportComps(utils.CliTestCase): session.getTagGroups.assert_not_called() session.groupListAdd.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_import_comps_libcomps(self, stdout): if libcomps is None: raise SkipTest('no libcomps') @@ -239,7 +235,7 @@ class TestImportComps(utils.CliTestCase): calls_file, stdout) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_import_comps_sample_libcomps(self, stdout): if libcomps is None: raise SkipTest('no libcomps') @@ -255,7 +251,7 @@ class TestImportComps(utils.CliTestCase): calls_file, stdout) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.libcomps', new=None) @mock.patch('koji_cli.commands.yumcomps', create=True, new=yumcomps) def test_import_comps_yumcomps(self, stdout): @@ -273,7 +269,7 @@ class TestImportComps(utils.CliTestCase): calls_file, stdout) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.libcomps', new=None) @mock.patch('koji_cli.commands.yumcomps', create=True, new=yumcomps) def test_import_comps_sample_yumcomps(self, stdout): diff --git a/tests/test_cli/test_import_sig.py b/tests/test_cli/test_import_sig.py index 828ef9b..a73cbad 100644 --- a/tests/test_cli/test_import_sig.py +++ b/tests/test_cli/test_import_sig.py @@ -1,14 +1,9 @@ -from __future__ import absolute_import import copy import hashlib +import io import mock import random -import six -from six.moves import range -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import call from koji.util import base64encode @@ -73,7 +68,7 @@ class TestImportSIG(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.rip_rpm_sighdr') @mock.patch('koji.get_sigpacket_key_id') @mock.patch('koji.get_header_fields') diff --git a/tests/test_cli/test_list_api.py b/tests/test_cli/test_list_api.py index 556afcf..11296fe 100644 --- a/tests/test_cli/test_list_api.py +++ b/tests/test_cli/test_list_api.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import anon_handle_list_api from . import utils @@ -22,7 +18,7 @@ class TestListApi(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.ensure_connection') def test_anon_handle_list_api( self, diff --git a/tests/test_cli/test_list_channels.py b/tests/test_cli/test_list_channels.py index 84a6022..22f6678 100644 --- a/tests/test_cli/test_list_channels.py +++ b/tests/test_cli/test_list_channels.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -try: - import unittest2 as unittest -except ImportError: - import unittest -from six.moves import StringIO +import unittest import koji @@ -18,7 +14,7 @@ class TestListChannels(unittest.TestCase): self.session.getAPIVersion.return_value = koji.API_VERSION self.args = [] - @mock.patch('sys.stdout', new_callable=StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.ensure_connection') def test_list_channels(self, ensure_connection_mock, stdout): self.session.listChannels.return_value = [ diff --git a/tests/test_cli/test_list_commands.py b/tests/test_cli/test_list_commands.py index ef9b1f2..e73a5eb 100644 --- a/tests/test_cli/test_list_commands.py +++ b/tests/test_cli/test_list_commands.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import +import io import mock import os -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from . import loadcli, utils cli = loadcli.cli @@ -27,7 +23,7 @@ class TestListCommands(unittest.TestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_list_commands(self, stdout): cli.list_commands() actual = stdout.getvalue() @@ -36,7 +32,7 @@ class TestListCommands(unittest.TestCase): expected = f.read().decode('ascii').format(progname=utils.PROGNAME) self.assertMultiLineEqual(actual, expected) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_handle_admin_help(self, stdout): options, arguments = mock.MagicMock(), mock.MagicMock() options.admin = True diff --git a/tests/test_cli/test_list_groups.py b/tests/test_cli/test_list_groups.py index 0abe89f..6144fd4 100644 --- a/tests/test_cli/test_list_groups.py +++ b/tests/test_cli/test_list_groups.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import +import io import mock -import six import time -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import anon_handle_list_groups from . import utils @@ -32,7 +28,7 @@ class TestListGroups(utils.CliTestCase): def tearDown(self): mock.patch.stopall() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.ensure_connection') def test_anon_handle_list_groups_argument_error( @@ -187,7 +183,7 @@ class TestListGroups(utils.CliTestCase): args = ['fedora26-build'] args += [query_group] if query_group != '' else [] args += options if options else [] - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: anon_handle_list_groups(self.options, self.session, args) self.assert_console_message(stdout, expected) diff --git a/tests/test_cli/test_list_notifications.py b/tests/test_cli/test_list_notifications.py index a214abd..0abbf57 100644 --- a/tests/test_cli/test_list_notifications.py +++ b/tests/test_cli/test_list_notifications.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -try: - import unittest2 as unittest -except ImportError: - import unittest -from six.moves import StringIO +import unittest import koji @@ -17,7 +13,7 @@ class TestListNotifications(unittest.TestCase): self.session = mock.MagicMock() self.session.getAPIVersion.return_value = koji.API_VERSION - @mock.patch('sys.stdout', new_callable=StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_list_notifications(self, activate_session_mock, stdout): self.session.getBuildNotifications.return_value = [ @@ -51,7 +47,7 @@ No notification blocks self.session.getUser.assert_not_called() self.session.getBuildNotifications.assert_called_once_with(None) - @mock.patch('sys.stdout', new_callable=StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.ensure_connection') def test_list_notifications_user(self, ensure_connection_mock, stdout): self.session.getBuildNotifications.return_value = [ @@ -101,7 +97,7 @@ Notification blocks self.session.getBuildNotifications.assert_called_once_with(321) @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_list_notifications_missing_params(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() @@ -115,7 +111,7 @@ Notification blocks @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_list_notifications_no_args(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() diff --git a/tests/test_cli/test_list_permissions.py b/tests/test_cli/test_list_permissions.py index 1afb215..247a14d 100644 --- a/tests/test_cli/test_list_permissions.py +++ b/tests/test_cli/test_list_permissions.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_list_permissions from . import utils @@ -22,8 +18,8 @@ class TestListPermissions(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_list_permissions( self, diff --git a/tests/test_cli/test_list_tagged.py b/tests/test_cli/test_list_tagged.py index 1b68113..032b2cb 100644 --- a/tests/test_cli/test_list_tagged.py +++ b/tests/test_cli/test_list_tagged.py @@ -1,9 +1,8 @@ -import sys +import io import os import time import mock -import six from koji_cli.commands import anon_handle_list_tagged from . import utils @@ -61,7 +60,7 @@ class TestCliListTagged(utils.CliTestCase): os.environ['TZ'] = self.original_timezone time.tzset() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.util.eventFromOpts', return_value={'id': 1000, 'ts': 1000000.11}) @mock.patch('koji_cli.commands.ensure_connection') @@ -84,7 +83,7 @@ class TestCliListTagged(utils.CliTestCase): '---------------------------------------- -------------------- ----------------\n' 'n-v-r tag owner\n') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.util.eventFromOpts', return_value=None) @mock.patch('koji_cli.commands.ensure_connection') def test_list_tagged_builds_paths(self, ensure_connection_mock, @@ -97,7 +96,7 @@ class TestCliListTagged(utils.CliTestCase): '---------------------------------------- -------------------- ----------------\n' '/mnt/koji/packages/packagename/version/1.el6 tag owner\n') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.util.eventFromOpts', return_value=None) @mock.patch('koji_cli.commands.ensure_connection') def test_list_tagged_rpms(self, ensure_connection_mock, @@ -120,7 +119,7 @@ class TestCliListTagged(utils.CliTestCase): 'sigkey rpmA-0.0.1-1.el6.noarch\n' 'sigkey rpmA-0.0.1-1.el6.x86_64\n') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.util.eventFromOpts', return_value=None) @mock.patch('koji_cli.commands.ensure_connection') def test_list_tagged_rpms_paths(self, ensure_connection_mock, @@ -133,7 +132,7 @@ class TestCliListTagged(utils.CliTestCase): '/mnt/koji/packages/packagename/version/1.el6/noarch/rpmA-0.0.1-1.el6.noarch.rpm\n' '/mnt/koji/packages/packagename/version/1.el6/x86_64/rpmA-0.0.1-1.el6.x86_64.rpm\n') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.util.eventFromOpts', return_value=None) @mock.patch('koji_cli.commands.ensure_connection') def test_list_tagged_sigs_paths(self, ensure_connection_mock, @@ -144,7 +143,7 @@ class TestCliListTagged(utils.CliTestCase): anon_handle_list_tagged(self.options, self.session, args) self.assert_console_message(stdout, '') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.util.eventFromOpts', return_value=None) @mock.patch('koji_cli.commands.ensure_connection') def test_list_tagged_type(self, ensure_connection_mock, @@ -174,7 +173,7 @@ class TestCliListTagged(utils.CliTestCase): '---------------------------------------- -------------------- -------------------- -------------------- ----------------\n' 'n-v-r tag group artifact owner\n') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.util.eventFromOpts', return_value=None) @mock.patch('koji_cli.commands.ensure_connection') def test_list_tagged_type_paths(self, ensure_connection_mock, diff --git a/tests/test_cli/test_list_tasks.py b/tests/test_cli/test_list_tasks.py index 8daebc1..efb5488 100644 --- a/tests/test_cli/test_list_tasks.py +++ b/tests/test_cli/test_list_tasks.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from koji_cli.lib import _list_tasks @@ -169,7 +165,7 @@ class TestCliListTasks(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands._list_tasks') @mock.patch('koji_cli.commands.activate_session') def test_handle_list_tasks( diff --git a/tests/test_cli/test_list_volumes.py b/tests/test_cli/test_list_volumes.py index 0df5102..3801b73 100644 --- a/tests/test_cli/test_list_volumes.py +++ b/tests/test_cli/test_list_volumes.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_list_volumes from . import utils @@ -15,7 +11,7 @@ class TestListVolumes(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_list_volumes( self, diff --git a/tests/test_cli/test_load_plugins.py b/tests/test_cli/test_load_plugins.py index 7e7e7b1..5a56ab2 100644 --- a/tests/test_cli/test_load_plugins.py +++ b/tests/test_cli/test_load_plugins.py @@ -1,12 +1,5 @@ -from __future__ import absolute_import - import os - -try: - import unittest2 as unittest -except ImportError: - import unittest - +import unittest import mock from . import loadcli diff --git a/tests/test_cli/test_maven_build.py b/tests/test_cli/test_maven_build.py index f21086c..b8f5a4b 100644 --- a/tests/test_cli/test_maven_build.py +++ b/tests/test_cli/test_maven_build.py @@ -1,14 +1,9 @@ -from __future__ import absolute_import - +import io import mock import optparse import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_maven_build from . import utils @@ -46,7 +41,7 @@ class TestMavenBuild(utils.CliTestCase): # Mock out the xmlrpc server self.session = mock.MagicMock() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -88,8 +83,8 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -128,8 +123,8 @@ Task info: weburl/taskinfo?taskID=1 self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -168,8 +163,8 @@ Task info: weburl/taskinfo?taskID=1 self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -236,7 +231,7 @@ Options: self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -277,7 +272,7 @@ Options: self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -322,7 +317,7 @@ Options: self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -367,8 +362,8 @@ Options: self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch( 'koji.util.parse_maven_param', @@ -501,7 +496,7 @@ Task info: weburl/taskinfo?taskID=1 maven_opts_mock.assert_not_called() self.session.mavenBuild.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji.util.parse_maven_param') @mock.patch('koji.util.maven_opts') @@ -553,7 +548,7 @@ Task info: weburl/taskinfo?taskID=1 self.session.logout.assert_not_called() watch_tasks_mock.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji.util.parse_maven_param') @mock.patch('koji.util.maven_opts', return_value={}) @@ -636,7 +631,7 @@ Task info: weburl/taskinfo?taskID=1 self.session.mavenBuild.assert_called_once_with( source, target, opts, priority=priority) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -681,7 +676,7 @@ Task info: weburl/taskinfo?taskID=1 poll_interval=self.options.poll_interval) self.assertEqual(rv, 0) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands._running_in_bg', return_value=True) @mock.patch('koji_cli.commands.watch_tasks', return_value=0) @@ -725,7 +720,7 @@ Task info: weburl/taskinfo?taskID=1 watch_tasks_mock.assert_not_called() self.assertIsNone(rv) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji.util.parse_maven_param') @mock.patch('koji.util.maven_opts', return_value={}) diff --git a/tests/test_cli/test_maven_chain.py b/tests/test_cli/test_maven_chain.py index 91429e2..789e726 100644 --- a/tests/test_cli/test_maven_chain.py +++ b/tests/test_cli/test_maven_chain.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_maven_chain from . import utils @@ -26,8 +22,8 @@ class TestMavenChain(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji.util.parse_maven_chain') @mock.patch('koji_cli.commands._running_in_bg', return_value=False) @mock.patch('koji_cli.commands.watch_tasks') @@ -141,8 +137,8 @@ class TestMavenChain(utils.CliTestCase): session, [self.task_id], quiet=options.quiet, poll_interval=options.poll_interval) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_maven_no_argument_error( self, diff --git a/tests/test_cli/test_mock_config.py b/tests/test_cli/test_mock_config.py index a863f15..503940a 100644 --- a/tests/test_cli/test_mock_config.py +++ b/tests/test_cli/test_mock_config.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import anon_handle_mock_config from . import utils @@ -58,8 +54,8 @@ config_opts['macros']['%distribution'] = 'Koji Testing' %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.genMockConfig') @mock.patch('koji_cli.commands.ensure_connection') def test_handle_mock_config_buildroot_option( @@ -116,8 +112,8 @@ config_opts['macros']['%distribution'] = 'Koji Testing' gen_config_mock.assert_called_with( self.progname, buildroot_info['arch'], **opts) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.genMockConfig') @mock.patch('koji_cli.commands.ensure_connection') def test_handle_mock_config_task_option( @@ -177,8 +173,8 @@ config_opts['macros']['%distribution'] = 'Koji Testing' gen_config_mock.assert_called_with( self.progname, multi_broots[0]['arch'], **opts) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.genMockConfig') @mock.patch('koji_cli.commands.ensure_connection') def test_handle_mock_config_tag_option( @@ -264,8 +260,8 @@ config_opts['macros']['%distribution'] = 'Koji Testing' gen_config_mock.assert_called_with( self.progname, tag['arch'], **opts) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji.genMockConfig') @mock.patch('koji_cli.commands.ensure_connection') @mock.patch('koji_cli.commands.open') @@ -341,7 +337,7 @@ config_opts['macros']['%distribution'] = 'Koji Testing' gen_config_mock.assert_called_with( self.progname, arch, **opts) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.ensure_connection') def test_handle_mock_config_errors(self, ensure_connection_mock, stderr): """Test anon_handle_mock_config general error messages""" diff --git a/tests/test_cli/test_move_build.py b/tests/test_cli/test_move_build.py index 19b5fed..555096c 100644 --- a/tests/test_cli/test_move_build.py +++ b/tests/test_cli/test_move_build.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_move_build from . import utils @@ -55,7 +51,7 @@ class TestMoveBuild(utils.CliTestCase): for i, t in enumerate(tasks): expected += "Created task %d, moving %s" % (t, pkgs[i]) + "\n" - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: rv = handle_move_build(self.options, self.session, arguments) # sanity checks @@ -82,7 +78,7 @@ class TestMoveBuild(utils.CliTestCase): expected = "Created task %d, moving %s" % (task_id, pkgs[0]) + "\n" - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: rv = handle_move_build(self.options, self.session, arguments) # sanity checks @@ -107,7 +103,7 @@ class TestMoveBuild(utils.CliTestCase): ] expected = 'Invalid package name %s, skipping.' % 'pkg_c-2.2-2fc26' + "\n" - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: rv = handle_move_build(self.options, self.session, arguments) self.assertEqual(rv, None) diff --git a/tests/test_cli/test_regen_repo.py b/tests/test_cli/test_regen_repo.py index 90f16b1..6167d81 100644 --- a/tests/test_cli/test_regen_repo.py +++ b/tests/test_cli/test_regen_repo.py @@ -1,12 +1,7 @@ -from __future__ import absolute_import -from __future__ import print_function import copy +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_regen_repo from . import utils @@ -77,7 +72,7 @@ class TestRegenRepo(utils.CliTestCase): expected += "Regenerating repo for tag: %s" % self.tag_name + "\n" expected += "Created task: %d" % self.task_id + "\n" expected += "Task info: %s/taskinfo?taskID=%s" % (self.options.weburl, self.task_id) + "\n" - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: rv = handle_regen_repo(self.options, self.session, arguments) self.assertEqual(rv, return_value) self.assert_console_message(stdout, expected) diff --git a/tests/test_cli/test_remove_channel.py b/tests/test_cli/test_remove_channel.py index a82ca69..542de5e 100644 --- a/tests/test_cli/test_remove_channel.py +++ b/tests/test_cli/test_remove_channel.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_remove_channel from . import utils @@ -17,7 +13,7 @@ class TestRemoveChannel(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_channel(self, activate_session_mock, stdout): channel = 'channel' @@ -42,7 +38,7 @@ class TestRemoveChannel(utils.CliTestCase): session.removeChannel.assert_called_once_with(channel, force=None) self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_channel_force(self, activate_session_mock, stdout): channel = 'channel' @@ -68,7 +64,7 @@ class TestRemoveChannel(utils.CliTestCase): session.removeChannel.assert_called_once_with(channel, force=True) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_channel_no_channel( self, activate_session_mock, stderr): @@ -95,8 +91,8 @@ class TestRemoveChannel(utils.CliTestCase): session.getChannel.assert_called_once_with(channel) session.removeChannel.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_channel_help( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_remove_group.py b/tests/test_cli/test_remove_group.py index 4314737..1e45010 100644 --- a/tests/test_cli/test_remove_group.py +++ b/tests/test_cli/test_remove_group.py @@ -1,7 +1,5 @@ -from __future__ import absolute_import - +import io import mock -import six from koji_cli.commands import handle_remove_group from . import utils @@ -18,8 +16,8 @@ class TestRemoveGroup(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_group_nonexistent_tag(self, activate_session_mock, stdout, stderr): tag = 'nonexistent-tag' @@ -42,8 +40,8 @@ class TestRemoveGroup(utils.CliTestCase): session.getTagGroups.assert_not_called() session.groupListRemove.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_group_nonexistent_group(self, activate_session_mock, stdout, stderr): tag = 'tag' @@ -67,8 +65,8 @@ class TestRemoveGroup(utils.CliTestCase): session.getTagGroups.assert_called_once_with(tag, inherit=False) session.groupListRemove.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_group(self, activate_session_mock, stdout, stderr): tag = 'tag' @@ -93,8 +91,8 @@ class TestRemoveGroup(utils.CliTestCase): session.groupListRemove.assert_called_once_with(tag, group) self.assertEqual(rv, None) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_group_error_handling(self, activate_session_mock, stdout, stderr): session = mock.MagicMock() diff --git a/tests/test_cli/test_remove_host_from_channel.py b/tests/test_cli/test_remove_host_from_channel.py index a0dd8a1..c789328 100644 --- a/tests/test_cli/test_remove_host_from_channel.py +++ b/tests/test_cli/test_remove_host_from_channel.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_remove_host_from_channel from . import utils @@ -16,7 +12,7 @@ class TestRemoveHostFromChannel(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_host_from_channel( self, activate_session_mock, stdout): @@ -46,7 +42,7 @@ class TestRemoveHostFromChannel(utils.CliTestCase): session.removeHostFromChannel.assert_called_once_with(host, channel) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_host_from_channel_no_host( self, activate_session_mock, stderr): @@ -75,7 +71,7 @@ class TestRemoveHostFromChannel(utils.CliTestCase): session.listChannels.assert_not_called() session.removeHostFromChannel.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_host_from_channel_not_a_member( self, activate_session_mock, stderr): @@ -107,8 +103,8 @@ class TestRemoveHostFromChannel(utils.CliTestCase): session.listChannels.assert_called_once_with(host_info['id']) session.removeHostFromChannel.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_host_from_channel_help( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_remove_notification.py b/tests/test_cli/test_remove_notification.py index df253a5..511e315 100644 --- a/tests/test_cli/test_remove_notification.py +++ b/tests/test_cli/test_remove_notification.py @@ -1,12 +1,7 @@ -from __future__ import absolute_import +import io import koji import mock -try: - import unittest2 as unittest -except ImportError: - import unittest - -from six.moves import StringIO +import unittest from koji_cli.commands import handle_remove_notification @@ -26,7 +21,7 @@ class TestAddHost(unittest.TestCase): @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_remove_notification_bogus(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() @@ -37,7 +32,7 @@ class TestAddHost(unittest.TestCase): @mock.patch('sys.exit') - @mock.patch('sys.stderr', new_callable=StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_handle_remove_notifications_no_args(self, sys_stderr, sys_exit): sys_exit.side_effect = SystemExit() diff --git a/tests/test_cli/test_remove_pkg.py b/tests/test_cli/test_remove_pkg.py index 8c5df10..e7d5893 100644 --- a/tests/test_cli/test_remove_pkg.py +++ b/tests/test_cli/test_remove_pkg.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import call @@ -18,7 +14,7 @@ class TestRemovePkg(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_pkg(self, activate_session_mock, stderr): tag = 'tag' @@ -50,7 +46,7 @@ class TestRemovePkg(utils.CliTestCase): tag, package, **kwargs) session.multiCall.assert_called_once_with(strict=True) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_pkg_multi_pkg(self, activate_session_mock, stdout): tag = 'tag' @@ -89,7 +85,7 @@ class TestRemovePkg(utils.CliTestCase): strict=True)]) self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_pkg_force(self, activate_session_mock, stdout): tag = 'tag' @@ -128,7 +124,7 @@ class TestRemovePkg(utils.CliTestCase): strict=True)]) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_pkg_no_package(self, activate_session_mock, stderr): tag = 'tag' @@ -162,7 +158,7 @@ class TestRemovePkg(utils.CliTestCase): session.packageListRemove.assert_not_called() session.multiCall.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_pkg_tag_no_exists( self, activate_session_mock, stderr): @@ -191,8 +187,8 @@ class TestRemovePkg(utils.CliTestCase): session.listPackages.assert_not_called() session.packageListRemove.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_remove_pkg_help( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_rename_channel.py b/tests/test_cli/test_rename_channel.py index 45857e6..f703849 100644 --- a/tests/test_cli/test_rename_channel.py +++ b/tests/test_cli/test_rename_channel.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import +import io import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_rename_channel from . import utils @@ -17,7 +13,7 @@ class TestRenameChannel(utils.CliTestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_rename_channel(self, activate_session_mock, stdout): old_name = 'old_name' @@ -43,7 +39,7 @@ class TestRenameChannel(utils.CliTestCase): session.renameChannel.assert_called_once_with(old_name, new_name) self.assertNotEqual(rv, 1) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_rename_channel_no_channel( self, activate_session_mock, stderr): @@ -71,8 +67,8 @@ class TestRenameChannel(utils.CliTestCase): session.getChannel.assert_called_once_with(old_name) session.renameChannel.assert_not_called() - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_rename_channel_help( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_restart_host.py b/tests/test_cli/test_restart_host.py index 296c2ae..eebbbea 100644 --- a/tests/test_cli/test_restart_host.py +++ b/tests/test_cli/test_restart_host.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from koji_cli.commands import handle_restart_hosts @@ -48,8 +44,8 @@ class TestRestartHosts(utils.CliTestCase): watch_tasks_mock.assert_called_with( session, [self.task_id], quiet=None, poll_interval=3) - @mock.patch('sys.stderr', new_callable=six.StringIO) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.watch_tasks') @mock.patch('koji_cli.commands._running_in_bg') @mock.patch('koji_cli.commands.activate_session') diff --git a/tests/test_cli/test_resubmit.py b/tests/test_cli/test_resubmit.py index 4dfae37..3324587 100644 --- a/tests/test_cli/test_resubmit.py +++ b/tests/test_cli/test_resubmit.py @@ -1,11 +1,6 @@ -from __future__ import absolute_import -from __future__ import print_function +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_resubmit from . import utils @@ -37,8 +32,8 @@ Log Files: %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.watch_tasks') @mock.patch('koji_cli.commands.activate_session') def test_handle_resubmit( @@ -89,8 +84,8 @@ Log Files: session.resubmitTask.assert_called_once() self.assert_console_message(stdout, '') - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_resubmit_argument_error( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_revoke_cg_access.py b/tests/test_cli/test_revoke_cg_access.py index 9aa381a..a919782 100644 --- a/tests/test_cli/test_revoke_cg_access.py +++ b/tests/test_cli/test_revoke_cg_access.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_revoke_cg_access from . import utils @@ -22,7 +18,7 @@ class TestRevokeCGAccess(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_revoke_cg_access( self, diff --git a/tests/test_cli/test_revoke_permission.py b/tests/test_cli/test_revoke_permission.py index f807145..82d9bdf 100644 --- a/tests/test_cli/test_revoke_permission.py +++ b/tests/test_cli/test_revoke_permission.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_revoke_permission from . import utils @@ -22,7 +18,7 @@ class TestRevokePermission(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_revoke_permission( self, diff --git a/tests/test_cli/test_running_in_bg.py b/tests/test_cli/test_running_in_bg.py index 0f5169d..d517190 100644 --- a/tests/test_cli/test_running_in_bg.py +++ b/tests/test_cli/test_running_in_bg.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.lib import _running_in_bg diff --git a/tests/test_cli/test_search.py b/tests/test_cli/test_search.py index 1d4c6c3..2030f6e 100644 --- a/tests/test_cli/test_search.py +++ b/tests/test_cli/test_search.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import anon_handle_search from . import utils @@ -23,7 +19,7 @@ Available search types: package, build, tag, target, user, host, rpm, maven, win %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_anon_handle_search( self, stdout): diff --git a/tests/test_cli/test_set_build_volume.py b/tests/test_cli/test_set_build_volume.py index 357527e..2c22c26 100644 --- a/tests/test_cli/test_set_build_volume.py +++ b/tests/test_cli/test_set_build_volume.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_set_build_volume from . import utils @@ -22,7 +18,7 @@ class TestSetBuildVolume(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_set_build_volume(self, activate_session_mock, stdout): """Test handle_set_build_volume function""" diff --git a/tests/test_cli/test_set_pkg_arches.py b/tests/test_cli/test_set_pkg_arches.py index 6501e79..9f69256 100644 --- a/tests/test_cli/test_set_pkg_arches.py +++ b/tests/test_cli/test_set_pkg_arches.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_set_pkg_arches from . import utils @@ -22,7 +18,7 @@ class TestSetPkgArches(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_set_pkg_arches( self, diff --git a/tests/test_cli/test_set_pkg_owner.py b/tests/test_cli/test_set_pkg_owner.py index 18e57af..9ce474a 100644 --- a/tests/test_cli/test_set_pkg_owner.py +++ b/tests/test_cli/test_set_pkg_owner.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_set_pkg_owner from . import utils @@ -22,7 +18,7 @@ class TestSetPkgOwner(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_set_pkg_owner( self, diff --git a/tests/test_cli/test_set_task_priority.py b/tests/test_cli/test_set_task_priority.py index 1455fc0..21314e4 100644 --- a/tests/test_cli/test_set_task_priority.py +++ b/tests/test_cli/test_set_task_priority.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_set_task_priority from . import utils @@ -22,7 +18,7 @@ class TestSetTaskPriority(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_set_task_priority( self, diff --git a/tests/test_cli/test_spin_commands.py b/tests/test_cli/test_spin_commands.py index f5f3c42..c7695f9 100644 --- a/tests/test_cli/test_spin_commands.py +++ b/tests/test_cli/test_spin_commands.py @@ -1,11 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six - -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from koji_cli.commands import handle_spin_livecd, handle_spin_livemedia, handle_spin_appliance, _build_image @@ -118,7 +113,7 @@ class TestBuildImage(utils.CliTestCase): args = [self.options, self.task_opts, self.session, self.arguments, 'livecd'] - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image(*args) self.assert_console_message(stdout, expected) self.session.buildImage.assert_called_once() @@ -135,7 +130,7 @@ class TestBuildImage(utils.CliTestCase): args = [self.options, self.task_opts, self.session, self.arguments, 'appliance'] - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image(*args) self.assert_console_message(stdout, expected) self.session.buildImage.assert_called_once() @@ -153,7 +148,7 @@ class TestBuildImage(utils.CliTestCase): args = [self.options, self.task_opts, self.session, self.arguments, 'livemedia'] - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: _build_image(*args) self.assert_console_message(stdout, expected) self.session.buildImage.assert_called_once() @@ -174,7 +169,7 @@ class TestBuildImage(utils.CliTestCase): args = [self.options, self.task_opts, self.session, self.arguments, 'livemedia'] - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: self.assertEqual(self.task_id, _build_image(*args)) args, kwargs = self.session.buildImage.call_args self.assert_console_message(stdout, expected) @@ -197,7 +192,7 @@ class TestBuildImage(utils.CliTestCase): args = [self.options, self.task_opts, self.session, self.arguments, 'livemedia'] - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: self.assertEqual(None, _build_image(*args)) args, kwargs = self.session.buildImage.call_args self.assert_console_message(stdout, expected) @@ -263,7 +258,7 @@ class TestSpinAppliance(utils.CliTestCase): def test_handle_spin_appliance(self, build_image_mock): """Test handle_spin_appliance function""" args = ['name', 'version', 'target', 'arch', 'file.ks'] - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: handle_spin_appliance(self.options, self.session, args) args, kwargs = build_image_mock.call_args empty_opts = dict((k, None) for k in APPLIANCE_OPTIONS) @@ -348,7 +343,7 @@ class TestSpinLiveMedia(utils.CliTestCase): def test_handle_spin_livemedia(self, build_image_mock): """Test handle_spin_livemedia function""" args = ['name', 'version', 'target', 'arch', 'file.ks'] - with mock.patch('sys.stdout', new_callable=six.StringIO): + with mock.patch('sys.stdout', new_callable=io.StringIO): handle_spin_livemedia(self.options, self.session, args) args, kwargs = build_image_mock.call_args empty_opts = dict((k, None) for k in LIVEMEDIA_OPTIONS) @@ -447,7 +442,7 @@ class TestSpinLiveCD(utils.CliTestCase): def test_handle_spin_livecd(self, build_image_mock): """Test handle_spin_livecd function""" args = ['name', 'version', 'target', 'arch', 'file.ks'] - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: handle_spin_livecd(self.options, self.session, args) args, kwargs = build_image_mock.call_args empty_opts = dict((k, None) for k in LIVECD_OPTIONS) diff --git a/tests/test_cli/test_tag_build.py b/tests/test_cli/test_tag_build.py index e82e007..4bcd8ff 100644 --- a/tests/test_cli/test_tag_build.py +++ b/tests/test_cli/test_tag_build.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_tag_build from . import utils @@ -45,7 +41,7 @@ class TestTagBuild(utils.CliTestCase): self.session.tagBuild.side_effect = tasks expected = ''.join(["Created task %d" % t + "\n" for t in tasks]) - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: rv = handle_tag_build(self.options, self.session, arguments) self.assertEqual(rv, True) self.assert_console_message(stdout, expected) @@ -66,7 +62,7 @@ class TestTagBuild(utils.CliTestCase): expected = "Created task %d" % task_id + "\n" self.session.tagBuild.side_effect = [task_id] - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: rv = handle_tag_build(self.options, self.session, arguments) self.assertEqual(rv, None) self.assert_console_message(stdout, expected) diff --git a/tests/test_cli/test_taskinfo.py b/tests/test_cli/test_taskinfo.py index 08bb3ca..3ef19c1 100644 --- a/tests/test_cli/test_taskinfo.py +++ b/tests/test_cli/test_taskinfo.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import, print_function import collections +import io import mock -import six import time -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from koji_cli.commands import anon_handle_taskinfo, \ @@ -426,7 +422,7 @@ Finished: Thu Jan 1 00:50:00 1970 """ % tuple('/mnt/koji/work/tasks/2/2/' + k for k in task_output.keys()) - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: with mock.patch('time.localtime', new=time.gmtime): _printTaskInfo(session, 1, '/mnt/koji') self.assert_console_message(stdout, expected) @@ -566,7 +562,7 @@ Build: bash-4.4.12-5.fc26 (1) Host: kojibuilder """ - with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout: + with mock.patch('sys.stdout', new_callable=io.StringIO) as stdout: with mock.patch('time.localtime', new=time.gmtime): _printTaskInfo(session, 1, '/mnt/koji') self.assert_console_message(stdout, expected) @@ -594,7 +590,7 @@ class TestTaskInfo(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') @mock.patch('koji_cli.commands.ensure_connection') def test_anon_handle_taskinfo( diff --git a/tests/test_cli/test_unblock_group_pkg.py b/tests/test_cli/test_unblock_group_pkg.py index d82deb1..eb4febe 100644 --- a/tests/test_cli/test_unblock_group_pkg.py +++ b/tests/test_cli/test_unblock_group_pkg.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_unblock_group_pkg from . import utils diff --git a/tests/test_cli/test_unblock_group_req.py b/tests/test_cli/test_unblock_group_req.py index cd88a9c..262f85f 100644 --- a/tests/test_cli/test_unblock_group_req.py +++ b/tests/test_cli/test_unblock_group_req.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_unblock_group_req from . import utils diff --git a/tests/test_cli/test_unblock_pkg.py b/tests/test_cli/test_unblock_pkg.py index 1d1923b..d0bd342 100644 --- a/tests/test_cli/test_unblock_pkg.py +++ b/tests/test_cli/test_unblock_pkg.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_unblock_pkg @@ -23,7 +19,7 @@ class TestUnblockPkg(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_unblock_pkg( self, diff --git a/tests/test_cli/test_unique_path.py b/tests/test_cli/test_unique_path.py index a223b9a..07e7c02 100644 --- a/tests/test_cli/test_unique_path.py +++ b/tests/test_cli/test_unique_path.py @@ -1,10 +1,4 @@ -from __future__ import absolute_import -try: - import unittest2 as unittest -except ImportError: - import unittest - -from six.moves import range +import unittest from koji_cli.lib import unique_path diff --git a/tests/test_cli/test_upload_progress_callback.py b/tests/test_cli/test_upload_progress_callback.py index 6bcf62f..16fba8e 100644 --- a/tests/test_cli/test_upload_progress_callback.py +++ b/tests/test_cli/test_upload_progress_callback.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.lib import _format_size, _format_secs, _progress_callback @@ -31,7 +27,7 @@ class TestUploadProgressCallBack(unittest.TestCase): self.assertEqual(_format_secs(4321), '01:12:01') self.assertEqual(_format_secs(4321.567), '01:12:01') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_progress_callback(self, stdout): _progress_callback(12300, 234000, 5670, 80, 900) _progress_callback(45600, 234000, 5670, 0, 900) diff --git a/tests/test_cli/test_wait_repo.py b/tests/test_cli/test_wait_repo.py index a73776f..667030e 100644 --- a/tests/test_cli/test_wait_repo.py +++ b/tests/test_cli/test_wait_repo.py @@ -1,12 +1,7 @@ -from __future__ import absolute_import -from __future__ import print_function import copy +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import anon_handle_wait_repo from . import utils @@ -60,8 +55,8 @@ class TestWaitRepo(utils.CliTestCase): mock.patch.stopall() @mock.patch('time.time') - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def __test_wait_repo(self, args, expected, stderr, stdout, time_mock, ret_code=0): self.options.quiet = False time_mock.side_effect = [0, 1, 2, 3] @@ -78,8 +73,8 @@ class TestWaitRepo(utils.CliTestCase): self.assertIn(rv, [0, None]) @mock.patch('time.time') - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def __test_wait_repo_timeout(self, args, expected, stderr, stdout, time_mock, ret_code=0): self.options.quiet = False time_mock.side_effect = [0, 61, 62] @@ -192,7 +187,7 @@ class TestWaitRepo(utils.CliTestCase): activate_session=None) self.activate_session.assert_not_called() - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) def test_anon_handle_wait_repo_target_not_found(self, stderr): """Test anon_handle_wait_repo function on target not found cases""" diff --git a/tests/test_cli/test_watch_tasks.py b/tests/test_cli/test_watch_tasks.py index e95407b..9134291 100644 --- a/tests/test_cli/test_watch_tasks.py +++ b/tests/test_cli/test_watch_tasks.py @@ -1,16 +1,11 @@ -from __future__ import absolute_import +import io import json import mock import os -import six import sys -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import call -from six.moves import range from koji_cli.lib import watch_tasks from .fakeclient import FakeClientSession, RecordingClientSession @@ -45,7 +40,7 @@ class TestWatchTasks(unittest.TestCase): # Show long diffs in error output... maxDiff = None - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_watch_tasks_no_tasklist(self, stdout): returned = watch_tasks(self.session, [], poll_interval=0) actual = stdout.getvalue() @@ -53,7 +48,7 @@ class TestWatchTasks(unittest.TestCase): self.assertIsNone(returned) self.assertEqual(actual, expected) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_watch_tasks(self, stdout): # self.setup_record('foo.json') cfile = os.path.dirname(__file__) + '/data/calls/watchtasks1.json' @@ -73,7 +68,7 @@ class TestWatchTasks(unittest.TestCase): self.assertMultiLineEqual(stdout.getvalue(), expected) @mock.patch('time.sleep') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_watch_tasks_fail(self, stdout, sleep): # self.setup_record('foo.json') cfile = os.path.dirname(__file__) + '/data/calls/watchtasks2.json' @@ -97,7 +92,7 @@ class TestWatchTasks(unittest.TestCase): self.assertMultiLineEqual(stdout.getvalue(), expected) @mock.patch('time.sleep') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_watch_tasks_with_keyboardinterrupt(self, stdout, sleep): """Raise KeyboardInterrupt inner watch_tasks. Raising it by SIGNAL might be better""" @@ -122,7 +117,7 @@ Running Tasks: self.assertMultiLineEqual(stdout.getvalue(), expected) @mock.patch('time.sleep') - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_watch_tasks_with_keyboardinterrupt_handler(self, stdout, sleep): """Raise KeyboardInterrupt inner watch_tasks with a ki_handler""" cfile = os.path.dirname(__file__) + '/data/calls/watchtasks2.json' diff --git a/tests/test_cli/test_wrapper_rpm.py b/tests/test_cli/test_wrapper_rpm.py index ee69f04..7865ee4 100644 --- a/tests/test_cli/test_wrapper_rpm.py +++ b/tests/test_cli/test_wrapper_rpm.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji_cli.commands import handle_wrapper_rpm from . import utils @@ -27,8 +23,8 @@ class TestWrapperRpm(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands._running_in_bg') @mock.patch('koji_cli.commands.watch_tasks') @mock.patch('koji_cli.commands.activate_session') @@ -82,8 +78,8 @@ class TestWrapperRpm(utils.CliTestCase): session, [self.task_id], quiet=options.quiet, poll_interval=options.poll_interval) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji.util.parse_maven_param') @mock.patch('koji_cli.commands._running_in_bg') @mock.patch('koji_cli.commands.watch_tasks') @@ -148,6 +144,7 @@ class TestWrapperRpm(utils.CliTestCase): options, session, arguments, + stdout='', stderr={'message': '.*error: fake-value-error', 'regex': True} ) @@ -192,8 +189,8 @@ class TestWrapperRpm(utils.CliTestCase): session, [self.task_id], quiet=options.quiet, poll_interval=options.poll_interval) - @mock.patch('sys.stdout', new_callable=six.StringIO) - @mock.patch('sys.stderr', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) + @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_wrapper_rpm_argument_error( self, activate_session_mock, stderr, stdout): diff --git a/tests/test_cli/test_write_signed_rpm.py b/tests/test_cli/test_write_signed_rpm.py index 1c6a07f..8292c69 100644 --- a/tests/test_cli/test_write_signed_rpm.py +++ b/tests/test_cli/test_write_signed_rpm.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import import hashlib +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import call import koji @@ -113,7 +109,7 @@ class TestWriteSignedRPM(utils.CliTestCase): %s: error: {message} """ % (self.progname, self.progname) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') def test_handle_write_signed_rpm( self, diff --git a/tests/test_cli/utils.py b/tests/test_cli/utils.py index 31bb4f6..8743459 100644 --- a/tests/test_cli/utils.py +++ b/tests/test_cli/utils.py @@ -1,14 +1,8 @@ -from __future__ import print_function -from __future__ import absolute_import +import io import mock import os -import six import sys -from six.moves import map -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest PROGNAME = os.path.basename(sys.argv[0]) or 'koji' @@ -74,8 +68,7 @@ class CliTestCase(unittest.TestCase): self.__assert_callable(callableObj) return lambda: callableObj(*args, **kwargs) - def assert_console_message( - self, device, message, wipe=True, regex=False): + def assert_console_message(self, device, message, wipe=True, regex=False): # don't care condition if message is None: @@ -85,7 +78,7 @@ class CliTestCase(unittest.TestCase): if not regex: self.assertMultiLineEqual(output, message) else: - six.assertRegex(self, output, message) + self.assertRegex(output, message) if wipe: device.seek(0) @@ -148,7 +141,7 @@ class CliTestCase(unittest.TestCase): data = kwargs.get(key, None) message[key] = {'message': None, 'wipe': True, 'regex': False} - if data is None or isinstance(data, six.string_types): + if data is None or isinstance(data, str): message[key]['message'] = data elif isinstance(data, dict): @@ -174,12 +167,12 @@ class CliTestCase(unittest.TestCase): if k not in reserved) # check activate_session must be type of None or string - if activate and not isinstance(activate, six.string_types): + if activate and not isinstance(activate, str): raise ValueError('activate_session is not a string') session_patch = mock.patch(activate) if activate else _dummy_() - stdout_patch = mock.patch('sys.stdout', new_callable=six.StringIO) - stderr_patch = mock.patch('sys.stderr', new_callable=six.StringIO) + stdout_patch = mock.patch('sys.stdout', new_callable=io.StringIO) + stderr_patch = mock.patch('sys.stderr', new_callable=io.StringIO) with session_patch as session: with stdout_patch as stdout: @@ -213,10 +206,3 @@ class CliTestCase(unittest.TestCase): self.assertEqual(ex.exception, code) else: self.assertEqual(ex.exception.code, code) - - -def get_builtin_open(): - if six.PY2: - return '__builtin__.open' - else: - return 'builtins.open' diff --git a/tests/test_docs_version.py b/tests/test_docs_version.py index b4f33b1..1967ee1 100644 --- a/tests/test_docs_version.py +++ b/tests/test_docs_version.py @@ -1,11 +1,6 @@ -from __future__ import absolute_import import os -import six import subprocess -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest # docs version lives in docs/source/conf.py TOPDIR = os.path.dirname(__file__) + '/..' @@ -27,9 +22,7 @@ class TestDocsVersion(unittest.TestCase): popen = subprocess.Popen(cmd, stdout=subprocess.PIPE) output = popen.stdout.read() # rpm outputs a line for each subpackage - version = output.splitlines()[0] - if six.PY3: - version = version.decode() + version = output.splitlines()[0].decode() return version def test_docs_version(self): diff --git a/tests/test_hub/test_models/test_host.py b/tests/test_hub/test_models/test_host.py index 1a39a2e..ba3d516 100644 --- a/tests/test_hub/test_models/test_host.py +++ b/tests/test_hub/test_models/test_host.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import kojihub diff --git a/tests/test_kojira/loadkojira.py b/tests/test_kojira/loadkojira.py index c35567b..31bc502 100644 --- a/tests/test_kojira/loadkojira.py +++ b/tests/test_kojira/loadkojira.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import os diff --git a/tests/test_kojira/test_repo_manager.py b/tests/test_kojira/test_repo_manager.py index 928a244..bfd8f8b 100644 --- a/tests/test_kojira/test_repo_manager.py +++ b/tests/test_kojira/test_repo_manager.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import import mock import time -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji diff --git a/tests/test_lib/test_argspec.py b/tests/test_lib/test_argspec.py index a565a64..5e8ebda 100644 --- a/tests/test_lib/test_argspec.py +++ b/tests/test_lib/test_argspec.py @@ -1,8 +1,4 @@ -from __future__ import absolute_import -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji.util diff --git a/tests/test_lib/test_auth.py b/tests/test_lib/test_auth.py index e92a12b..06d1f1a 100644 --- a/tests/test_lib/test_auth.py +++ b/tests/test_lib/test_auth.py @@ -1,12 +1,5 @@ -from __future__ import absolute_import - import mock - -try: - import unittest2 as unittest -except ImportError: - import unittest -import six +import unittest import koji import koji.auth diff --git a/tests/test_lib/test_base64.py b/tests/test_lib/test_base64.py index 65d42db..788c5e6 100644 --- a/tests/test_lib/test_base64.py +++ b/tests/test_lib/test_base64.py @@ -1,10 +1,5 @@ # coding=utf-8 -from __future__ import absolute_import -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji.util import base64encode @@ -22,6 +17,5 @@ class Base64EncodeTestCase(unittest.TestCase): for s, expected in self.DATA: result = base64encode(s) self.assertEqual(result, expected) - if six.PY3: - result = base64encode(s, as_bytes=True) - self.assertEqual(result, expected.encode('ascii')) + result = base64encode(s, as_bytes=True) + self.assertEqual(result, expected.encode('ascii')) diff --git a/tests/test_lib/test_check_sigmd5.py b/tests/test_lib/test_check_sigmd5.py index ae5a7d8..87e219c 100644 --- a/tests/test_lib/test_check_sigmd5.py +++ b/tests/test_lib/test_check_sigmd5.py @@ -1,12 +1,8 @@ # coding=utf-8 -from __future__ import absolute_import import os.path import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji.util import check_sigmd5 diff --git a/tests/test_lib/test_client_session.py b/tests/test_lib/test_client_session.py index 269d64a..0477799 100644 --- a/tests/test_lib/test_client_session.py +++ b/tests/test_lib/test_client_session.py @@ -1,11 +1,6 @@ -from __future__ import absolute_import import mock -import six import weakref -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from koji.xmlrpcplus import Fault @@ -20,18 +15,6 @@ class TestClientSession(unittest.TestCase): rsession.assert_called_once() - @mock.patch('requests.Session') - def test_new_session_close(self, rsession): - if six.PY3: - return - ksession = koji.ClientSession('http://koji.example.com/kojihub') - my_rsession = mock.MagicMock() - ksession.rsession = my_rsession - - ksession.new_session() - my_rsession.close.assert_called() - self.assertNotEqual(ksession.rsession, my_rsession) - class TestFastUpload(unittest.TestCase): @@ -43,10 +26,7 @@ class TestFastUpload(unittest.TestCase): self.ksession._callMethod = mock.MagicMock() self.ksession.retries = 1 self.rsession = mock.patch('requests.Session').start() - if six.PY2: - self.file_mock = mock.patch('__builtin__.open').start() - else: - self.file_mock = mock.patch('builtins.open').start() + self.file_mock = mock.patch('builtins.open').start() self.getsize_mock = mock.patch('os.path.getsize').start() def tearDown(self): diff --git a/tests/test_lib/test_context.py b/tests/test_lib/test_context.py index 660e6cd..c8014f8 100644 --- a/tests/test_lib/test_context.py +++ b/tests/test_lib/test_context.py @@ -1,12 +1,7 @@ -from __future__ import absolute_import -import six import time import random -from six.moves import range -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest +import _thread from koji.context import context @@ -26,7 +21,7 @@ class TestContext(unittest.TestCase): self.assertFalse(hasattr(context, 'foo')) for x in range(1, 10): - six.moves._thread.start_new_thread(test, ()) + _thread.start_new_thread(test, ()) time.sleep(0.5) for i in range(10): diff --git a/tests/test_lib/test_decode_bytes.py b/tests/test_lib/test_decode_bytes.py index dddaff0..2018d04 100644 --- a/tests/test_lib/test_decode_bytes.py +++ b/tests/test_lib/test_decode_bytes.py @@ -1,10 +1,5 @@ # coding=utf-8 -from __future__ import absolute_import -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from koji.util import decode_bytes diff --git a/tests/test_lib/test_encode_datetime.py b/tests/test_lib/test_encode_datetime.py index e2a2909..1583c37 100644 --- a/tests/test_lib/test_encode_datetime.py +++ b/tests/test_lib/test_encode_datetime.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import datetime -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji.util from koji.xmlrpcplus import DateTime diff --git a/tests/test_lib/test_file_ops.py b/tests/test_lib/test_file_ops.py index dfb6069..09d7d04 100644 --- a/tests/test_lib/test_file_ops.py +++ b/tests/test_lib/test_file_ops.py @@ -1,9 +1,4 @@ -from __future__ import absolute_import - -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import mock import errno diff --git a/tests/test_lib/test_fixEncoding.py b/tests/test_lib/test_fixEncoding.py index 07b8ebd..5cc552d 100644 --- a/tests/test_lib/test_fixEncoding.py +++ b/tests/test_lib/test_fixEncoding.py @@ -3,9 +3,7 @@ """Test the __init__.py module""" -from __future__ import absolute_import import koji -import six import unittest @@ -39,58 +37,9 @@ class FixEncodingTestCase(unittest.TestCase): """Test the fixEncoding function""" for a, b in self.simple_values: self.assertEqual(koji.fixEncoding(b), b) - if six.PY2: - self.assertEqual(koji.fixEncoding(a), b) - c = a.encode('utf16') - self.assertEqual(koji.fixEncoding(c, fallback='utf16'), b) - d = a[:-3] + u'\x00\x01' + a[-3:] - self.assertEqual(koji.fixEncoding(d, remove_nonprintable=True), b) - else: - self.assertEqual(koji.fixEncoding(a), a) - d = a[:-3] + u'\x00\x01' + a[-3:] - self.assertEqual(koji.fixEncoding(d, remove_nonprintable=True), a) - - def test_fix_print(self): - """Test the _fix_print function""" - actual, expected = [], [] - for a, b in self.simple_values: - actual.append(koji._fix_print(b)) - expected.append(b) - expected = '\n'.join(expected) - actual = '\n'.join(actual) - self.assertEqual(actual, expected) - - complex_values = [ - # [ value, fixed ] - [{}, {}], - [(), ()], - [None, None], - [[], []], - [{u'a': 'a' , 'b' : {'c': u'c\x00'}}, - {'a': 'a' , 'b' : {'c': 'c\x00'}}], - # iso8859-15 fallback - ['g\xf3\xf0an daginn', 'g\xc3\xb3\xc3\xb0an daginn'], - ] - - nonprint = [ - ['hello\0world\0', 'helloworld'], - [u'hello\0world\0', 'helloworld'], - [[u'hello\0world\0'], ['helloworld']], - [{0: u'hello\0world\0'}, {0: 'helloworld'}], - [[{0: u'hello\0world\0'}], [{0: 'helloworld'}]], - ] - - def test_fixEncodingRecurse(self): - """Test the fixEncodingRecurse function""" - if six.PY3: - # don't test for py3 - return - for a, b in self.simple_values: - self.assertEqual(koji.fixEncoding(a), b) - for a, b in self.complex_values: - self.assertEqual(koji.fixEncodingRecurse(a), b) - for a, b in self.nonprint: - self.assertEqual(koji.fixEncodingRecurse(a, remove_nonprintable=True), b) + self.assertEqual(koji.fixEncoding(a), a) + d = a[:-3] + u'\x00\x01' + a[-3:] + self.assertEqual(koji.fixEncoding(d, remove_nonprintable=True), a) if __name__ == '__main__': diff --git a/tests/test_lib/test_format_time.py b/tests/test_lib/test_format_time.py index 7fb588e..7a89ce7 100644 --- a/tests/test_lib/test_format_time.py +++ b/tests/test_lib/test_format_time.py @@ -1,14 +1,9 @@ -from __future__ import absolute_import import datetime import os import time import locale -try: - import unittest2 as unittest -except ImportError: - import unittest - -import six.moves.xmlrpc_client as xmlrpc_client +import unittest +import xmlrpc.client from koji import formatTime, formatTimeLong @@ -33,7 +28,7 @@ class TestFormatTime(unittest.TestCase): self.assertEqual(formatTime(d), desired) # DateTime - d1 = xmlrpc_client.DateTime(d) + d1 = xmlrpc.client.DateTime(d) self.assertEqual(formatTime(d1), desired) # str @@ -60,7 +55,7 @@ class TestFormatTime(unittest.TestCase): self.assertEqual(r, desired) # DateTime - d1 = xmlrpc_client.DateTime(d) + d1 = xmlrpc.client.DateTime(d) r = formatTimeLong(d1) r = r[:r.rfind(' ')] self.assertEqual(r, desired) diff --git a/tests/test_lib/test_gen_mock_config.py b/tests/test_lib/test_gen_mock_config.py index b6d822a..9afe1a0 100644 --- a/tests/test_lib/test_gen_mock_config.py +++ b/tests/test_lib/test_gen_mock_config.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import import ast import os import os.path -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji diff --git a/tests/test_lib/test_grab_session_options.py b/tests/test_lib/test_grab_session_options.py index d46cefd..b711646 100644 --- a/tests/test_lib/test_grab_session_options.py +++ b/tests/test_lib/test_grab_session_options.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import optparse -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji diff --git a/tests/test_lib/test_gssapi.py b/tests/test_lib/test_gssapi.py index c87e8cc..ad12854 100644 --- a/tests/test_lib/test_gssapi.py +++ b/tests/test_lib/test_gssapi.py @@ -1,11 +1,6 @@ -from __future__ import absolute_import - import mock import os -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji diff --git a/tests/test_lib/test_multicall_session.py b/tests/test_lib/test_multicall_session.py index 15b9142..c4978e4 100644 --- a/tests/test_lib/test_multicall_session.py +++ b/tests/test_lib/test_multicall_session.py @@ -1,8 +1,5 @@ import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji diff --git a/tests/test_lib/test_parse_arches.py b/tests/test_lib/test_parse_arches.py index a5aaeac..4793d79 100644 --- a/tests/test_lib/test_parse_arches.py +++ b/tests/test_lib/test_parse_arches.py @@ -1,9 +1,6 @@ # coding: utf-8 -from __future__ import absolute_import -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest + import koji class TestParseArchesString(unittest.TestCase): diff --git a/tests/test_lib/test_parsers.py b/tests/test_lib/test_parsers.py index 1213c35..8eea692 100644 --- a/tests/test_lib/test_parsers.py +++ b/tests/test_lib/test_parsers.py @@ -2,7 +2,6 @@ """Test the __init__.py module""" -from __future__ import absolute_import import mock import os import rpm diff --git a/tests/test_lib/test_plugin.py b/tests/test_lib/test_plugin.py index 099877f..df12934 100644 --- a/tests/test_lib/test_plugin.py +++ b/tests/test_lib/test_plugin.py @@ -1,12 +1,7 @@ -from __future__ import absolute_import import copy import datetime import mock -from six.moves import range -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import koji.util diff --git a/tests/test_lib/test_policy.py b/tests/test_lib/test_policy.py index 26cb105..d8ca7f3 100644 --- a/tests/test_lib/test_policy.py +++ b/tests/test_lib/test_policy.py @@ -1,8 +1,4 @@ -from __future__ import absolute_import -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from nose.tools import raises diff --git a/tests/test_lib/test_profiles.py b/tests/test_lib/test_profiles.py index 0082570..d511623 100644 --- a/tests/test_lib/test_profiles.py +++ b/tests/test_lib/test_profiles.py @@ -1,15 +1,10 @@ -from __future__ import absolute_import import koji import sys import threading import traceback import mock -from six.moves import range -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest class ProfilesTestCase(unittest.TestCase): diff --git a/tests/test_lib/test_restart_tasks.py b/tests/test_lib/test_restart_tasks.py index 860865c..2460195 100644 --- a/tests/test_lib/test_restart_tasks.py +++ b/tests/test_lib/test_restart_tasks.py @@ -1,11 +1,7 @@ -from __future__ import absolute_import import mock import shutil import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji.tasks diff --git a/tests/test_lib/test_tasks.py b/tests/test_lib/test_tasks.py index ef2c04f..e669d1f 100644 --- a/tests/test_lib/test_tasks.py +++ b/tests/test_lib/test_tasks.py @@ -1,12 +1,7 @@ -from __future__ import absolute_import +import io import random import shutil -import six -from six.moves import range -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from os import path, makedirs from tempfile import gettempdir @@ -22,7 +17,7 @@ from koji.tasks import BaseTaskHandler, FakeTask, ForkTask, SleepTask, \ def get_fake_mounts_file(): """ Returns contents of /prc/mounts in a file-like object """ - return six.StringIO(six.text_type(( + return io.StringIO(str(( 'sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0\n' 'proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0\n' 'devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=238836k,nr_inodes=59709,mode=755 0 0\n' diff --git a/tests/test_lib/test_utils.py b/tests/test_lib/test_utils.py index c252ee0..528226e 100644 --- a/tests/test_lib/test_utils.py +++ b/tests/test_lib/test_utils.py @@ -1,18 +1,13 @@ # coding=utf-8 -from __future__ import absolute_import import calendar +import configparser import locale import mock import optparse import os import resource -import six.moves.configparser import time -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import requests_mock from mock import call, patch @@ -51,14 +46,6 @@ class EnumTestCase(unittest.TestCase): self.assertEquals(test[1:], ('two', 'three')) -def mock_open(): - """Return the right patch decorator for open""" - if six.PY2: - return mock.patch('__builtin__.open') - else: - return mock.patch('builtins.open') - - class MiscFunctionTestCase(unittest.TestCase): @mock.patch('os.path.exists') @@ -101,7 +88,7 @@ class MiscFunctionTestCase(unittest.TestCase): islink.assert_called_once_with(dst) move.assert_not_called() - @mock_open() + @mock.patch('builtins.open') @mock.patch('tempfile.TemporaryFile') def test_openRemoteFile(self, m_TemporaryFile, m_open): """Test openRemoteFile function""" @@ -243,16 +230,13 @@ class ConfigFileTestCase(unittest.TestCase): self.manager.isdir = mock.patch("os.path.isdir").start() self.manager.isfile = mock.patch("os.path.isfile").start() self.manager.access = mock.patch("os.access", return_value=True).start() - self.manager.cp_clz = mock.patch("six.moves.configparser.ConfigParser", + self.manager.cp_clz = mock.patch("configparser.ConfigParser", spec=True).start() - self.manager.scp_clz = mock.patch("six.moves.configparser.SafeConfigParser", + self.manager.scp_clz = mock.patch("configparser.SafeConfigParser", spec=True).start() - self.manager.rcp_clz = mock.patch("six.moves.configparser.RawConfigParser", + self.manager.rcp_clz = mock.patch("configparser.RawConfigParser", spec=True).start() - if six.PY2: - self.real_parser_clz = self.manager.scp_clz - else: - self.real_parser_clz = self.manager.cp_clz + self.real_parser_clz = self.manager.cp_clz self.mocks = [self.manager.isdir, self.manager.isfile, self.manager.access, @@ -287,12 +271,7 @@ class ConfigFileTestCase(unittest.TestCase): self.manager.isdir.return_value = False conf = koji.read_config_files(files) self.manager.isdir.assert_called_once_with(files) - if six.PY2: - self.assertTrue(isinstance(conf, - six.moves.configparser.SafeConfigParser.__class__)) - else: - self.assertTrue(isinstance(conf, - six.moves.configparser.ConfigParser.__class__)) + self.assertTrue(isinstance(conf, configparser.ConfigParser.__class__)) self.real_parser_clz.assert_called_once() self.real_parser_clz.return_value.read.assert_called_once_with([files]) @@ -313,7 +292,7 @@ class ConfigFileTestCase(unittest.TestCase): self.reset_mock() conf = koji.read_config_files(files, raw=True) self.assertTrue(isinstance(conf, - six.moves.configparser.RawConfigParser.__class__)) + configparser.RawConfigParser.__class__)) self.manager.cp_clz.assert_not_called() self.manager.scp_clz.assert_not_called() self.manager.rcp_clz.assert_called_once() @@ -739,12 +718,8 @@ class MavenUtilTestCase(unittest.TestCase): def _read_conf(self, cfile): path = os.path.dirname(__file__) with open(path + cfile, 'r') as conf_file: - if six.PY2: - config = six.moves.configparser.SafeConfigParser() - config.readfp(conf_file) - else: - config = six.moves.configparser.ConfigParser() - config.read_file(conf_file) + config = configparser.ConfigParser() + config.read_file(conf_file) return config def test_formatChangelog(self): @@ -817,8 +792,7 @@ class MavenUtilTestCase(unittest.TestCase): # invalid date test for args, err in time_tests.items(): - six.assertRaisesRegex( - self, ValueError, err, koji.util.parseTime, args) + self.assertRaisesRegex(ValueError, err, koji.util.parseTime, args) def test_duration(self): """Test duration function""" @@ -904,14 +878,14 @@ class MavenUtilTestCase(unittest.TestCase): # exception tests func = lambda *args, **kargs: \ (_ for _ in ()).throw(TypeError('fake-type-error')) - six.assertRaisesRegex(self, TypeError, 'fake-type-error', + self.assertRaisesRegex(TypeError, 'fake-type-error', koji.util.call_with_argcheck, func, [1, 2, 3], {'para1': 1, 'para2': 2}) with mock.patch('sys.exc_info') as m_info: m_info.side_effect = lambda: \ [None, None, mock.MagicMock(tb_next=None)] - six.assertRaisesRegex(self, koji.ParameterError, 'fake-type-error', + self.assertRaisesRegex(koji.ParameterError, 'fake-type-error', koji.util.call_with_argcheck, func, [1, 2, 3]) @@ -1050,31 +1024,31 @@ class MavenUtilTestCase(unittest.TestCase): name, release, date = 'fedora', 26, datetime.now().strftime('%Y%m%d') data = {'name': name, 'release': release, 'date': date} - six.assertCountEqual(self, list(data.items()), list(ldict.items())) - six.assertCountEqual(self, list(data.items()), [v for v in six.iteritems(ldict)]) + self.assertCountEqual(list(data.items()), list(ldict.items())) + self.assertCountEqual(list(data.items()), [v for v in ldict.items()]) name, release, date = 'rhel', 7, '20171012' - six.assertCountEqual(self, [name, release, date], list(ldict.values())) - six.assertCountEqual(self, [name, release, date], [v for v in six.itervalues(ldict)]) + self.assertCountEqual([name, release, date], list(ldict.values())) + self.assertCountEqual([name, release, date], [v for v in ldict.values()]) data = {'name': name, 'release': release, 'date': date} self.assertEqual(name, ldict.pop('name')) data.pop('name') - six.assertCountEqual(self, list(data.items()), list(ldict.items())) + self.assertCountEqual(list(data.items()), list(ldict.items())) (key, value) = ldict.popitem() data.pop(key) - six.assertCountEqual(self, list(data.items()), list(ldict.items())) + self.assertCountEqual(list(data.items()), list(ldict.items())) ldict_copy = ldict.copy() - six.assertCountEqual(self, list(data.items()), list(ldict_copy.items())) + self.assertCountEqual(list(data.items()), list(ldict_copy.items())) def test_LazyRecord(self): """Test LazyRecord object""" # create a list object with lazy attribute lobj = koji.util.LazyRecord(list) - six.assertRaisesRegex( - self, TypeError, 'object does not support lazy attributes', + self.assertRaisesRegex( + TypeError, 'object does not support lazy attributes', koji.util.lazysetattr, self, 'value', lambda x: x, (100,)) base, init, inc = 10, 1, 0 @@ -1133,7 +1107,7 @@ class MavenUtilTestCase(unittest.TestCase): actual = koji.util.eventFromOpts(session, opts) self.assertNotEqual(None, actual) - six.assertCountEqual(self, list(expect.items()), list(actual.items())) + self.assertCountEqual(list(expect.items()), list(actual.items())) # no event is matched case opts = mock.MagicMock(event=0, ts=0, repo=0) @@ -1169,7 +1143,7 @@ class MavenUtilTestCase(unittest.TestCase): with mock.patch('resource.setrlimit') as m_set: with mock.patch('resource.getrlimit') as m_get: m_get.side_effect = ValueError('resource.getrlimit-value-error') - six.assertRaisesRegex(self, ValueError, 'resource.getrlimit-value-error', + self.assertRaisesRegex(ValueError, 'resource.getrlimit-value-error', koji.util.setup_rlimits, options, logger) m_get.side_effect = _getrlimit @@ -1205,7 +1179,7 @@ class MavenUtilTestCase(unittest.TestCase): 'KojiDebug': True}) koji.util.setup_rlimits(test_opt, logger) - six.assertCountEqual(self, results, options) + self.assertCountEqual(results, options) def test_adler32_constructor(self): """Test adler32_constructor function""" diff --git a/tests/test_lib/test_xmlrpcplus.py b/tests/test_lib/test_xmlrpcplus.py index 7ea5424..7fd0a84 100644 --- a/tests/test_lib/test_xmlrpcplus.py +++ b/tests/test_lib/test_xmlrpcplus.py @@ -1,12 +1,7 @@ # coding=utf-8 -from __future__ import absolute_import -from six.moves import range -try: - import unittest2 as unittest -except ImportError: - import unittest - -from six.moves import xmlrpc_client +import unittest +import xmlrpc.client + from koji import xmlrpcplus @@ -31,9 +26,9 @@ class TestDump(unittest.TestCase): for value in self.standard_data: value = (value, "other arg") enc = xmlrpcplus.dumps(value, methodname=method) - _enc = xmlrpc_client.dumps(value, methodname=method, allow_none=1) + _enc = xmlrpc.client.dumps(value, methodname=method, allow_none=1) self.assertEqual(enc, _enc) - params, method = xmlrpc_client.loads(enc) + params, method = xmlrpc.client.loads(enc) self.assertEqual(params, value) self.assertEqual(method, method) @@ -41,21 +36,21 @@ class TestDump(unittest.TestCase): for value in self.standard_data: value = (value,) enc = xmlrpcplus.dumps(value, methodresponse=1) - _enc = xmlrpc_client.dumps(value, methodresponse=1, allow_none=1) + _enc = xmlrpc.client.dumps(value, methodresponse=1, allow_none=1) self.assertEqual(enc, _enc) - params, method = xmlrpc_client.loads(enc) + params, method = xmlrpc.client.loads(enc) self.assertEqual(params, value) self.assertEqual(method, None) def test_just_data(self): - # xmlrpc_client supports this case, so I guess we should too + # xmlrpc.client supports this case, so I guess we should too # neither method call nor response for value in self.standard_data: value = (value, "foo", "bar") enc = xmlrpcplus.dumps(value) - _enc = xmlrpc_client.dumps(value, allow_none=1) + _enc = xmlrpc.client.dumps(value, allow_none=1) self.assertEqual(enc, _enc) - params, method = xmlrpc_client.loads(enc) + params, method = xmlrpc.client.loads(enc) self.assertEqual(params, value) self.assertEqual(method, None) @@ -66,7 +61,7 @@ class TestDump(unittest.TestCase): def test_generator(self): value = (self.gendata(),) enc = xmlrpcplus.dumps(value, methodresponse=1) - params, method = xmlrpc_client.loads(enc) + params, method = xmlrpc.client.loads(enc) expect = (list(self.gendata()),) self.assertEqual(params, expect) self.assertEqual(method, None) @@ -82,14 +77,14 @@ class TestDump(unittest.TestCase): for value in self.long_data: value = (value,) enc = xmlrpcplus.dumps(value, methodresponse=1) - params, method = xmlrpc_client.loads(enc) + params, method = xmlrpc.client.loads(enc) self.assertEqual(params, value) self.assertEqual(method, None) # and as a call method = "foomethod" value = tuple(self.long_data) enc = xmlrpcplus.dumps(value, methodname=method) - params, method = xmlrpc_client.loads(enc) + params, method = xmlrpc.client.loads(enc) self.assertEqual(params, value) self.assertEqual(method, method) @@ -102,14 +97,14 @@ class TestDump(unittest.TestCase): code = 1001 msg = "some useless error" f1 = xmlrpcplus.Fault(code, msg) - f2 = xmlrpc_client.Fault(code, msg) + f2 = xmlrpc.client.Fault(code, msg) value = f1 enc = xmlrpcplus.dumps(value, methodresponse=1) - _enc = xmlrpc_client.dumps(value, methodresponse=1, allow_none=1) + _enc = xmlrpc.client.dumps(value, methodresponse=1, allow_none=1) self.assertEqual(enc, _enc) try: - params, method = xmlrpc_client.loads(enc) - except xmlrpc_client.Fault as e: + params, method = xmlrpc.client.loads(enc) + except xmlrpc.client.Fault as e: self.assertEqual(e.faultCode, code) self.assertEqual(e.faultString, msg) else: @@ -129,7 +124,7 @@ class TestDump(unittest.TestCase): value = 3.14159 value = (value,) enc = xmlrpcplus.dumps(value, methodresponse=1, marshaller=MyMarshaller) - params, method = xmlrpc_client.loads(enc) + params, method = xmlrpc.client.loads(enc) # MyMarshaller rounds off floats self.assertEqual(params, (3,)) self.assertEqual(method, None) @@ -143,9 +138,9 @@ class TestDump(unittest.TestCase): for value in data: value = (value,) enc = xmlrpcplus.dumps(value, methodresponse=1, encoding='us-ascii') - _enc = xmlrpc_client.dumps(value, methodresponse=1, allow_none=1, encoding='us-ascii') + _enc = xmlrpc.client.dumps(value, methodresponse=1, allow_none=1, encoding='us-ascii') self.assertEqual(enc, _enc) - params, method = xmlrpc_client.loads(enc) + params, method = xmlrpc.client.loads(enc) self.assertEqual(params, value) self.assertEqual(method, None) @@ -163,11 +158,11 @@ class TestDump(unittest.TestCase): for value in data: value = (value,) enc = xmlrpcplus.dumps(value, methodresponse=1, encoding='us-ascii') - _enc = xmlrpc_client.dumps(value, methodresponse=1, allow_none=1, encoding='us-ascii') + _enc = xmlrpc.client.dumps(value, methodresponse=1, allow_none=1, encoding='us-ascii') if 'i8' in enc or 'I8' in enc: raise Exception('i8 used unnecessarily') self.assertEqual(enc, _enc) - params, method = xmlrpc_client.loads(enc) + params, method = xmlrpc.client.loads(enc) self.assertEqual(params, value) self.assertEqual(method, None) diff --git a/tests/test_plugins/load_plugin.py b/tests/test_plugins/load_plugin.py index a443a4e..dcc2f1f 100644 --- a/tests/test_plugins/load_plugin.py +++ b/tests/test_plugins/load_plugin.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import os import sys diff --git a/tests/test_plugins/test_protonmsg.py b/tests/test_plugins/test_protonmsg.py index 4bcad7e..58dd655 100644 --- a/tests/test_plugins/test_protonmsg.py +++ b/tests/test_plugins/test_protonmsg.py @@ -1,20 +1,16 @@ -from __future__ import absolute_import -import six +import io import protonmsg import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest from mock import patch, MagicMock from koji.context import context -from six.moves.configparser import ConfigParser, SafeConfigParser +from configparser import ConfigParser class TestProtonMsg(unittest.TestCase): def setUp(self): self.conf = tempfile.NamedTemporaryFile() - self.conf.write(six.b("""[broker] + self.conf.write(b"""[broker] urls = amqps://broker1.example.com:5671 amqps://broker2.example.com:5671 cert = /etc/koji-hub/plugins/client.pem cacert = /etc/koji-hub/plugins/ca.pem @@ -24,7 +20,7 @@ send_timeout = 60 [message] extra_limit = 2048 -""")) +""") self.conf.flush() protonmsg.CONFIG_FILE = self.conf.name protonmsg.CONFIG = None @@ -234,7 +230,7 @@ extra_limit = 2048 def test_send_queued_msgs_test_mode(self, Container): context.protonmsg_msgs = [('test.topic', {'testheader': 1}, 'test body')] conf = tempfile.NamedTemporaryFile() - conf.write(six.b("""[broker] + conf.write(b"""[broker] urls = amqps://broker1.example.com:5671 amqps://broker2.example.com:5671 cert = /etc/koji-hub/plugins/client.pem cacert = /etc/koji-hub/plugins/ca.pem @@ -242,7 +238,7 @@ topic_prefix = koji connect_timeout = 10 send_timeout = 60 test_mode = on -""")) +""") conf.flush() protonmsg.CONFIG_FILE = conf.name protonmsg.CONFIG = None @@ -259,7 +255,7 @@ test_mode = on class TestTimeoutHandler(unittest.TestCase): def setUp(self): - confdata = six.StringIO("""[broker] + confdata = io.StringIO("""[broker] urls = amqps://broker1.example.com:5671 amqps://broker2.example.com:5671 cert = /etc/koji-hub/plugins/client.pem cacert = /etc/koji-hub/plugins/ca.pem @@ -267,12 +263,8 @@ topic_prefix = koji connect_timeout = 10 send_timeout = 60 """) - if six.PY2: - conf = SafeConfigParser() - conf.readfp(confdata) - else: - conf = ConfigParser() - conf.read_file(confdata) + conf = ConfigParser() + conf.read_file(confdata) self.handler = protonmsg.TimeoutHandler('amqps://broker1.example.com:5671', [], conf) @patch('protonmsg.SSLDomain') @@ -286,18 +278,14 @@ send_timeout = 60 @patch('protonmsg.SSLDomain') def test_on_start_no_ssl(self, SSLDomain): - confdata = six.StringIO("""[broker] + confdata = io.StringIO("""[broker] urls = amqp://broker1.example.com:5672 amqp://broker2.example.com:5672 topic_prefix = koji connect_timeout = 10 send_timeout = 60 """) - if six.PY2: - conf = SafeConfigParser() - conf.readfp(confdata) - else: - conf = ConfigParser() - conf.read_file(confdata) + conf = ConfigParser() + conf.read_file(confdata) handler = protonmsg.TimeoutHandler('amqp://broker1.example.com:5672', [], conf) event = MagicMock() handler.on_start(event) diff --git a/tests/test_plugins/test_runroot_builder.py b/tests/test_plugins/test_runroot_builder.py index 014cb00..951a28c 100644 --- a/tests/test_plugins/test_runroot_builder.py +++ b/tests/test_plugins/test_runroot_builder.py @@ -1,12 +1,8 @@ -from __future__ import absolute_import +import configparser import copy import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest -import six.moves.configparser # inject builder data from tests.test_builder.loadkojid import kojid @@ -16,19 +12,6 @@ __main__.BuildRoot = kojid.BuildRoot import koji import runroot -def mock_open(): - """Return the right patch decorator for open""" - if six.PY2: - return mock.patch('__builtin__.open') - else: - return mock.patch('builtins.open') - - -if six.PY2: - CONFIG_PARSER = 'six.moves.configparser.SafeConfigParser' -else: - CONFIG_PARSER = 'six.moves.configparser.ConfigParser' - CONFIG1 = { 'paths': { @@ -98,11 +81,11 @@ class FakeConfigParser(object): try: return self.CONFIG[section][key] except KeyError: - raise six.moves.configparser.NoOptionError(section, key) + raise configparser.NoOptionError(section, key) class TestRunrootConfig(unittest.TestCase): - @mock.patch(CONFIG_PARSER) + @mock.patch('configparser.ConfigParser') def test_bad_config_paths0(self, config_parser): cp = FakeConfigParser() del cp.CONFIG['path0']['mountpoint'] @@ -115,7 +98,7 @@ class TestRunrootConfig(unittest.TestCase): self.assertEqual(cm.exception.args[0], "bad config: missing options in path0 section") - @mock.patch(CONFIG_PARSER) + @mock.patch('configparser.ConfigParser') def test_bad_config_absolute_path(self, config_parser): cp = FakeConfigParser() cp.CONFIG['paths']['default_mounts'] = '' @@ -128,7 +111,7 @@ class TestRunrootConfig(unittest.TestCase): self.assertEqual(cm.exception.args[0], "bad config: all paths (default_mounts, safe_roots, path_subs) needs to be absolute: ") - @mock.patch(CONFIG_PARSER) + @mock.patch('configparser.ConfigParser') def test_valid_config(self, config_parser): config_parser.return_value = FakeConfigParser() session = mock.MagicMock() @@ -136,7 +119,7 @@ class TestRunrootConfig(unittest.TestCase): options.workdir = '/tmp/nonexistentdirectory' runroot.RunRootTask(123, 'runroot', {}, session, options) - @mock.patch(CONFIG_PARSER) + @mock.patch('configparser.ConfigParser') def test_valid_config_alt(self, config_parser): config_parser.return_value = FakeConfigParser(CONFIG2) session = mock.MagicMock() @@ -144,7 +127,7 @@ class TestRunrootConfig(unittest.TestCase): options.workdir = '/tmp/nonexistentdirectory' runroot.RunRootTask(123, 'runroot', {}, session, options) - @mock.patch(CONFIG_PARSER) + @mock.patch('configparser.ConfigParser') def test_pathnum_gaps(self, config_parser): session = mock.MagicMock() options = mock.MagicMock() @@ -165,7 +148,7 @@ class TestRunrootConfig(unittest.TestCase): paths = list([CONFIG2[k] for k in ('path0', 'path1', 'path2')]) self.assertEqual(task2.config['paths'], paths) - @mock.patch(CONFIG_PARSER) + @mock.patch('configparser.ConfigParser') def test_bad_path_sub(self, config_parser): session = mock.MagicMock() options = mock.MagicMock() @@ -178,7 +161,7 @@ class TestRunrootConfig(unittest.TestCase): class TestMounts(unittest.TestCase): - @mock.patch(CONFIG_PARSER) + @mock.patch('configparser.ConfigParser') def setUp(self, config_parser): config_parser.return_value = FakeConfigParser() self.session = mock.MagicMock() @@ -195,7 +178,7 @@ class TestMounts(unittest.TestCase): self.assertEqual(self.t._get_path_params('/mnt/archive', 'rw'), ('archive.org:/vol/archive/', '/mnt/archive', 'nfs', 'rw,hard,intr,nosuid,nodev,noatime,tcp')) - @mock_open() + @mock.patch('builtins.open') @mock.patch('os.path.isdir') @mock.patch('runroot.log_output') def test_do_mounts(self, log_output, is_dir, open_mock): @@ -296,7 +279,7 @@ class TestMounts(unittest.TestCase): self.t.do_mounts.assert_not_called() - @mock_open() + @mock.patch('builtins.open') @mock.patch('runroot.scan_mounts') @mock.patch('os.unlink') @mock.patch('subprocess.Popen') @@ -330,7 +313,7 @@ class TestMounts(unittest.TestCase): os_unlink.assert_not_called() class TestHandler(unittest.TestCase): - @mock.patch(CONFIG_PARSER) + @mock.patch('configparser.ConfigParser') def setUp(self, config_parser): self.session = mock.MagicMock() self.br = mock.MagicMock() diff --git a/tests/test_plugins/test_runroot_cli.py b/tests/test_plugins/test_runroot_cli.py index b002cc7..91bd682 100644 --- a/tests/test_plugins/test_runroot_cli.py +++ b/tests/test_plugins/test_runroot_cli.py @@ -1,11 +1,6 @@ -from __future__ import absolute_import import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji from . import load_plugin @@ -19,19 +14,13 @@ class ParserError(Exception): def mock_stdout(): def get_mock(): - if six.PY2: - return six.StringIO() - else: - return io.TextIOWrapper(six.BytesIO()) + return io.TextIOWrapper(io.BytesIO()) return mock.patch('sys.stdout', new_callable=get_mock) def get_stdout_value(stdout): - if six.PY2: - return stdout.getvalue() - else: - # we have to force the TextIOWrapper to stop buffering - return stdout.detach().getvalue() + # we have to force the TextIOWrapper to stop buffering + return stdout.detach().getvalue() class TestListCommands(unittest.TestCase): @@ -78,7 +67,7 @@ class TestListCommands(unittest.TestCase): def test_handle_runroot(self, stdout, sleep): # Mock out the xmlrpc server self.session.getTaskInfo.return_value = {'state': 1} - self.session.downloadTaskOutput.return_value = six.b('task output') + self.session.downloadTaskOutput.return_value = b'task output' self.session.listTaskOutput.return_value = {'runroot.log': ['DEFAULT']} self.session.runroot.return_value = 1 self.session.taskFinished.side_effect = [False, True] diff --git a/tests/test_plugins/test_runroot_hub.py b/tests/test_plugins/test_runroot_hub.py index dfae605..37be39c 100644 --- a/tests/test_plugins/test_runroot_hub.py +++ b/tests/test_plugins/test_runroot_hub.py @@ -1,9 +1,5 @@ -from __future__ import absolute_import import mock -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import runroot_hub diff --git a/tests/test_plugins/test_save_failed_tree_builder.py b/tests/test_plugins/test_save_failed_tree_builder.py index 920f605..56c92a5 100644 --- a/tests/test_plugins/test_save_failed_tree_builder.py +++ b/tests/test_plugins/test_save_failed_tree_builder.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import mock import os import sys diff --git a/tests/test_plugins/test_save_failed_tree_cli.py b/tests/test_plugins/test_save_failed_tree_cli.py index 452c7f8..0769f4d 100644 --- a/tests/test_plugins/test_save_failed_tree_cli.py +++ b/tests/test_plugins/test_save_failed_tree_cli.py @@ -1,10 +1,6 @@ -from __future__ import absolute_import +import io import mock -import six -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji @@ -124,7 +120,7 @@ class TestSaveFailedTree(unittest.TestCase): poll_interval=options.poll_interval, quiet=options.quiet) - @mock.patch('sys.stdout', new_callable=six.StringIO) + @mock.patch('sys.stdout', new_callable=io.StringIO) def test_handle_save_failed_tree_errors(self, stdout): # koji save-failed-tree 123 456 arguments = [123, 456] diff --git a/tests/test_scm.py b/tests/test_scm.py index 5f1c668..bcafdc4 100644 --- a/tests/test_scm.py +++ b/tests/test_scm.py @@ -1,13 +1,7 @@ -from __future__ import absolute_import -import logging import mock import shutil -import six import tempfile -try: - import unittest2 as unittest -except ImportError: - import unittest +import unittest import koji import koji.daemon @@ -386,7 +380,7 @@ class TestSCMCheckouts(unittest.TestCase): def test_get_source_git(self, popen): popen.return_value.wait.return_value = 0 popen.return_value.communicate = mock.MagicMock() - popen.return_value.communicate.return_value = (six.b('hash '), six.b('any')) + popen.return_value.communicate.return_value = (b'hash ', b'any') url = "git://default/koji.git#asdasd" scm = SCM(url) diff --git a/util/koji-gc b/util/koji-gc index 56bb128..12bfa98 100755 --- a/util/koji-gc +++ b/util/koji-gc @@ -6,7 +6,6 @@ # Authors: # Mike McLean -from __future__ import absolute_import import datetime import fcntl @@ -20,10 +19,8 @@ import time from string import Template import requests -import six -import six.moves.configparser -import six.moves.xmlrpc_client # for Fault -from six.moves import email_mime_text as MIMEText +import xmlrpc.client # for Fault +from email.mime import text as MIMEText import koji import koji.policy @@ -471,7 +468,7 @@ def handle_trash(): mcall = koji.MultiCallSession(session, batch=1000) for binfo in continuing: mcall.buildReferences(binfo['id'], limit=10, lazy=True) - for binfo, [refs] in six.moves.zip(continuing, mcall.call_all()): + for binfo, [refs] in zip(continuing, mcall.call_all()): i += 1 nvr = binfo['nvr'] # XXX - this is more data than we need @@ -583,7 +580,7 @@ def handle_trash(): # best we can do currently owner = binfo['owner_id'] else: - owner = max([(n, k) for k, n in six.iteritems(count)])[1] + owner = max([(n, k) for k, n in count.items()])[1] mcall.packageListAdd(trashcan_tag, binfo['name'], owner) mcall.tagBuildBypass(trashcan_tag, binfo['id'], force=True) # run all packageListAdd/tagBuildBypass finally @@ -655,7 +652,7 @@ def handle_delete(just_salvage=False): mcall = koji.MultiCallSession(session, batch=1000) for nvr, binfo in trash: mcall.listTags(build=binfo['id'], perms=False) - for (nvr, binfo), [tags] in six.moves.zip(trash, mcall.call_all()): + for (nvr, binfo), [tags] in zip(trash, mcall.call_all()): # see if build has been tagged elsewhere tags = [t['name'] for t in tags if t['name'] != trashcan_tag] if tags: @@ -713,7 +710,7 @@ def handle_delete(just_salvage=False): mcall.untagBuildBypass(trashcan_tag, binfo['id']) mcall.deleteBuild(binfo['id']) - for binfo, result in six.moves.zip(continuing, mcall.call_all()): + for binfo, result in zip(continuing, mcall.call_all()): if isinstance(result, dict): print("Warning: deletion failed: %s" % result['faultString']) # TODO - log details for delete failures @@ -936,7 +933,7 @@ def handle_prune(): session.untagBuildBypass(taginfo['id'], entry['build_id'], force=bypass) untagged.setdefault(nvr, {})[tagname] = 1 - except (six.moves.xmlrpc_client.Fault, koji.GenericError) as e: + except (xmlrpc.client.Fault, koji.GenericError) as e: print("Warning: untag operation failed: %s" % e) pass # if action == 'keep' do nothing @@ -970,7 +967,7 @@ def handle_prune(): print("Deleting untagged build: %s" % nvr) try: session.deleteBuild(build_id, strict=False) - except (six.moves.xmlrpc_client.Fault, koji.GenericError) as e: + except (xmlrpc.client.Fault, koji.GenericError) as e: print("Warning: deletion failed: %s" % e) # server issue pass diff --git a/util/koji-shadow b/util/koji-shadow index 22b1778..16bb2ab 100755 --- a/util/koji-shadow +++ b/util/koji-shadow @@ -37,9 +37,6 @@ import urllib2 import requests import rpm -import six -import six.moves.xmlrpc_client # for Fault -from six.moves import range import koji from koji.util import to_list @@ -513,7 +510,7 @@ class TrackedBuild(object): # changes happened during the build startup and some subtasks got the old # repo and others the new one. base = [] - for name, brlist in six.iteritems(bases): + for name, brlist in bases.items(): # We want to determine for each name if that package was present # in /all/ the buildroots or just some. # Because brlist is constructed only from elements of buildroots, we @@ -525,7 +522,7 @@ class TrackedBuild(object): if len(tags) > 1: log("Warning: found multiple buildroot tags for %s: %s" % (self.nvr, to_list(tags.keys()))) - counts = sorted([(n, tag) for tag, n in six.iteritems(tags)]) + counts = sorted([(n, tag) for tag, n in tags.items()]) tag = counts[-1][1] else: tag = to_list(tags.keys())[0] @@ -973,7 +970,7 @@ class BuildTracker(object): for pkg in session.listPackages(pkgID=name): owners.setdefault(pkg['owner_id'], []).append(pkg) if owners: - order = sorted([(len(v), k) for k, v in six.iteritems(owners)]) + order = sorted([(len(v), k) for k, v in owners.items()]) owner = order[-1][1] else: # just use ourselves @@ -1119,7 +1116,7 @@ class BuildTracker(object): nvr = dep.substitute problem_counts.setdefault(nvr, 0) problem_counts[nvr] += 1 - order = [(c, nvr) for (nvr, c) in six.iteritems(problem_counts)] + order = [(c, nvr) for (nvr, c) in problem_counts.items()] if order: order.sort(reverse=True) # print top 5 problems @@ -1200,7 +1197,7 @@ class BuildTracker(object): ret = False if options.max_jobs and len(self.state_idx['pending']) >= options.max_jobs: return ret - missing = sorted([(b.order, b.id, b) for b in six.itervalues(self.state_idx['missing'])]) + missing = sorted([(b.order, b.id, b) for b in self.state_idx['missing'].values()]) for order, build_id, build in missing: if not self.checkBuildDeps(build): continue diff --git a/util/koji-sweep-db b/util/koji-sweep-db index 98fdd89..ab87a58 100755 --- a/util/koji-sweep-db +++ b/util/koji-sweep-db @@ -1,10 +1,10 @@ #!/usr/bin/python3 import os +import xmlrpc.client from optparse import OptionParser -from six.moves import xmlrpc_client -from six.moves.configparser import RawConfigParser +from configparser import RawConfigParser import koji.db @@ -71,7 +71,7 @@ def clean_scratch_tasks(cursor, vacuum, test, age): for row in cursor.fetchall(): task_id, request = row try: - params, method = xmlrpc_client.loads(request) + params, method = xmlrpc.client.loads(request) opts = params[2] if opts['scratch']: cursor.execute("INSERT INTO temp_scratch_tasks VALUES (%s)", (task_id,)) diff --git a/util/kojira b/util/kojira index 067c045..040fb60 100755 --- a/util/kojira +++ b/util/kojira @@ -20,8 +20,6 @@ # Authors: # Mike McLean -from __future__ import absolute_import, division - import errno import json import logging @@ -38,7 +36,6 @@ from optparse import OptionParser from xml.etree import ElementTree import requests -import six import koji from koji.util import deprecated, parseStatus, rmtree, to_list @@ -300,9 +297,9 @@ class RepoManager(object): def printState(self): self.logger.debug('Tracking %i repos, %i child processes', len(self.repos), len(self.delete_pids)) - for tag_id, task_id in six.iteritems(self.tasks): + for tag_id, task_id in self.tasks.items(): self.logger.debug("Tracking task %s for tag %s", task_id, tag_id) - for pid, desc in six.iteritems(self.delete_pids): + for pid, desc in self.delete_pids.items(): self.logger.debug("Delete job %s: %r", pid, desc) def rmtree(self, path): diff --git a/vm/kojikamid.py b/vm/kojikamid.py index d286dc5..1735584 100755 --- a/vm/kojikamid.py +++ b/vm/kojikamid.py @@ -26,8 +26,6 @@ # kojiwind --install # in a cygwin shell. -from __future__ import absolute_import - import base64 import glob import hashlib @@ -43,12 +41,11 @@ import traceback import zipfile from optparse import OptionParser -import six -import six.moves.xmlrpc_client +import xmlrpc.client # urllib is required by the SCM class which is substituted into this file # do not remove the import below -from six.moves import urllib # noqa: F401 -from six.moves.configparser import RawConfigParser +import urllib # noqa: F401 +from configparser import RawConfigParser MANAGER_PORT = 7000 @@ -630,14 +627,12 @@ def get_mgmt_server(): macaddr, gateway = find_net_info() logger.debug('found MAC address %s, connecting to %s:%s', macaddr, gateway, MANAGER_PORT) - server = six.moves.xmlrpc_client.ServerProxy('http://%s:%s/' % - (gateway, MANAGER_PORT), allow_none=True) + server = xmlrpc.client.ServerProxy('http://%s:%s/' % (gateway, MANAGER_PORT), allow_none=True) # we would set a timeout on the socket here, but that is apparently not # supported by python/cygwin/Windows task_port = server.getPort(macaddr) logger.debug('found task-specific port %s', task_port) - return six.moves.xmlrpc_client.ServerProxy('http://%s:%s/' % (gateway, task_port), - allow_none=True) + return xmlrpc.client.ServerProxy('http://%s:%s/' % (gateway, task_port), allow_none=True) def get_options(): @@ -690,7 +685,7 @@ def stream_logs(server, handler, builds): logpath = os.path.join(build.source_dir, relpath) if logpath not in logs: logs[logpath] = (relpath, None) - for log, (relpath, fd) in six.iteritems(logs): + for log, (relpath, fd) in logs.items(): if not fd: if os.path.isfile(log): try: diff --git a/vm/kojivmd b/vm/kojivmd index 573450c..7332f8f 100755 --- a/vm/kojivmd +++ b/vm/kojivmd @@ -20,8 +20,6 @@ # Authors: # Mike Bonnet -from __future__ import absolute_import, division - import base64 import fnmatch import hashlib @@ -41,8 +39,7 @@ from optparse import OptionParser import libvirt import libxml2 import requests -import six.moves.xmlrpc_client -import six.moves.xmlrpc_server +import xmlrpc import koji import koji.util @@ -254,24 +251,22 @@ def main(options, session): # Tasks for handling VM lifecycle #################### -class DaemonXMLRPCServer(six.moves.xmlrpc_server.SimpleXMLRPCServer): +class DaemonXMLRPCServer(xmlrpc.server.SimpleXMLRPCServer): allow_reuse_address = True def __init__(self, addr, port): if sys.version_info[:2] <= (2, 4): - six.moves.xmlrpc_server.SimpleXMLRPCServer.__init__(self, (addr, port), - logRequests=False) + xmlrpc.server.SimpleXMLRPCServer.__init__(self, (addr, port), logRequests=False) else: - six.moves.xmlrpc_server.SimpleXMLRPCServer.__init__(self, (addr, port), - logRequests=False, - allow_none=True) + xmlrpc.server.SimpleXMLRPCServer.__init__(self, (addr, port), logRequests=False, + allow_none=True) self.logger = logging.getLogger('koji.vm.DaemonXMLRPCServer') self.socket.settimeout(5) self.active = True def server_close(self): self.active = False - six.moves.xmlrpc_server.SimpleXMLRPCServer.server_close(self) + xmlrpc.server.SimpleXMLRPCServer.server_close(self) def handle_while_active(self): while self.active: @@ -292,21 +287,20 @@ class DaemonXMLRPCServer(six.moves.xmlrpc_server.SimpleXMLRPCServer): # Copy and paste from SimpleXMLRPCServer, with the addition of passing # allow_none=True to xmlrpclib.dumps() def _marshaled_dispatch(self, data, dispatch_method=None): - params, method = six.moves.xmlrpc_client.loads(data) + params, method = xmlrpc.client.loads(data) try: if dispatch_method is not None: response = dispatch_method(method, params) else: response = self._dispatch(method, params) response = (response,) - response = six.moves.xmlrpc_client.dumps(response, - methodresponse=1, allow_none=True) - except six.moves.xmlrpc_client.Fault as fault: - response = six.moves.xmlrpc_client.dumps(fault) + response = xmlrpc.client.dumps(response, methodresponse=1, allow_none=True) + except xmlrpc.client.Fault as fault: + response = xmlrpc.client.dumps(fault) except Exception: # report exception back to server - response = six.moves.xmlrpc_client.dumps( - six.moves.xmlrpc_client.Fault( + response = xmlrpc.client.dumps( + xmlrpc.client.Fault( 1, "%s:%s" % (sys.exc_info()[0], sys.exc_info()[1])) ) @@ -434,7 +428,7 @@ class VMExecTask(BaseTaskHandler): def __init__(self, *args, **kw): super(VMExecTask, self).__init__(*args, **kw) - self.task_manager = six.moves.xmlrpc_client.ServerProxy( + self.task_manager = xmlrpc.client.ServerProxy( 'http://%s:%s/' % (self.options.privaddr, self.options.portbase), allow_none=True) self.port = None self.server = None From cae055842062b3fac4c41418edb929cf40c3dafb Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Aug 26 2020 12:57:04 +0000 Subject: [PATCH 5/8] fix message --- diff --git a/Makefile b/Makefile index d5911a4..545db72 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,6 @@ git-clean: @git clean -d -q -x test: - @echo "All tests are finished for python 3" coverage3 erase --rcfile .coveragerc3 PYTHONPATH=hub/.:plugins/hub/.:plugins/builder/.:plugins/cli/.:cli/.:www/lib coverage3 run \ --rcfile .coveragerc3 --source . -m nose From 03b9e7cc59d4852536a0158eac8518163603d57b Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Aug 26 2020 13:06:06 +0000 Subject: [PATCH 6/8] drop mergerepos script --- diff --git a/builder/Makefile b/builder/Makefile index b137335..7ff7de6 100644 --- a/builder/Makefile +++ b/builder/Makefile @@ -1,7 +1,6 @@ PYVER := $(shell $(PYTHON) -c 'import sys; print("%.1s" %(sys.version))') BINFILES = kojid -LIBEXECFILES = mergerepos SYSTEMDSYSTEMUNITDIR = $(shell pkg-config systemd --variable=systemdsystemunitdir) TYPE = systemd @@ -23,11 +22,6 @@ _install: mkdir -p $(DESTDIR)/usr/sbin install -p -m 755 $(BINFILES) $(DESTDIR)/usr/sbin - @if [ "$(PYVER)" -lt 3 ] ; then \ - mkdir -p $(DESTDIR)/usr/libexec/kojid; \ - install -p -m 755 $(LIBEXECFILES) $(DESTDIR)/usr/libexec/kojid; \ - fi - mkdir -p $(DESTDIR)/etc/mock/koji mkdir -p $(DESTDIR)/etc/kojid diff --git a/builder/mergerepos b/builder/mergerepos deleted file mode 100755 index 3be1bbf..0000000 --- a/builder/mergerepos +++ /dev/null @@ -1,367 +0,0 @@ -#!/usr/bin/python3 - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Library General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Copyright 2009-2014 Red Hat, Inc. -# Written by Mike Bonnet - -# Merge repos using rules specific to Koji -# Largely borrowed from the mergerepo script included in createrepo and -# written by Seth Vidal - -import os.path -import shutil -import sys -import tempfile -from optparse import OptionParser - -import createrepo -import rpmUtils.miscutils -import yum -import yum.misc - -# Expand a canonical arch to the full list of -# arches that should be included in the repo. -# Basically the inverse of koji.canonArch(). -# Lists taken from rpmUtils.arch. -EXPAND_ARCHES = { - 'i386': ['i486', 'i586', 'geode', 'i686', 'athlon'], - 'x86_64': ['ia32e', 'amd64'], - 'ppc64': ['ppc64pseries', 'ppc64iseries'], - 'sparc64': ['sparc64v', 'sparc64v2'], - 'sparc': ['sparcv8', 'sparcv9', 'sparcv9v', 'sparcv9v2'], - 'alpha': ['alphaev4', 'alphaev45', 'alphaev5', 'alphaev56', - 'alphapca56', 'alphaev6', 'alphaev67', 'alphaev68', 'alphaev7'], - 'armhfp': ['armv7hl', 'armv7hnl', 'armv6hl', 'armv6hnl'], - 'arm': ['armv5tel', 'armv5tejl', 'armv6l', 'armv7l'], - 'sh4': ['sh4a'] -} - -MULTILIB_ARCHES = { - 'x86_64': 'i386', - 'ppc64': 'ppc', - 's390x': 's390' -} - - -def parse_args(args): - """Parse our opts/args""" - usage = """ - mergerepos: take 2 or more repositories and merge their metadata into a new - repo using Koji semantics - - mergerepos --repo=url --repo=url --outputdir=/some/path""" - - parser = OptionParser(version="mergerepos 0.1", usage=usage) - # query options - parser.add_option("-r", "--repo", dest="repos", default=[], action="append", - help="repo url") - parser.add_option("-g", "--groupfile", default=None, - help="path to groupfile to include in metadata") - parser.add_option("-a", "--arch", dest="arches", default=[], action="append", - help="List of arches to include in the repo") - parser.add_option("-b", "--blocked", default=None, - help="A file containing a list of srpm names to exclude " - "from the merged repo") - parser.add_option("--mode", default='koji', help="Select the merge mode") - parser.add_option("-o", "--outputdir", default=None, - help="Location to create the repository") - parser.add_option("--tempdir", default=None, - help="Location for temporary files") - (opts, argsleft) = parser.parse_args(args) - - if len(opts.repos) < 1: - parser.print_usage() - sys.exit(1) - - # expand arches - for arch in opts.arches[:]: - if arch in EXPAND_ARCHES: - opts.arches.extend(EXPAND_ARCHES[arch]) - - # support multilib repos - for arch in opts.arches[:]: - multilib_arch = MULTILIB_ARCHES.get(arch) - if multilib_arch: - opts.arches.append(multilib_arch) - if multilib_arch in EXPAND_ARCHES: - opts.arches.extend(EXPAND_ARCHES[multilib_arch]) - - # always include noarch - if 'noarch' not in opts.arches: - opts.arches.append('noarch') - - if not opts.outputdir: - parser.error('You must specify an outputdir with -o') - sys.exit(1) - - return opts - - -def make_const_func(value): - """Return a function that returns the given value""" - return lambda *a: value - - -class RepoMerge(object): - def __init__(self, repolist, arches, groupfile, blocked, outputdir, - tempdir=None, mode='koji'): - self.repolist = repolist - self.outputdir = outputdir - self.tempdir = tempdir - self.mdconf = createrepo.MetaDataConfig() - # explicitly request sha1 for backward compatibility with older yum - self.mdconf.sumtype = 'sha1' - self.mdconf.database = True - self.mdconf.verbose = True - self.mdconf.changelog_limit = 3 - self.yumbase = yum.YumBase() - if hasattr(self.yumbase, 'preconf'): - self.yumbase.preconf.fn = '/dev/null' - self.yumbase.preconf.init_plugins = False - self.yumbase.preconf.debuglevel = 2 - else: - self.yumbase._getConfig('/dev/null', init_plugins=False, debuglevel=2) - self.yumbase.conf.cachedir = tempfile.mkdtemp(dir=self.tempdir) - self.yumbase.conf.cache = 0 - self.archlist = arches - self.mdconf.groupfile = groupfile - self.blocked = blocked - self.mode = mode - - def close(self): - if self.yumbase is not None: - cachedir = self.yumbase.conf.cachedir - self.yumbase.close() - self.yumbase = None - self.mdconf = None - if os.path.isdir(cachedir): - shutil.rmtree(cachedir) - - def __del__(self): - self.close() - - def merge_repos(self): - self.yumbase.repos.disableRepo('*') - # add our repos and give them a merge rank in the order they appear in - # in the repolist - count = 0 - for r in self.repolist: - count += 1 - rid = 'repo%s' % count - sys.stderr.write('Adding repo: %s\n' % r) - n = self.yumbase.add_enable_repo(rid, baseurls=[r]) - n._merge_rank = count - - # setup our sacks - self.yumbase._getSacks(archlist=self.archlist) - - self.sort_and_filter() - - def sort_and_filter(self): - """ - For each package object, check if the srpm name has ever been seen before. - If is has not, keep the package. If it has, check if the srpm name was first seen - in the same repo as the current package. If so, keep the package from the srpm with the - highest NVR. If not, keep the packages from the first srpm we found, and delete packages - from all other srpms. - - Packages with matching NVRs in multiple repos will be taken from the first repo. - - If the srpm name appears in the blocked package list, any packages generated from the srpm - will be deleted from the package sack as well. - - This method will also generate a file called "pkgorigins" and add it to the repo metadata. - This is a tab-separated map of package E:N-V-R.A to repo URL (as specified on the - command-line). This allows a package to be tracked back to its origin, even if the location - field in the repodata does not match the original repo location. - """ - - if self.mode == 'simple': - return self.do_simple_sort() - - # sort the repos by _merge_rank - # lowest number is the highest rank (1st place, 2nd place, etc.) - repos = self.yumbase.repos.listEnabled() - repos.sort(key=lambda o: o._merge_rank) - - include_srpms = {} - - # calculating what "builds" (srpms) we're allowing into the repo - seen_srpms = {} - for reponum, repo in enumerate(repos): - for pkg in repo.sack: - if reponum == 0 and not pkg.basepath: - # this is the first repo (i.e. the koji repo) and appears - # to be using relative urls - # XXX - kind of a hack, but yum leaves us little choice - # force the pkg object to report a relative location - loc = """\n""" % yum.misc.to_xml(pkg.remote_path, - attrib=True) - pkg._return_remote_location = make_const_func(loc) - if pkg.sourcerpm in seen_srpms: - # we're just looking at sourcerpms this pass and we've - # already seen this one - continue - seen_srpms[pkg.sourcerpm] = 1 - srpm_name, ver, rel, epoch, arch = rpmUtils.miscutils.splitFilename(pkg.sourcerpm) - if srpm_name in include_srpms: - other_srpm, other_repoid = include_srpms[srpm_name] - if pkg.repoid != other_repoid: - # We found a rpm built from an srpm with the same name in a previous repo. - # The previous repo takes precedence, so ignore the srpm found here. - sys.stderr.write('Package %s already provided by repo %s' - ' (at %s in repo %s)\n' - % (srpm_name, other_repoid, str(pkg), pkg.repoid)) - continue - else: - # We're in the same repo, so compare srpm NVRs - other_srpm_name, other_ver, other_rel, other_epoch, other_arch = \ - rpmUtils.miscutils.splitFilename(other_srpm) - cmp = rpmUtils.miscutils.compareEVR((epoch, ver, rel), - (other_epoch, other_ver, other_rel)) - if cmp > 0: - # The current package we're processing is from a newer srpm than the - # existing srpm in the dict, so update the dict - include_srpms[srpm_name] = (pkg.sourcerpm, pkg.repoid) - sys.stderr.write('Replacing older source nvr: ' - '%s > %s\n' % (pkg.sourcerpm, other_srpm)) - elif cmp < 0: - sys.stderr.write('Ignoring older source nvr: ' - '%s < %s\n' % (pkg.sourcerpm, other_srpm)) - # otherwise same, so we already have it - elif srpm_name in self.blocked: - sys.stderr.write('Ignoring blocked package: %s\n\n' % - pkg.sourcerpm) - continue - else: - include_srpms[srpm_name] = (pkg.sourcerpm, pkg.repoid) - - pkgorigins = os.path.join(self.yumbase.conf.cachedir, 'pkgorigins') - origins = open(pkgorigins, 'w') - - seen_rpms = {} - for repo in repos: - for pkg in repo.sack: - srpm_name, ver, rel, epoch, arch = rpmUtils.miscutils.splitFilename(pkg.sourcerpm) - incl_srpm, incl_repoid = include_srpms.get(srpm_name, (None, None)) - pkg_nvra = str(pkg) - if pkg_nvra in seen_rpms: - sys.stderr.write('Duplicate rpm: %s\n' % pkg_nvra) - elif incl_srpm is None: - sys.stderr.write('Excluding %s (%s is blocked)\n' - % (pkg_nvra, srpm_name)) - repo.sack.delPackage(pkg) - elif incl_srpm == pkg.sourcerpm: - origins.write('%s\t%s\n' % (pkg_nvra, repo.urls[0])) - seen_rpms[pkg_nvra] = 1 - else: - sys.stderr.write('Excluding %s (wrong srpm version ' - '%s != %s)\n' % (pkg_nvra, pkg.sourcerpm, incl_srpm)) - repo.sack.delPackage(pkg) - - origins.close() - self.mdconf.additional_metadata['origin'] = pkgorigins - - def do_simple_sort(self): - """ - Handle the 'sort_and_filter' case when mode=simple - - As the name implies, this is a much simpler approach. Mainly, we need - to generate the pkgorigins file. - """ - - # sort the repos by _merge_rank - # lowest number is the highest rank (1st place, 2nd place, etc.) - repos = self.yumbase.repos.listEnabled() - repos.sort(key=lambda o: o._merge_rank) - - # TODO: reduce duplication between this function and sort_and_filter() - - # We lack the complex filtration of mode=koji, but we still need to: - # - fix urls for primary repo - # - enforce blocked list - for reponum, repo in enumerate(repos): - for pkg in repo.sack: - if reponum == 0 and not pkg.basepath: - # this is the first repo (i.e. the koji repo) and appears - # to be using relative urls - # XXX - kind of a hack, but yum leaves us little choice - # force the pkg object to report a relative location - loc = """\n""" % yum.misc.to_xml(pkg.remote_path, - attrib=True) - pkg._return_remote_location = make_const_func(loc) - - pkgorigins = os.path.join(self.yumbase.conf.cachedir, 'pkgorigins') - origins = open(pkgorigins, 'w') - - seen_rpms = {} - for repo in repos: - for pkg in repo.sack: - srpm_name, ver, rel, epoch, arch = rpmUtils.miscutils.splitFilename(pkg.sourcerpm) - pkg_nvra = str(pkg) - if pkg_nvra in seen_rpms: - sys.stderr.write('Duplicate rpm: %s\n' % pkg_nvra) - # note: we warn, but do not omit it - if srpm_name in self.blocked: - sys.stderr.write('Ignoring blocked package: %s\n\n' % - pkg.sourcerpm) - repo.sack.delPackage(pkg) - if pkg_nvra not in seen_rpms: - origins.write('%s\t%s\n' % (pkg_nvra, repo.urls[0])) - seen_rpms[pkg_nvra] = 1 - origins.close() - self.mdconf.additional_metadata['origin'] = pkgorigins - - def write_metadata(self): - self.mdconf.pkglist = self.yumbase.pkgSack - self.mdconf.directory = self.outputdir - # clean out what was there - if os.path.exists(self.mdconf.directory + '/repodata'): - shutil.rmtree(self.mdconf.directory + '/repodata') - - if not os.path.exists(self.mdconf.directory): - os.makedirs(self.mdconf.directory) - - mdgen = createrepo.MetaDataGenerator(config_obj=self.mdconf) - mdgen.doPkgMetadata() - mdgen.doRepoMetadata() - mdgen.doFinalMove() - - -def main(args): - """main""" - opts = parse_args(args) - - if opts.blocked: - blocked_fo = open(opts.blocked) - blocked_list = blocked_fo.readlines() - blocked_fo.close() - blocked = dict([(b.strip(), 1) for b in blocked_list]) - else: - blocked = {} - - merge = RepoMerge(opts.repos, opts.arches, opts.groupfile, blocked, - opts.outputdir, opts.tempdir, opts.mode) - - try: - merge.merge_repos() - merge.write_metadata() - finally: - merge.close() - - -if __name__ == "__main__": - main(sys.argv[1:]) From b32ea0d1f727f5a0dcbc21bf587bfe09df6c762e Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Aug 26 2020 13:56:55 +0000 Subject: [PATCH 7/8] drop yum --- diff --git a/builder/kojid b/builder/kojid index c3ef302..5a49142 100755 --- a/builder/kojid +++ b/builder/kojid @@ -45,6 +45,7 @@ from fnmatch import fnmatch from gzip import GzipFile from optparse import SUPPRESS_HELP, OptionParser +import dnf import Cheetah.Template import requests import rpm @@ -81,20 +82,6 @@ try: except ImportError: librepo = None -try: - import dnf -except ImportError: - dnf = None - -try: - # yum - from yum import repoMDObject - import yum.packages - import yum.Errors - yum_available = True -except ImportError: - yum_available = False - # imports for LiveCD, LiveMedia, and Appliance handler try: import pykickstart.parser as ksparser @@ -799,42 +786,30 @@ class BuildRoot(object): opts = dict([(k, getattr(self.options, k)) for k in ('topurl', 'topdir')]) opts['tempdir'] = self.options.workdir - # prefer librepo - if librepo is not None: - repo_url = os.path.join(repodir, self.br_arch) - # repo_url can start with '/', don't use os.path.join - if self.options.topurl: - repo_url = '%s/%s' % (self.options.topurl, repo_url) - elif self.options.topdir: - repo_url = '%s/%s' % (self.options.topdir, repo_url) - logging.error(repo_url) - tmpdir = os.path.join(self.tmpdir(), 'librepo-markExternalRPMs') - koji.ensuredir(tmpdir) - h = librepo.Handle() - r = librepo.Result() - h.setopt(librepo.LRO_REPOTYPE, librepo.LR_YUMREPO) - h.setopt(librepo.LRO_URLS, [repo_url]) - h.setopt(librepo.LRO_DESTDIR, tmpdir) - # We are using this just to find out location of 'origin', - # we don't even need to download it since we use openRemoteFile - h.setopt(librepo.LRO_YUMDLIST, []) - h.perform(r) - pkgorigins = r.getinfo(librepo.LRR_YUM_REPOMD)['origin']['location_href'] - koji.util.rmtree(tmpdir) - elif yum_available: - # XXX - cheap hack to get relative paths - repomdpath = os.path.join(repodir, self.br_arch, 'repodata', 'repomd.xml') - with koji.openRemoteFile(repomdpath, **opts) as fo: - try: - repodata = repoMDObject.RepoMD('ourrepo', fo) - except Exception: - raise koji.BuildError("Unable to parse repomd.xml file for %s" % - os.path.join(repodir, self.br_arch)) - data = repodata.getData('origin') - pkgorigins = data.location[1] - else: + if librepo is None: # shouldn't occur - raise koji.GenericError("install librepo or yum") + raise koji.GenericError("install librepo") + + repo_url = os.path.join(repodir, self.br_arch) + # repo_url can start with '/', don't use os.path.join + if self.options.topurl: + repo_url = '%s/%s' % (self.options.topurl, repo_url) + elif self.options.topdir: + repo_url = '%s/%s' % (self.options.topdir, repo_url) + logging.error(repo_url) + tmpdir = os.path.join(self.tmpdir(), 'librepo-markExternalRPMs') + koji.ensuredir(tmpdir) + h = librepo.Handle() + r = librepo.Result() + h.setopt(librepo.LRO_REPOTYPE, librepo.LR_YUMREPO) + h.setopt(librepo.LRO_URLS, [repo_url]) + h.setopt(librepo.LRO_DESTDIR, tmpdir) + # We are using this just to find out location of 'origin', + # we don't even need to download it since we use openRemoteFile + h.setopt(librepo.LRO_YUMDLIST, []) + h.perform(r) + pkgorigins = r.getinfo(librepo.LRR_YUM_REPOMD)['origin']['location_href'] + koji.util.rmtree(tmpdir) relpath = os.path.join(repodir, self.br_arch, pkgorigins) with koji.openRemoteFile(relpath, **opts) as fo: @@ -5731,10 +5706,7 @@ class createDistRepoTask(BaseTaskHandler): self.uploadpath = self.getUploadDir() self.get_rpms(tag, arch, keys, opts) if opts['multilib'] and koji.arch.isMultiLibArch(arch): - if dnf is not None: - self.do_multilib_dnf(arch, self.archmap[arch], opts['multilib']) - else: - self.do_multilib_yum(arch, self.archmap[arch], opts['multilib']) + self.do_multilib_dnf(arch, self.archmap[arch], opts['multilib']) self.split_pkgs(opts) self.write_kojipkgs() self.write_pkglist() @@ -5987,139 +5959,6 @@ enabled=1 rpminfo['_multilib'] = True self.kojipkgs[bnp] = rpminfo - def do_multilib_yum(self, arch, ml_arch, conf): - repodir = koji.pathinfo.distrepo(self.rinfo['id'], self.rinfo['tag_name']) - mldir = os.path.join(repodir, koji.canonArch(ml_arch)) - ml_true = set() # multilib packages we need to include before depsolve - ml_conf = os.path.join(koji.pathinfo.work(), conf) - - # read pkgs data from multilib repo - ml_pkgfile = os.path.join(mldir, 'kojipkgs') - ml_pkgs = json.load(open(ml_pkgfile, 'r')) - - # step 1: figure out which packages are multilib (should already exist) - mlm = multilib.DevelMultilibMethod(ml_conf) - fs_missing = set() - for bnp in self.kojipkgs: - rpminfo = self.kojipkgs[bnp] - ppath = rpminfo['_pkgpath'] - po = yum.packages.YumLocalPackage(filename=ppath) - if mlm.select(po): - # we need a multilib package to be included - ml_bnp = bnp.replace(arch, self.archmap[arch]) - ml_path = os.path.join(mldir, ml_bnp[0].lower(), ml_bnp) - # ^ XXX - should actually generate this - if ml_bnp not in ml_pkgs: - # not in our multilib repo - self.logger.error('%s (multilib) is not on the filesystem' % ml_path) - fs_missing.add(ml_path) - # we defer failure so can report all the missing deps - continue - ml_true.add(ml_path) - - # step 2: set up architectures for yum configuration - self.logger.info("Resolving multilib for %s using method devel" % arch) - yumbase = yum.YumBase() - yumbase.verbose_logger.setLevel(logging.ERROR) - yumdir = os.path.join(self.workdir, 'yum') - # TODO: unwind this arch mess - archlist = (arch, 'noarch') - transaction_arch = arch - archlist = archlist + self.compat[self.biarch[arch]] - best_compat = self.compat[self.biarch[arch]][0] - if koji.arch.archDifference(best_compat, arch) > 0: - transaction_arch = best_compat - if hasattr(koji.arch, 'ArchStorage'): - yumbase.preconf.arch = transaction_arch - else: - koji.arch.canonArch = transaction_arch - - yconfig = """ -[main] -debuglevel=2 -pkgpolicy=newest -exactarch=1 -gpgcheck=0 -reposdir=/dev/null -cachedir=/yumcache -installroot=%s -logfile=/yum.log - -[koji-%s] -name=koji multilib task -baseurl=file://%s -enabled=1 - -""" % (yumdir, self.id, mldir) - os.makedirs(os.path.join(yumdir, "yumcache")) - os.makedirs(os.path.join(yumdir, 'var/lib/rpm')) - - # step 3: proceed with yum config and set up - yconfig_path = os.path.join(yumdir, 'yum.conf-koji-%s' % arch) - with open(yconfig_path, 'w') as f: - f.write(yconfig) - self.session.uploadWrapper(yconfig_path, self.uploadpath, - os.path.basename(yconfig_path)) - yumbase.doConfigSetup(fn=yconfig_path) - yumbase.conf.cache = 0 - yumbase.doRepoSetup() - yumbase.doTsSetup() - yumbase.doRpmDBSetup() - # we trust Koji's files, so skip verifying sigs and digests - yumbase.ts.pushVSFlags( - (rpm._RPMVSF_NOSIGNATURES | rpm._RPMVSF_NODIGESTS)) - yumbase.doSackSetup(archlist=archlist, thisrepo='koji-%s' % arch) - yumbase.doSackFilelistPopulate() - for pkg in ml_true: - # TODO: store packages by first letter - # ppath = os.path.join(pkgdir, pkg.name[0].lower(), pname) - po = yum.packages.YumLocalPackage(filename=pkg) - yumbase.tsInfo.addInstall(po) - - # step 4: execute yum transaction to get dependencies - self.logger.info("Resolving depenencies for arch %s" % arch) - rc, errors = yumbase.resolveDeps() - ml_needed = {} - for tspkg in yumbase.tsInfo.getMembers(): - bnp = os.path.basename(tspkg.po.localPkg()) - dep_path = os.path.join(mldir, bnp[0].lower(), bnp) - ml_needed[dep_path] = tspkg - self.logger.debug("added %s" % dep_path) - if not os.path.exists(dep_path): - self.logger.error('%s (multilib dep) not on filesystem' % dep_path) - fs_missing.add(dep_path) - self.logger.info('yum return code: %s' % rc) - if not rc: - self.logger.error('yum depsolve was unsuccessful') - raise koji.GenericError(errors) - if len(fs_missing) > 0: - missing_log = os.path.join(self.workdir, 'missing_multilib.log') - with open(missing_log, 'w') as outfile: - outfile.write('The following multilib files were missing:\n') - for ml_path in fs_missing: - outfile.write(ml_path) - outfile.write('\n') - self.session.uploadWrapper(missing_log, self.uploadpath) - raise koji.GenericError('multilib packages missing. ' - 'See missing_multilib.log') - - # step 5: update kojipkgs - for dep_path in ml_needed: - tspkg = ml_needed[dep_path] - bnp = os.path.basename(dep_path) - if bnp in self.kojipkgs: - # we expect duplication with noarch, but not other arches - if tspkg.arch != 'noarch': - self.logger.warning("Multilib duplicate: %s", bnp) - continue - rpminfo = ml_pkgs[bnp].copy() - # fix _pkgpath, which comes from another task and could be wrong - # for us - # TODO: would be better if we could use the proper path here - rpminfo['_pkgpath'] = dep_path - rpminfo['_multilib'] = True - self.kojipkgs[bnp] = rpminfo - def pick_key(self, keys, avail_keys): best = None best_idx = None diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index ffd8163..e48f844 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -17,6 +17,7 @@ from collections import OrderedDict, defaultdict from optparse import SUPPRESS_HELP, OptionParser import dateutil.parser +import libcomps import koji from koji.util import base64encode, md5_constructor, to_list @@ -45,16 +46,6 @@ from koji_cli.lib import ( watch_tasks ) -try: - import libcomps -except ImportError: # pragma: no cover - libcomps = None - try: - import yum.comps as yumcomps - except ImportError: - yumcomps = None - - def handle_add_group(goptions, session, args): "[admin] Add a group to a tag" usage = _("usage: %prog add-group ") @@ -1356,23 +1347,16 @@ def handle_import_comps(goptions, session, args): if len(args) != 2: parser.error(_("Incorrect number of arguments")) activate_session(session, goptions) + + filename = args[0] # check if the tag exists - dsttag = session.getTag(args[1]) - if dsttag is None: + tag = session.getTag(args[1]) + if tag is None: error("No such tag: %s" % args[1]) - if libcomps is not None: - _import_comps(session, args[0], args[1], local_options) - elif yumcomps is not None: - _import_comps_alt(session, args[0], args[1], local_options) - else: - error("comps module not available") - -def _import_comps(session, filename, tag, options): - """Import comps data using libcomps module""" comps = libcomps.Comps() comps.fromxml_f(filename) - force = options.force + force = local_options.force ptypes = { libcomps.PACKAGE_TYPE_DEFAULT: 'default', libcomps.PACKAGE_TYPE_OPTIONAL: 'optional', @@ -1383,7 +1367,7 @@ def _import_comps(session, filename, tag, options): for group in comps.groups: print("Group: %s (%s)" % (group.id, group.name)) session.groupListAdd( - tag, group.id, force=force, display_name=group.name, + tag['name'], group.id, force=force, display_name=group.name, is_default=bool(group.default), uservisible=bool(group.uservisible), description=group.desc, @@ -1397,41 +1381,11 @@ def _import_comps(session, filename, tag, options): pkgopts['requires'] = pkg.requires s_opts = ', '.join(["'%s': %r" % (k, pkgopts[k]) for k in sorted(pkgopts.keys())]) print(" Package: %s: {%s}" % (pkg.name, s_opts)) - session.groupPackageListAdd(tag, group.id, pkg.name, force=force, **pkgopts) + session.groupPackageListAdd(tag['name'], group.id, pkg.name, force=force, **pkgopts) # libcomps does not support group dependencies # libcomps does not support metapkgs -def _import_comps_alt(session, filename, tag, options): # no cover 3.x - """Import comps data using yum.comps module""" - print('WARN: yum.comps does not support the biarchonly of group and basearchonly of package') - comps = yumcomps.Comps() - comps.add(filename) - force = options.force - for group in comps.groups: - print("Group: %(groupid)s (%(name)s)" % vars(group)) - session.groupListAdd(tag, group.groupid, force=force, display_name=group.name, - is_default=bool(group.default), - uservisible=bool(group.user_visible), - description=group.description, - langonly=group.langonly) - # yum.comps does not support the biarchonly field - for ptype, pdata in [('mandatory', group.mandatory_packages), - ('default', group.default_packages), - ('optional', group.optional_packages), - ('conditional', group.conditional_packages)]: - for pkg in pdata: - # yum.comps does not support basearchonly - pkgopts = {'type': ptype} - if ptype == 'conditional': - pkgopts['requires'] = pdata[pkg] - s_opts = ', '.join(["'%s': %r" % (k, pkgopts[k]) for k in sorted(pkgopts.keys())]) - print(" Package: %s: {%s}" % (pkg, s_opts)) - session.groupPackageListAdd(tag, group.groupid, pkg, force=force, **pkgopts) - # yum.comps does not support group dependencies - # yum.comps does not support metapkgs - - def handle_import_sig(goptions, session, args): "[admin] Import signatures into the database" usage = _("usage: %prog import-sig [options] [ ...]") diff --git a/tests/test_cli/data/comps-example.yumcomps.calls b/tests/test_cli/data/comps-example.yumcomps.calls deleted file mode 100644 index a6d2e29..0000000 --- a/tests/test_cli/data/comps-example.yumcomps.calls +++ /dev/null @@ -1,5202 +0,0 @@ -[ - [ "groupListAdd", [ "tag", "3d-printing" ], { "force": null, "description": "3D printing software", "uservisible": true, "is_default": false, "display_name": "3D Printing", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "openscad-MCAD" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "cura-lulzbot" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "slic3r" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "printrun" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "openscad" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "meshlab" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "admesh" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "cura" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "blender" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "RepetierHost" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "sfact" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "repsnapper" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "3d-printing", "skeinforge" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "arm-tools" ], { "force": null, "description": "Tools for working with arm systems", "uservisible": false, "is_default": false, "display_name": "ARM Tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "arm-tools", "cloud-utils-growpart" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arm-tools", "fedora-arm-installer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arm-tools", "uboot-images-armv7" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "sugar-apps" ], { "force": null, "description": "Additional activities for use with the Sugar Environment.", "uservisible": false, "is_default": false, "display_name": "Additional Sugar Activities", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-calendario" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-pukllanapac" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-playgo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-implode" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-analyze" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-flipsticks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-connect" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-emulator" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-xomail" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-distance" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-apps", "sugar-view-slides" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "admin-tools" ], { "force": null, "description": "This group is a collection of graphical administration tools for the system, such as for managing user accounts and configuring system hardware.", "uservisible": true, "is_default": false, "display_name": "Administration Tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "authconfig-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "gnome-disk-utility" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "fros-recordmydesktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "system-config-users" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "setroubleshoot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "system-config-keyboard" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "recordmydesktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "system-config-language" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "system-config-date" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "admin-tools", "abrt-desktop" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "anaconda-tools" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Anaconda tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "cryptsetup" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "xfsprogs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "lvm2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "s390utils-base" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "dosfstools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "s390utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "iscsi-initiator-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "mdadm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "dmraid" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "mactel-boot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "gfs2-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "reiserfs-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "dracut-network" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "shim" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "grub2-efi" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "btrfs-progs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "extlinux-bootloader" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "grub2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "ntfsprogs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "realmd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "efibootmgr" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "authconfig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "device-mapper-multipath" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "kexec-tools-anaconda-addon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "glibc-all-langpacks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "fcoe-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "firewalld" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "e2fsprogs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "chrony" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "syslinux-extlinux" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "teamd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "anaconda-tools", "hfsplus-tools" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "ansible-node" ], { "force": null, "description": "This group contains packages necessary for the system to be controlled by Ansible.", "uservisible": true, "is_default": false, "display_name": "Ansible node", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "ansible-node", "python2-dnf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ansible-node", "libselinux-python" ], { "force": null, "requires": "selinux-policy", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "hawaii-apps" ], { "force": null, "description": "A set of commonly used applications for the Hawaii Desktop", "uservisible": false, "is_default": false, "display_name": "Applications for the Hawaii Desktop", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-apps", "eyesight" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-apps", "transmission-qt" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "lxde-apps" ], { "force": null, "description": "A set of commonly used applications for the LXDE Desktop", "uservisible": false, "is_default": false, "display_name": "Applications for the LXDE Desktop", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-apps", "midori" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-apps", "transmission" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-apps", "pidgin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-apps", "sylpheed" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "lxqt-apps" ], { "force": null, "description": "A set of commonly used applications for the LXQt Desktop", "uservisible": false, "is_default": false, "display_name": "Applications for the LXQt Desktop", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-apps", "transmission-qt" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "xfce-apps" ], { "force": null, "description": "A set of commonly used applications for the Xfce Desktop", "uservisible": false, "is_default": false, "display_name": "Applications for the Xfce Desktop", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "firefox" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-mailmbox" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "evince" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-archive" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "florence" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-vcalendar" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-pgp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "geany" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "galculator" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-rssyl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "gparted" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "ristretto" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "catfish" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-fetchinfo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "pidgin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "leafpad" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-newmail" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-att-remover" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "xfce4-dict-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "xarchiver" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "seahorse" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "xfce4-clipman-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "transmission" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-notification" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-smime" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-spam-report" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "orage" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-tnef" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-apps", "claws-mail-plugins-attachwarner" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "arabic-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Arabic Support", "langonly": "ar" } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-titlel-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-office-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-naskh-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-farsi-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-one-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-art-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-qurn-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-decorative-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-title-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-pen-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "paktype-naqsh-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "dejavu-sans-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-letter-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-poster-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-book-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "dejavu-sans-mono-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-screen-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "paktype-tehreer-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "kacst-digital-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "sil-scheherazade-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "scim-tables-arabic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "arabic-support", "sil-lateef-fonts" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "assamese-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Assamese Support", "langonly": "as" } ], - [ "groupPackageListAdd", [ "tag", "assamese-support", "lohit-assamese-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "assamese-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "assamese-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "assamese-support", "google-noto-sans-bengali-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "assamese-support", "google-noto-sans-bengali-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "assamese-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "audio" ], { "force": null, "description": "Various tools for audio synthesis and music production.", "uservisible": true, "is_default": false, "display_name": "Audio Production", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-vocoder-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "seq24" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "xsynth-dssi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ardour5" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "non-sequencer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-zynadd-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ams" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "opus-tools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "zynaddsubfx" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "mscore" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "non-session-manager" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "timidity++" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "amsynth" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "zita-rev1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "qsynth" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "qastools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-invada-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "jack-audio-connection-kit-dbus" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsa-plugins-usbstream" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsa-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "jack-rack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsamixergui" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "harmonyseq" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-tap-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "guitarix" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "arpage" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-newtonator" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "tuxguitar" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-ll-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsa-plugins-upmix" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-fil-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "jack_capture" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "mup" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-kn0ck0ut" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-mcp-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladish" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "aj-snapshot" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "rakarrack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-swh-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "frescobaldi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-fil-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "jackctlmmc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-amb-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "idjc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "jmeters" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-vco-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-autotalent-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "multimedia-menus" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "sbc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-sorcer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "kernel-tools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "rtirq" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "audacity" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-c++-tools " ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lash" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lilypond" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "radium-compressor" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "monobristol" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-fomp-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "realTimeConfigQuickScan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsa-plugins-jack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "a2jmidid" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "fluid-soundfont-gm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "synthv1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "qjackctl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "non-mixer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "yoshimi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "jack-audio-connection-kit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "hexter-dssi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-swh-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "calf" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "jamin" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "zita-at1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-avw-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-blop-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-drumkv1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "muse" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "nekobee-dssi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsa-plugins-vdownmix" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-triceratops" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "tinycompress-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "Add64" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsa-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsa-tools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "fluidsynth" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "qmidiarp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-samplv1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "hydrogen" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "japa" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "qtractor" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "whysynth-dssi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "non-daw" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-abGate" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "sooperlooper" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-synthv1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "fluidsynth-dssi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "bristol" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-artyfx-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "jaaa" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-x42-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2dynparam" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-cmt-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "zynjacku" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsa-plugins-samplerate" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "alsa-ucm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "ladspa-rev-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "dssi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "swami" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "drumkv1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "lv2-fabla" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "rosegarden4" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "vmpk" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "samplv1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "audio", "gladish" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "authoring-and-publishing" ], { "force": null, "description": "These tools allow you to create documents in the DocBook format and convert them into HTML, PDF, Postscript, and text.", "uservisible": true, "is_default": false, "display_name": "Authoring and Publishing", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "docbook-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "xhtml1-dtds" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "docbook-style-dsssl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "texlive-kerkis" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "docbook5-style-xsl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "docbook-utils-pdf" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "docbook-slides" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "linuxdoc-tools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "texlive" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "docbook-style-xsl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "texlive-cm-lgc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "xmlto" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "docbook5-schemas" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "tex-fonts-hebrew" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "kbibtex" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "texlive-xdvi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "xmlcopyeditor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "abcm2ps" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "kile" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "tex-zfuzz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "pandoc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "txt2rss" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "ooo2txt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "html401-dtds" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "python-docutils" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "dblatex" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "BibTool" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "latex-mk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "scribus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "texlive-latex" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "lout" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "latexmk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "python-manuel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "docbook2X" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "w3c-markup-validator" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "authoring-and-publishing", "lilypond" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "basic-desktop" ], { "force": null, "description": "Basic X Window System with a choice of window manager.", "uservisible": false, "is_default": false, "display_name": "Basic Desktop", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "fedora-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "qtile" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "i3" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "openbox" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "adwaita-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "xmonad-basic" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "initial-setup-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "metacity" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "adwaita-gtk2-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "ratpoison" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "awesome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "lightdm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "basic-desktop", "dwm" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "web-server" ], { "force": null, "description": "These tools allow you to run a Web server on the system.", "uservisible": false, "is_default": false, "display_name": "Basic Web Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "httpd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "php" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "mod_ssl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "webalizer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "php-ldap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "squid" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "mod_perl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "crypto-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "php-mysqlnd" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "httpd-manual" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "phpMyAdmin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "mod_auth_kerb" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "phpldapadmin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "tiquit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "mediawiki" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "php-pgsql" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "mod_fcgid" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "mod_xsendfile" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "cherokee" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "lighttpd-fastcgi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "wordpress" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "dap-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "php-odbc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "php-pecl-apc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "mod_security" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "lighttpd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "apachetop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "boa" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "perl-HTML-Mason" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "mod_geoip" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "thttpd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "Pound" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "awstats" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "ocspd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "perl-Kwiki" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "drupal7" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "web-server", "moin" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "bengali-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Bengali Support", "langonly": "bn" } ], - [ "groupPackageListAdd", [ "tag", "bengali-support", "lohit-bengali-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bengali-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bengali-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bengali-support", "google-noto-sans-bengali-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bengali-support", "google-noto-sans-bengali-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bengali-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "bhutanese-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Bhutanese Support", "langonly": "dz" } ], - [ "groupPackageListAdd", [ "tag", "bhutanese-support", "jomolhari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "bodo-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Bodo Support", "langonly": "brx" } ], - [ "groupPackageListAdd", [ "tag", "bodo-support", "lohit-devanagari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bodo-support", "samyak-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bodo-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bodo-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bodo-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "bodo-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "books" ], { "force": null, "description": "Books and Guides for Fedora users and developers", "uservisible": true, "is_default": false, "display_name": "Books and Guides", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "books", "diveintopython" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "books", "ldd-pdf" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "buildsys-build" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Buildsystem building group", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "tar" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "xz" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "sed" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "findutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "bzip2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "redhat-rpm-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "make" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "shadow-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "coreutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "which" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "gcc-c++" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "unzip" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "fedora-release" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "cpio" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "gawk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "gcc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "util-linux" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "bash" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "info" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "grep" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "diffutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "patch" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "rpm-build" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "buildsys-build", "gzip" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "c-development" ], { "force": null, "description": "These tools include core development tools such as automake, gcc and debuggers.", "uservisible": true, "is_default": false, "display_name": "C Development Tools and Libraries", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "flex" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "gcc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "glibc-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "strace" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "make" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "pkgconfig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "automake" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "gdb" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "bison" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "libtool" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "autoconf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "gcc-c++" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "binutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "ltrace" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "byacc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "indent" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "elfutils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "valgrind" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "ccache" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "ctags" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "oprofile" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "cscope" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "cproto" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "cbmc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "cmake" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "undertaker" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "elfinfo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "insight" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "splint" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "ElectricFence" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "yasm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "scons" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "coan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "scorep" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "pscan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "remake" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "zzuf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "astyle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "check" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "trinity" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "c-development", "nasm" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "cinnamon-desktop" ], { "force": null, "description": "Cinnamon provides a desktop with a traditional layout, advanced features, easy to use, powerful and flexible.", "uservisible": false, "is_default": false, "display_name": "Cinnamon", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "setroubleshoot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gnome-disk-utility" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "firefox" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gvfs-smb" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-libreswan-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gedit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "blueman" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "evince" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gnome-system-monitor" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "alsa-plugins-pulseaudio" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "nemo-fileroller" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "firewall-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gnome-backgrounds" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gvfs-mtp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-vpnc-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-adsl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "fedora-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-openconnect" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-openvpn-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "xdg-user-dirs-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gnome-screenshot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "imsettings-cinnamon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "abrt-desktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "abrt-java-connector" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-l2tp-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-iodine-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-bluetooth" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gnome-terminal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "cinnamon-screensaver" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "lightdm-gtk-greeter-settings" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gnome-calculator" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "sane-backends-drivers-scanners" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gvfs-gphoto2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "icedtea-web" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "initial-setup-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-wifi" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "metacity" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "shotwell" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-wwan" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "cinnamon-control-center" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "eog" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "fros-recordmydesktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "system-config-printer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "redshift" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "simple-scan" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "gvfs-archive" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "thunderbird" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "NetworkManager-pptp-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "nemo-preview" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "brasero" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "cinnamon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "f24-backgrounds-base" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "nemo-image-converter" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "nm-connection-editor" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cinnamon-desktop", "lightdm-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "cloud-infrastructure" ], { "force": null, "description": "Infrastructure packages for cloud computing.", "uservisible": true, "is_default": false, "display_name": "Cloud Infrastructure", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-infrastructure", "iwhd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-infrastructure", "sheepdog" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-infrastructure", "hail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-infrastructure", "ceph" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-infrastructure", "glusterfs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-infrastructure", "tabled" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-infrastructure", "euca2ools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-infrastructure", "imagefactory" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-infrastructure", "StarCluster" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "cloud-management" ], { "force": null, "description": "Software to manage servers and system images that run in \"cloud\" environments", "uservisible": true, "is_default": false, "display_name": "Cloud Management Tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "cloud-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "imagefactory-plugins-TinMan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "imagefactory-plugins-EC2-JEOS-images" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "imagefactory-plugins-Rackspace" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "imagefactory-plugins-OpenStack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "imagefactory-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "rubygem-amazon-ec2" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "python-libcloud" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "python-boto" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "imagefactory" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "imagefactory-plugins-EC2" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "imagefactory-plugins-Rackspace-JEOS-images" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "python-openstackclient" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-management", "rubygem-amazon-ec2-doc" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "cloud-server" ], { "force": null, "description": "Software for servers and system images that run in \"cloud\" environments", "uservisible": false, "is_default": false, "display_name": "Cloud Server Tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-server", "rsync" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-server", "dracut-config-generic" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-server", "tar" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-server", "grubby" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-server", "syslinux-extlinux" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-server", "heat-cfntools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-server", "cloud-init" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-server", "cloud-utils-growpart" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "cloud-server", "fedora-release-cloud" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "networkmanager-submodules" ], { "force": null, "description": "This group contains NetworkManager submodules that are commonly used, but may not be wanted in some streamlined configurations.", "uservisible": false, "is_default": false, "display_name": "Common NetworkManager Submodules", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "networkmanager-submodules", "NetworkManager-wwan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "networkmanager-submodules", "NetworkManager-wifi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "networkmanager-submodules", "NetworkManager-bluetooth" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "container-management" ], { "force": null, "description": "Tools for managing Linux containers", "uservisible": true, "is_default": false, "display_name": "Container Management", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "container-management", "docker" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "container-management", "docker-cockpit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "container-management", "docker-registry" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "container-management", "fedora-dockerfiles" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "core" ], { "force": null, "description": "Smallest possible installation", "uservisible": false, "is_default": false, "display_name": "Core", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "core", "openssh-clients" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "less" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "iputils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "sudo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "parted" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "kbd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "iproute" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "dhcp-client" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "selinux-policy-targeted" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "curl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "rpm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "vim-minimal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "systemd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "dnf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "glibc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "hostname" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "shadow-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "coreutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "bash" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "man-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "policycoreutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "procps-ng" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "ncurses" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "grubby" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "util-linux" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "cronie" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "basesystem" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "audit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "rootfiles" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "dnf-yum" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "setup" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "e2fsprogs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "openssh-server" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "initscripts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "plymouth" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "filesystem" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "passwd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "dnf-plugins-core" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "dracut-config-rescue" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "firewalld" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "authconfig" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "NetworkManager" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "ppc64-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "initial-setup" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "uboot-images-armv7" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "uboot-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "core", "dracut-config-generic" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "critical-path-apps" ], { "force": null, "description": "A set of applications that are considered critical path", "uservisible": false, "is_default": false, "display_name": "Critical Path (Applications)", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-apps", "thunderbird" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-apps", "evolution" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-apps", "firefox" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "critical-path-base" ], { "force": null, "description": "A set of packages that provide the shared platform for Critical Path functionality on all Fedora spins", "uservisible": false, "is_default": false, "display_name": "Critical Path (Base)", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "pungi" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "kernel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "dnf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "redhat-rpm-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "initial-setup" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "createrepo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "mash" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "dash" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "rpm-build" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "yum" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "anaconda" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "NetworkManager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "dracut" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "gcc-c++" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-base", "livecd-tools" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "critical-path-gnome" ], { "force": null, "description": "A set of packages that provide the Critical Path functionality for the GNOME desktop", "uservisible": false, "is_default": false, "display_name": "Critical Path (GNOME)", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-drv-nouveau" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-server-Xorg" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "gnome-themes-standard" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-drv-libinput" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "control-center" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "gnome-session-xsession" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "gnome-terminal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-drv-evdev" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-drv-intel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-drv-qxl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-drv-vesa" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-xinit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "gnome-shell" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-drv-ati" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-drv-fbdev" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "gvfs-fuse" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "dconf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "xorg-x11-xauth" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "gdm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "gnome-bluetooth" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "nautilus" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "pulseaudio-module-x11" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "libcanberra-gtk3" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "avahi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-gnome", "gnome-software" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "critical-path-hawaii" ], { "force": null, "description": "A set of packages that provide the Critical Path functionality for the Hawaii desktop", "uservisible": false, "is_default": false, "display_name": "Critical Path (Hawaii)", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-hawaii", "sddm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-hawaii", "hawaii-shell" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "critical-path-kde" ], { "force": null, "description": "A set of packages that provide the Critical Path functionality for the KDE desktop", "uservisible": false, "is_default": false, "display_name": "Critical Path (KDE)", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-kde", "sddm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-kde", "kdelibs" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "critical-path-lxde" ], { "force": null, "description": "A set of packages that provide the Critical Path functionality for the LXDE desktop", "uservisible": false, "is_default": false, "display_name": "Critical Path (LXDE)", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-lxde", "lxde-common" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-lxde", "notification-daemon" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "critical-path-lxqt" ], { "force": null, "description": "A set of packages that provide the Critical Path functionality for the LXQt desktop", "uservisible": false, "is_default": false, "display_name": "Critical Path (LXQt)", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-lxqt", "lxqt-common" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-lxqt", "notification-daemon" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "critical-path-xfce" ], { "force": null, "description": "A set of packages that provide the Critical Path functionality for the Xfce desktop", "uservisible": false, "is_default": false, "display_name": "Critical Path (Xfce)", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-xfce", "xfce4-session" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "critical-path-xfce", "xfce4-settings" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "d-development" ], { "force": null, "description": "These include development tools and libraries such as ldc, and geany-tag.", "uservisible": true, "is_default": false, "display_name": "D Development Tools and Libraries", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ldc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ldc-druntime" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "make" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "pkgconfig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ldc-phobos-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ldc-druntime-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ctags" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "indent" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "geany" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "cmake" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "derelict-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "insight" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "nemiver" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "gl3n-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "astyle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "uncrustify" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "dns-server" ], { "force": null, "description": "This package group allows you to run a DNS name server (BIND) on the system.", "uservisible": false, "is_default": false, "display_name": "DNS Name Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "dns-server", "bind-chroot" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dns-server", "pdns" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dns-server", "unbound" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dns-server", "bind" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dns-server", "nsd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dns-server", "rbldnsd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dns-server", "ldns" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dns-server", "pdns-recursor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dns-server", "dnsperf" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "design-suite" ], { "force": null, "description": "These packages are targeted towards professional designers, and are related to graphics, web and animation.", "uservisible": true, "is_default": false, "display_name": "Design Suite", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "krita" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "font-manager" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "aajohan-comfortaa-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "pdfmod" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "pitivi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gpick" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "inkscape" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "phatch" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "synfigstudio" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "fontforge" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "astigmatic-grand-hotel-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "pdfshuffler" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "colord-extra-profiles" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "adobe-source-sans-pro-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "optipng" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "blender" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "julietaula-montserrat-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "google-roboto-slab-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "shotwell" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "screenruler" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "mypaint" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "darktable" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "sparkleshare" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "hugin" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "GraphicsMagick" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "lato-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "overpass-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "entangle" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "xournal" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "open-sans-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "campivisivi-titillium-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "dia" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "shutter" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "audacity" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "google-roboto-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "nautilus-image-converter" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "google-roboto-condensed-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "typetype-molot-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "scribus" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "pngcrush" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "pencil" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "openclipart" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "ImageMagick" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "geeqie" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "YafaRay" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "rapid-photo-downloader" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "calligra-karbon" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "LuxRender" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-fourier-plugin" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-lensfun" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-normalmap" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gmic-gimp" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "YafaRay-blender" ], { "force": null, "requires": "blender", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-high-pass-filter" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "inkscape-psd" ], { "force": null, "requires": "inkscape", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "inkscape-sozi" ], { "force": null, "requires": "inkscape", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-separate+" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-resynthesizer" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimpfx-foundry" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-data-extras" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-layer-via-copy-cut" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-help" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-elsamuko" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "sane-backends-drivers-scanners" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-dbp" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-lqr-plugin" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-paint-studio" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-help-browser" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "xsane-gimp" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "inkscape-table" ], { "force": null, "requires": "inkscape", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-wavelet-denoise-plugin" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-save-for-web" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-dds-plugin" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "gimp-gap" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "design-suite", "LuxRender-blender" ], { "force": null, "requires": "blender", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "development-libs" ], { "force": null, "description": "The packages in this group are core libraries needed to develop applications.", "uservisible": false, "is_default": false, "display_name": "Development Libraries", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "zlib-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "glibc-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "readline-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "ncurses-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "bzip2-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "pam-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "lockdev-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "cyrus-sasl-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "pciutils-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "openldap-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "slang-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "python-ldap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "gmp-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libcurl-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "python-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "openssl-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libselinux-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "rpm-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "boost-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "perl-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "dbus-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libdb-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libcap-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libacl-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libattr-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "binutils-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "krb5-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libuser-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "hesiod-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libogg-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "pcsc-lite-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libvorbis-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libxml2-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "poco-doc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "mpir-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "check-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "gupnp-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "iml-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "gpm-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "linbox-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "geoclue-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libdwarf-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "gmp-ecm-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "ffcall" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "python-ZODB3-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "m4ri-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "coolkey-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "lexertl-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libusbx-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "DSDP-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "gdbm-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "poco-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "gf2x-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "expat-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "gypsy-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "gssdp-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "m4rie-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "newt-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "libedit-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-libs", "givaro-devel" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "development-tools" ], { "force": null, "description": "These tools include general development tools such as git and CVS.", "uservisible": true, "is_default": false, "display_name": "Development Tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "gettext" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "patchutils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "git" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "systemtap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "diffstat" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "cvs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "patch" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "subversion" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "doxygen" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "rcs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "gitg" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "dejagnu" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "quilt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "cvs2cl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "svn2cl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "utrac" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "cvsps" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "nemiver" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "git2cl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "translate-toolkit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "manedit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "gtranslator" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "scanmem" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "qgit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "robodoc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "rapidsvn" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "subunit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "meld" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "monotone" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "archmage" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "tailor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "buildbot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "tkcvs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "tortoisehg" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "giggle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "darcs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "tig" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "bzr" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "git-cola" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "gambas3-ide" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "mercurial" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "git-annex" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "cvsgraph" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "mr" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "highlight" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "lcov" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "colordiff" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "development-tools", "expect" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "dial-up" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Dial-up Networking Support", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "ppp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "NetworkManager-adsl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "ModemManager" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "linux-atm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "minicom" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "isdn4k-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "lrzsz" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "wvdial" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "rp-pppoe" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "pptp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "statserial" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dial-up", "efax" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "directory-server" ], { "force": null, "description": "Machine and user identity servers.", "uservisible": false, "is_default": false, "display_name": "Directory Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "ypserv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "389-console" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "idm-console-framework" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "migrationtools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "openldap-servers" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "389-ds-base" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "389-dsgw" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "samba" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "389-ds-console" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "krb5-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "directory-server", "389-admin-console" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "dogri-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Dogri Support", "langonly": "doi" } ], - [ "groupPackageListAdd", [ "tag", "dogri-support", "lohit-devanagari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogri-support", "samyak-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogri-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogri-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogri-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogri-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "dogtag" ], { "force": null, "description": "Enterprise-class open source Certificate Authority", "uservisible": false, "is_default": false, "display_name": "Dogtag Certificate System", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "dogtag", "pki-ca" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogtag", "pki-kra" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogtag", "pki-ocsp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogtag", "pki-console" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogtag", "pki-javadoc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogtag", "pki-tks" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "dogtag", "pki-tps" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "domain-client" ], { "force": null, "description": "Support for joining a FreeIPA or Active Directory Domain", "uservisible": true, "is_default": false, "display_name": "Domain Membership", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "domain-client", "samba-winbind" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "domain-client", "oddjob-mkhomedir" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "domain-client", "adcli" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "domain-client", "sssd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "domain-client", "samba-common-tools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "domain-client", "freeipa-client" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "editors" ], { "force": null, "description": "Sometimes called text editors, these are programs that allow you to create and edit text files. This includes Emacs and Vi.", "uservisible": true, "is_default": false, "display_name": "Editors", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "xemacs-packages-extra" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "nedit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "zile" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "xmlcopyeditor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "emacs-bbdb" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "geany" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "emacs-ess" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "emacs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "jed" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "psgml" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "code-editor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "emacs-vm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "gobby" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "leafpad" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "joe" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "cssed" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "vim-X11" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "vim-enhanced" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "xemacs-xft" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "xemacs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "xemacs-packages-base" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "poedit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "editors", "emacs-auctex" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "education" ], { "force": null, "description": "Educational software for learning", "uservisible": true, "is_default": false, "display_name": "Educational Software", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "education", "genchemlab" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "skychart" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "ktouch" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kmplot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "klettres" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "glglobe" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "gcompris" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "rocs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "drgeo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "parley" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kiten" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kalgebra" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "drgeo-doc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "cantor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kstars" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kbruch" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "nightview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "childsplay" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "anki" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "gtypist" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "moodle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "corrida" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "mnemosyne" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "step" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kgeography" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "blinken" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kig" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "pairs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "saoimage" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kanagram" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kalzium" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "marble" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kwordquiz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "fantasdic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "stellarium" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "kturtle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "vmpk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "tuxtype2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "education", "khangman" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "electronic-lab" ], { "force": null, "description": "Design and simulation tools for hardware engineers", "uservisible": true, "is_default": false, "display_name": "Electronic Lab", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "archimedes" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "xorg-x11-fonts-ISO8859-9-100dpi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "eclipse-cdt" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "ngspice" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "dia-electric2" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "avrdude" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "dia-CMOS" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "emacs-vregs-mode" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "tkgate" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "arduino" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gspiceui" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "dia-Digital" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "picprog" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gsim85" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "pcb" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "covered" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "dia-electronic" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "drawtiming" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-Perlilog" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "avr-gcc-c++" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "mcu8051ide" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "vhd2vl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "LabPlot" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "avarice" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "emacs-verilog-mode" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "sigrok-cli" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "eclipse-epic" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "tetex-IEEEtran" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "rtl-sdr" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "magic" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "xcircuit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "sk2py" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "netgen" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gnucap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "eclipse-veditor" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "teal" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "pikloops" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "dgc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "avr-gdb" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "irsim" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-SystemC-Vregs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "hct" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "sigrok-firmware-fx2lafw" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "picocom" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "avr-binutils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "acpica-tools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "eclipse-eclox" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-Verilog-Perl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gerbv" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-Verilog-Readmem" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "vrq" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "qucs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "dfu-programmer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "xorg-x11-fonts-Type1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "tkcvs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "pulseview" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "pharosc-alliance" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gplcver" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "eclipse-subclipse" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-Verilog-CodeGen" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "ghdl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "tclspice" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-ModelSim-List" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "alliance" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-Hardware-Vhdl-Lexer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "eclipse-dltk-tcl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "CUnit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "uisp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "dinotrace" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-Hardware-Vhdl-Tidy" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "pharosc-magic" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "ghc-chalmers-lava2000-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "pharosc-synopsys" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gresistor" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "pharosc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "linsmith" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "espresso-ab" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gr-osmosdr" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-SystemPerl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gnuradio" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "icaro" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "pharosc-xcircuit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "hiredis" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "toped" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "avr-gcc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gnusim8085" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "python-myhdl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "geda-gaf" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "avra" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "pikdev" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "ktechlab" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gtkwave" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "xorg-x11-fonts-ISO8859-1-100dpi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "flterm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "verilator" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "sdcc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "eclipse-texlipse" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "kicad" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "cgnslib" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gpsim" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "eqntott" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "piklab" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "xorg-x11-fonts-100dpi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "electric" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "fped" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "iverilog" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "fritzing" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-Hardware-Verilog-Parser" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "perl-Hardware-Vhdl-Parser" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "nesc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gds2pov" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "openocd" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "mot-adms" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "magic-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "smartsim" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "freeDiameter" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "emacs-dinotrace" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "qtoctave" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gtkterm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "srecord" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "gputils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "freehdl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "kdesvn" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "rfdump" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "electronic-lab", "minicom" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "engineering-and-scientific" ], { "force": null, "description": "This group includes packages for performing mathematical and scientific computations and plotting, as well as unit conversion.", "uservisible": true, "is_default": false, "display_name": "Engineering and Scientific", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "wxMaxima" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gnuplot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "python2-scipy" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "speedcrunch" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "xfig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "python2-matplotlib" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "units" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "R" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "octave" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "texmaker" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "transfig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gsl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gsl-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "maxima" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "symmetrica" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "netcdf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "wise2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cvc3-doc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "TOPCOM" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "pypop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "kst" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "polymake" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "lapack" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "dx-samples" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "opencv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "bliss" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "atlas" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "sympy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "polybori-ipbori" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "normaliz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "polybori" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "flint" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "dx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "chemtool" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "jnormaliz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "alt-ergo-gui" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "tcd-utils" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "picosat-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cudd-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "ltl2ba" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "paraview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "flocq" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "veusz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "wvs-data" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "hmmer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "qepcad-B" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "vaspview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "ncview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "csdp-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gromacs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "zenon" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gdl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "genus2reduction" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "genius" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "eclib" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gappalib-coq" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "routino" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "kpolynome" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "bowtie" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "ginac" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cvc3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "xgap" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "bwa" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gappa" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "libctl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "EMBOSS" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gridengine" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "maxima-gui" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "python2-networkx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "coq" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "coq-doc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "GMT-doc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "latte-integrale" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "hdf5" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "seaview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "openbabel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "azove" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cudd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "python2-biopython" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "mona-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "fflas-ffpack-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "GMT-coastlines-full" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "stix-math-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "lagan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "wgrib2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "GMT-coastlines-high" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "csdp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "coq-coqide" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "linbox" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gabedit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "meataxe" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "xtide" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cvc3-xemacs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "grads" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "alt-ergo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "tgif" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "why3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cvc3-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cddlib" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "qalculate-gtk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cantor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "glimmer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "vinci" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "python2-theano" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gap" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "geomview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "ncl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gromacs-openmpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "nco" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "mpfi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "grace" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "GMT" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "xdrawchem" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "mona" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "tideEditor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "hdf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "qalculate-kde" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cryptominisat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "stp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "root" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "libmatheval" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "frama-c" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "4ti2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gpredict" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "python2-cvxopt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "blas" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cantor-R" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "plotutils" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "picosat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "minisat2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "polybori-gui" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gfan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "TeXmacs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "galculator" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "brial" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "fastx_toolkit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "freefem++" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "E" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "pvs-sbcl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cvc4" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "mona-examples" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "Macaulay2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "cvc3-emacs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "gnome-chemistry-utils" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "mona-xemacs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "automaton-javadoc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "why" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "sextractor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "rrdtool" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "automaton" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "coq-emacs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "malaga" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "mona-emacs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "jmol" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "SIBsim4" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "libtcd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "qtoctave" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "engineering-and-scientific", "wgrib" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "enlightenment-desktop" ], { "force": null, "description": "Enlightenment is a lean, fast, modular and very extensible windowed desktop environment.", "uservisible": false, "is_default": false, "display_name": "Enlightenment", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "enlightenment-desktop", "elementary" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "enlightenment-desktop", "enlightenment" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "enlightenment-desktop", "efl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "enlightenment-desktop", "terminology" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "enlightenment-desktop", "evas-generic-loaders" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "epiphany" ], { "force": null, "description": "Epiphany Web Browser for GNOME", "uservisible": false, "is_default": false, "display_name": "Epiphany Web Browser", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "epiphany", "epiphany" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "ethiopic-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Ethiopic Support", "langonly": "am" } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "google-noto-sans-ethiopic-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "sil-abyssinica-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "scim-tables-amharic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-wookianos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-yigezu-bisrat-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-hiwua-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-tint-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-fantuwua-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-yigezu-bisrat-goffer-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-yebse-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-jiret-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "senamirmir-washra-zelan-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ethiopic-support", "xorg-x11-fonts-ethiopic" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "gnome-games" ], { "force": null, "description": "A variety of games for the GNOME Desktop", "uservisible": false, "is_default": false, "display_name": "Extra games for the GNOME Desktop", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "gnome-chess" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "gnome-robots" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "hitori" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "gnome-klotski" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "lightsoff" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "tali" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "gnome-nibbles" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "gnome-tetravex" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "gnome-sudoku" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "swell-foop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "gnome-mines" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "iagno" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "five-or-more" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "quadrapassel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "gnome-taquin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "four-in-a-row" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-games", "gnome-mahjongg" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "xfce-extra-plugins" ], { "force": null, "description": "Extend the functionality of the Xfce panel", "uservisible": false, "is_default": false, "display_name": "Extra plugins for the Xfce panel", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfdashboard-themes" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfpanel-switch" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-time-out-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-xkb-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-fsguard-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-weather-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-mailwatch-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-verve-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-genmon-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-taskmanager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-systemload-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-netload-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-battery-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-diskperf-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-whiskermenu-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-sensors-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-cpugraph-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-mount-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfce4-eyes-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-extra-plugins", "xfdashboard" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "ftp-server" ], { "force": null, "description": "These tools allow you to run an FTP server on the system.", "uservisible": false, "is_default": false, "display_name": "FTP Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "ftp-server", "vsftpd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ftp-server", "proftpd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ftp-server", "pure-ftpd" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "eclipse" ], { "force": null, "description": "Integrated Development Environments based on Eclipse.", "uservisible": true, "is_default": false, "display_name": "Fedora Eclipse", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-cdt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-jdt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-mylyn-tasks-web" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-mylyn-context-cdt" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-mylyn-tasks-bugzilla" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-pde" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-dtp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-mylyn-context-java" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-mpc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-fedorapackager" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-oprofile" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-subclipse" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-packagekit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-changelog" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-mylyn-tasks-trac" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-mylyn" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-egit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-collabnet-merge" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-pydev" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-rpm-editor" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-valgrind" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-rpmstubby" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-quickrex" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-photran" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-texlipse" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-mylyn-fedora-integration" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-veditor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-dltk-ruby" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-shelled" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-dltk-tcl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-moreunit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-findbugs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-eclemma" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "eclipse", "eclipse-epic" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "fedora-packager" ], { "force": null, "description": "Tools and utilities needed by a Fedora Packager", "uservisible": false, "is_default": false, "display_name": "Fedora Packager", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "git" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "rpmdevtools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "redhat-rpm-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "fedora-packager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "make" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "koji" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "bodhi-client" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "rpm-build" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "curl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "fedora-easy-karma" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "mock" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "mercurial" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "bzr" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "cpanspec" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "auto-destdir" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "plague-client" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fedora-packager", "cvs" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "server-product" ], { "force": null, "description": "Packages mandatory for the server product.", "uservisible": false, "is_default": false, "display_name": "Fedora Server product core", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "server-product", "realmd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-product", "timedatex" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-product", "PackageKit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-product", "polkit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-product", "fedora-release-server" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-product", "chrony" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-product", "NetworkManager-team" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "workstation-product" ], { "force": null, "description": "Packages mandatory for the workstation product.", "uservisible": false, "is_default": false, "display_name": "Fedora Workstation product core", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "fedora-user-agent-chrome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "cifs-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "qt5-qtxmlpatterns" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "fpaste" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "pam_pkcs11" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "abrt-desktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "mcelog" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ethtool" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "nmap-ncat" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "unzip" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "psacct" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "sssd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "tcp_wrappers" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "cpio" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "bash-completion" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "words" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "fedora-release-workstation" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "attr" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "shotwell" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "evolution" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "qt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ntfs-3g" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "net-tools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "fros-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "man-pages" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "vconfig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "tree" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "dosfstools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "dnf-langpacks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "pinentry-gnome3" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "mdadm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "mailcap" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "rsync" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "nss-mdns" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "google-android-emoji-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "abrt-cli" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "adwaita-qt5" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "btrfs-progs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "wvdial" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "hunspell" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-libzhuyin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "bc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "qgnomeplatform" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "xorg-x11-drv-libinput" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-m17n" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "evolution-help" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "qt-x11" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "qt5-qtbase-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "wget" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "symlinks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "seahorse" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "acl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "bind-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-gtk3" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-gtk2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "passwdqc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-kkc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "lsof" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "cryptsetup" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "qt5-qtdeclarative" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "mlocate" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "adwaita-qt4" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "deltarpm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "sos" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ppp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "dnf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "zip" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "gnupg2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "microcode_ctl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "iptstate" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "bridge-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "tcpdump" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-qt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "realmd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-typing-booster" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "traceroute" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "cyrus-sasl-plain" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "setroubleshoot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "setuptool" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "nfs-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "pinfo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "telnet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "git" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "gnome-shell-extension-background-logo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "rp-pppoe" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "glibc-all-langpacks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "rng-tools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "dnf-plugins-core" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "mtr" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "qt-settings" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "plymouth" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "pam_krb5" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "qt5-qtbase" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "unoconv" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "tar" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "fedora-productimg-workstation" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "sudo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "systemd-udev" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "logrotate" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "jwhois" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "at" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "file" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "rhythmbox" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "rdist" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "crontabs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "bzip2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-libpinyin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "scl-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "which" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ntfsprogs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "evolution-ews" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "wireless-tools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "time" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "quota" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "polkit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "lrzsz" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "dos2unix" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-hangul" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "usbutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "ibus-rawcode" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "chrony" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "abrt-java-connector" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "workstation-product", "pciutils" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "finnish-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Finnish Support", "langonly": "fi" } ], - [ "groupPackageListAdd", [ "tag", "finnish-support", "enchant-voikko" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "finnish-support", "tmispell-voikko" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "finnish-support", "mozvoikko" ], { "force": null, "requires": "firefox", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "firefox" ], { "force": null, "description": "The Firefox web browser", "uservisible": false, "is_default": false, "display_name": "Firefox Web Browser", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "firefox", "firefox" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "font-design" ], { "force": null, "description": "This group is a collection of tools used in the design, modification, manipulation, and packaging of fonts.", "uservisible": false, "is_default": false, "display_name": "Font design and packaging", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "fontforge" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "xgridfit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "poppler-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "xgridfit-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "ghostscript" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "gimp-help" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "fonttools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "fontmatrix" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "fontpackages-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "gimp-data-extras" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "perl-Font-TTF" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "texlive-lcdftypetools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "gucharmap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "gimp-help-browser" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "fontaine" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "inkscape" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "gimp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "quilt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "freetype-demos" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "ghostscript-doc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "gbdfed" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "git" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "woffTools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "qgit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "subversion" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "cube2font" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "xmbdfed" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "meld" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "python-fontMath" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "woff" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "ghostscript-gtk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "python-compositor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "fontpackages-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "giggle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "darcs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "bzr" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "mercurial" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "scribus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "cvs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "python-robofab" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "font-design", "python-ufo2fdk" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "fonts" ], { "force": null, "description": "Fonts packages for rendering text on the desktop.", "uservisible": false, "is_default": false, "display_name": "Fonts", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-meetei-mayek-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-mingzat-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "abattis-cantarell-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "dejavu-serif-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "aajohan-comfortaa-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-assamese-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-bengali-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-mandaic-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-nuosu-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "paratype-pt-sans-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "paktype-naskh-basic-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-gurmukhi-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "dejavu-sans-mono-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gnu-free-sans-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-tai-viet-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-waree-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-abyssinica-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "jomolhari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gnu-free-serif-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "liberation-sans-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-kannada-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tabish-eeyek-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "khmeros-base-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "julietaula-montserrat-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "liberation-mono-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "vlgothic-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "naver-nanum-gothic-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "adobe-source-han-sans-cn-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-odia-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-tai-tham-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-gujarati-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "liberation-serif-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "adobe-source-han-sans-tw-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lklug-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "smc-meera-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-lisu-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gnu-free-mono-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-padauk-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-tagalog-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "dejavu-sans-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-tamil-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "stix-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-telugu-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thibault-isabella-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "baekmuk-ttf-dotum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "wqy-zenhei-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-droid-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "nafees-web-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-decker-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-norasi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "wine-marlett-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-vada-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thibault-essays1743-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-fleischman-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "horai-ume-mincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-jamodotum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sj-delphine-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "liberation-narrow-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-titlel-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tiresias-sign-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-algeti-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-marathi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-prociono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "paratype-pt-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-akkadian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "horai-ume-pgothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "adf-accanthis-3-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "nafees-nastaleeq-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "cf-sorts-mill-goudy-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "vollkorn-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ipa-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-serif-georgian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-courier-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ns-bola-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "adf-tribun-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-core-dinaru-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-jamonovel-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-andika-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-bengali-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "chisholm-to-be-continued-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-gentium-alt-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-decorative-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-loma-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ipa-ex-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sarai-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "saab-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "horai-ume-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "nafees-pakistani-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "smc-raghumalayalam-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thibault-rockets-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "linux-libertine-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "smc-rachana-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "allgeyer-musiqwik-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "samyak-malayalam-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-charis-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "msimonson-anonymouspro-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-alexander-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-armenian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-osmanya-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "smc-anjalioldlipi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mona-sazanami-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-old-turkic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-fantuwua-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-doulos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "inkboy-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-thai-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kalapi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-kharoshthi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "horai-ume-uigothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-kannada-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-ignacio-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tiresias-sign-z-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "dejavu-lgc-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-pyrsos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "darkgarden-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "naver-nanum-pen-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "dustin-dustismo-roman-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "dustin-domestic-manners-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-vai-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tiresias-key-v2-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-shinmun-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "paratype-pt-sans-caption-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-malayalam-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "vdrsymbol-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-telugu-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ipa-pmincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-taza-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sj-stevehand-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-phoenician-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-tamil-classical-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-tlwgtypewriter-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "paratype-pt-serif-caption-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-telugu-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "nafees-pakistani-web-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gargi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "linux-libertine-biolinum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-asana-math-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-didot-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-cherokee-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mplus-1m-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-garuda-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-kaithi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "madan-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-theokritos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "naver-nanum-barun-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ctan-cm-lgc-roman-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-charis-compact-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-tlwgmono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-porson-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-nko-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ctan-cm-lgc-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "serafettin-cartoon-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-goudy-bookletter-1911-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "yanone-kaffeesatz-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ipa-mincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "paratype-pt-mono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-roadstencil-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "dejavu-lgc-sans-mono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-gujarati-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "jsmath-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-ethiopic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-musica-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-georgian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-lao-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-old-south-arabian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-yigezu-bisrat-goffer-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-gentium-basic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "nafees-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mgopen-moderna-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-droid-sans-mono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tiresias-pc-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-nino-medium-cond-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "woodardworks-laconic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "pagul-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "khmeros-siemreap-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-jackson-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-imperial-aramaic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "campivisivi-titillium-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-zelan-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-serif-thai-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "stix-math-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-coptic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-tlwgtypist-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "cave9-mutante-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-gujarati-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "scholarsfonts-cardo-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "samyak-odia-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-gentium-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-malayalam-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "conakry-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ctan-kerkis-calligraphic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "denemo-feta-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ipa-ex-mincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-glaho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-ambrosia-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "denemo-emmentaler-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "manchu-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-elite-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "cjkuni-ukai-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "aldusleaf-crimson-text-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "grimmer-proggy-tinysz-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-egyptian-hieroglyphs-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "drehatlas-widelands-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-shavian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-avestan-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mgopen-cosmetica-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "smc-suruma-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-letter-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-hebrew-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-bengali-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "chisholm-letterslaughing-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-thai-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-core-gungseo-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sazanami-mincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-yetgul-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "hanazono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "samyak-tamil-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "overpass-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-courier-s-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-icelandic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-core-pilgi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mplus-2c-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ipa-pgothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mscore-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "beteckna-lower-case-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "paktype-tehreer-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tiresias-lp-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-book-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "freecol-imperator-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-digital-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-aegean-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-kayah-li-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "baekmuk-ttf-batang-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-serif-armenian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-devanagari-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-core-batang-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kanotf-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-tamil-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "extremetuxracer-papercuts-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-ugaritic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-croscore-tinos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "adf-accanthis-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "smc-kalyani-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mona-vlgothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-jamobatang-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mplus-1mn-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-solomos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "open-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tiresias-info-z-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-asea-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-poster-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tlomt-junction-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bitstream-vera-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-khmer-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mgopen-modata-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "apa-new-athena-unicode-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "naver-nanum-brush-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ecolier-court-lignes-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-gazis-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mgopen-canonica-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-tint-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-penheulim-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-sans-modern-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-serif-khmer-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "motoya-lmaru-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-carian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ukij-tuz-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-sawasdee-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "dejavu-lgc-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-bodoni-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "motoya-lcedar-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-arundina-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-complutum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-yebse-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "levien-inconsolata-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-riordonfancy-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "adf-gillius-2-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "nafees-tehreer-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-bodoni-classic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tangerine-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-core-graphic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "dustin-dustismo-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ns-tiza-chalk-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "cf-bonveno-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "khmeros-muol-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-ingiri-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-lateef-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "xorg-x11-fonts-ethiopic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tiresias-info-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-sportrop-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mplus-2m-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "horai-ume-pmincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "levien-museum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "wqy-microhei-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "impallari-lobster-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-purisa-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tlomt-orbitron-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tibetan-machine-uni-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lohit-nepali-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-didot-classic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "silkscreen-expanded-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "beteckna-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mph-2b-damase-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-serif-modern-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-symbols-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-office-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "woodardworks-laconic-shadow-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "nhn-nanum-gothic-coding-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "baekmuk-ttf-hline-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-devanagari-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-aegyptus-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-thaana-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-pilgia-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-avdira-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-garaldus-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-philostratos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lilypond-emmentaler-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-olga-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-jamosora-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "baekmuk-ttf-gulim-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "drehatlas-xaporho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-sans-medium-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kurdit-unikurd-web-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "extremetuxracer-papercuts-outline-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-yigezu-bisrat-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kanjistrokeorders-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tlomt-league-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-neohellenic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-lydian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-aroania-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bitstream-vera-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ctan-cm-lgc-typewriter-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ubuntu-title-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-khmer-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "adf-accanthis-2-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "khmeros-metal-chrieng-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-lao-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-bom-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "khmeros-handwritten-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "moyogo-molengo-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-lycian-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-smonohand-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mplus-1p-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-croscore-symbolneu-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "vemana2000-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "vlgothic-p-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-extra-pen-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-goschen-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "samyak-gujarati-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-pen-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-hiwua-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "nafees-riqa-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "paktype-ajrak-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-croscore-cousine-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-qurn-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-kinnari-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "typemade-josefinsansstd-light-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-tamil-ui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "lato-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-umpush-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ctan-kerkis-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mplus-1c-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sazanami-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "navilu-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-excelsior-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "drehatlas-warender-bibliothek-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bitstream-vera-sans-mono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "khmeros-bokor-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "apanov-edrip-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-nicefore-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-glagolitic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-eustace-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-art-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-title-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-analecta-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ctan-kerkis-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-kannada-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-arundina-sans-mono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gubbi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "paktype-naqsh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-chveulebrivi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "cjkuni-uming-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-farsi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-one-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-symbola-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "apanov-heuristica-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "freecol-shadowedblack-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-croscore-arimo-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-wookianos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-serif-lao-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thibault-staypuft-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "allgeyer-musisync-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-scalable-tlwgtypo-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "samyak-devanagari-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oldstandard-sfd-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-brett-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "libreoffice-opensymbol-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "thai-arundina-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "ecolier-court-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-deseret-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-artemisia-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gfs-baskerville-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-nino-medium-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tlomt-sniglet-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "trabajo-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-droid-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "senamirmir-washra-jiret-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "comic-neue-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-scheherazade-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-malayalam-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "yanone-tagesschrift-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tulrich-tuffy-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "un-core-dotum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "mplus-2p-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "tiresias-pc-z-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "kacst-screen-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "fontawesome-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "gdouros-anaktoria-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-noto-sans-brahmi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "google-droid-kufi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "adf-gillius-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "denemo-music-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "bpg-sans-regular-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "sil-gentium-basic-book-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "wine-symbol-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "hiran-perizia-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "beteckna-small-caps-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "naver-nanum-myeongjo-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "khmeros-battambang-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "oflb-notcouriersans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "pothana2000-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "smc-dyuthi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "fonts", "silkscreen-fonts" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "freeipa-server" ], { "force": null, "description": "Provides central directory services for identity, policy management and auditing.", "uservisible": true, "is_default": false, "display_name": "FreeIPA Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "freeipa-server", "freeipa-server" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "freeipa-server", "freeipa-server-trust-ad" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "freeipa-server", "bind-dyndb-ldap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "freeipa-server", "opendnssec" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "freeipa-server", "freeipa-server-dns" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "gnome-desktop" ], { "force": null, "description": "GNOME is a highly intuitive and user friendly desktop environment.", "uservisible": false, "is_default": false, "display_name": "GNOME", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "cheese" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-disk-utility" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "control-center" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-themes-standard" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "file-roller-nautilus" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gvfs-mtp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "xdg-user-dirs-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gedit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "libproxy-mozjs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "evince" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-system-monitor" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gvfs-fuse" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "ModemManager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-backgrounds" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "dconf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-software" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gdm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "sane-backends-drivers-scanners" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "PackageKit-gtk3-module" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "glib-networking" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "totem-nautilus" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-bluetooth" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "caribou-gtk2-module" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "NetworkManager-adsl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gvfs-afp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "NetworkManager-openconnect" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-calendar" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gvfs-smb" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-contacts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gvfs-goa" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-documents" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-classic-session" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "caribou-gtk3-module" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-maps" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-user-share" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-screenshot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "fprintd-pam" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-clocks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-boxes" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-font-viewer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "sushi" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-weather" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-session-xsession" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-terminal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "at-spi2-core" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-shell" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "file-roller" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-calculator" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "evince-djvu" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-user-docs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gvfs-afc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-getting-started-docs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-initial-setup" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "libsane-hpaio" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-session-wayland-session" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "PackageKit-command-not-found" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "NetworkManager-vpnc-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "nautilus-sendto" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-logs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gvfs-archive" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gvfs-gphoto2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "NetworkManager-openvpn-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-color-manager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "eog" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "evince-nautilus" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "libcanberra-gtk2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "polkit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "nautilus" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "totem" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "baobab" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "librsvg2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-characters" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "NetworkManager-pptp-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "gnome-settings-daemon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "libcanberra-gtk3" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "mousetweaks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "rygel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "yelp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "avahi" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "caribou" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "at-spi2-atk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-desktop", "orca" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "gnome-software-development" ], { "force": null, "description": "Install these packages in order to develop GTK+ and GNOME graphical applications.", "uservisible": false, "is_default": false, "display_name": "GNOME Software Development", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "clutter-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "pango-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gtk3-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "dbus-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "atk-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gtk3-devel-docs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "intltool" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gstreamer-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "glib2-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gobject-introspection" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gobject-introspection-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "git" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "libgnome-keyring-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gnome-common" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "at-spi2-core-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "libnotify-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "devhelp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "libcanberra-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "glib2-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "libgda-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "webkitgtk4-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gnome-desktop3-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gtk-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "clutter-gtk-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gnome-devel-docs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "evolution-data-server-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "cairomm-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gnome-builder" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "vala" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "libsigc++20-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "glibmm24-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "glade3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "gtkmm30-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "cairomm-doc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "clutter-gst-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gnome-software-development", "libgtop2-devel" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "games" ], { "force": null, "description": "Various ways to relax and spend your free time.", "uservisible": true, "is_default": false, "display_name": "Games and Entertainment", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "games", "six" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "pachi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "warmux" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "lightsoff" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "funguloids" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "nazghul" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "pokerth" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "atomix" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "kdeaddons-atlantikdesigner" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "sumwars" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "liquidwar" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "slingshot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gl-117" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "asylum" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xskat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "minetest" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "nagi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "boswars-addons" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "scorchwentbonkers" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "openalchemist" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "rafkill" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "sudoku-savant" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xgalaxy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "blobby" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "machineball" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "csmash" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xword" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "pinball" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "atanks" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "raidem-music" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "boswars" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "freetennis" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "torcs-data" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "hitori" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "berusky" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "ccgo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-robots" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "astromenace" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "warzone2100" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "vegastrike-speech" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "maniadrive" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "toppler" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "koules" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "drascula" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "puzzles" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "magicor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "freedink" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "hedgewars" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "openarena" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "beneath-a-steel-sky" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "vegastrike" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "crossfire-client" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "tremulous" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "amoebax" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xboard" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "CriticalMass" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-klotski" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "flight-of-the-amazon-queen-cd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "clonekeen" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "arrows" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "bygfoot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "magicmaze" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xmoto" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "fillets-ng" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "grhino" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "alphabet-soup" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "chromium-bsu" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xpilot-ng-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "crystal-stacker" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "coco-coq" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gbrainy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "plee-the-bear" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnujump" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-chess" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "colossus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "blobwars" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "tunneler" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "typespeed" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-mud" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "lincity-ng" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "oneko" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "torcs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "uqm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "pingus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "foobillard" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "biloba" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "drascula-music" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "wastesedge" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "pipenightdreams" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "quadrapassel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "mine_detector" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gweled" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "freedroidrpg" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xu4" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "FlightGear" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "vegastrike-extra" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "abe" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "zasx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "lordsawar" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "mirrormagic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "chocolate-doom" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "freeciv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "bzflag" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "kdegames3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "londonlaw" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "monsterz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "seahorse-adventures" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "dsi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "0ad" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "powermanga" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xteddy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "beneath-a-steel-sky-cd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "puzzle-master" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "raidem" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "vdrift" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "sergueis-destiny" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "dgae" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "alienblaster" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "atomorun" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "berusky2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnugo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "quake3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "trackballs-music" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "lpairs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "asc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "pengupop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "trackballs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "iagno" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "tuxmath" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "PySolFC-music" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "taggle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "hexglass" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "naev" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xgrav" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "glob2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "naturette" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "trophy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "PySolFC-cardsets" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "nogravity" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "Maelstrom" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "wordwarvi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "freedroid" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "freedoom-freedm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "supertux" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "dd2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xaos" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "escape" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "armacycles-ad" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xpenguins" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "cave9" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "ularn" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "zaz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "methane" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "lacewing" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "scorched3d" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "kbilliards" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "tong" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "shippy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnubg" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "flobopuyo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "vodovod" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "fortune-mod" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "sirius" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "ants" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "crack-attack" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "alex4" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "quarry" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "professor-is-missing" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "rocksndiamonds" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "qstars" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "worldofpadman" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "lbrickbuster2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "tennix" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "extremetuxracer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "avoision" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "freecol" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "bsd-games" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "celestia" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "adanaxisgpl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "crossfire" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "sopwith" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "fbg2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-mines" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "spring" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "kcheckers" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "four-in-a-row" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "redeclipse-data" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "rogue" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-nibbles" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xarchon" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "findthatword" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "urbanterror" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "btanks" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "darkplaces-quake" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "ballbuster" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xonotic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "haxima" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "wesnoth" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "netpanzer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "enigma" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gamazons" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "taxipilot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "kitsune" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "crystal-stacker-themes" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnuchess" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "scummvm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "slashem" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "iapetal" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "tecnoballz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "overgod" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "glaxium" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "curblaster" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "ballz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "penguin-command" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "ember" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "nethack-vultures" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-sudoku" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "mj" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "cyphesis" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "quake3-demo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "stormbaancoureur" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "flare" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "sar2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "knights" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "warzone2100-sequences" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "vegastrike-music" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "flight-of-the-amazon-queen" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-hearts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "clanbomber" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "duel3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "bastet" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "lure" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "agistudio" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "KoboDeluxe" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "PySolFC" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "pipepanic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "planets" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "Ri-li" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "redeclipse-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "kdegames" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "fgrun" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gemdropx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "vavoom" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "freedoom" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "rott-shareware" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "qascade" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnubik" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "BlockOutII" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "maniadrive-music" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xpilot-ng" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "njam" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "billiards" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xblast" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "apricots" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "asc-music" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-mahjongg" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "greyhounds" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xplanet" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "five-or-more" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "widelands" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "bolzplatz2006" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "teeworlds" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "auriferous" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "alienarena" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "gnome-tetravex" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "dopewars" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "redeclipse" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "solarwolf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "tuxpuck" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "bsp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "cylindrix" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "barrage" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xscorch" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "angrydd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "pioneers" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "bombardier" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "megaglest" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "xstar" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "games-menus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "ultimatestunts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "mindless" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "lucidlife" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "cdogs-sdl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "vdr-sudoku" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "swell-foop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "supertuxkart" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "nethack" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "neverball" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "pychess" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "openlierox" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "CardManager" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "lmarbles" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "frozen-bubble" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "prboom" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "joystick" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "tali" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "biniax" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "games", "worminator" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "georgian-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Georgian Support", "langonly": "ka" } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "dejavu-sans-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-chveulebrivi-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "google-noto-sans-georgian-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "dejavu-serif-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "google-noto-serif-georgian-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-courier-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "dejavu-sans-mono-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-glaho-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-nino-medium-cond-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-ingiri-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-sans-medium-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-nino-medium-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-elite-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-sans-regular-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-serif-modern-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-algeti-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-excelsior-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-courier-s-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "georgian-support", "bpg-sans-modern-fonts" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "graphical-internet" ], { "force": null, "description": "This group includes graphical email, web, and chat clients.", "uservisible": false, "is_default": false, "display_name": "Graphical Internet", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "uget" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "kita" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "firefox" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "prozilla" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "gwget" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "valknut" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "qbittorrent" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "thunderbird" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "ochusha" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "filezilla" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "gftp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "xchat-gnome" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "liferea" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "arora" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "mitter" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "licq" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "gnash-plugin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "knetstats" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "x3270-x11" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "kvirc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "dillo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "psi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "konversation" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "qterm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "gtk-gnutella" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "azureus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "transmission-gtk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "nntpgrab-gui" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "meiga" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "gtorrentviewer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "kdewebdev" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "choqok" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "claws-mail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "evolution-bogofilter" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "kdepim" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "nicotine+" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "xchat-ruby" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "streamtuner" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "seamonkey" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "evolution" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "pidgin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "logjam" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "icedtea-web" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "gnome-translate" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "evolution-help" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "pcmanx-gtk2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "mail-notification" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "mtr-gtk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "jd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "psimedia" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "pidgin-libnotify" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "xchat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "bluefish" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "empathy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "kazehakase" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "sylpheed" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "deluge" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "gajim" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "gyachi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "balsa" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "transmission-qt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "epiphany" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "pan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "evolution-perl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "rekonq" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "xchat-tcl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "linphone" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphical-internet", "ekiga" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "graphics" ], { "force": null, "description": "This group includes packages to help you manipulate and scan images.", "uservisible": false, "is_default": false, "display_name": "Graphics", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "cbrpager" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "argyllcms" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "ImageMagick" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "comix" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "tachyon" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gifview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "viewnior" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "ufraw" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "graphviz" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "digikam" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "rawstudio" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "mirage" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "qiv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "tuxpaint" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "inkscape" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gimp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gnofract4d" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "uniconvertor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "geeqie" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "ipe" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "calligra-krita" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "cinepaint" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "sane-frontends" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "tzclock" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "optipng" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "blender" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gimp-data-extras" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "xfig" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "asymptote" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "ksnapshot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "wings" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gimp-help" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "dcraw" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "xpaint" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "kphotoalbum" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "renrot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "sane-backends-drivers-scanners" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gifsicle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gutenprint-plugin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "libsane-hpaio" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gimp-help-browser" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "xsane" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gipfel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "pstoedit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gcolor2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "shotwell" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gwenview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "asciio" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "kf5-kipi-plugins" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "gv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "pydot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "netpbm-progs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "sane-backends-drivers-cameras" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "simple-scan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "kolourpaint" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "hugin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "k3d" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "Panini" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "nip2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "graphics", "xsane-gimp" ], { "force": null, "requires": "gimp", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "greek-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Greek Support", "langonly": "el" } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "ctan-kerkis-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-theokritos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "mgopen-modata-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-decker-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-garaldus-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-gazis-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-philostratos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-baskerville-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-eustace-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-olga-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-jackson-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "mgopen-moderna-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-fleischman-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "mgopen-cosmetica-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-porson-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-artemisia-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-goschen-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-nicefore-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-didot-classic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-bodoni-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "mgopen-canonica-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "ctan-kerkis-calligraphic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "ctan-kerkis-sans-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-complutum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-pyrsos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-neohellenic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-didot-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-ignacio-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-solomos-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-bodoni-classic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "greek-support", "gfs-ambrosia-fonts" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "guest-agents" ], { "force": null, "description": "Agents used when running under a hypervisor.", "uservisible": false, "is_default": false, "display_name": "Guest Agents", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "guest-agents", "open-vm-tools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "guest-agents", "qemu-guest-agent" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "guest-desktop-agents" ], { "force": null, "description": "Agents used when running as a virtualized desktop.", "uservisible": false, "is_default": false, "display_name": "Guest Desktop Agents", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "guest-desktop-agents", "spice-vdagent" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "guest-desktop-agents", "open-vm-tools-desktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "guest-desktop-agents", "hyperv-daemons" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "guest-desktop-agents", "qemu-guest-agent" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "gujarati-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Gujarati Support", "langonly": "gu" } ], - [ "groupPackageListAdd", [ "tag", "gujarati-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gujarati-support", "lohit-gujarati-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gujarati-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gujarati-support", "google-noto-sans-gujarati-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gujarati-support", "google-noto-sans-gujarati-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gujarati-support", "samyak-gujarati-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "gujarati-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "haproxy" ], { "force": null, "description": "TCP/HTTP Load Balancer.", "uservisible": false, "is_default": false, "display_name": "HAProxy", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "haproxy", "haproxy" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haproxy", "rubygem-abrt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haproxy", "rubygem-daemons" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haproxy", "rubygem-rest-client" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "hardware-support" ], { "force": null, "description": "This group is a collection of tools for various hardware specific utilities.", "uservisible": false, "is_default": false, "display_name": "Hardware Support", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl100-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "ipw2200-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "ipw2100-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl6000g2b-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl7260-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl5150-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl135-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl2000-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl6050-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl3160-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "b43-openfwwf" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl6000g2a-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl3945-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl4965-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl2030-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "atmel-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl105-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "usb_modeswitch" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl6000-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "zd1211-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "libertas-usb8388-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl5000-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iwl1000-firmware" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "b43-fwcutter" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "wpan-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "pcsc-lite" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "bcm283x-firmware" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "acpitool" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "gypsy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "opensc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "radeontop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "lsscsi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "openct" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "hdparm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "acpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "cmospwd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "iscan-firmware" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "multican" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "alsa-firmware" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "gpsd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "hddtemp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "gpsd-clients" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "i8kutils" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "libifp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "isight-firmware-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "firmware-addon-dell" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hardware-support", "pcsc-lite-ccid" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "server-hardware-support" ], { "force": null, "description": "This group is a limited collection of tools for various uncommon hardware specific utilities.", "uservisible": false, "is_default": false, "display_name": "Hardware Support for Server Systems", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "server-hardware-support", "lm_sensors" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-hardware-support", "openhpi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-hardware-support", "smp_utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-hardware-support", "lsscsi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-hardware-support", "hdparm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-hardware-support", "firmware-addon-dell" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-hardware-support", "hddtemp" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "haskell" ], { "force": null, "description": "Support for developing programs in the Haskell programming language.", "uservisible": false, "is_default": false, "display_name": "Haskell", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "haskell", "darcs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haskell", "cabal-rpm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haskell", "hlint" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haskell", "ghc-rpm-macros" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haskell", "ghc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haskell", "haskell-platform" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haskell", "hscolour" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "haskell", "emacs-haskell-mode" ], { "force": null, "requires": "emacs", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "hawaii-desktop" ], { "force": null, "description": "Hawaii is a fast, lightweight, intuitive and user friendly Wayland desktop environment that adapts to desktop and mobile devices.", "uservisible": false, "is_default": false, "display_name": "Hawaii", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "qt5-qtdeclarative" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "qterminal-qt5" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "hawaii-system-preferences" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "qt5-qdbusviewer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "pcmanfm-qt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "hawaii-widget-styles" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "mesa-dri-drivers" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "hawaii-workspace" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "hawaii-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "sddm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "sddm-theme-hawaii" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "initial-setup-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "qt5-qtbase-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "upower" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "firewall-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "xdg-user-dirs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "otter-browser" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "hawaii-shell" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-desktop", "qt5-qtwayland" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "hawaii-office" ], { "force": null, "description": "Office suite for Hawaii", "uservisible": false, "is_default": false, "display_name": "Hawaii Office", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-office", "libreoffice-calc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-office", "libreoffice-impress" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-office", "libreoffice-writer" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "headless-management" ], { "force": null, "description": "Tools for managing the system without an attached graphical console.", "uservisible": true, "is_default": false, "display_name": "Headless Management", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "cockpit-shell" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "PackageKit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "openssh-server" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "cockpit-storaged" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "cockpit-bridge" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "cockpit-ws" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "cockpit-networkmanager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "rolekit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "cockpit-pcp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "headless-management", "cockpit-kubernetes" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "virtualization-headless" ], { "force": null, "description": "These packages provide a headless virtualization environment.", "uservisible": false, "is_default": false, "display_name": "Headless Virtualization", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization-headless", "virt-install" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization-headless", "libvirt-daemon-config-network" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization-headless", "qemu-kvm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization-headless", "libvirt-daemon-kvm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization-headless", "systemd-container" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization-headless", "python-libguestfs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization-headless", "virt-top" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization-headless", "libguestfs-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization-headless", "guestfs-browser" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "hebrew-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Hebrew Support", "langonly": "he" } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "dejavu-sans-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-stamsefarad-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-miriam-mono-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-ellinia-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-miriam-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-drugulin-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-aharoni-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "google-noto-sans-hebrew-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-keteryg-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-stamashkenaz-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-yehuda-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-nachlieli-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-caladings-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-hadasim-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-frank-ruehl-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-david-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hebrew-support", "culmus-simple-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "ha" ], { "force": null, "description": "Infrastructure for highly available services and/or shared storage.", "uservisible": false, "is_default": false, "display_name": "High Availability", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "ha", "pcs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ha", "fence-agents-all" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ha", "pacemaker" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ha", "omping" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ha", "clufter" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "hindi-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Hindi Support", "langonly": "hi" } ], - [ "groupPackageListAdd", [ "tag", "hindi-support", "lohit-devanagari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hindi-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hindi-support", "samyak-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hindi-support", "sarai-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hindi-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hindi-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hindi-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "hindi-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "input-methods" ], { "force": null, "description": "Input method packages for the input of international text.", "uservisible": false, "is_default": false, "display_name": "Input Methods", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-libzhuyin" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "im-chooser" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-typing-booster" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-libpinyin" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "imsettings" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-hangul" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-m17n" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-rawcode" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-kkc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "uim-qt3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "uim-gtk2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-skk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-sayura" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "uim" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "WritRecogn" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "fcitx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-chewing" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-tables-chinese-extra" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "input-pad" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-mozc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "cellwriter" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-bridge-qt3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-fbterm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-input-pad" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-tables-chinese" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-m17n" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-bridge-gtk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-rawcode" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-table-cyrillic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-table-array30" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-array" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-hangul" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "uim-anthy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-gtk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-table" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "uim-canna" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "eekboard" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-xkbc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-handwrite" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-bridge-qt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-anthy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "iok" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-bogo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "uim-m17n" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "uim-skk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-thai" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "uim-gtk3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "kinput2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-pinyin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-anthy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-tables-additional" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-fcitx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-gucharmap" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "gcin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "scim-sayura" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "imsettings-lxde" ], { "force": null, "requires": "lxde-common", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "gtk2-immodule-xim" ], { "force": null, "requires": "gtk2", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "imsettings-gsettings" ], { "force": null, "requires": "gnome-settings-daemon", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-qt" ], { "force": null, "requires": "qt", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "im-chooser-xfce" ], { "force": null, "requires": "xfce4-panel", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-gtk3" ], { "force": null, "requires": "gtk3", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "ibus-gtk2" ], { "force": null, "requires": "gtk2", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "gtk3-immodule-xim" ], { "force": null, "requires": "gtk3", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "imsettings-xfce" ], { "force": null, "requires": "xfce4-panel", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "imsettings-cinnamon" ], { "force": null, "requires": "cinnamon", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "imsettings-qt" ], { "force": null, "requires": "qt", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "input-methods", "imsettings-mate" ], { "force": null, "requires": "mate-settings-daemon", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "japanese-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Japanese Support", "langonly": "ja" } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "vlgothic-p-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "vlgothic-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "migemo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "stardict-dic-ja" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "ipa-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "mona-sazanami-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "sazanami-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "mecab-ipadic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "ipa-pmincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "mona-bitmap-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "ibus-mozc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "ebview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "jfbterm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "oniguruma" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "nkf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "motoya-lmaru-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "mecab" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "lv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "ipa-mincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "emacs-common-ddskk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "ipa-ex-gothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "m17n-db-extras" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "kcc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "motoya-lcedar-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "mecab-jumandic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "kinput2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "sazanami-mincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "scim-anthy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "hanazono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "ipa-ex-mincho-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "uim-canna" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "mona-vlgothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "eblook" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "cmigemo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "jisksp16-1990-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "perl-NKF" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "mfiler3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "ipa-pgothic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "uim-skk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "japanese-bitmap-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "ibus-kkc" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "japanese-support", "uim-anthy" ], { "force": null, "requires": "uim", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "java" ], { "force": null, "description": "Support for running programs written in the Java programming language.", "uservisible": false, "is_default": false, "display_name": "Java", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "java", "java-1.8.0-openjdk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java", "icedtea-web" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java", "abrt-java-connector" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "javaenterprise" ], { "force": null, "description": "Java application server.", "uservisible": false, "is_default": false, "display_name": "Java Application Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "javaenterprise", "wildfly" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "javaenterprise", "java-1.8.0-openjdk-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "javaenterprise", "jboss-modules" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "javaenterprise", "maven" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "javaenterprise", "abrt-java-connector" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "javaenterprise", "java-1.8.0-openjdk" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "java-development" ], { "force": null, "description": "Support for developing programs in the Java programming language.", "uservisible": false, "is_default": false, "display_name": "Java Development", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "java-1.8.0-openjdk-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ecj" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-math" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "bcel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "avalon-framework" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "java_cup" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-validator" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "mx4j" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-lang" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "xml-commons-resolver" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-discovery" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "java-1.8.0-openjdk-demo" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-exec" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-el" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ldapjdk" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "xerces-j2" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-codec" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-launcher" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-configuration" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-antlr" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-apache-bcel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "java-1.8.0-openjdk-src" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "regexp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-dbcp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "xml-commons-apis" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-io" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "xalan-j2-xsltc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-apache-log4j" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "gnu-getopt" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-collections" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-swing" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-net" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-modeler" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "jdepend" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "avalon-logkit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-compress" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-apache-regexp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "jakarta-oro" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-beanutils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-apache-resolver" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "log4j" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "xalan-j2" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "maven" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-junit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-apache-oro" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-javamail" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "jflex" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-commons-logging" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-digester" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "junit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-jdepend" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-pool" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "abrt-java-connector" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "java-1.8.0-openjdk-javadoc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-fileupload" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-daemon" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "apache-commons-logging" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "javamail" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "jinput" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "pmd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "jcip-annotations" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "ant-findbugs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "jsr-305" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "findbugs-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "java-development", "findbugs" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "kde-desktop" ], { "force": null, "description": "The KDE Plasma Workspaces, a highly-configurable graphical user interface which includes a panel, desktop, system icons and desktop widgets, and many powerful KDE applications.", "uservisible": false, "is_default": false, "display_name": "KDE", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kde-platform-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kde-print-manager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "sddm-breeze" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-desktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "konsole5" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kwrite" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kscreen" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kgpg" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "cagibi" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "abrt-desktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-nm-openvpn" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "initial-setup-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kcharselect" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "konqueror" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kde-gtk-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kf5-kipi-plugins" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-breeze" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "xorg-x11-drv-libinput" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kf5-baloo-file" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kmenuedit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kwalletmanager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kuser" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "firewall-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-workspace-drkonqi" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kdepasswd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-nm-l2tp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "polkit-kde" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-desktop-doc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kdnssd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-workspace-geolocation" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "sni-qt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "sddm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-nm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "qt5-qtbase-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "adwaita-gtk2-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kf5-akonadi-server-mysql" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "khotkeys" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kdeplasma-addons" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "phonon-qt5-backend-gstreamer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kdegames-minimal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "akregator" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kwalletmanager5" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "NetworkManager-config-connectivity-fedora" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kcolorchooser" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kontact" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "colord-kde" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kde-settings-pulseaudio" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-pa" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "qt5-qtdeclarative" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kcm_systemd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kf5-akonadi-server" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "knode" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-nm-pptp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kde-partitionmanager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-user-manager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-pk-updates" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "pam-kwallet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kmail" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kwin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kde-style-breeze" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "apper" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kfind" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "korganizer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "keditbookmarks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "phonon-backend-gstreamer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "ksysguard" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kscreenlocker" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "glibc-all-langpacks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kruler" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "sddm-kcm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-nm-openconnect" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "ksshaskpass" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kde-runtime" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-nm-vpnc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kdeaccessibility" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kamera" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "qt5-qdbusviewer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "dolphin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-nm-openswan" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "spectacle" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kdialog" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "khelpcenter" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kget" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kinfocenter" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kdegraphics-thumbnailers" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "cups-pk-helper" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kcalc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "gwenview" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kaddressbook" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "bluedevil" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kdelibs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "kwebkitpart" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "breeze-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "gnome-keyring-pam" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "plasma-workspace" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "pinentry-qt" ], { "force": null, "requires": "pinentry", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "qt-at-spi" ], { "force": null, "requires": "at-spi2-core", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "libreoffice-kde" ], { "force": null, "requires": "libreoffice-core", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "kde-desktop", "socat" ], { "force": null, "requires": "pam_kwallet", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "kde-apps" ], { "force": null, "description": "A set of commonly used KDE applications", "uservisible": false, "is_default": false, "display_name": "KDE Applications", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "krfb" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "kdegames-minimal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "konversation" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "kolourpaint" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "krusader" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "krdc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "digikam" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "ktorrent" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "kde-connect" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-apps", "ark" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "kde-education" ], { "force": null, "description": "KDE Educational applications", "uservisible": false, "is_default": false, "display_name": "KDE Educational applications", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kstars" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kbruch" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kanagram" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "parley" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kiten" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kalgebra" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "ktouch" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kalzium" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kmplot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "klettres" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kwordquiz" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "step" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "cantor" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kgeography" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kturtle" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "marble" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "blinken" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "rocs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "kig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-education", "khangman" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "kf5-software-development" ], { "force": null, "description": "Install these packages to develop applications using Qt5 and KDE Frameworks 5.", "uservisible": false, "is_default": false, "display_name": "KDE Frameworks 5 Software Development", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "cmake" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "extra-cmake-modules" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtdeclarative-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qttools-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtquickcontrols" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtwebkit-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtserialport-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtsensors-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtlocation-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtmultimedia-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtxmlpatterns-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtconnectivity-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtscript-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtsvg-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtwayland-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt-creator" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtx11extras-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtimageformats-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kf5-software-development", "qt5-qtquick1-devel" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "kde-media" ], { "force": null, "description": "Multimedia support for KDE", "uservisible": false, "is_default": false, "display_name": "KDE Multimedia support", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "kde-media", "kamoso" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-media", "dragon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-media", "k3b" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-media", "amarok" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "kde-office" ], { "force": null, "description": "KDE Office applications", "uservisible": false, "is_default": false, "display_name": "KDE Office", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "kde-office", "calligra-stage" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-office", "calligra-words" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-office", "okular" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-office", "calligra-sheets" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "kde-software-development" ], { "force": null, "description": "Install these packages to develop Qt and KDE graphical applications.", "uservisible": false, "is_default": false, "display_name": "KDE Software Development", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdelibs-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "cmake" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "qt-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-kmtrace" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-okteta" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-umbrello" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "pykde4-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-kompare" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-kapptemplate" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-kstartperf" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "PyQt4-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-thumbnailers" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-kcachegrind" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdevelop" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdepimlibs-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-dolphin-plugins" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-kioslave" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-scripts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdelibs-webkit-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-kuiviewer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-cervisia" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-poxml" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kate" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesdk-kpartloader" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "telepathy-qt4-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "audiocd-kio-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdbg" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "qt3-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdelibs3-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "rocs-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "qtwebkit-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "libkdegames-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdegraphics-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "krazy2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "libkcompactdisc-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kate-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "PyKDE-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdepim-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kiten-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "PyQt-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kde-baseapps-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "qt-mobility-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdebindings-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "qt3-designer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "marble-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdenetwork-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "qt-creator" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "libkcddb-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "cantor-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdewebdev-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "ktp-common-internals-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "gambas3-runtime" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "libkdeedu-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-software-development", "kdesvn" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "kde-telepathy" ], { "force": null, "description": "KDE Telepathy applications", "uservisible": false, "is_default": false, "display_name": "KDE Telepathy", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-text-ui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "signon-kwallet-extension" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-contact-list" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-approver" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-contact-runner" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-desktop-applets" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-accounts-kcm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-auth-handler" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "kaccounts-providers" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-send-file" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-kded-integration-module" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "ktp-filetransfer-handler" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kde-telepathy", "kaccounts-integration" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "kannada-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Kannada Support", "langonly": "kn" } ], - [ "groupPackageListAdd", [ "tag", "kannada-support", "lohit-kannada-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kannada-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kannada-support", "google-noto-sans-kannada-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kannada-support", "navilu-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kannada-support", "google-noto-sans-kannada-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kannada-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kannada-support", "gubbi-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kannada-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "kashmiri-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Kashmiri Support", "langonly": "ks" } ], - [ "groupPackageListAdd", [ "tag", "kashmiri-support", "lohit-devanagari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kashmiri-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kashmiri-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kashmiri-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "kashmiri-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "khmer-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Khmer Support", "langonly": "km" } ], - [ "groupPackageListAdd", [ "tag", "khmer-support", "khmeros-base-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "khmer-support", "khmeros-battambang-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "khmer-support", "google-noto-sans-khmer-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "khmer-support", "khmeros-bokor-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "khmer-support", "khmeros-metal-chrieng-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "khmer-support", "khmeros-siemreap-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "khmer-support", "khmeros-muol-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "khmer-support", "google-noto-sans-khmer-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "khmer-support", "khmeros-handwritten-fonts" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "konkani-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Konkani Support", "langonly": "kok" } ], - [ "groupPackageListAdd", [ "tag", "konkani-support", "lohit-devanagari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "konkani-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "konkani-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "konkani-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "konkani-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "korean-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Korean Support", "langonly": "ko" } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "naver-nanum-myeongjo-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "naver-nanum-pen-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "naver-nanum-barun-gothic-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "naver-nanum-brush-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "naver-nanum-gothic-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-pilgia-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-shinmun-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "baekmuk-ttf-dotum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-core-dinaru-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-jamonovel-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-bom-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-taza-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "baekmuk-ttf-batang-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-penheulim-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-jamosora-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "baekmuk-ttf-gulim-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-vada-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "lv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-jamodotum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-core-batang-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-core-gungseo-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-yetgul-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-jamobatang-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-extra-pen-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-core-graphic-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "baekmuk-bdf-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-core-dotum-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "nhn-nanum-gothic-coding-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "baekmuk-ttf-hline-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "un-core-pilgi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "korean-support", "ibus-hangul" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "kurdish-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Kurdish Support", "langonly": "ku" } ], - [ "groupPackageListAdd", [ "tag", "kurdish-support", "kurdit-unikurd-web-fonts" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "lxde-desktop" ], { "force": null, "description": "LXDE is a lightweight X11 desktop environment designed for computers with low hardware specifications like netbooks, mobile devices or older computers.", "uservisible": false, "is_default": false, "display_name": "LXDE", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "gigolo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxappearance" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "openbox" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "openssh-askpass" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxterminal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxsession-edit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "firewall-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxdm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxtask" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "xscreensaver-extras" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "xcompmgr" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "fedora-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxsession" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "pcmanfm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "galculator" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "xarchiver" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "notification-daemon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxrandr" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxappearance-obconf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "xdg-user-dirs-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "xscreensaver-base" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "yumex-dnf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "adwaita-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "leafpad" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "initial-setup-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "adwaita-gtk2-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "xpad" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "nm-connection-editor" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxinput" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "obconf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxlauncher" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxde-common" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "network-manager-applet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxpanel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxpolkit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "perl-File-MimeInfo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "upower" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "gpicview" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "gnome-keyring-pam" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "lxmenu-data" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-desktop", "clipit" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "lxde-office" ], { "force": null, "description": "Office suite for LXDE", "uservisible": false, "is_default": false, "display_name": "LXDE Office", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-office", "gnumeric" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-office", "abiword" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-office", "osmo" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "lxqt-desktop" ], { "force": null, "description": "LXQt is a lightweight X11 desktop environment designed for computers with low hardware specifications like netbooks, mobile devices or older computers.", "uservisible": false, "is_default": false, "display_name": "LXQt", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-about" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "kwin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-session" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-runner" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "sddm-breeze" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "breeze-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "firewall-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "qupzilla" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "breeze-cursor-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "ark" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "fedora-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "qterminal-qt5" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "xdg-user-dirs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "notification-daemon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-policykit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-common" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "openbox" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-globalkeys" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-qtplugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "sddm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "initial-setup-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-panel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "obconf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "pcmanfm-qt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-notificationd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "network-manager-applet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-openssh-askpass" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "perl-File-MimeInfo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "upower" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "breeze-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "qupzilla-kwallet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "nm-connection-editor" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-desktop", "lxqt-powermanagement" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "lxqt-office" ], { "force": null, "description": "Office suite for LXQt", "uservisible": false, "is_default": false, "display_name": "LXQt Office", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-office", "libreoffice-calc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-office", "libreoffice-impress" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-office", "libreoffice-writer" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "legacy-fonts" ], { "force": null, "description": "Older bitmap and vector fonts packages", "uservisible": false, "is_default": false, "display_name": "Legacy Fonts", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-misc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-Type1" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-100dpi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-15-100dpi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-stamashkenaz-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-ellinia-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-9-100dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "nethack-bitmap-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-kates-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-drugulin-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-aharoni-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "oflb-dignas-handwriting-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "bitmap-fangsongti-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "fonts-KOI8-R-100dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "efont-unicode-bdf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-yehuda-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "bitmap-console-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "texmacs-fedora-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-simple-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-1-100dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-mints-strong-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "bitmap-lucida-typewriter-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ethiopic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "libdockapp-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "iso8859-2-misc-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-glisp-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-drift-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-miriam-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-cyrillic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-edges-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-frank-ruehl-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-cure-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-keteryg-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-14-75dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-lime-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-nachlieli-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-caladings-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "urw-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "fonts-KOI8-R-75dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-david-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "japanese-bitmap-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "ucs-miscfixed-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-14-100dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-15-75dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-stamsefarad-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "knm-new-fixed-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-75dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-9-75dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "zvbi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-1-75dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-2-100dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "fonts-KOI8-R" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "terminus-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-fkp-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "xorg-x11-fonts-ISO8859-2-75dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-miriam-mono-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-anorexia-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-aqui-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "iso8859-2-100dpi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-nu-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "culmus-hadasim-clm-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "terminus-fonts-console" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "mona-bitmap-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "lyx-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "jisksp16-1990-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "ctan-musixtex-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "baekmuk-bdf-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "google-android-emoji-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-smoothansi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-mints-mild-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "ghostscript-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "rosegarden4-feta-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-snap-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "wqy-unibit-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "iso8859-2-75dpi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "bitmap-fixed-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "rosegarden4-parmesan-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "taipeifonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "wqy-bitmap-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-fonts", "artwiz-aleczapka-gelly-fonts" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "legacy-network-server" ], { "force": null, "description": "These packages include servers for old network protocols such as rsh and telnet.", "uservisible": false, "is_default": false, "display_name": "Legacy Network Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-network-server", "talk-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-network-server", "telnet-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-network-server", "rwho" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-network-server", "rsh-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-network-server", "rusers" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-network-server", "bootparamd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-network-server", "rusers-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-network-server", "tftp-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-network-server", "rarpd" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "legacy-software-development" ], { "force": null, "description": "These packages provide compatibility with previous releases.", "uservisible": false, "is_default": false, "display_name": "Legacy Software Development", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-software-development", "compat-libstdc++-296" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-software-development", "compat-gcc-34" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-software-development", "compat-gcc-34-c++" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-software-development", "compat-libstdc++-33" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-software-development", "compat-gcc-34-g77" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "legacy-software-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Legacy Software Support", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-software-support", "compat-libstdc++-296" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "legacy-software-support", "compat-libstdc++-33" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "lepcha-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Lepcha Support", "langonly": "lep" } ], - [ "groupPackageListAdd", [ "tag", "lepcha-support", "sil-mingzat-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lepcha-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lepcha-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lepcha-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "libreoffice" ], { "force": null, "description": "LibreOffice Productivity Suite", "uservisible": true, "is_default": false, "display_name": "LibreOffice", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice", "libreoffice-impress" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice", "libreoffice-calc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice", "libreoffice-emailmerge" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice", "libreoffice-graphicfilter" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice", "libreoffice-draw" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice", "libreoffice-writer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice", "libreoffice-math" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice", "libreoffice-pyuno" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice", "libreoffice-base" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "libreoffice-development" ], { "force": null, "description": "These packages are helpful when developing LibreOffice extensions or macros.", "uservisible": false, "is_default": false, "display_name": "LibreOffice Development", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice-development", "libreoffice-sdk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "libreoffice-development", "libreoffice-sdk-doc" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "livecd-tools" ], { "force": null, "description": "Tools that need to be installed into a livecd for it to function", "uservisible": false, "is_default": false, "display_name": "LiveCD Tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "livecd-tools", "kernel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "livecd-tools", "syslinux" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "livecd-tools", "dracut-config-generic" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "livecd-tools", "grub2-efi" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "livecd-tools", "kernel-modules" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "livecd-tools", "kernel-modules-extra" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "livecd-tools", "dracut-live" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "load-balancer" ], { "force": null, "description": "Load balancing support for network traffic", "uservisible": false, "is_default": false, "display_name": "Load Balancer", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "load-balancer", "keepalived" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "load-balancer", "ipvsadm" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "mate-desktop" ], { "force": null, "description": "MATE Desktop is based on GNOME 2 and provides a powerful graphical user interface for users who seek a simple easy to use traditional desktop interface.", "uservisible": false, "is_default": false, "display_name": "MATE", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "exaile" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gvfs-mtp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "NetworkManager-vpnc-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "dconf-editor" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "pluma" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "xfburn" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-applets" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "abrt-desktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "NetworkManager-iodine-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "marco" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gnote" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "initial-setup-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "libmatekbd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "filezilla" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-control-center" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "fros-recordmydesktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "hexchat" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "system-config-printer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "system-config-users" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-dictionary" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-desktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-terminal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "caja-wallpaper" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-panel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-calc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gvfs-smb" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "setroubleshoot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-themes" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "NetworkManager-l2tp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "NetworkManager-openconnect" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "caja" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gvfs-afc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "system-config-language" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "claws-mail" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "lightdm-gtk-greeter-settings" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "vim-enhanced" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "libmatemixer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "seahorse" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "NetworkManager-pptp-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "f24-backgrounds-base" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "firefox" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "engrampa" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "atril" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "p7zip-plugins" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "blueman" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "caja-sendto" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "firewall-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "caja-open-terminal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "NetworkManager-adsl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-user-guide" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mozo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "transmission-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-polkit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "f24-backgrounds-mate" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "NetworkManager-openvpn-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "xdg-user-dirs-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gvfs-gphoto2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "simple-scan" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "atril-caja" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-notification-daemon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gvfs-fuse" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-system-monitor" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-screenshot" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "network-manager-applet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gucharmap" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "libmateweather" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "p7zip" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-disk-usage-analyzer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "lightdm-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-menus-preferences-category-menu" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-settings-daemon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "lightdm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "NetworkManager-libreswan-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-media" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-backgrounds" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "yumex-dnf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-menus" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gparted" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "f24-backgrounds-extras-base" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "libsecret" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gtk2-engines" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "NetworkManager-bluetooth" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-screensaver" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "system-config-date" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "caja-image-converter" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-power-manager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "yelp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-session-manager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "gvfs-archive" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "eom" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "abrt-java-connector" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-search-tool" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "parole" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-desktop", "mate-system-log" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "mate-applications" ], { "force": null, "description": "Applications for the MATE Desktop.", "uservisible": true, "is_default": false, "display_name": "MATE Applications", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "caja-beesu" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "atril-thumbnailer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "mate-sensors-applet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "mate-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "mintmenu" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "caja-beesu-manager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "pidgin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "python-caja" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "pluma-beesu-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "mate-applet-softupd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "firewall-applet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "tigervnc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "caja-share" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "caja-actions" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-applications", "mate-icon-theme-faenza" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "mate-compiz" ], { "force": null, "description": "This package group adds Compiz and Emerald to MATE desktop", "uservisible": true, "is_default": false, "display_name": "MATE Compiz", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "compizconfig-python" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "simple-ccsm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "compiz" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "compiz-plugins-experimental" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "compiz-bcop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "compiz-plugins-main" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "ccsm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "libcompizconfig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "compiz-manager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "emerald-themes" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "compiz-plugins-extra" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "emerald" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mate-compiz", "fusion-icon" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "mail-server" ], { "force": null, "description": "These packages allow you to configure an IMAP or SMTP mail server.", "uservisible": false, "is_default": false, "display_name": "Mail Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "dovecot" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "sendmail-cf" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "cyrus-sasl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "spamassassin" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "sendmail" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "clamav-data" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "up-imapproxy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "crm114" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "clamav-milter" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "mailman" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "enemies-of-carlotta" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "exim" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "roundcubemail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "imp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "pyzor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "milter-regex" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "opendkim" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "clamav" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "spambayes" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "exim-clamav" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "cyrus-imapd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "sqlgrey" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "squirrelmail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "spamass-milter" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "amavisd-new" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "postfix" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "esmtp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "uw-imap" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "dbmail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mail-server", "exim-doc" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "maithili-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Maithili Support", "langonly": "mai" } ], - [ "groupPackageListAdd", [ "tag", "maithili-support", "lohit-devanagari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "maithili-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "maithili-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "maithili-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "maithili-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "malayalam-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Malayalam Support", "langonly": "ml" } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "smc-meera-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "smc-anjalioldlipi-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "smc-suruma-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "smc-rachana-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "google-noto-sans-malayalam-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "lohit-malayalam-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "samyak-malayalam-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "smc-dyuthi-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "smc-raghumalayalam-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "smc-kalyani-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "google-noto-sans-malayalam-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "malayalam-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "manipuri-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Manipuri Support", "langonly": "mni" } ], - [ "groupPackageListAdd", [ "tag", "manipuri-support", "lohit-bengali-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "manipuri-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "manipuri-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "marathi-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Marathi Support", "langonly": "mr" } ], - [ "groupPackageListAdd", [ "tag", "marathi-support", "lohit-marathi-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "marathi-support", "samyak-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "marathi-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "marathi-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "marathi-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "marathi-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "mysql" ], { "force": null, "description": "This package group contains packages useful for use with MariaDB (MySQL).", "uservisible": false, "is_default": false, "display_name": "MariaDB (MySQL) Database", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "mariadb" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "mariadb-server" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "unixODBC" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "python-mysql" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "perl-DBD-MySQL" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "mysql-connector-odbc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "libdbi-dbd-mysql" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "qt-mysql" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "php-mysqlnd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "mariadb-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "mysqltuner" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "mysqlreport" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "mariadb-bench" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mysql", "qt3-MySQL" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "medical" ], { "force": null, "description": "This is a group of applications related to health care.", "uservisible": true, "is_default": false, "display_name": "Medical Applications", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "medical", "aeskulap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "medical", "gnumed" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "medical", "gnumed-server" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "milkymist" ], { "force": null, "description": "Toolchain for Milkymist hardware engineers.", "uservisible": true, "is_default": false, "display_name": "Milkymist", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "vim-common" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "avr-gdb" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "gtkwave" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "flterm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "qemu" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "gcc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "lemon" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "libftdi-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "automake" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "avr-binutils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "avr-libc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "llvm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "gd-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "avr-gcc-c++" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "avr-libc-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "iverilog" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "clang" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "openocd" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "gplcver" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "re2c" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "tftp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "autoconf" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "avr-gcc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "tftp-server" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "milkymist", "srecord" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "mingw32" ], { "force": null, "description": "Support for cross-compiling programs to 32 bit Windows targets, testing them, and building installers, all from within Fedora.", "uservisible": false, "is_default": false, "display_name": "MinGW cross-compiler", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-binutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-gcc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-crt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-filesystem" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-headers" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-crossreport" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-nsis" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "wine" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-sqlite" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-libxml2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-glib2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-libgcrypt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-libgpg-error" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-zlib" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-dlfcn" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-termcap" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-bzip2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-openssl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-libpng" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-pdcurses" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-readline" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-SDL" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-cairo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-pixman" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-atk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-gdbm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-libjpeg-turbo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-win-iconv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-gettext" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-pthreads" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-proj" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-freetype" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mingw32", "mingw32-nsiswrapper" ], { "force": null, "requires": "mingw32-nsis", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "mongodb" ], { "force": null, "description": "Scalable, high-performance NoSQL database.", "uservisible": false, "is_default": false, "display_name": "MongoDB", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "mongodb", "mongodb-server" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mongodb", "mongodb" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mongodb", "mongodb-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "mongodb", "libmongodb" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "multimedia" ], { "force": null, "description": "Audio/video framework common to desktops", "uservisible": false, "is_default": false, "display_name": "Multimedia", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "alsa-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "alsa-ucm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "pulseaudio-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "gstreamer1-plugins-bad-free" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "gstreamer1-plugins-good" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "pulseaudio" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "pulseaudio-module-x11" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "PackageKit-gstreamer-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "alsa-plugins-pulseaudio" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "gstreamer-plugins-good" ], { "force": null, "requires": "gstreamer", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "gstreamer-plugins-bad-free" ], { "force": null, "requires": "gstreamer", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "multimedia", "gstreamer-plugins-espeak" ], { "force": null, "requires": "gstreamer", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "hawaii-media" ], { "force": null, "description": "Multimedia support for Hawaii", "uservisible": false, "is_default": false, "display_name": "Multimedia support for Hawaii", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "hawaii-media", "pavucontrol" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "lxde-media" ], { "force": null, "description": "Multimedia support for LXDE", "uservisible": false, "is_default": false, "display_name": "Multimedia support for LXDE", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-media", "lxmusic" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-media", "pavucontrol" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-media", "asunder" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-media", "pnmixer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxde-media", "gnomebaker" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "lxqt-media" ], { "force": null, "description": "Multimedia support for LXQt", "uservisible": false, "is_default": false, "display_name": "Multimedia support for LXQt", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-media", "pavucontrol" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "lxqt-media", "pnmixer" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "xfce-media" ], { "force": null, "description": "Multimedia support for Xfce", "uservisible": false, "is_default": false, "display_name": "Multimedia support for Xfce", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-media", "xfburn" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-media", "pavucontrol" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-media", "parole" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-media", "asunder" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-media", "pragha" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "burmese-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Myanmar (Burmese) Support", "langonly": "my" } ], - [ "groupPackageListAdd", [ "tag", "burmese-support", "sil-padauk-fonts" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "nepali-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Nepali Support", "langonly": "ne" } ], - [ "groupPackageListAdd", [ "tag", "nepali-support", "madan-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "nepali-support", "lohit-devanagari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "nepali-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "nepali-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "nepali-support", "scim-tables-nepali" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "nepali-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "network-server" ], { "force": null, "description": "These packages include network-based servers such as DHCP, Kerberos and NIS.", "uservisible": true, "is_default": false, "display_name": "Network Servers", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "ypserv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "rinetd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "ahcpd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "openldap-servers" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "tigervnc-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "nsd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "vtun" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "kannel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "ucarp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "cobbler" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "torque-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "389-ds-base" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "koan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "xl2tpd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "jabberd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "puppet-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "netatalk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "dhcp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "krb5-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "flumotion" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "radvd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "ipxripd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "fwknop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "icecast" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "quagga" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "polipo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "vnc-reflector" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "sobby" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "libreswan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "oidentd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "znc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "freenx-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "babeld" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "amanda-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "dnsmasq" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "ejabberd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "privoxy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "network-server", "freeradius" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "news-server" ], { "force": null, "description": "This group allows you to configure the system as a news server.", "uservisible": false, "is_default": false, "display_name": "News Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "news-server", "inn" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "news-server", "newscache" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "news-server", "cleanfeed" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "news-server", "suck" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "news-server", "leafnode" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "news-server", "newsx" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "ocaml" ], { "force": null, "description": "Support for developing software using the Objective Caml programming language and libraries.", "uservisible": false, "is_default": false, "display_name": "OCaml", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-findlib-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-x11" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-runtime" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-ocamldoc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-camlp4-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "emacs-tuareg" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-pxp-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "xemacs-tuareg" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-ocamlgraph-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-ssl-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-zarith-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-xml-light-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-lablgtk-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-expat-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-curses-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-camomile-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-labltk-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-bitstring-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-csv-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-xmlrpc-light-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-tplib-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-lablgl-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-curl-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-extlib-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-calendar-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-pcre-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-ocamlnet-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ocaml", "ocaml-menhir-devel" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "odia-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Odia Support", "langonly": "or" } ], - [ "groupPackageListAdd", [ "tag", "odia-support", "lohit-odia-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "odia-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "odia-support", "samyak-odia-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "odia-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "odia-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "office" ], { "force": null, "description": "The applications include office suites, PDF viewers, and more.", "uservisible": true, "is_default": false, "display_name": "Office/Productivity", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-impress" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "alexandria" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-base" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "kreetingkard_templates" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "pdfedit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "texmaker" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "kchmviewer-qt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "texlive-xdvi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-voikko" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "rednotebook" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "xournal" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-writer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "evince" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-graphicfilter" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "taskjuggler" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "Zim" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "gramps" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "klatexformula-ktexteditor-plugin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "cherrytree" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "gourmet" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "abiword" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "lyx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calligra" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calibre" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "skrooge" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calligra-stage" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "jpilot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "starcal" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "xfbib" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "kmymoney" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calligra-braindump" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-math" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calligra-kexi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "grisbi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-xsltfilter" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "dayplanner" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "tetex-IEEEtran" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "kdepim" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-ogltrans" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "glom" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "planner" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-calc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "glabels" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calcurse" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-emailmerge" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "pybliographer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "gnumeric" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "wyrd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "hnb" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calligra-plan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-wiki-publisher" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "htmldoc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "krecipes" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "keurocalc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calligra-sheets" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "xchm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "Saaghar" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calligra-words" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "gnucash" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "kreetingkard" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "dia" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "taskcoach" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "tellico" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "klatexformula" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "calligra-flow" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "MagicPoint" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-draw" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "revelation" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "gnumeric-plugins-extras" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "vym" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "aiksaurus-thesaurus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "okular" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "bibus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "office", "libreoffice-TexMaths" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "online-docs" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Online Help and Documentation", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "online-docs", "system-config-nfs-docs" ], { "force": null, "requires": "system-config-nfs", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "online-docs", "system-config-samba-docs" ], { "force": null, "requires": "system-config-samba", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "online-docs", "system-config-services-docs" ], { "force": null, "requires": "system-config-services", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "online-docs", "system-config-date-docs" ], { "force": null, "requires": "system-config-date", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "online-docs", "system-config-users-docs" ], { "force": null, "requires": "system-config-users", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "php" ], { "force": null, "description": "General-purpose web development scripting language.", "uservisible": false, "is_default": false, "display_name": "PHP", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-pear" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-mbstring" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-soap" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-xml" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-pecl-apc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-imap" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-mcrypt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-pecl-mongo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-pdo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-bcmath" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-pgsql" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-mysqlnd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-gd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "php", "php-process" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "perl" ], { "force": null, "description": "Support for developing programs in the Perl programming language.", "uservisible": false, "is_default": false, "display_name": "Perl Development", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "perl", "perl-core" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl", "perltidy" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl", "cpan-upload" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl", "git-cpan-patch" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl", "vim-perl-support" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl", "cpanspec" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl", "perl-Task-Catalyst" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl", "parrot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl", "eclipse-epic" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "perl-web" ], { "force": null, "description": "Basic Perl web application support.", "uservisible": false, "is_default": false, "display_name": "Perl for Web", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "perl-web", "perl-CPANPLUS" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl-web", "perl-CPAN" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl-web", "perl-App-cpanminus" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl-web", "perl-DBD-MySQL" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl-web", "perl-core" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl-web", "mod_perl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl-web", "ImageMagick-perl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl-web", "perl-DBD-SQLite" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "perl-web", "perl-MongoDB" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "persian-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Persian Support", "langonly": "fa" } ], - [ "groupPackageListAdd", [ "tag", "persian-support", "sil-scheherazade-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "persian-support", "sil-lateef-fonts" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "sql-server" ], { "force": null, "description": "This package group includes packages useful for use with PostgreSQL.", "uservisible": false, "is_default": false, "display_name": "PostgreSQL Database", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "postgresql" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "unixODBC" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "postgresql-server" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "libdbi-dbd-pgsql" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "rhdb-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "perl-DBD-Pg" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "qt-postgresql" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "qt3-ODBC" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "qt-odbc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "postgresql-contrib" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "postgresql-test" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "qt3-PostgreSQL" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "postgresql-jdbc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "postgresql-odbc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "postgresql-docs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "PyGreSQL" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sql-server", "tcl-pgtcl" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "printing" ], { "force": null, "description": "Install these tools to enable the system to print or act as a print server.", "uservisible": false, "is_default": false, "display_name": "Printing Support", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "ghostscript" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "cups" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "cups-filters" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "mpage" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "system-config-printer-udev" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "nss-mdns" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "colord" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "samba-client" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "paps" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "cups-pk-helper" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "foomatic" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "foomatic-db-ppds" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "gutenprint-cups" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "gutenprint" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "hplip" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "hpijs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "bluez-cups" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "cups-pdf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "enscript" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "min12xxw" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "pnm2ppa" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "ptouch-driver" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "system-config-printer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "cups-bjnp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "splix" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "printing", "a2ps" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "punjabi-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Punjabi Support", "langonly": "pa" } ], - [ "groupPackageListAdd", [ "tag", "punjabi-support", "lohit-gurmukhi-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "punjabi-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "punjabi-support", "saab-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "punjabi-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "punjabi-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "python-web" ], { "force": null, "description": "Basic Python web application support.", "uservisible": false, "is_default": false, "display_name": "Python", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "pymongo-gridfs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "python-virtualenv" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "libcurl-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "libcurl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "libjpeg-turbo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "pymongo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "freetype-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "numpy-f2py" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "python" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "python-mysql" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "python-magic" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "python-psycopg2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "libjpeg-turbo-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "numpy" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "python-web", "mod_wsgi" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "rpm-development-tools" ], { "force": null, "description": "These tools include core development tools such rpmbuild.", "uservisible": true, "is_default": false, "display_name": "RPM Development Tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "rpm-development-tools", "rpm-build" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rpm-development-tools", "redhat-rpm-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rpm-development-tools", "rpmdevtools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rpm-development-tools", "koji" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rpm-development-tools", "mock" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rpm-development-tools", "pungi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rpm-development-tools", "rpmlint" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rpm-development-tools", "plague-client" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "robotics-suite" ], { "force": null, "description": "Suite of packages for robotics development", "uservisible": true, "is_default": false, "display_name": "Robotics", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "player-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-rosinstall" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "catkin" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-flite" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-player" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "eclipse-cdt" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-pantilt" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "gazebo-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "openni-primesense" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-firevision-tools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-laserht" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "mrpt-apps" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "rcssserver" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-vcstools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-rosdistro" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "player-python" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-katana" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "arduino" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "rcsslogplayer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-ttmainloop" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-wstool" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "player" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "opencv" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-catkin_pkg" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-rosinstall_generator" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "pcl" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-catkin_lint" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-bloom" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "player-examples" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "gazebo" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-lua" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-core" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-guis" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "rcssserver-gui" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "mrpt-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-worldmodel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-xmlrpc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-refboxcomm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "stage-playerplugin" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "libphidget" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "rcssmonitor" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-firevision" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-bblogger" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-bbsync" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "gearbox" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-joystick" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "stage" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-rospkg" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "rcssserver3d-doc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "urg" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "eclipse-egit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-skiller" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "mrpt-libs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "eclipse-subclipse" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-webview" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-catkin_tools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "python-rosdep" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "player-ruby" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-laser" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "rcssserver3d" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-plugin-luaagent" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "rcssserver3d-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "mrpt-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "libphidget-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "urg-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "gearbox-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "stage-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "rcsslogplayer-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "rcssserver-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "fawkes-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "pcl-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "player-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "robotics-suite", "gazebo-devel" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "ruby" ], { "force": null, "description": "Basic support for the Ruby programming language.", "uservisible": false, "is_default": false, "display_name": "Ruby", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "ruby", "ruby" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ruby", "rubygem-abrt" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ruby", "ruby-devel" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "rubyonrails" ], { "force": null, "description": "Ruby on Rails web application stack.", "uservisible": false, "is_default": false, "display_name": "Ruby on Rails", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-minitest" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-sass-rails" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "nodejs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-rake" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-sqlite3" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-uglifier" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-listen" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-bundler" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-json" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-spring-watcher-listen" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-jbuilder" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "ruby-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-byebug" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-rails" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-bigdecimal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-spring" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-sdoc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "sqlite-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-turbolinks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-abrt" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-coffee-rails" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-web-console" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-jquery-rails" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "rubyonrails", "rubygem-bcrypt" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "russian-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Russian Support", "langonly": "ru" } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "paratype-pt-sans-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "paratype-pt-mono-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "xorg-x11-fonts-cyrillic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "paratype-pt-sans-caption-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "paratype-pt-serif-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "fonts-KOI8-R" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "scim-tables-russian" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "stardict-dic-ru" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "fonts-KOI8-R-100dpi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "paratype-pt-serif-caption-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "apanov-heuristica-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "ibus-table-cyrillic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "apanov-edrip-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "russian-support", "fonts-KOI8-R-75dpi" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "sanskrit-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Sanskrit Support", "langonly": "sa" } ], - [ "groupPackageListAdd", [ "tag", "sanskrit-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sanskrit-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "santali-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Santali Support", "langonly": "sat" } ], - [ "groupPackageListAdd", [ "tag", "santali-support", "lohit-devanagari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "santali-support", "samyak-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "santali-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "santali-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "santali-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "santali-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "security-lab" ], { "force": null, "description": "Tools for security auditing, forensics, system rescue, and teaching security testing methodologies.", "uservisible": true, "is_default": false, "display_name": "Security Lab", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ddrescue" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "pdfcrack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nethogs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "zmap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "echoping" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "paris-traceroute" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "mutt" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ratproxy" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "medusa" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "sleuthkit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "gparted" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "sipsak" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "pyrit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "wget" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "pwgen" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "scanmem" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "arp-scan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ArpON" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "uperf" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nmap-ncat" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "p0f" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "etherape" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "foremost" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nmap-frontend" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "pcapdiff" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "mcabber" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "inception" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ssldump" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "wipe" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nbtscan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "net-snmp-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "iftop" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "labrea" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "hunt" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "httrack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "httpry" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "bonesi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "macchanger" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "dsniff" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "scapy" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ettercap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "aircrack-ng" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "sslscan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "swaks" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tcptrack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "safecopy" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "aide" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "driftnet" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "sipp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "sslstrip" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "iperf" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "vim-enhanced" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nano" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "unhide" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tcpreen" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nebula" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "raddump" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "kismet" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "sslsplit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "wavemon" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "wireshark" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "bannergrab" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "siege" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ntp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "screen" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "fping" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "bkhive" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nmbscan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "lynis" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "dnsmap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "iptraf-ng" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "binwalk" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "argus-clients" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "httping" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tcpjunk" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "openssh" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "argus" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "srm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tcpick" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "yersinia" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ophcrack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "xmount" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nload" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nmap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "kismon" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "testdisk" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "splint" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "irssi" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "firewalk" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "bro" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ntfs-3g" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "pscan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "sing" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "rats" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "openvas-cli" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nwipe" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "hping3" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "sqlninja" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "openvas-scanner" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "scamper" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "sucrack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "hydra" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "horst" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "flawfinder" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "john" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tcpdump" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "masscan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "cmospwd" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "chkrootkit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "dnstracer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ht" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "halberd" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "packETH" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tcpxtract" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "dc3dd" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "scalpel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "hfsutils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "mc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "mtr" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "pads" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "airsnort" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tcpcopy" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "unicornscan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "dhcping" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tripwire" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "hexedit" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "examiner" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "skipfish" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "onesixtyone" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ncrack" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "wbox" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "lbd" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tcpflow" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "socat" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "weplab" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "tcpreplay" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "proxychains" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "netsed" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "net-snmp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "cowpatty" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "rkhunter" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nfswatch" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "dnsenum" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ntfsprogs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "snmpcheck" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "trafshow" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "afftools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "goaccess" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "scrub" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ntop" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "telnet" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "httpie" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "ngrep" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "whois" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "slowhttptest" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "vnstat" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "subnetcalc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "dnstop" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "netsniff-ng" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "lnav" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "powertop" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "samdump2" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "security-lab", "nikto" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "server-cfg" ], { "force": null, "description": "This group contains all of Red Hat's custom server configuration tools.", "uservisible": false, "is_default": false, "display_name": "Server Configuration Tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "server-cfg", "system-config-samba" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-cfg", "system-config-services" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-cfg", "cups-pk-helper" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-cfg", "system-config-httpd" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-cfg", "system-config-nfs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-cfg", "system-config-bind" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-cfg", "system-config-printer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "server-cfg", "system-switch-mail-gnome" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "simplified-chinese-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Simplified Chinese Support", "langonly": "zh_CN" } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "adobe-source-han-sans-cn-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "lv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "scim-tables-chinese-extra" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "wqy-bitmap-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "wqy-zenhei-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "scim-pinyin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "wqy-microhei-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "stardict-dic-zh_CN" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "ibus-table-chinese-yong" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "ibus-table-chinese-erbi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "fcitx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "wqy-unibit-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "m17n-db-extras" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "scim-fcitx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "ibus-table-chinese-wubi-jidian" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "scim-tables-chinese" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "ibus-table-chinese-wubi-haifeng" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "simplified-chinese-support", "ibus-libpinyin" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "sindhi-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Sindhi Support", "langonly": "sd" } ], - [ "groupPackageListAdd", [ "tag", "sindhi-support", "paktype-naskh-basic-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sindhi-support", "lohit-devanagari-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sindhi-support", "google-noto-sans-devanagari-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sindhi-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sindhi-support", "google-noto-sans-devanagari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sindhi-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "sinhala-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Sinhala Support", "langonly": "si" } ], - [ "groupPackageListAdd", [ "tag", "sinhala-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sinhala-support", "lklug-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sinhala-support", "scim-sayura" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sinhala-support", "ibus-sayura" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupPackageListAdd", [ "tag", "sinhala-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "sound-and-video" ], { "force": null, "description": "From CD recording to playing audio CDs and multimedia files, this package group allows you to work with sound and video on the system.", "uservisible": true, "is_default": false, "display_name": "Sound and Video", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "pnmixer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "exaile" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "totem" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-ttxtsubs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "paprefs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "soundconverter" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "xcdroast" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "picard" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "festvox-clb-arctic-hts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "v4l2ucp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "mikmod" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "decibel-audio-player" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "mybashburn" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "xfburn" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "nyquist" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "dvdisaster" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "xmp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "grip" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vorbis-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "gnomebaker" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-streamdev-server" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "rakarrack" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "genisoimage" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "alsamixergui" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "banshee" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "mkvtoolnix-gui" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "easytag" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "wodim" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "soundtracker" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "argyllcms" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-osdteletext" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "gcstar" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "totem-lirc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "xmms" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "festvox-rms-arctic-hts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "dvdauthor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "denemo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "kid3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "openfst-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "icedax" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "cdcollect" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "tclabc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "pavucontrol" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "opengrm-ngram-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "milkytracker" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "xmms-flac" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "id3v2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "kover" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "totem-nautilus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "dvgrab" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "multimedia-menus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "gnome-sound-recorder" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "asunder" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-epgsearch" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "tomahawk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "amarok" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "audacity" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "volumeicon" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "whaawmp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-tvonscreen" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "sweep" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "pitivi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "festvox-bdl-arctic-hts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "sox" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "pyvnc2swf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-remote" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "cdrskin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "gtk-v4l" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "jack-audio-connection-kit" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "pocketsphinx-plugin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-femon" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "lxmusic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "irstlm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "paman" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "kmix" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "lingot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "pocketsphinx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "gtkpod" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "isomaster" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "juk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "audacious" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "quodlibet" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "cdlabelgen" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "cdparanoia" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "tagtool" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "csound-csoundac" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "cmusphinx3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "gnomad2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "sound-juicer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "pavumeter" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "qmmp-plugin-pack" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-streamdev-client" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "brasero" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "rhythmbox" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "pulseaudio-module-zeroconf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-skinsoppalusikka" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "adplay" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "xmms-adplug" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "tvtime" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "kscd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "ucview" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "pulseaudio-module-lirc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "camE" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "vdr-sudoku" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "sphinxtrain" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "abcde" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "dragon" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "qmmp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "rosegarden4" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "k3b" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "parole" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sound-and-video", "regionset" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "standard" ], { "force": null, "description": "Common set of utilities that extend the minimal installation.", "uservisible": false, "is_default": false, "display_name": "Standard", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "cryptsetup" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "vconfig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "rsyslog" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "tar" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "realmd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "ed" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "dosfstools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "sudo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "dnf-langpacks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "usbutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "rng-tools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "deltarpm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "logrotate" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "rsync" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "jwhois" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "at" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "file" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "fedora-release-notes" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "pam_pkcs11" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "traceroute" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "mdadm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "crontabs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "bzip2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "pam_krb5" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "abrt-cli" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "systemd-udev" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "sssd" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "gnupg2" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "btrfs-progs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "microcode_ctl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "which" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "ntfsprogs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "iptstate" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "bridge-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "irqbalance" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "mcelog" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "ethtool" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "mailcap" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "nmap-ncat" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "unzip" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "psacct" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "cyrus-sasl-plain" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "tcp_wrappers" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "bc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "mlocate" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "time" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "setuptool" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "cpio" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "bash-completion" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "quota" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "pinfo" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "telnet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "nfs-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "words" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "cifs-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "wget" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "dos2unix" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "passwdqc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "coolkey" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "symlinks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "smartmontools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "fprintd-pam" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "attr" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "fpaste" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "mtr" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "tcpdump" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "dbus" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "tree" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "sos" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "acl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "wireless-tools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "plymouth" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "bind-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "hunspell" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "net-tools" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "pciutils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "man-pages" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "ntfs-3g" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "lsof" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "zip" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "nano" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "standard", "chrony" ], { "force": null, "requires": "control-center", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "sugar-desktop" ], { "force": null, "description": "A software playground for learning about learning.", "uservisible": false, "is_default": false, "display_name": "Sugar Desktop Environment", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-terminal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-stopwatch" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-infoslicer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-clock" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "lightdm" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-paint" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "gnome-power-manager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-calculator" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-portfolio" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-physics" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-log" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-speak" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-moon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-read" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-labyrinth" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-imageviewer" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-help" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-story" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-visualmatch" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "pygame" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-jukebox" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-xoirc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-write" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "gvfs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-ruler" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-chat" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-words" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-turtleart" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-abacus" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-record" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-getiabooks" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "metacity" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-cp-all" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-countries" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "csound-python" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-maze" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-toolkit-gtk3" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-toolkit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-finance" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "lightdm-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-memorize" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-pippy" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-fototoon" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-browse" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "sugar-desktop", "sugar-typing-turtle" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "system-tools" ], { "force": null, "description": "This group is a collection of various tools for the system, such as the client for connecting to SMB shares and tools to monitor network traffic.", "uservisible": true, "is_default": false, "display_name": "System Tools", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "NetworkManager-libreswan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "nmap" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ntfs-3g" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "setserial" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "NetworkManager-l2tp" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "openconnect" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "NetworkManager-openconnect" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "openldap-clients" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "openvpn" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "samba-client" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "screen" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "xdelta" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "BackupPC" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "cifs-utils" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "libreswan" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "jigdo" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "NetworkManager-openvpn" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "vpnc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "NetworkManager-vpnc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "chrony" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "tigervnc" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "zisofs-tools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "zsh" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "bonnie++" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "xmobar" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "gigolo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "remmina-plugins-telepathy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "unison213" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "nethogs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "inadyn-mt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "hercules" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "htop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ntp-perl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "tn5250" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "w_scan" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "gssdp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "gnokii" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "keychain" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "dtach" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "noip" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ghasher" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ghex" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "cabextract" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "epylog" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "reptyr" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "xsel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ttywatch" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "denyhosts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "crack" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "lirc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ganglia" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "fwrestart" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "remmina-plugins-xdmcp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "am-utils" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "crash" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "p0f" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "geoclue" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "unison227" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "createrepo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "lzop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "radeontool" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "foremost" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "nmap-frontend" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "p7zip-plugins" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "dar" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "freerdp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "apcupsd-gui" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "swatch" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "rear" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "synaptic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "net-snmp-utils" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "obexftp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "iftop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "apcupsd" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "qstat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "upx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "arptables" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "macchanger" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ettercap" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "enca" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "swaks" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "nut" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ebtables" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "aide" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "pwgen" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "arc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "sec" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "wlassistant" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "arj" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "shorewall" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "dkms" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "nrg2iso" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "dstat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ircp-tray" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "x3270-x11" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "javasysmon" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "limph" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ntp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "tunctl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "mmv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "speech-dispatcher-flite" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "pbzip2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "torque-gui" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "conman" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "wireshark-gnome" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "etherbat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "mrtg" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ksmarttray" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "chrpath" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "environment-modules" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "sysstat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "connect-proxy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "fedora-package-config-apt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "hfsplus-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "xsupplicant" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "netstat-nat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "grsync" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "remmina" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "par2cmdline" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "testdisk" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "nomarch" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "apt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "speech-dispatcher-festival" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "iotop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "puppet" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "grepmail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "procinfo" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "apg" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "aircrack-ng" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "festival" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ntpdate" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "syslog-ng" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "speech-dispatcher" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "john" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "gkrellm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "powerman" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "zidrav" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "fwknop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "gupnp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ipsec-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "freeze" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "rdiff-backup" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "mtx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "oddjob-mkhomedir" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "mc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "rsnapshot" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "munin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "amanda-client" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "rdesktop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "convmv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "airsnort" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "autofs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "p7zip" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "hyperestraier" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "rootsh" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "remmina-plugins-nx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "arpwatch" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "eiciel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "speech-dispatcher-espeak" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "stripesnoop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "nagios" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ibmonitor" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "fatsort" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "socat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "uucp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "jfbterm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "remmina-plugins-rdp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "kdirstat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "gtkhash" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "nfswatch" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "gnutls-utils" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "catfish" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "gxemul" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "emelfm2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "cfengine" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "oddjob" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "torque-client" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "avahi-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "scrub" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ed2k_hash" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "fuse" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "PackageKit-command-not-found" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "rmanage" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "vnstat" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "ddclient" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "greadelf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "powertop" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "portecle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "liveusb-creator" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "bochs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "wine" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "gtkterm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "fdupes" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "qdbm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "system-tools", "incron" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "tamil-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Tamil Support", "langonly": "ta" } ], - [ "groupPackageListAdd", [ "tag", "tamil-support", "lohit-tamil-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tamil-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tamil-support", "google-noto-sans-tamil-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tamil-support", "google-noto-sans-tamil-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tamil-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tamil-support", "serafettin-cartoon-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tamil-support", "samyak-tamil-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tamil-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "telugu-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Telugu Support", "langonly": "te" } ], - [ "groupPackageListAdd", [ "tag", "telugu-support", "lohit-telugu-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "telugu-support", "m17n-db" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "telugu-support", "vemana2000-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "telugu-support", "google-noto-sans-telugu-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "telugu-support", "iok" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "telugu-support", "google-noto-sans-telugu-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "telugu-support", "pothana2000-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "telugu-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "text-internet" ], { "force": null, "description": "This group includes text-based email, web, and chat clients. These applications do not require the X Window System.", "uservisible": true, "is_default": false, "display_name": "Text-based Internet", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "isync" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "rss2email" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "fetchmail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "irssi" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "slrn" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "fpaste" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "cone" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "mutt" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "iperf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "sitecopy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "websec" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "getmail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "xprobe2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "libtranslate" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "ctorrent" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "w3m" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "tin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "axel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "nmh" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "whatmask" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "archivemail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "epic" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "rtorrent" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "lftp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "elinks" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "youtube-dl" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "offlineimap" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "cadaver" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "snownews" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "yafc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "ncftp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "tftp" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "emacs-mew" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "alpine" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "centerim" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "argus" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "abook" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "maildirproc" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "deletemail" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "lynx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "aria2" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "text-internet", "trickle" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "thai-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Thai Support", "langonly": "th" } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "google-noto-sans-thai-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-waree-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-tlwgtypo-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-umpush-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-kinnari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-loma-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-purisa-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "google-noto-sans-thai-ui-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-tlwgtypewriter-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "google-noto-serif-thai-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-tlwgtypist-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-norasi-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-tlwgmono-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-garuda-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "thai-scalable-sawasdee-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "scim-tables-thai" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "thai-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "tibetan-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Tibetan Support", "langonly": "bo" } ], - [ "groupPackageListAdd", [ "tag", "tibetan-support", "tibetan-machine-uni-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tibetan-support", "jomolhari-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tibetan-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "tomcat" ], { "force": null, "description": "Tomcat web application server.", "uservisible": false, "is_default": false, "display_name": "Tomcat", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "tomcat", "tomcat-native" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tomcat", "tomcat-admin-webapps" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tomcat", "tomcat" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "tomcat", "tomcat-webapps" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "traditional-chinese-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Traditional Chinese Support", "langonly": "zh_TW" } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "adobe-source-han-sans-tw-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "ibus-table-chinese-cantonese" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "cjkuni-uming-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "scim-tables-chinese-extra" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "ibus-table-chinese-easy" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "gcin" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "ibus-table-chinese-stroke5" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "ibus-table-chinese-quick" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "ibus-table-chinese-scj" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "lv" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "ibus-table-chinese-cangjie" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "scim-array" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "ibus-table-chinese-array" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "stardict-dic-zh_TW" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "scim-tables-chinese" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "taipeifonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "m17n-db-extras" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "cjkuni-ukai-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "traditional-chinese-support", "ibus-libzhuyin" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "urdu-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Urdu Support", "langonly": "ur" } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "paktype-naskh-basic-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "paktype-tehreer-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "nafees-nastaleeq-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "dejavu-sans-mono-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "nafees-web-naskh-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "dejavu-sans-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-book-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-digital-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "nafees-pakistani-web-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-pen-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "nafees-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-decorative-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-letter-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "nafees-riqa-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "paktype-ajrak-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-titlel-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-art-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-poster-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "nafees-pakistani-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "paktype-naqsh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "nafees-tehreer-naskh-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-office-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-farsi-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-one-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-qurn-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-title-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "kacst-screen-fonts" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "urdu-support", "ibus-m17n" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "platform-vmware" ], { "force": null, "description": "Packages to install in VMware virtual machines", "uservisible": false, "is_default": false, "display_name": "VMware Platform Support", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "platform-vmware", "open-vm-tools" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "vagrant" ], { "force": null, "description": "These packages provide Vagrant with libvirt provider support", "uservisible": false, "is_default": false, "display_name": "Vagrant with libvirt support", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "vagrant", "vagrant" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "vagrant", "vagrant-libvirt" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "vagrant", "vagrant-cachier" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "vagrant", "vagrant-registration" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "vietnamese-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Vietnamese Support", "langonly": "vi" } ], - [ "groupPackageListAdd", [ "tag", "vietnamese-support", "ibus-bogo" ], { "force": null, "requires": "xorg-x11-server-Xorg", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "virtualization" ], { "force": null, "description": "These packages provide a graphical virtualization environment.", "uservisible": false, "is_default": false, "display_name": "Virtualization", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "virt-install" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "libvirt-daemon-config-network" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "qemu-kvm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "libvirt-daemon-kvm" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "virt-manager" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "virt-viewer" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "python-libguestfs" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "virt-top" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "libguestfs-tools" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "virtualization", "guestfs-browser" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "window-managers" ], { "force": null, "description": "Simple window managers that aren't part of a larger desktop environment.", "uservisible": true, "is_default": false, "display_name": "Window Managers", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "dwm-user" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "i3lock" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "openbox" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "obmenu" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "fvwm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "xcompmgr" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "hackedbox" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "wmx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "bbkeys" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "xmonad-mate" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "matchbox-window-manager" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "dwm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "bluetile" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "xmonad" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "blackbox" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "i3" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "WindowMaker" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "obconf" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "i3status" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "fluxbox" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "icewm" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "ratpoison" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "window-managers", "i3-doc" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "smb-server" ], { "force": null, "description": "This package group allows you to share files between Linux and MS Windows(tm) systems.", "uservisible": false, "is_default": false, "display_name": "Windows File Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "smb-server", "samba" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "smb-server", "samba-client" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "smb-server", "cifs-utils" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "x-software-development" ], { "force": null, "description": "These packages allow you to develop applications for the X Window System.", "uservisible": false, "is_default": false, "display_name": "X Software Development", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libX11-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXaw-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libICE-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXt-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXfixes-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libxkbfile-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXxf86vm-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "freetype-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXres-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "pixman-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXxf86dga-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXmu-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXevie-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXrender-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXext-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXtst-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libmng-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXvMC-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXfont-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libtiff-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "SDL-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "xorg-x11-docs" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libSM-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXau-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXScrnSaver-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "gd-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXxf86misc-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXft-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "xorg-x11-xtrans-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libdrm-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXrandr-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libjpeg-turbo-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "giflib-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "Xaw3d-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXdmcp-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "xrestop" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libdmx-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXcomposite-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "mesa-libGL-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXcursor-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "netpbm-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libpng-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXdamage-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "xorg-x11-xbitmaps" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "icon-slicer" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "icon-naming-utils" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "mesa-libGLU-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "xorg-x11-server-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "neXtaw-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "x-software-development", "libXp-devel" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "xmonad" ], { "force": null, "description": "A tiling window manager", "uservisible": false, "is_default": false, "display_name": "XMonad", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "xmonad", "xmobar" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xmonad", "xmonad" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "xmonad-mate" ], { "force": null, "description": "XMonad window manager with MATE", "uservisible": false, "is_default": false, "display_name": "XMonad for MATE", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "xmonad-mate", "mate-control-center" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xmonad-mate", "mate-panel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xmonad-mate", "xmonad-mate" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xmonad-mate", "mate-screensaver" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "xfce-desktop" ], { "force": null, "description": "A lightweight desktop environment that works well on low end machines.", "uservisible": false, "is_default": false, "display_name": "Xfce", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-session" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "alsa-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "greybird-xfce4-notifyd-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfwm4-theme-nodoka" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xdg-user-dirs-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "openssh-askpass" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "blueman" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "bluebird-gtk2-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "bluebird-xfwm4-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "firewall-config" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "NetworkManager-l2tp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-pulseaudio-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "NetworkManager-vpnc-gnome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfwm4" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-about" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "fedora-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "NetworkManager-pptp" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "NetworkManager-openconnect" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "albatross-gtk3-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-power-manager" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-datetime-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "gtk-xfce-engine" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "tumbler" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "gvfs" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "abrt-desktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "nm-connection-editor" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-screenshooter-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "desktop-backgrounds-compat" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "bluebird-gtk3-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "albatross-xfwm4-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "greybird-gtk3-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfwm4-themes" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xscreensaver-base" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "adwaita-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-places-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "initial-setup-gui" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "greybird-gtk2-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "Thunar" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "adwaita-gtk2-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-session-engines" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-panel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "greybird-xfwm4-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-terminal" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "thunar-volman" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-settings" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "fros-recordmydesktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "thunar-media-tags-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "gvfs-archive" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "NetworkManager-openvpn" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "network-manager-applet" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "NetworkManager-vpnc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "rodent-icon-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfce4-appfinder" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfconf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "xfdesktop" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "albatross-gtk2-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "lightdm-gtk" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "thunar-archive-plugin" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-desktop", "yumex" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "xfce-office" ], { "force": null, "description": "Office suite for Xfce", "uservisible": false, "is_default": false, "display_name": "Xfce Office", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-office", "gnumeric" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-office", "abiword" ], { "type": "mandatory", "force": null } ], - [ "groupListAdd", [ "tag", "xfce-software-development" ], { "force": null, "description": "Install these packages in order to develop GTK+ and Xfce graphical applications.", "uservisible": false, "is_default": false, "display_name": "Xfce Software Development", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "libxfce4ui-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "libxfce4util-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "xfce4-panel-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "xfce4-dev-tools" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "xfconf-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "exo-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "garcon-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "tumbler-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "Thunar-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "xfce-software-development", "xfce4-session-devel" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "yiddish-support" ], { "force": null, "description": "", "uservisible": false, "is_default": false, "display_name": "Yiddish Support", "langonly": "yi" } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "dejavu-sans-fonts" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-stamsefarad-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-miriam-mono-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-ellinia-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-miriam-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-drugulin-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-aharoni-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-keteryg-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-stamashkenaz-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-yehuda-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-nachlieli-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-caladings-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-hadasim-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-frank-ruehl-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-david-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "yiddish-support", "culmus-simple-clm-fonts" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "base-x" ], { "force": null, "description": "Local X.org display server", "uservisible": false, "is_default": false, "display_name": "base-x", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-wacom" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-server-Xorg" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-vmware" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-openchrome" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-qxl" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-ati" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-evdev" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-armsoc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "mesa-dri-drivers" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-omap" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-vesa" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-xinit" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "glx-utils" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-nouveau" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-freedreno" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "plymouth-system-theme" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-intel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-vmmouse" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-libinput" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-fbdev" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-xauth" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "base-x", "xorg-x11-drv-geode" ], { "type": "optional", "force": null } ] -] diff --git a/tests/test_cli/data/comps-example.yumcomps.out b/tests/test_cli/data/comps-example.yumcomps.out deleted file mode 100644 index 6b299a3..0000000 --- a/tests/test_cli/data/comps-example.yumcomps.out +++ /dev/null @@ -1,5201 +0,0 @@ -WARN: yum.comps does not support the biarchonly of group and basearchonly of package -Group: 3d-printing (3D Printing) - Package: openscad-MCAD: {'type': 'default'} - Package: cura-lulzbot: {'type': 'default'} - Package: slic3r: {'type': 'default'} - Package: printrun: {'type': 'default'} - Package: openscad: {'type': 'default'} - Package: meshlab: {'type': 'default'} - Package: admesh: {'type': 'default'} - Package: cura: {'type': 'default'} - Package: blender: {'type': 'default'} - Package: RepetierHost: {'type': 'optional'} - Package: sfact: {'type': 'optional'} - Package: repsnapper: {'type': 'optional'} - Package: skeinforge: {'type': 'optional'} -Group: arm-tools (ARM Tools) - Package: cloud-utils-growpart: {'type': 'mandatory'} - Package: fedora-arm-installer: {'type': 'mandatory'} - Package: uboot-images-armv7: {'type': 'mandatory'} -Group: sugar-apps (Additional Sugar Activities) - Package: sugar-calendario: {'type': 'mandatory'} - Package: sugar-pukllanapac: {'type': 'mandatory'} - Package: sugar-playgo: {'type': 'mandatory'} - Package: sugar-implode: {'type': 'mandatory'} - Package: sugar-analyze: {'type': 'mandatory'} - Package: sugar-flipsticks: {'type': 'mandatory'} - Package: sugar-connect: {'type': 'mandatory'} - Package: sugar-emulator: {'type': 'mandatory'} - Package: sugar-xomail: {'type': 'mandatory'} - Package: sugar-distance: {'type': 'mandatory'} - Package: sugar-view-slides: {'type': 'mandatory'} -Group: admin-tools (Administration Tools) - Package: authconfig-gtk: {'type': 'mandatory'} - Package: gnome-disk-utility: {'type': 'mandatory'} - Package: fros-recordmydesktop: {'type': 'mandatory'} - Package: system-config-users: {'type': 'mandatory'} - Package: setroubleshoot: {'type': 'mandatory'} - Package: system-config-keyboard: {'type': 'mandatory'} - Package: recordmydesktop: {'type': 'mandatory'} - Package: system-config-language: {'type': 'mandatory'} - Package: system-config-date: {'type': 'mandatory'} - Package: abrt-desktop: {'type': 'mandatory'} -Group: anaconda-tools (Anaconda tools) - Package: cryptsetup: {'type': 'mandatory'} - Package: xfsprogs: {'type': 'mandatory'} - Package: lvm2: {'type': 'mandatory'} - Package: s390utils-base: {'type': 'mandatory'} - Package: dosfstools: {'type': 'mandatory'} - Package: s390utils: {'type': 'mandatory'} - Package: iscsi-initiator-utils: {'type': 'mandatory'} - Package: mdadm: {'type': 'mandatory'} - Package: dmraid: {'type': 'mandatory'} - Package: mactel-boot: {'type': 'mandatory'} - Package: gfs2-utils: {'type': 'mandatory'} - Package: reiserfs-utils: {'type': 'mandatory'} - Package: dracut-network: {'type': 'mandatory'} - Package: shim: {'type': 'mandatory'} - Package: grub2-efi: {'type': 'mandatory'} - Package: btrfs-progs: {'type': 'mandatory'} - Package: extlinux-bootloader: {'type': 'mandatory'} - Package: grub2: {'type': 'mandatory'} - Package: ntfsprogs: {'type': 'mandatory'} - Package: realmd: {'type': 'mandatory'} - Package: efibootmgr: {'type': 'mandatory'} - Package: authconfig: {'type': 'mandatory'} - Package: device-mapper-multipath: {'type': 'mandatory'} - Package: kexec-tools-anaconda-addon: {'type': 'mandatory'} - Package: glibc-all-langpacks: {'type': 'mandatory'} - Package: fcoe-utils: {'type': 'mandatory'} - Package: firewalld: {'type': 'mandatory'} - Package: e2fsprogs: {'type': 'mandatory'} - Package: chrony: {'type': 'mandatory'} - Package: syslinux-extlinux: {'type': 'mandatory'} - Package: teamd: {'type': 'mandatory'} - Package: hfsplus-tools: {'type': 'mandatory'} -Group: ansible-node (Ansible node) - Package: python2-dnf: {'type': 'mandatory'} - Package: libselinux-python: {'requires': 'selinux-policy', 'type': 'conditional'} -Group: hawaii-apps (Applications for the Hawaii Desktop) - Package: eyesight: {'type': 'mandatory'} - Package: transmission-qt: {'type': 'mandatory'} -Group: lxde-apps (Applications for the LXDE Desktop) - Package: midori: {'type': 'mandatory'} - Package: transmission: {'type': 'mandatory'} - Package: pidgin: {'type': 'mandatory'} - Package: sylpheed: {'type': 'mandatory'} -Group: lxqt-apps (Applications for the LXQt Desktop) - Package: transmission-qt: {'type': 'mandatory'} -Group: xfce-apps (Applications for the Xfce Desktop) - Package: firefox: {'type': 'mandatory'} - Package: claws-mail-plugins-mailmbox: {'type': 'mandatory'} - Package: evince: {'type': 'mandatory'} - Package: claws-mail-plugins-archive: {'type': 'mandatory'} - Package: florence: {'type': 'mandatory'} - Package: claws-mail-plugins-vcalendar: {'type': 'mandatory'} - Package: claws-mail-plugins-pgp: {'type': 'mandatory'} - Package: geany: {'type': 'mandatory'} - Package: galculator: {'type': 'mandatory'} - Package: claws-mail-plugins-rssyl: {'type': 'mandatory'} - Package: gparted: {'type': 'mandatory'} - Package: ristretto: {'type': 'mandatory'} - Package: catfish: {'type': 'mandatory'} - Package: claws-mail-plugins-fetchinfo: {'type': 'mandatory'} - Package: claws-mail: {'type': 'mandatory'} - Package: pidgin: {'type': 'mandatory'} - Package: leafpad: {'type': 'mandatory'} - Package: claws-mail-plugins-newmail: {'type': 'mandatory'} - Package: claws-mail-plugins-att-remover: {'type': 'mandatory'} - Package: xfce4-dict-plugin: {'type': 'mandatory'} - Package: xarchiver: {'type': 'mandatory'} - Package: seahorse: {'type': 'mandatory'} - Package: xfce4-clipman-plugin: {'type': 'mandatory'} - Package: transmission: {'type': 'mandatory'} - Package: claws-mail-plugins-notification: {'type': 'mandatory'} - Package: claws-mail-plugins-smime: {'type': 'mandatory'} - Package: claws-mail-plugins-spam-report: {'type': 'mandatory'} - Package: orage: {'type': 'mandatory'} - Package: claws-mail-plugins-tnef: {'type': 'mandatory'} - Package: claws-mail-plugins-attachwarner: {'type': 'mandatory'} -Group: arabic-support (Arabic Support) - Package: kacst-titlel-fonts: {'type': 'default'} - Package: kacst-office-fonts: {'type': 'default'} - Package: kacst-naskh-fonts: {'type': 'default'} - Package: kacst-farsi-fonts: {'type': 'default'} - Package: kacst-one-fonts: {'type': 'default'} - Package: kacst-art-fonts: {'type': 'default'} - Package: kacst-qurn-fonts: {'type': 'default'} - Package: kacst-decorative-fonts: {'type': 'default'} - Package: kacst-title-fonts: {'type': 'default'} - Package: kacst-pen-fonts: {'type': 'default'} - Package: paktype-naqsh-fonts: {'type': 'default'} - Package: dejavu-sans-fonts: {'type': 'default'} - Package: kacst-letter-fonts: {'type': 'default'} - Package: kacst-poster-fonts: {'type': 'default'} - Package: kacst-book-fonts: {'type': 'default'} - Package: dejavu-sans-mono-fonts: {'type': 'default'} - Package: kacst-screen-fonts: {'type': 'default'} - Package: paktype-tehreer-fonts: {'type': 'default'} - Package: kacst-digital-fonts: {'type': 'default'} - Package: sil-scheherazade-fonts: {'type': 'optional'} - Package: scim-tables-arabic: {'type': 'optional'} - Package: sil-lateef-fonts: {'type': 'optional'} -Group: assamese-support (Assamese Support) - Package: lohit-assamese-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-bengali-fonts: {'type': 'default'} - Package: google-noto-sans-bengali-ui-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: audio (Audio Production) - Package: lv2-vocoder-plugins: {'type': 'default'} - Package: seq24: {'type': 'default'} - Package: xsynth-dssi: {'type': 'default'} - Package: ardour5: {'type': 'default'} - Package: non-sequencer: {'type': 'default'} - Package: lv2-zynadd-plugins: {'type': 'default'} - Package: ams: {'type': 'default'} - Package: opus-tools: {'type': 'default'} - Package: zynaddsubfx: {'type': 'default'} - Package: mscore: {'type': 'default'} - Package: non-session-manager: {'type': 'default'} - Package: timidity++: {'type': 'default'} - Package: amsynth: {'type': 'default'} - Package: zita-rev1: {'type': 'default'} - Package: qsynth: {'type': 'default'} - Package: qastools: {'type': 'default'} - Package: lv2-invada-plugins: {'type': 'default'} - Package: jack-audio-connection-kit-dbus: {'type': 'default'} - Package: alsa-plugins-usbstream: {'type': 'default'} - Package: alsa-firmware: {'type': 'default'} - Package: jack-rack: {'type': 'default'} - Package: alsamixergui: {'type': 'default'} - Package: harmonyseq: {'type': 'default'} - Package: ladspa-tap-plugins: {'type': 'default'} - Package: guitarix: {'type': 'default'} - Package: arpage: {'type': 'default'} - Package: lv2-newtonator: {'type': 'default'} - Package: tuxguitar: {'type': 'default'} - Package: lv2-ll-plugins: {'type': 'default'} - Package: alsa-plugins-upmix: {'type': 'default'} - Package: ladspa-fil-plugins: {'type': 'default'} - Package: jack_capture: {'type': 'default'} - Package: mup: {'type': 'default'} - Package: lv2-kn0ck0ut: {'type': 'default'} - Package: ladspa-mcp-plugins: {'type': 'default'} - Package: ladish: {'type': 'default'} - Package: aj-snapshot: {'type': 'default'} - Package: rakarrack: {'type': 'default'} - Package: ladspa-swh-plugins: {'type': 'default'} - Package: frescobaldi: {'type': 'default'} - Package: lv2-fil-plugins: {'type': 'default'} - Package: jackctlmmc: {'type': 'default'} - Package: ladspa-amb-plugins: {'type': 'default'} - Package: idjc: {'type': 'default'} - Package: jmeters: {'type': 'default'} - Package: ladspa-vco-plugins: {'type': 'default'} - Package: ladspa-autotalent-plugins: {'type': 'default'} - Package: multimedia-menus: {'type': 'default'} - Package: sbc: {'type': 'default'} - Package: lv2-sorcer: {'type': 'default'} - Package: kernel-tools: {'type': 'default'} - Package: rtirq: {'type': 'default'} - Package: audacity: {'type': 'default'} - Package: ladspa: {'type': 'default'} - Package: lv2-c++-tools : {'type': 'default'} - Package: lash: {'type': 'default'} - Package: lilypond: {'type': 'default'} - Package: radium-compressor: {'type': 'default'} - Package: monobristol: {'type': 'default'} - Package: lv2-fomp-plugins: {'type': 'default'} - Package: realTimeConfigQuickScan: {'type': 'default'} - Package: alsa-plugins-jack: {'type': 'default'} - Package: a2jmidid: {'type': 'default'} - Package: fluid-soundfont-gm: {'type': 'default'} - Package: synthv1: {'type': 'default'} - Package: qjackctl: {'type': 'default'} - Package: non-mixer: {'type': 'default'} - Package: yoshimi: {'type': 'default'} - Package: lv2: {'type': 'default'} - Package: jack-audio-connection-kit: {'type': 'default'} - Package: hexter-dssi: {'type': 'default'} - Package: lv2-swh-plugins: {'type': 'default'} - Package: calf: {'type': 'default'} - Package: jamin: {'type': 'default'} - Package: zita-at1: {'type': 'default'} - Package: lv2-avw-plugins: {'type': 'default'} - Package: ladspa-blop-plugins: {'type': 'default'} - Package: lv2-drumkv1: {'type': 'default'} - Package: muse: {'type': 'default'} - Package: nekobee-dssi: {'type': 'default'} - Package: alsa-plugins-vdownmix: {'type': 'default'} - Package: lv2-triceratops: {'type': 'default'} - Package: tinycompress-utils: {'type': 'default'} - Package: Add64: {'type': 'default'} - Package: alsa-utils: {'type': 'default'} - Package: alsa-tools: {'type': 'default'} - Package: fluidsynth: {'type': 'default'} - Package: qmidiarp: {'type': 'default'} - Package: lv2-samplv1: {'type': 'default'} - Package: hydrogen: {'type': 'default'} - Package: japa: {'type': 'default'} - Package: qtractor: {'type': 'default'} - Package: whysynth-dssi: {'type': 'default'} - Package: non-daw: {'type': 'default'} - Package: lv2-abGate: {'type': 'default'} - Package: sooperlooper: {'type': 'default'} - Package: lv2-synthv1: {'type': 'default'} - Package: fluidsynth-dssi: {'type': 'default'} - Package: bristol: {'type': 'default'} - Package: lv2-artyfx-plugins: {'type': 'default'} - Package: jaaa: {'type': 'default'} - Package: lv2-x42-plugins: {'type': 'default'} - Package: lv2dynparam: {'type': 'default'} - Package: ladspa-cmt-plugins: {'type': 'default'} - Package: zynjacku: {'type': 'default'} - Package: alsa-plugins-samplerate: {'type': 'default'} - Package: alsa-ucm: {'type': 'default'} - Package: ladspa-rev-plugins: {'type': 'default'} - Package: dssi: {'type': 'default'} - Package: swami: {'type': 'default'} - Package: drumkv1: {'type': 'default'} - Package: lv2-fabla: {'type': 'default'} - Package: rosegarden4: {'type': 'default'} - Package: vmpk: {'type': 'default'} - Package: samplv1: {'type': 'default'} - Package: gladish: {'type': 'default'} -Group: authoring-and-publishing (Authoring and Publishing) - Package: docbook-utils: {'type': 'default'} - Package: xhtml1-dtds: {'type': 'default'} - Package: docbook-style-dsssl: {'type': 'default'} - Package: texlive-kerkis: {'type': 'default'} - Package: docbook5-style-xsl: {'type': 'default'} - Package: docbook-utils-pdf: {'type': 'default'} - Package: docbook-slides: {'type': 'default'} - Package: linuxdoc-tools: {'type': 'default'} - Package: texlive: {'type': 'default'} - Package: docbook-style-xsl: {'type': 'default'} - Package: texlive-cm-lgc: {'type': 'default'} - Package: xmlto: {'type': 'default'} - Package: docbook5-schemas: {'type': 'default'} - Package: tex-fonts-hebrew: {'type': 'default'} - Package: kbibtex: {'type': 'optional'} - Package: texlive-xdvi: {'type': 'optional'} - Package: xmlcopyeditor: {'type': 'optional'} - Package: abcm2ps: {'type': 'optional'} - Package: kile: {'type': 'optional'} - Package: tex-zfuzz: {'type': 'optional'} - Package: pandoc: {'type': 'optional'} - Package: txt2rss: {'type': 'optional'} - Package: ooo2txt: {'type': 'optional'} - Package: html401-dtds: {'type': 'optional'} - Package: python-docutils: {'type': 'optional'} - Package: dblatex: {'type': 'optional'} - Package: BibTool: {'type': 'optional'} - Package: latex-mk: {'type': 'optional'} - Package: scribus: {'type': 'optional'} - Package: texlive-latex: {'type': 'optional'} - Package: lout: {'type': 'optional'} - Package: latexmk: {'type': 'optional'} - Package: python-manuel: {'type': 'optional'} - Package: docbook2X: {'type': 'optional'} - Package: w3c-markup-validator: {'type': 'optional'} - Package: lilypond: {'type': 'optional'} -Group: basic-desktop (Basic Desktop) - Package: fedora-icon-theme: {'type': 'mandatory'} - Package: qtile: {'type': 'mandatory'} - Package: i3: {'type': 'mandatory'} - Package: openbox: {'type': 'mandatory'} - Package: adwaita-icon-theme: {'type': 'mandatory'} - Package: xmonad-basic: {'type': 'mandatory'} - Package: initial-setup-gui: {'type': 'mandatory'} - Package: metacity: {'type': 'mandatory'} - Package: adwaita-gtk2-theme: {'type': 'mandatory'} - Package: ratpoison: {'type': 'mandatory'} - Package: awesome: {'type': 'mandatory'} - Package: lightdm: {'type': 'mandatory'} - Package: dwm: {'type': 'mandatory'} -Group: web-server (Basic Web Server) - Package: httpd: {'type': 'mandatory'} - Package: php: {'type': 'default'} - Package: mod_ssl: {'type': 'default'} - Package: webalizer: {'type': 'default'} - Package: php-ldap: {'type': 'default'} - Package: squid: {'type': 'default'} - Package: mod_perl: {'type': 'default'} - Package: crypto-utils: {'type': 'default'} - Package: php-mysqlnd: {'type': 'default'} - Package: httpd-manual: {'type': 'default'} - Package: phpMyAdmin: {'type': 'optional'} - Package: mod_auth_kerb: {'type': 'optional'} - Package: phpldapadmin: {'type': 'optional'} - Package: tiquit: {'type': 'optional'} - Package: mediawiki: {'type': 'optional'} - Package: php-pgsql: {'type': 'optional'} - Package: mod_fcgid: {'type': 'optional'} - Package: mod_xsendfile: {'type': 'optional'} - Package: cherokee: {'type': 'optional'} - Package: lighttpd-fastcgi: {'type': 'optional'} - Package: wordpress: {'type': 'optional'} - Package: dap-server: {'type': 'optional'} - Package: php-odbc: {'type': 'optional'} - Package: php-pecl-apc: {'type': 'optional'} - Package: mod_security: {'type': 'optional'} - Package: lighttpd: {'type': 'optional'} - Package: apachetop: {'type': 'optional'} - Package: boa: {'type': 'optional'} - Package: perl-HTML-Mason: {'type': 'optional'} - Package: mod_geoip: {'type': 'optional'} - Package: thttpd: {'type': 'optional'} - Package: Pound: {'type': 'optional'} - Package: awstats: {'type': 'optional'} - Package: ocspd: {'type': 'optional'} - Package: perl-Kwiki: {'type': 'optional'} - Package: drupal7: {'type': 'optional'} - Package: moin: {'type': 'optional'} -Group: bengali-support (Bengali Support) - Package: lohit-bengali-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-bengali-fonts: {'type': 'default'} - Package: google-noto-sans-bengali-ui-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: bhutanese-support (Bhutanese Support) - Package: jomolhari-fonts: {'type': 'mandatory'} -Group: bodo-support (Bodo Support) - Package: lohit-devanagari-fonts: {'type': 'mandatory'} - Package: samyak-devanagari-fonts: {'type': 'default'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: books (Books and Guides) - Package: diveintopython: {'type': 'default'} - Package: ldd-pdf: {'type': 'default'} -Group: buildsys-build (Buildsystem building group) - Package: tar: {'type': 'mandatory'} - Package: xz: {'type': 'mandatory'} - Package: sed: {'type': 'mandatory'} - Package: findutils: {'type': 'mandatory'} - Package: bzip2: {'type': 'mandatory'} - Package: redhat-rpm-config: {'type': 'mandatory'} - Package: make: {'type': 'mandatory'} - Package: shadow-utils: {'type': 'mandatory'} - Package: coreutils: {'type': 'mandatory'} - Package: which: {'type': 'mandatory'} - Package: gcc-c++: {'type': 'mandatory'} - Package: unzip: {'type': 'mandatory'} - Package: fedora-release: {'type': 'mandatory'} - Package: cpio: {'type': 'mandatory'} - Package: gawk: {'type': 'mandatory'} - Package: gcc: {'type': 'mandatory'} - Package: util-linux: {'type': 'mandatory'} - Package: bash: {'type': 'mandatory'} - Package: info: {'type': 'mandatory'} - Package: grep: {'type': 'mandatory'} - Package: diffutils: {'type': 'mandatory'} - Package: patch: {'type': 'mandatory'} - Package: rpm-build: {'type': 'mandatory'} - Package: gzip: {'type': 'mandatory'} -Group: c-development (C Development Tools and Libraries) - Package: flex: {'type': 'mandatory'} - Package: gcc: {'type': 'mandatory'} - Package: glibc-devel: {'type': 'mandatory'} - Package: strace: {'type': 'mandatory'} - Package: make: {'type': 'mandatory'} - Package: pkgconfig: {'type': 'mandatory'} - Package: automake: {'type': 'mandatory'} - Package: gdb: {'type': 'mandatory'} - Package: bison: {'type': 'mandatory'} - Package: libtool: {'type': 'mandatory'} - Package: autoconf: {'type': 'mandatory'} - Package: gcc-c++: {'type': 'mandatory'} - Package: binutils: {'type': 'mandatory'} - Package: ltrace: {'type': 'default'} - Package: byacc: {'type': 'default'} - Package: indent: {'type': 'default'} - Package: elfutils: {'type': 'default'} - Package: valgrind: {'type': 'default'} - Package: ccache: {'type': 'default'} - Package: ctags: {'type': 'default'} - Package: oprofile: {'type': 'default'} - Package: cscope: {'type': 'default'} - Package: cproto: {'type': 'optional'} - Package: cbmc: {'type': 'optional'} - Package: cmake: {'type': 'optional'} - Package: undertaker: {'type': 'optional'} - Package: elfinfo: {'type': 'optional'} - Package: insight: {'type': 'optional'} - Package: splint: {'type': 'optional'} - Package: ElectricFence: {'type': 'optional'} - Package: yasm: {'type': 'optional'} - Package: scons: {'type': 'optional'} - Package: coan: {'type': 'optional'} - Package: scorep: {'type': 'optional'} - Package: pscan: {'type': 'optional'} - Package: remake: {'type': 'optional'} - Package: zzuf: {'type': 'optional'} - Package: astyle: {'type': 'optional'} - Package: check: {'type': 'optional'} - Package: trinity: {'type': 'optional'} - Package: nasm: {'type': 'optional'} -Group: cinnamon-desktop (Cinnamon) - Package: setroubleshoot: {'type': 'mandatory'} - Package: gnome-disk-utility: {'type': 'mandatory'} - Package: firefox: {'type': 'mandatory'} - Package: gvfs-smb: {'type': 'mandatory'} - Package: NetworkManager-libreswan-gnome: {'type': 'mandatory'} - Package: gedit: {'type': 'mandatory'} - Package: blueman: {'type': 'mandatory'} - Package: evince: {'type': 'mandatory'} - Package: gnome-system-monitor: {'type': 'mandatory'} - Package: alsa-plugins-pulseaudio: {'type': 'mandatory'} - Package: nemo-fileroller: {'type': 'mandatory'} - Package: firewall-config: {'type': 'mandatory'} - Package: gnome-backgrounds: {'type': 'mandatory'} - Package: gvfs-mtp: {'type': 'mandatory'} - Package: NetworkManager-vpnc-gnome: {'type': 'mandatory'} - Package: NetworkManager-adsl: {'type': 'mandatory'} - Package: fedora-icon-theme: {'type': 'mandatory'} - Package: NetworkManager-openconnect: {'type': 'mandatory'} - Package: NetworkManager-openvpn-gnome: {'type': 'mandatory'} - Package: xdg-user-dirs-gtk: {'type': 'mandatory'} - Package: gnome-screenshot: {'type': 'mandatory'} - Package: imsettings-cinnamon: {'type': 'mandatory'} - Package: abrt-desktop: {'type': 'mandatory'} - Package: abrt-java-connector: {'type': 'mandatory'} - Package: NetworkManager-l2tp-gnome: {'type': 'mandatory'} - Package: NetworkManager-iodine-gnome: {'type': 'mandatory'} - Package: NetworkManager-bluetooth: {'type': 'mandatory'} - Package: gnome-terminal: {'type': 'mandatory'} - Package: cinnamon-screensaver: {'type': 'mandatory'} - Package: lightdm-gtk-greeter-settings: {'type': 'mandatory'} - Package: gnome-calculator: {'type': 'mandatory'} - Package: sane-backends-drivers-scanners: {'type': 'mandatory'} - Package: gvfs-gphoto2: {'type': 'mandatory'} - Package: icedtea-web: {'type': 'mandatory'} - Package: initial-setup-gui: {'type': 'mandatory'} - Package: NetworkManager-wifi: {'type': 'mandatory'} - Package: metacity: {'type': 'mandatory'} - Package: shotwell: {'type': 'mandatory'} - Package: NetworkManager-wwan: {'type': 'mandatory'} - Package: cinnamon-control-center: {'type': 'mandatory'} - Package: eog: {'type': 'mandatory'} - Package: fros-recordmydesktop: {'type': 'mandatory'} - Package: system-config-printer: {'type': 'mandatory'} - Package: redshift: {'type': 'mandatory'} - Package: simple-scan: {'type': 'mandatory'} - Package: gvfs-archive: {'type': 'mandatory'} - Package: thunderbird: {'type': 'mandatory'} - Package: NetworkManager-pptp-gnome: {'type': 'mandatory'} - Package: nemo-preview: {'type': 'mandatory'} - Package: brasero: {'type': 'mandatory'} - Package: cinnamon: {'type': 'mandatory'} - Package: f24-backgrounds-base: {'type': 'mandatory'} - Package: nemo-image-converter: {'type': 'mandatory'} - Package: nm-connection-editor: {'type': 'mandatory'} - Package: lightdm-gtk: {'type': 'mandatory'} -Group: cloud-infrastructure (Cloud Infrastructure) - Package: iwhd: {'type': 'optional'} - Package: sheepdog: {'type': 'optional'} - Package: hail: {'type': 'optional'} - Package: ceph: {'type': 'optional'} - Package: glusterfs: {'type': 'optional'} - Package: tabled: {'type': 'optional'} - Package: euca2ools: {'type': 'optional'} - Package: imagefactory: {'type': 'optional'} - Package: StarCluster: {'type': 'optional'} -Group: cloud-management (Cloud Management Tools) - Package: cloud-utils: {'type': 'default'} - Package: imagefactory-plugins-TinMan: {'type': 'default'} - Package: imagefactory-plugins-EC2-JEOS-images: {'type': 'default'} - Package: imagefactory-plugins-Rackspace: {'type': 'default'} - Package: imagefactory-plugins-OpenStack: {'type': 'default'} - Package: imagefactory-plugins: {'type': 'default'} - Package: rubygem-amazon-ec2: {'type': 'default'} - Package: python-libcloud: {'type': 'default'} - Package: python-boto: {'type': 'default'} - Package: imagefactory: {'type': 'default'} - Package: imagefactory-plugins-EC2: {'type': 'default'} - Package: imagefactory-plugins-Rackspace-JEOS-images: {'type': 'default'} - Package: python-openstackclient: {'type': 'optional'} - Package: rubygem-amazon-ec2-doc: {'type': 'optional'} -Group: cloud-server (Cloud Server Tools) - Package: rsync: {'type': 'mandatory'} - Package: dracut-config-generic: {'type': 'mandatory'} - Package: tar: {'type': 'mandatory'} - Package: grubby: {'type': 'mandatory'} - Package: syslinux-extlinux: {'type': 'mandatory'} - Package: heat-cfntools: {'type': 'mandatory'} - Package: cloud-init: {'type': 'mandatory'} - Package: cloud-utils-growpart: {'type': 'mandatory'} - Package: fedora-release-cloud: {'type': 'mandatory'} -Group: networkmanager-submodules (Common NetworkManager Submodules) - Package: NetworkManager-wwan: {'type': 'default'} - Package: NetworkManager-wifi: {'type': 'default'} - Package: NetworkManager-bluetooth: {'type': 'default'} -Group: container-management (Container Management) - Package: docker: {'type': 'mandatory'} - Package: docker-cockpit: {'type': 'mandatory'} - Package: docker-registry: {'type': 'optional'} - Package: fedora-dockerfiles: {'type': 'optional'} -Group: core (Core) - Package: openssh-clients: {'type': 'mandatory'} - Package: less: {'type': 'mandatory'} - Package: iputils: {'type': 'mandatory'} - Package: sudo: {'type': 'mandatory'} - Package: parted: {'type': 'mandatory'} - Package: kbd: {'type': 'mandatory'} - Package: iproute: {'type': 'mandatory'} - Package: dhcp-client: {'type': 'mandatory'} - Package: selinux-policy-targeted: {'type': 'mandatory'} - Package: curl: {'type': 'mandatory'} - Package: rpm: {'type': 'mandatory'} - Package: vim-minimal: {'type': 'mandatory'} - Package: systemd: {'type': 'mandatory'} - Package: dnf: {'type': 'mandatory'} - Package: glibc: {'type': 'mandatory'} - Package: hostname: {'type': 'mandatory'} - Package: shadow-utils: {'type': 'mandatory'} - Package: coreutils: {'type': 'mandatory'} - Package: bash: {'type': 'mandatory'} - Package: man-db: {'type': 'mandatory'} - Package: policycoreutils: {'type': 'mandatory'} - Package: procps-ng: {'type': 'mandatory'} - Package: ncurses: {'type': 'mandatory'} - Package: grubby: {'type': 'mandatory'} - Package: util-linux: {'type': 'mandatory'} - Package: cronie: {'type': 'mandatory'} - Package: basesystem: {'type': 'mandatory'} - Package: audit: {'type': 'mandatory'} - Package: rootfiles: {'type': 'mandatory'} - Package: dnf-yum: {'type': 'mandatory'} - Package: setup: {'type': 'mandatory'} - Package: e2fsprogs: {'type': 'mandatory'} - Package: openssh-server: {'type': 'mandatory'} - Package: initscripts: {'type': 'mandatory'} - Package: plymouth: {'type': 'mandatory'} - Package: filesystem: {'type': 'mandatory'} - Package: passwd: {'type': 'mandatory'} - Package: dnf-plugins-core: {'type': 'default'} - Package: dracut-config-rescue: {'type': 'default'} - Package: firewalld: {'type': 'default'} - Package: authconfig: {'type': 'default'} - Package: NetworkManager: {'type': 'default'} - Package: ppc64-utils: {'type': 'default'} - Package: initial-setup: {'type': 'optional'} - Package: uboot-images-armv7: {'type': 'optional'} - Package: uboot-tools: {'type': 'optional'} - Package: dracut-config-generic: {'type': 'optional'} -Group: critical-path-apps (Critical Path (Applications)) - Package: thunderbird: {'type': 'default'} - Package: evolution: {'type': 'default'} - Package: firefox: {'type': 'default'} -Group: critical-path-base (Critical Path (Base)) - Package: pungi: {'type': 'mandatory'} - Package: kernel: {'type': 'mandatory'} - Package: dnf: {'type': 'mandatory'} - Package: redhat-rpm-config: {'type': 'mandatory'} - Package: initial-setup: {'type': 'mandatory'} - Package: createrepo: {'type': 'mandatory'} - Package: mash: {'type': 'mandatory'} - Package: dash: {'type': 'mandatory'} - Package: rpm-build: {'type': 'mandatory'} - Package: yum: {'type': 'mandatory'} - Package: anaconda: {'type': 'mandatory'} - Package: NetworkManager: {'type': 'mandatory'} - Package: dracut: {'type': 'mandatory'} - Package: gcc-c++: {'type': 'mandatory'} - Package: livecd-tools: {'type': 'mandatory'} -Group: critical-path-gnome (Critical Path (GNOME)) - Package: xorg-x11-drv-nouveau: {'type': 'mandatory'} - Package: xorg-x11-server-Xorg: {'type': 'mandatory'} - Package: gnome-themes-standard: {'type': 'mandatory'} - Package: xorg-x11-drv-libinput: {'type': 'mandatory'} - Package: control-center: {'type': 'mandatory'} - Package: gnome-session-xsession: {'type': 'mandatory'} - Package: gnome-terminal: {'type': 'mandatory'} - Package: xorg-x11-drv-evdev: {'type': 'mandatory'} - Package: xorg-x11-drv-intel: {'type': 'mandatory'} - Package: xorg-x11-drv-qxl: {'type': 'mandatory'} - Package: xorg-x11-drv-vesa: {'type': 'mandatory'} - Package: xorg-x11-xinit: {'type': 'mandatory'} - Package: gnome-shell: {'type': 'mandatory'} - Package: xorg-x11-drv-ati: {'type': 'mandatory'} - Package: xorg-x11-drv-fbdev: {'type': 'mandatory'} - Package: gvfs-fuse: {'type': 'mandatory'} - Package: dconf: {'type': 'mandatory'} - Package: xorg-x11-xauth: {'type': 'mandatory'} - Package: gdm: {'type': 'mandatory'} - Package: gnome-bluetooth: {'type': 'default'} - Package: nautilus: {'type': 'default'} - Package: pulseaudio-module-x11: {'type': 'default'} - Package: libcanberra-gtk3: {'type': 'default'} - Package: avahi: {'type': 'default'} - Package: gnome-software: {'type': 'default'} -Group: critical-path-hawaii (Critical Path (Hawaii)) - Package: sddm: {'type': 'mandatory'} - Package: hawaii-shell: {'type': 'mandatory'} -Group: critical-path-kde (Critical Path (KDE)) - Package: sddm: {'type': 'mandatory'} - Package: kdelibs: {'type': 'mandatory'} -Group: critical-path-lxde (Critical Path (LXDE)) - Package: lxde-common: {'type': 'mandatory'} - Package: notification-daemon: {'type': 'default'} -Group: critical-path-lxqt (Critical Path (LXQt)) - Package: lxqt-common: {'type': 'mandatory'} - Package: notification-daemon: {'type': 'default'} -Group: critical-path-xfce (Critical Path (Xfce)) - Package: xfce4-session: {'type': 'mandatory'} - Package: xfce4-settings: {'type': 'mandatory'} -Group: d-development (D Development Tools and Libraries) - Package: ldc: {'type': 'mandatory'} - Package: ldc-druntime: {'type': 'mandatory'} - Package: make: {'type': 'mandatory'} - Package: pkgconfig: {'type': 'mandatory'} - Package: ldc-phobos-devel: {'type': 'mandatory'} - Package: ldc-druntime-devel: {'type': 'mandatory'} - Package: ctags: {'type': 'default'} - Package: indent: {'type': 'default'} - Package: geany: {'type': 'optional'} - Package: cmake: {'type': 'optional'} - Package: derelict-devel: {'type': 'optional'} - Package: insight: {'type': 'optional'} - Package: nemiver: {'type': 'optional'} - Package: gl3n-devel: {'type': 'optional'} - Package: astyle: {'type': 'optional'} - Package: uncrustify: {'type': 'optional'} -Group: dns-server (DNS Name Server) - Package: bind-chroot: {'type': 'default'} - Package: pdns: {'type': 'optional'} - Package: unbound: {'type': 'optional'} - Package: bind: {'type': 'optional'} - Package: nsd: {'type': 'optional'} - Package: rbldnsd: {'type': 'optional'} - Package: ldns: {'type': 'optional'} - Package: pdns-recursor: {'type': 'optional'} - Package: dnsperf: {'type': 'optional'} -Group: design-suite (Design Suite) - Package: krita: {'type': 'default'} - Package: font-manager: {'type': 'default'} - Package: aajohan-comfortaa-fonts: {'type': 'default'} - Package: pdfmod: {'type': 'default'} - Package: pitivi: {'type': 'default'} - Package: gpick: {'type': 'default'} - Package: inkscape: {'type': 'default'} - Package: gimp: {'type': 'default'} - Package: phatch: {'type': 'default'} - Package: synfigstudio: {'type': 'default'} - Package: fontforge: {'type': 'default'} - Package: astigmatic-grand-hotel-fonts: {'type': 'default'} - Package: pdfshuffler: {'type': 'default'} - Package: colord-extra-profiles: {'type': 'default'} - Package: adobe-source-sans-pro-fonts: {'type': 'default'} - Package: optipng: {'type': 'default'} - Package: blender: {'type': 'default'} - Package: julietaula-montserrat-fonts: {'type': 'default'} - Package: google-roboto-slab-fonts: {'type': 'default'} - Package: shotwell: {'type': 'default'} - Package: screenruler: {'type': 'default'} - Package: mypaint: {'type': 'default'} - Package: darktable: {'type': 'default'} - Package: sparkleshare: {'type': 'default'} - Package: hugin: {'type': 'default'} - Package: GraphicsMagick: {'type': 'default'} - Package: lato-fonts: {'type': 'default'} - Package: overpass-fonts: {'type': 'default'} - Package: entangle: {'type': 'default'} - Package: xournal: {'type': 'default'} - Package: open-sans-fonts: {'type': 'default'} - Package: campivisivi-titillium-fonts: {'type': 'default'} - Package: dia: {'type': 'default'} - Package: shutter: {'type': 'default'} - Package: audacity: {'type': 'default'} - Package: google-roboto-fonts: {'type': 'default'} - Package: nautilus-image-converter: {'type': 'default'} - Package: google-roboto-condensed-fonts: {'type': 'default'} - Package: typetype-molot-fonts: {'type': 'default'} - Package: scribus: {'type': 'default'} - Package: pngcrush: {'type': 'optional'} - Package: pencil: {'type': 'optional'} - Package: openclipart: {'type': 'optional'} - Package: ImageMagick: {'type': 'optional'} - Package: geeqie: {'type': 'optional'} - Package: YafaRay: {'type': 'optional'} - Package: rapid-photo-downloader: {'type': 'optional'} - Package: calligra-karbon: {'type': 'optional'} - Package: LuxRender: {'type': 'optional'} - Package: gimp-fourier-plugin: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-lensfun: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-normalmap: {'requires': 'gimp', 'type': 'conditional'} - Package: gmic-gimp: {'requires': 'gimp', 'type': 'conditional'} - Package: YafaRay-blender: {'requires': 'blender', 'type': 'conditional'} - Package: gimp-high-pass-filter: {'requires': 'gimp', 'type': 'conditional'} - Package: inkscape-psd: {'requires': 'inkscape', 'type': 'conditional'} - Package: inkscape-sozi: {'requires': 'inkscape', 'type': 'conditional'} - Package: gimp-separate+: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-resynthesizer: {'requires': 'gimp', 'type': 'conditional'} - Package: gimpfx-foundry: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-data-extras: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-layer-via-copy-cut: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-help: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-elsamuko: {'requires': 'gimp', 'type': 'conditional'} - Package: sane-backends-drivers-scanners: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-dbp: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-lqr-plugin: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-paint-studio: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-help-browser: {'requires': 'gimp', 'type': 'conditional'} - Package: xsane-gimp: {'requires': 'gimp', 'type': 'conditional'} - Package: inkscape-table: {'requires': 'inkscape', 'type': 'conditional'} - Package: gimp-wavelet-denoise-plugin: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-save-for-web: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-dds-plugin: {'requires': 'gimp', 'type': 'conditional'} - Package: gimp-gap: {'requires': 'gimp', 'type': 'conditional'} - Package: LuxRender-blender: {'requires': 'blender', 'type': 'conditional'} -Group: development-libs (Development Libraries) - Package: zlib-devel: {'type': 'mandatory'} - Package: glibc-devel: {'type': 'mandatory'} - Package: readline-devel: {'type': 'mandatory'} - Package: ncurses-devel: {'type': 'mandatory'} - Package: bzip2-devel: {'type': 'mandatory'} - Package: pam-devel: {'type': 'mandatory'} - Package: lockdev-devel: {'type': 'default'} - Package: cyrus-sasl-devel: {'type': 'default'} - Package: pciutils-devel: {'type': 'default'} - Package: openldap-devel: {'type': 'default'} - Package: slang-devel: {'type': 'default'} - Package: python-ldap: {'type': 'default'} - Package: gmp-devel: {'type': 'default'} - Package: libcurl-devel: {'type': 'default'} - Package: python-devel: {'type': 'default'} - Package: openssl-devel: {'type': 'default'} - Package: libselinux-devel: {'type': 'default'} - Package: rpm-devel: {'type': 'default'} - Package: boost-devel: {'type': 'default'} - Package: perl-devel: {'type': 'default'} - Package: dbus-devel: {'type': 'default'} - Package: libdb-devel: {'type': 'default'} - Package: libcap-devel: {'type': 'default'} - Package: libacl-devel: {'type': 'default'} - Package: libattr-devel: {'type': 'default'} - Package: binutils-devel: {'type': 'default'} - Package: krb5-devel: {'type': 'default'} - Package: libuser-devel: {'type': 'default'} - Package: hesiod-devel: {'type': 'default'} - Package: libogg-devel: {'type': 'default'} - Package: pcsc-lite-devel: {'type': 'default'} - Package: libvorbis-devel: {'type': 'default'} - Package: libxml2-devel: {'type': 'default'} - Package: poco-doc: {'type': 'optional'} - Package: mpir-devel: {'type': 'optional'} - Package: check-devel: {'type': 'optional'} - Package: gupnp-devel: {'type': 'optional'} - Package: iml-devel: {'type': 'optional'} - Package: gpm-devel: {'type': 'optional'} - Package: linbox-devel: {'type': 'optional'} - Package: geoclue-devel: {'type': 'optional'} - Package: libdwarf-devel: {'type': 'optional'} - Package: gmp-ecm-devel: {'type': 'optional'} - Package: ffcall: {'type': 'optional'} - Package: python-ZODB3-devel: {'type': 'optional'} - Package: m4ri-devel: {'type': 'optional'} - Package: coolkey-devel: {'type': 'optional'} - Package: lexertl-devel: {'type': 'optional'} - Package: libusbx-devel: {'type': 'optional'} - Package: DSDP-devel: {'type': 'optional'} - Package: gdbm-devel: {'type': 'optional'} - Package: poco-devel: {'type': 'optional'} - Package: gf2x-devel: {'type': 'optional'} - Package: expat-devel: {'type': 'optional'} - Package: gypsy-devel: {'type': 'optional'} - Package: gssdp-devel: {'type': 'optional'} - Package: m4rie-devel: {'type': 'optional'} - Package: newt-devel: {'type': 'optional'} - Package: libedit-devel: {'type': 'optional'} - Package: givaro-devel: {'type': 'optional'} -Group: development-tools (Development Tools) - Package: gettext: {'type': 'mandatory'} - Package: patchutils: {'type': 'default'} - Package: git: {'type': 'default'} - Package: systemtap: {'type': 'default'} - Package: diffstat: {'type': 'default'} - Package: cvs: {'type': 'default'} - Package: patch: {'type': 'default'} - Package: subversion: {'type': 'default'} - Package: doxygen: {'type': 'default'} - Package: rcs: {'type': 'default'} - Package: gitg: {'type': 'optional'} - Package: dejagnu: {'type': 'optional'} - Package: quilt: {'type': 'optional'} - Package: cvs2cl: {'type': 'optional'} - Package: svn2cl: {'type': 'optional'} - Package: utrac: {'type': 'optional'} - Package: cvsps: {'type': 'optional'} - Package: nemiver: {'type': 'optional'} - Package: git2cl: {'type': 'optional'} - Package: translate-toolkit: {'type': 'optional'} - Package: manedit: {'type': 'optional'} - Package: gtranslator: {'type': 'optional'} - Package: scanmem: {'type': 'optional'} - Package: qgit: {'type': 'optional'} - Package: robodoc: {'type': 'optional'} - Package: rapidsvn: {'type': 'optional'} - Package: subunit: {'type': 'optional'} - Package: meld: {'type': 'optional'} - Package: monotone: {'type': 'optional'} - Package: archmage: {'type': 'optional'} - Package: tailor: {'type': 'optional'} - Package: buildbot: {'type': 'optional'} - Package: tkcvs: {'type': 'optional'} - Package: tortoisehg: {'type': 'optional'} - Package: giggle: {'type': 'optional'} - Package: darcs: {'type': 'optional'} - Package: tig: {'type': 'optional'} - Package: bzr: {'type': 'optional'} - Package: git-cola: {'type': 'optional'} - Package: gambas3-ide: {'type': 'optional'} - Package: mercurial: {'type': 'optional'} - Package: git-annex: {'type': 'optional'} - Package: cvsgraph: {'type': 'optional'} - Package: mr: {'type': 'optional'} - Package: highlight: {'type': 'optional'} - Package: lcov: {'type': 'optional'} - Package: colordiff: {'type': 'optional'} - Package: expect: {'type': 'optional'} -Group: dial-up (Dial-up Networking Support) - Package: ppp: {'type': 'mandatory'} - Package: NetworkManager-adsl: {'type': 'default'} - Package: ModemManager: {'type': 'default'} - Package: linux-atm: {'type': 'default'} - Package: minicom: {'type': 'default'} - Package: isdn4k-utils: {'type': 'default'} - Package: lrzsz: {'type': 'default'} - Package: wvdial: {'type': 'default'} - Package: rp-pppoe: {'type': 'default'} - Package: pptp: {'type': 'optional'} - Package: statserial: {'type': 'optional'} - Package: efax: {'type': 'optional'} -Group: directory-server (Directory Server) - Package: ypserv: {'type': 'optional'} - Package: 389-console: {'type': 'optional'} - Package: idm-console-framework: {'type': 'optional'} - Package: migrationtools: {'type': 'optional'} - Package: openldap-servers: {'type': 'optional'} - Package: 389-ds-base: {'type': 'optional'} - Package: 389-dsgw: {'type': 'optional'} - Package: samba: {'type': 'optional'} - Package: 389-ds-console: {'type': 'optional'} - Package: krb5-server: {'type': 'optional'} - Package: 389-admin-console: {'type': 'optional'} -Group: dogri-support (Dogri Support) - Package: lohit-devanagari-fonts: {'type': 'mandatory'} - Package: samyak-devanagari-fonts: {'type': 'default'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: dogtag (Dogtag Certificate System) - Package: pki-ca: {'type': 'mandatory'} - Package: pki-kra: {'type': 'default'} - Package: pki-ocsp: {'type': 'default'} - Package: pki-console: {'type': 'default'} - Package: pki-javadoc: {'type': 'optional'} - Package: pki-tks: {'type': 'optional'} - Package: pki-tps: {'type': 'optional'} -Group: domain-client (Domain Membership) - Package: samba-winbind: {'type': 'mandatory'} - Package: oddjob-mkhomedir: {'type': 'mandatory'} - Package: adcli: {'type': 'mandatory'} - Package: sssd: {'type': 'mandatory'} - Package: samba-common-tools: {'type': 'mandatory'} - Package: freeipa-client: {'type': 'mandatory'} -Group: editors (Editors) - Package: xemacs-packages-extra: {'type': 'optional'} - Package: nedit: {'type': 'optional'} - Package: zile: {'type': 'optional'} - Package: xmlcopyeditor: {'type': 'optional'} - Package: emacs-bbdb: {'type': 'optional'} - Package: geany: {'type': 'optional'} - Package: emacs-ess: {'type': 'optional'} - Package: emacs: {'type': 'optional'} - Package: jed: {'type': 'optional'} - Package: psgml: {'type': 'optional'} - Package: code-editor: {'type': 'optional'} - Package: emacs-vm: {'type': 'optional'} - Package: gobby: {'type': 'optional'} - Package: leafpad: {'type': 'optional'} - Package: joe: {'type': 'optional'} - Package: cssed: {'type': 'optional'} - Package: vim-X11: {'type': 'optional'} - Package: vim-enhanced: {'type': 'optional'} - Package: xemacs-xft: {'type': 'optional'} - Package: xemacs: {'type': 'optional'} - Package: xemacs-packages-base: {'type': 'optional'} - Package: poedit: {'type': 'optional'} - Package: emacs-auctex: {'type': 'optional'} -Group: education (Educational Software) - Package: genchemlab: {'type': 'optional'} - Package: skychart: {'type': 'optional'} - Package: ktouch: {'type': 'optional'} - Package: kmplot: {'type': 'optional'} - Package: klettres: {'type': 'optional'} - Package: glglobe: {'type': 'optional'} - Package: gcompris: {'type': 'optional'} - Package: rocs: {'type': 'optional'} - Package: drgeo: {'type': 'optional'} - Package: parley: {'type': 'optional'} - Package: kiten: {'type': 'optional'} - Package: kalgebra: {'type': 'optional'} - Package: drgeo-doc: {'type': 'optional'} - Package: cantor: {'type': 'optional'} - Package: kstars: {'type': 'optional'} - Package: kbruch: {'type': 'optional'} - Package: nightview: {'type': 'optional'} - Package: childsplay: {'type': 'optional'} - Package: anki: {'type': 'optional'} - Package: gtypist: {'type': 'optional'} - Package: moodle: {'type': 'optional'} - Package: corrida: {'type': 'optional'} - Package: mnemosyne: {'type': 'optional'} - Package: step: {'type': 'optional'} - Package: kgeography: {'type': 'optional'} - Package: blinken: {'type': 'optional'} - Package: kig: {'type': 'optional'} - Package: pairs: {'type': 'optional'} - Package: saoimage: {'type': 'optional'} - Package: kanagram: {'type': 'optional'} - Package: kalzium: {'type': 'optional'} - Package: marble: {'type': 'optional'} - Package: kwordquiz: {'type': 'optional'} - Package: fantasdic: {'type': 'optional'} - Package: stellarium: {'type': 'optional'} - Package: kturtle: {'type': 'optional'} - Package: vmpk: {'type': 'optional'} - Package: tuxtype2: {'type': 'optional'} - Package: khangman: {'type': 'optional'} -Group: electronic-lab (Electronic Lab) - Package: archimedes: {'type': 'default'} - Package: xorg-x11-fonts-ISO8859-9-100dpi: {'type': 'default'} - Package: eclipse-cdt: {'type': 'default'} - Package: ngspice: {'type': 'default'} - Package: dia-electric2: {'type': 'default'} - Package: avrdude: {'type': 'default'} - Package: dia-CMOS: {'type': 'default'} - Package: emacs-vregs-mode: {'type': 'default'} - Package: tkgate: {'type': 'default'} - Package: arduino: {'type': 'default'} - Package: gspiceui: {'type': 'default'} - Package: dia-Digital: {'type': 'default'} - Package: picprog: {'type': 'default'} - Package: gsim85: {'type': 'default'} - Package: pcb: {'type': 'default'} - Package: covered: {'type': 'default'} - Package: dia-electronic: {'type': 'default'} - Package: drawtiming: {'type': 'default'} - Package: perl-Perlilog: {'type': 'default'} - Package: avr-gcc-c++: {'type': 'default'} - Package: mcu8051ide: {'type': 'default'} - Package: vhd2vl: {'type': 'default'} - Package: LabPlot: {'type': 'default'} - Package: avarice: {'type': 'default'} - Package: emacs-verilog-mode: {'type': 'default'} - Package: sigrok-cli: {'type': 'default'} - Package: eclipse-epic: {'type': 'default'} - Package: tetex-IEEEtran: {'type': 'default'} - Package: rtl-sdr: {'type': 'default'} - Package: magic: {'type': 'default'} - Package: xcircuit: {'type': 'default'} - Package: sk2py: {'type': 'default'} - Package: netgen: {'type': 'default'} - Package: gnucap: {'type': 'default'} - Package: eclipse-veditor: {'type': 'default'} - Package: teal: {'type': 'default'} - Package: pikloops: {'type': 'default'} - Package: dgc: {'type': 'default'} - Package: avr-gdb: {'type': 'default'} - Package: irsim: {'type': 'default'} - Package: perl-SystemC-Vregs: {'type': 'default'} - Package: hct: {'type': 'default'} - Package: sigrok-firmware-fx2lafw: {'type': 'default'} - Package: picocom: {'type': 'default'} - Package: avr-binutils: {'type': 'default'} - Package: acpica-tools: {'type': 'default'} - Package: eclipse-eclox: {'type': 'default'} - Package: perl-Verilog-Perl: {'type': 'default'} - Package: gerbv: {'type': 'default'} - Package: perl-Verilog-Readmem: {'type': 'default'} - Package: vrq: {'type': 'default'} - Package: qucs: {'type': 'default'} - Package: dfu-programmer: {'type': 'default'} - Package: xorg-x11-fonts-Type1: {'type': 'default'} - Package: tkcvs: {'type': 'default'} - Package: pulseview: {'type': 'default'} - Package: pharosc-alliance: {'type': 'default'} - Package: gplcver: {'type': 'default'} - Package: eclipse-subclipse: {'type': 'default'} - Package: perl-Verilog-CodeGen: {'type': 'default'} - Package: ghdl: {'type': 'default'} - Package: tclspice: {'type': 'default'} - Package: perl-ModelSim-List: {'type': 'default'} - Package: alliance: {'type': 'default'} - Package: perl-Hardware-Vhdl-Lexer: {'type': 'default'} - Package: eclipse-dltk-tcl: {'type': 'default'} - Package: CUnit: {'type': 'default'} - Package: uisp: {'type': 'default'} - Package: dinotrace: {'type': 'default'} - Package: perl-Hardware-Vhdl-Tidy: {'type': 'default'} - Package: pharosc-magic: {'type': 'default'} - Package: ghc-chalmers-lava2000-devel: {'type': 'default'} - Package: pharosc-synopsys: {'type': 'default'} - Package: gresistor: {'type': 'default'} - Package: pharosc: {'type': 'default'} - Package: linsmith: {'type': 'default'} - Package: espresso-ab: {'type': 'default'} - Package: gr-osmosdr: {'type': 'default'} - Package: perl-SystemPerl: {'type': 'default'} - Package: gnuradio: {'type': 'default'} - Package: icaro: {'type': 'default'} - Package: pharosc-xcircuit: {'type': 'default'} - Package: hiredis: {'type': 'default'} - Package: toped: {'type': 'default'} - Package: avr-gcc: {'type': 'default'} - Package: gnusim8085: {'type': 'default'} - Package: python-myhdl: {'type': 'default'} - Package: geda-gaf: {'type': 'default'} - Package: avra: {'type': 'default'} - Package: pikdev: {'type': 'default'} - Package: ktechlab: {'type': 'default'} - Package: gtkwave: {'type': 'default'} - Package: xorg-x11-fonts-ISO8859-1-100dpi: {'type': 'default'} - Package: flterm: {'type': 'default'} - Package: verilator: {'type': 'default'} - Package: sdcc: {'type': 'default'} - Package: eclipse-texlipse: {'type': 'default'} - Package: kicad: {'type': 'default'} - Package: cgnslib: {'type': 'default'} - Package: gpsim: {'type': 'default'} - Package: eqntott: {'type': 'default'} - Package: piklab: {'type': 'default'} - Package: xorg-x11-fonts-100dpi: {'type': 'default'} - Package: electric: {'type': 'default'} - Package: fped: {'type': 'default'} - Package: iverilog: {'type': 'default'} - Package: fritzing: {'type': 'default'} - Package: perl-Hardware-Verilog-Parser: {'type': 'default'} - Package: perl-Hardware-Vhdl-Parser: {'type': 'default'} - Package: nesc: {'type': 'default'} - Package: gds2pov: {'type': 'default'} - Package: openocd: {'type': 'default'} - Package: mot-adms: {'type': 'default'} - Package: magic-doc: {'type': 'default'} - Package: smartsim: {'type': 'default'} - Package: freeDiameter: {'type': 'default'} - Package: emacs-dinotrace: {'type': 'default'} - Package: qtoctave: {'type': 'default'} - Package: gtkterm: {'type': 'default'} - Package: srecord: {'type': 'default'} - Package: gputils: {'type': 'default'} - Package: freehdl: {'type': 'optional'} - Package: kdesvn: {'type': 'optional'} - Package: rfdump: {'type': 'optional'} - Package: minicom: {'type': 'optional'} -Group: engineering-and-scientific (Engineering and Scientific) - Package: wxMaxima: {'type': 'mandatory'} - Package: gnuplot: {'type': 'mandatory'} - Package: python2-scipy: {'type': 'mandatory'} - Package: speedcrunch: {'type': 'mandatory'} - Package: xfig: {'type': 'mandatory'} - Package: python2-matplotlib: {'type': 'mandatory'} - Package: units: {'type': 'mandatory'} - Package: R: {'type': 'mandatory'} - Package: octave: {'type': 'mandatory'} - Package: texmaker: {'type': 'mandatory'} - Package: transfig: {'type': 'mandatory'} - Package: gsl: {'type': 'mandatory'} - Package: gsl-devel: {'type': 'mandatory'} - Package: maxima: {'type': 'mandatory'} - Package: symmetrica: {'type': 'optional'} - Package: netcdf: {'type': 'optional'} - Package: wise2: {'type': 'optional'} - Package: cvc3-doc: {'type': 'optional'} - Package: TOPCOM: {'type': 'optional'} - Package: pypop: {'type': 'optional'} - Package: kst: {'type': 'optional'} - Package: polymake: {'type': 'optional'} - Package: lapack: {'type': 'optional'} - Package: dx-samples: {'type': 'optional'} - Package: opencv: {'type': 'optional'} - Package: gts: {'type': 'optional'} - Package: bliss: {'type': 'optional'} - Package: atlas: {'type': 'optional'} - Package: sympy: {'type': 'optional'} - Package: polybori-ipbori: {'type': 'optional'} - Package: normaliz: {'type': 'optional'} - Package: polybori: {'type': 'optional'} - Package: flint: {'type': 'optional'} - Package: dx: {'type': 'optional'} - Package: chemtool: {'type': 'optional'} - Package: jnormaliz: {'type': 'optional'} - Package: alt-ergo-gui: {'type': 'optional'} - Package: tcd-utils: {'type': 'optional'} - Package: picosat-devel: {'type': 'optional'} - Package: cudd-devel: {'type': 'optional'} - Package: ltl2ba: {'type': 'optional'} - Package: paraview: {'type': 'optional'} - Package: flocq: {'type': 'optional'} - Package: veusz: {'type': 'optional'} - Package: wvs-data: {'type': 'optional'} - Package: hmmer: {'type': 'optional'} - Package: qepcad-B: {'type': 'optional'} - Package: vaspview: {'type': 'optional'} - Package: ncview: {'type': 'optional'} - Package: csdp-tools: {'type': 'optional'} - Package: gromacs: {'type': 'optional'} - Package: zenon: {'type': 'optional'} - Package: gdl: {'type': 'optional'} - Package: genus2reduction: {'type': 'optional'} - Package: genius: {'type': 'optional'} - Package: eclib: {'type': 'optional'} - Package: gappalib-coq: {'type': 'optional'} - Package: routino: {'type': 'optional'} - Package: kpolynome: {'type': 'optional'} - Package: bowtie: {'type': 'optional'} - Package: ginac: {'type': 'optional'} - Package: cvc3: {'type': 'optional'} - Package: xgap: {'type': 'optional'} - Package: bwa: {'type': 'optional'} - Package: gappa: {'type': 'optional'} - Package: libctl: {'type': 'optional'} - Package: EMBOSS: {'type': 'optional'} - Package: gridengine: {'type': 'optional'} - Package: maxima-gui: {'type': 'optional'} - Package: python2-networkx: {'type': 'optional'} - Package: coq: {'type': 'optional'} - Package: coq-doc: {'type': 'optional'} - Package: GMT-doc: {'type': 'optional'} - Package: latte-integrale: {'type': 'optional'} - Package: hdf5: {'type': 'optional'} - Package: seaview: {'type': 'optional'} - Package: openbabel: {'type': 'optional'} - Package: azove: {'type': 'optional'} - Package: cudd: {'type': 'optional'} - Package: python2-biopython: {'type': 'optional'} - Package: mona-devel: {'type': 'optional'} - Package: fflas-ffpack-devel: {'type': 'optional'} - Package: GMT-coastlines-full: {'type': 'optional'} - Package: stix-math-fonts: {'type': 'optional'} - Package: lagan: {'type': 'optional'} - Package: wgrib2: {'type': 'optional'} - Package: GMT-coastlines-high: {'type': 'optional'} - Package: csdp: {'type': 'optional'} - Package: coq-coqide: {'type': 'optional'} - Package: linbox: {'type': 'optional'} - Package: gabedit: {'type': 'optional'} - Package: meataxe: {'type': 'optional'} - Package: xtide: {'type': 'optional'} - Package: cvc3-xemacs: {'type': 'optional'} - Package: grads: {'type': 'optional'} - Package: alt-ergo: {'type': 'optional'} - Package: tgif: {'type': 'optional'} - Package: why3: {'type': 'optional'} - Package: cvc3-devel: {'type': 'optional'} - Package: cddlib: {'type': 'optional'} - Package: qalculate-gtk: {'type': 'optional'} - Package: cantor: {'type': 'optional'} - Package: glimmer: {'type': 'optional'} - Package: vinci: {'type': 'optional'} - Package: python2-theano: {'type': 'optional'} - Package: gap: {'type': 'optional'} - Package: geomview: {'type': 'optional'} - Package: ncl: {'type': 'optional'} - Package: gromacs-openmpi: {'type': 'optional'} - Package: nco: {'type': 'optional'} - Package: mpfi: {'type': 'optional'} - Package: grace: {'type': 'optional'} - Package: GMT: {'type': 'optional'} - Package: xdrawchem: {'type': 'optional'} - Package: mona: {'type': 'optional'} - Package: tideEditor: {'type': 'optional'} - Package: hdf: {'type': 'optional'} - Package: qalculate-kde: {'type': 'optional'} - Package: cryptominisat: {'type': 'optional'} - Package: stp: {'type': 'optional'} - Package: root: {'type': 'optional'} - Package: libmatheval: {'type': 'optional'} - Package: frama-c: {'type': 'optional'} - Package: 4ti2: {'type': 'optional'} - Package: gpredict: {'type': 'optional'} - Package: python2-cvxopt: {'type': 'optional'} - Package: blas: {'type': 'optional'} - Package: cantor-R: {'type': 'optional'} - Package: plotutils: {'type': 'optional'} - Package: picosat: {'type': 'optional'} - Package: minisat2: {'type': 'optional'} - Package: polybori-gui: {'type': 'optional'} - Package: gfan: {'type': 'optional'} - Package: TeXmacs: {'type': 'optional'} - Package: galculator: {'type': 'optional'} - Package: brial: {'type': 'optional'} - Package: fastx_toolkit: {'type': 'optional'} - Package: freefem++: {'type': 'optional'} - Package: E: {'type': 'optional'} - Package: pvs-sbcl: {'type': 'optional'} - Package: cvc4: {'type': 'optional'} - Package: mona-examples: {'type': 'optional'} - Package: Macaulay2: {'type': 'optional'} - Package: cvc3-emacs: {'type': 'optional'} - Package: gnome-chemistry-utils: {'type': 'optional'} - Package: mona-xemacs: {'type': 'optional'} - Package: automaton-javadoc: {'type': 'optional'} - Package: why: {'type': 'optional'} - Package: sextractor: {'type': 'optional'} - Package: rrdtool: {'type': 'optional'} - Package: automaton: {'type': 'optional'} - Package: coq-emacs: {'type': 'optional'} - Package: malaga: {'type': 'optional'} - Package: mona-emacs: {'type': 'optional'} - Package: jmol: {'type': 'optional'} - Package: SIBsim4: {'type': 'optional'} - Package: libtcd: {'type': 'optional'} - Package: qtoctave: {'type': 'optional'} - Package: wgrib: {'type': 'optional'} -Group: enlightenment-desktop (Enlightenment) - Package: elementary: {'type': 'mandatory'} - Package: enlightenment: {'type': 'mandatory'} - Package: efl: {'type': 'mandatory'} - Package: terminology: {'type': 'mandatory'} - Package: evas-generic-loaders: {'type': 'mandatory'} -Group: epiphany (Epiphany Web Browser) - Package: epiphany: {'type': 'mandatory'} -Group: ethiopic-support (Ethiopic Support) - Package: google-noto-sans-ethiopic-fonts: {'type': 'default'} - Package: sil-abyssinica-fonts: {'type': 'default'} - Package: scim-tables-amharic: {'type': 'optional'} - Package: senamirmir-washra-wookianos-fonts: {'type': 'optional'} - Package: senamirmir-washra-yigezu-bisrat-gothic-fonts: {'type': 'optional'} - Package: senamirmir-washra-hiwua-fonts: {'type': 'optional'} - Package: senamirmir-washra-tint-fonts: {'type': 'optional'} - Package: senamirmir-washra-fantuwua-fonts: {'type': 'optional'} - Package: senamirmir-washra-yigezu-bisrat-goffer-fonts: {'type': 'optional'} - Package: senamirmir-washra-yebse-fonts: {'type': 'optional'} - Package: senamirmir-washra-fonts: {'type': 'optional'} - Package: senamirmir-washra-jiret-fonts: {'type': 'optional'} - Package: senamirmir-washra-zelan-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-ethiopic: {'type': 'optional'} -Group: gnome-games (Extra games for the GNOME Desktop) - Package: gnome-chess: {'type': 'mandatory'} - Package: gnome-robots: {'type': 'mandatory'} - Package: hitori: {'type': 'mandatory'} - Package: gnome-klotski: {'type': 'mandatory'} - Package: lightsoff: {'type': 'mandatory'} - Package: tali: {'type': 'mandatory'} - Package: gnome-nibbles: {'type': 'mandatory'} - Package: gnome-tetravex: {'type': 'mandatory'} - Package: gnome-sudoku: {'type': 'mandatory'} - Package: swell-foop: {'type': 'mandatory'} - Package: gnome-mines: {'type': 'mandatory'} - Package: iagno: {'type': 'mandatory'} - Package: five-or-more: {'type': 'mandatory'} - Package: quadrapassel: {'type': 'mandatory'} - Package: gnome-taquin: {'type': 'mandatory'} - Package: four-in-a-row: {'type': 'mandatory'} - Package: gnome-mahjongg: {'type': 'mandatory'} -Group: xfce-extra-plugins (Extra plugins for the Xfce panel) - Package: xfdashboard-themes: {'type': 'mandatory'} - Package: xfpanel-switch: {'type': 'mandatory'} - Package: xfce4-time-out-plugin: {'type': 'mandatory'} - Package: xfce4-xkb-plugin: {'type': 'mandatory'} - Package: xfce4-fsguard-plugin: {'type': 'mandatory'} - Package: xfce4-weather-plugin: {'type': 'mandatory'} - Package: xfce4-mailwatch-plugin: {'type': 'mandatory'} - Package: xfce4-verve-plugin: {'type': 'mandatory'} - Package: xfce4-genmon-plugin: {'type': 'mandatory'} - Package: xfce4-taskmanager: {'type': 'mandatory'} - Package: xfce4-systemload-plugin: {'type': 'mandatory'} - Package: xfce4-netload-plugin: {'type': 'mandatory'} - Package: xfce4-battery-plugin: {'type': 'mandatory'} - Package: xfce4-diskperf-plugin: {'type': 'mandatory'} - Package: xfce4-whiskermenu-plugin: {'type': 'mandatory'} - Package: xfce4-sensors-plugin: {'type': 'mandatory'} - Package: xfce4-cpugraph-plugin: {'type': 'mandatory'} - Package: xfce4-mount-plugin: {'type': 'mandatory'} - Package: xfce4-eyes-plugin: {'type': 'mandatory'} - Package: xfdashboard: {'type': 'mandatory'} -Group: ftp-server (FTP Server) - Package: vsftpd: {'type': 'mandatory'} - Package: proftpd: {'type': 'optional'} - Package: pure-ftpd: {'type': 'optional'} -Group: eclipse (Fedora Eclipse) - Package: eclipse-cdt: {'type': 'mandatory'} - Package: eclipse-jdt: {'type': 'mandatory'} - Package: eclipse-mylyn-tasks-web: {'type': 'default'} - Package: eclipse-mylyn-context-cdt: {'type': 'default'} - Package: eclipse-mylyn-tasks-bugzilla: {'type': 'default'} - Package: eclipse-pde: {'type': 'default'} - Package: eclipse-dtp: {'type': 'default'} - Package: eclipse-mylyn-context-java: {'type': 'default'} - Package: eclipse-mpc: {'type': 'default'} - Package: eclipse-fedorapackager: {'type': 'default'} - Package: eclipse-oprofile: {'type': 'default'} - Package: eclipse-subclipse: {'type': 'default'} - Package: eclipse-packagekit: {'type': 'default'} - Package: eclipse-changelog: {'type': 'default'} - Package: eclipse-mylyn-tasks-trac: {'type': 'default'} - Package: eclipse-mylyn: {'type': 'default'} - Package: eclipse-egit: {'type': 'default'} - Package: eclipse-collabnet-merge: {'type': 'default'} - Package: eclipse-pydev: {'type': 'default'} - Package: eclipse-rpm-editor: {'type': 'default'} - Package: eclipse-valgrind: {'type': 'default'} - Package: eclipse-rpmstubby: {'type': 'optional'} - Package: eclipse-quickrex: {'type': 'optional'} - Package: eclipse-photran: {'type': 'optional'} - Package: eclipse-texlipse: {'type': 'optional'} - Package: eclipse-mylyn-fedora-integration: {'type': 'optional'} - Package: eclipse-veditor: {'type': 'optional'} - Package: eclipse-dltk-ruby: {'type': 'optional'} - Package: eclipse-shelled: {'type': 'optional'} - Package: eclipse-dltk-tcl: {'type': 'optional'} - Package: eclipse-moreunit: {'type': 'optional'} - Package: eclipse-findbugs: {'type': 'optional'} - Package: eclipse-eclemma: {'type': 'optional'} - Package: eclipse-epic: {'type': 'optional'} -Group: fedora-packager (Fedora Packager) - Package: git: {'type': 'mandatory'} - Package: rpmdevtools: {'type': 'mandatory'} - Package: redhat-rpm-config: {'type': 'mandatory'} - Package: fedora-packager: {'type': 'mandatory'} - Package: make: {'type': 'mandatory'} - Package: koji: {'type': 'mandatory'} - Package: bodhi-client: {'type': 'mandatory'} - Package: rpm-build: {'type': 'mandatory'} - Package: curl: {'type': 'mandatory'} - Package: fedora-easy-karma: {'type': 'mandatory'} - Package: mock: {'type': 'mandatory'} - Package: mercurial: {'type': 'default'} - Package: bzr: {'type': 'default'} - Package: cpanspec: {'type': 'optional'} - Package: auto-destdir: {'type': 'optional'} - Package: plague-client: {'type': 'optional'} - Package: cvs: {'type': 'optional'} -Group: server-product (Fedora Server product core) - Package: realmd: {'type': 'mandatory'} - Package: timedatex: {'type': 'mandatory'} - Package: PackageKit: {'type': 'mandatory'} - Package: polkit: {'type': 'mandatory'} - Package: fedora-release-server: {'type': 'mandatory'} - Package: chrony: {'type': 'mandatory'} - Package: NetworkManager-team: {'type': 'default'} -Group: workstation-product (Fedora Workstation product core) - Package: fedora-user-agent-chrome: {'type': 'mandatory'} - Package: cifs-utils: {'type': 'mandatory'} - Package: qt5-qtxmlpatterns: {'type': 'mandatory'} - Package: fpaste: {'type': 'mandatory'} - Package: pam_pkcs11: {'type': 'mandatory'} - Package: abrt-desktop: {'type': 'mandatory'} - Package: mcelog: {'type': 'mandatory'} - Package: ethtool: {'type': 'mandatory'} - Package: nmap-ncat: {'type': 'mandatory'} - Package: unzip: {'type': 'mandatory'} - Package: psacct: {'type': 'mandatory'} - Package: sssd: {'type': 'mandatory'} - Package: tcp_wrappers: {'type': 'mandatory'} - Package: cpio: {'type': 'mandatory'} - Package: bash-completion: {'type': 'mandatory'} - Package: words: {'type': 'mandatory'} - Package: fedora-release-workstation: {'type': 'mandatory'} - Package: attr: {'type': 'mandatory'} - Package: shotwell: {'type': 'mandatory'} - Package: evolution: {'type': 'mandatory'} - Package: qt: {'type': 'mandatory'} - Package: ntfs-3g: {'type': 'mandatory'} - Package: net-tools: {'type': 'mandatory'} - Package: fros-gnome: {'type': 'mandatory'} - Package: man-pages: {'type': 'mandatory'} - Package: vconfig: {'type': 'mandatory'} - Package: tree: {'type': 'mandatory'} - Package: dosfstools: {'type': 'mandatory'} - Package: dnf-langpacks: {'type': 'mandatory'} - Package: pinentry-gnome3: {'type': 'mandatory'} - Package: mdadm: {'type': 'mandatory'} - Package: mailcap: {'type': 'mandatory'} - Package: rsync: {'type': 'mandatory'} - Package: nss-mdns: {'type': 'mandatory'} - Package: google-android-emoji-fonts: {'type': 'mandatory'} - Package: abrt-cli: {'type': 'mandatory'} - Package: adwaita-qt5: {'type': 'mandatory'} - Package: btrfs-progs: {'type': 'mandatory'} - Package: wvdial: {'type': 'mandatory'} - Package: hunspell: {'type': 'mandatory'} - Package: ibus-libzhuyin: {'type': 'mandatory'} - Package: bc: {'type': 'mandatory'} - Package: qgnomeplatform: {'type': 'mandatory'} - Package: xorg-x11-drv-libinput: {'type': 'mandatory'} - Package: ibus-m17n: {'type': 'mandatory'} - Package: evolution-help: {'type': 'mandatory'} - Package: qt-x11: {'type': 'mandatory'} - Package: qt5-qtbase-gui: {'type': 'mandatory'} - Package: wget: {'type': 'mandatory'} - Package: symlinks: {'type': 'mandatory'} - Package: seahorse: {'type': 'mandatory'} - Package: acl: {'type': 'mandatory'} - Package: bind-utils: {'type': 'mandatory'} - Package: ibus-gtk3: {'type': 'mandatory'} - Package: ibus-gtk2: {'type': 'mandatory'} - Package: passwdqc: {'type': 'mandatory'} - Package: ibus-kkc: {'type': 'mandatory'} - Package: lsof: {'type': 'mandatory'} - Package: cryptsetup: {'type': 'mandatory'} - Package: qt5-qtdeclarative: {'type': 'mandatory'} - Package: mlocate: {'type': 'mandatory'} - Package: adwaita-qt4: {'type': 'mandatory'} - Package: deltarpm: {'type': 'mandatory'} - Package: sos: {'type': 'mandatory'} - Package: ppp: {'type': 'mandatory'} - Package: dnf: {'type': 'mandatory'} - Package: zip: {'type': 'mandatory'} - Package: gnupg2: {'type': 'mandatory'} - Package: microcode_ctl: {'type': 'mandatory'} - Package: iptstate: {'type': 'mandatory'} - Package: bridge-utils: {'type': 'mandatory'} - Package: tcpdump: {'type': 'mandatory'} - Package: ibus-qt: {'type': 'mandatory'} - Package: realmd: {'type': 'mandatory'} - Package: ibus-typing-booster: {'type': 'mandatory'} - Package: traceroute: {'type': 'mandatory'} - Package: cyrus-sasl-plain: {'type': 'mandatory'} - Package: setroubleshoot: {'type': 'mandatory'} - Package: setuptool: {'type': 'mandatory'} - Package: nfs-utils: {'type': 'mandatory'} - Package: pinfo: {'type': 'mandatory'} - Package: telnet: {'type': 'mandatory'} - Package: git: {'type': 'mandatory'} - Package: gnome-shell-extension-background-logo: {'type': 'mandatory'} - Package: rp-pppoe: {'type': 'mandatory'} - Package: glibc-all-langpacks: {'type': 'mandatory'} - Package: rng-tools: {'type': 'mandatory'} - Package: dnf-plugins-core: {'type': 'mandatory'} - Package: mtr: {'type': 'mandatory'} - Package: qt-settings: {'type': 'mandatory'} - Package: plymouth: {'type': 'mandatory'} - Package: pam_krb5: {'type': 'mandatory'} - Package: qt5-qtbase: {'type': 'mandatory'} - Package: unoconv: {'type': 'mandatory'} - Package: tar: {'type': 'mandatory'} - Package: fedora-productimg-workstation: {'type': 'mandatory'} - Package: sudo: {'type': 'mandatory'} - Package: systemd-udev: {'type': 'mandatory'} - Package: logrotate: {'type': 'mandatory'} - Package: jwhois: {'type': 'mandatory'} - Package: at: {'type': 'mandatory'} - Package: file: {'type': 'mandatory'} - Package: rhythmbox: {'type': 'mandatory'} - Package: rdist: {'type': 'mandatory'} - Package: crontabs: {'type': 'mandatory'} - Package: bzip2: {'type': 'mandatory'} - Package: ibus-libpinyin: {'type': 'mandatory'} - Package: scl-utils: {'type': 'mandatory'} - Package: which: {'type': 'mandatory'} - Package: ntfsprogs: {'type': 'mandatory'} - Package: evolution-ews: {'type': 'mandatory'} - Package: wireless-tools: {'type': 'mandatory'} - Package: time: {'type': 'mandatory'} - Package: quota: {'type': 'mandatory'} - Package: polkit: {'type': 'mandatory'} - Package: lrzsz: {'type': 'mandatory'} - Package: dos2unix: {'type': 'mandatory'} - Package: ibus-hangul: {'type': 'mandatory'} - Package: usbutils: {'type': 'mandatory'} - Package: ibus-rawcode: {'type': 'mandatory'} - Package: chrony: {'type': 'mandatory'} - Package: abrt-java-connector: {'type': 'mandatory'} - Package: pciutils: {'type': 'mandatory'} -Group: finnish-support (Finnish Support) - Package: enchant-voikko: {'type': 'default'} - Package: tmispell-voikko: {'type': 'optional'} - Package: mozvoikko: {'requires': 'firefox', 'type': 'conditional'} -Group: firefox (Firefox Web Browser) - Package: firefox: {'type': 'mandatory'} -Group: font-design (Font design and packaging) - Package: fontforge: {'type': 'mandatory'} - Package: xgridfit: {'type': 'mandatory'} - Package: poppler-utils: {'type': 'default'} - Package: xgridfit-doc: {'type': 'default'} - Package: ghostscript: {'type': 'default'} - Package: gimp-help: {'type': 'default'} - Package: fonttools: {'type': 'default'} - Package: fontmatrix: {'type': 'default'} - Package: fontpackages-devel: {'type': 'default'} - Package: gimp-data-extras: {'type': 'default'} - Package: perl-Font-TTF: {'type': 'default'} - Package: texlive-lcdftypetools: {'type': 'default'} - Package: gucharmap: {'type': 'default'} - Package: gimp-help-browser: {'type': 'default'} - Package: fontaine: {'type': 'default'} - Package: inkscape: {'type': 'default'} - Package: gimp: {'type': 'default'} - Package: quilt: {'type': 'optional'} - Package: freetype-demos: {'type': 'optional'} - Package: ghostscript-doc: {'type': 'optional'} - Package: gbdfed: {'type': 'optional'} - Package: git: {'type': 'optional'} - Package: woffTools: {'type': 'optional'} - Package: qgit: {'type': 'optional'} - Package: subversion: {'type': 'optional'} - Package: cube2font: {'type': 'optional'} - Package: xmbdfed: {'type': 'optional'} - Package: meld: {'type': 'optional'} - Package: python-fontMath: {'type': 'optional'} - Package: woff: {'type': 'optional'} - Package: ghostscript-gtk: {'type': 'optional'} - Package: python-compositor: {'type': 'optional'} - Package: fontpackages-tools: {'type': 'optional'} - Package: giggle: {'type': 'optional'} - Package: darcs: {'type': 'optional'} - Package: bzr: {'type': 'optional'} - Package: mercurial: {'type': 'optional'} - Package: scribus: {'type': 'optional'} - Package: cvs: {'type': 'optional'} - Package: python-robofab: {'type': 'optional'} - Package: python-ufo2fdk: {'type': 'optional'} -Group: fonts (Fonts) - Package: google-noto-sans-meetei-mayek-fonts: {'type': 'default'} - Package: sil-mingzat-fonts: {'type': 'default'} - Package: abattis-cantarell-fonts: {'type': 'default'} - Package: dejavu-serif-fonts: {'type': 'default'} - Package: aajohan-comfortaa-fonts: {'type': 'default'} - Package: lohit-assamese-fonts: {'type': 'default'} - Package: lohit-bengali-fonts: {'type': 'default'} - Package: google-noto-sans-mandaic-fonts: {'type': 'default'} - Package: sil-nuosu-fonts: {'type': 'default'} - Package: paratype-pt-sans-fonts: {'type': 'default'} - Package: paktype-naskh-basic-fonts: {'type': 'default'} - Package: lohit-gurmukhi-fonts: {'type': 'default'} - Package: dejavu-sans-mono-fonts: {'type': 'default'} - Package: gnu-free-sans-fonts: {'type': 'default'} - Package: google-noto-sans-tai-viet-fonts: {'type': 'default'} - Package: thai-scalable-waree-fonts: {'type': 'default'} - Package: sil-abyssinica-fonts: {'type': 'default'} - Package: jomolhari-fonts: {'type': 'default'} - Package: gnu-free-serif-fonts: {'type': 'default'} - Package: liberation-sans-fonts: {'type': 'default'} - Package: lohit-kannada-fonts: {'type': 'default'} - Package: tabish-eeyek-fonts: {'type': 'default'} - Package: khmeros-base-fonts: {'type': 'default'} - Package: julietaula-montserrat-fonts: {'type': 'default'} - Package: liberation-mono-fonts: {'type': 'default'} - Package: lohit-devanagari-fonts: {'type': 'default'} - Package: vlgothic-fonts: {'type': 'default'} - Package: naver-nanum-gothic-fonts: {'type': 'default'} - Package: adobe-source-han-sans-cn-fonts: {'type': 'default'} - Package: lohit-odia-fonts: {'type': 'default'} - Package: google-noto-sans-tai-tham-fonts: {'type': 'default'} - Package: lohit-gujarati-fonts: {'type': 'default'} - Package: liberation-serif-fonts: {'type': 'default'} - Package: adobe-source-han-sans-tw-fonts: {'type': 'default'} - Package: lklug-fonts: {'type': 'default'} - Package: smc-meera-fonts: {'type': 'default'} - Package: google-noto-sans-lisu-fonts: {'type': 'default'} - Package: gnu-free-mono-fonts: {'type': 'default'} - Package: sil-padauk-fonts: {'type': 'default'} - Package: google-noto-sans-tagalog-fonts: {'type': 'default'} - Package: dejavu-sans-fonts: {'type': 'default'} - Package: lohit-tamil-fonts: {'type': 'default'} - Package: stix-fonts: {'type': 'default'} - Package: lohit-telugu-fonts: {'type': 'default'} - Package: thibault-isabella-fonts: {'type': 'optional'} - Package: baekmuk-ttf-dotum-fonts: {'type': 'optional'} - Package: wqy-zenhei-fonts: {'type': 'optional'} - Package: google-droid-serif-fonts: {'type': 'optional'} - Package: nafees-web-naskh-fonts: {'type': 'optional'} - Package: gfs-decker-fonts: {'type': 'optional'} - Package: thai-scalable-norasi-fonts: {'type': 'optional'} - Package: wine-marlett-fonts: {'type': 'optional'} - Package: un-extra-vada-fonts: {'type': 'optional'} - Package: thibault-essays1743-fonts: {'type': 'optional'} - Package: gfs-fleischman-fonts: {'type': 'optional'} - Package: horai-ume-mincho-fonts: {'type': 'optional'} - Package: un-extra-jamodotum-fonts: {'type': 'optional'} - Package: sj-delphine-fonts: {'type': 'optional'} - Package: liberation-narrow-fonts: {'type': 'optional'} - Package: kacst-titlel-fonts: {'type': 'optional'} - Package: tiresias-sign-fonts: {'type': 'optional'} - Package: bpg-algeti-fonts: {'type': 'optional'} - Package: lohit-marathi-fonts: {'type': 'optional'} - Package: oflb-prociono-fonts: {'type': 'optional'} - Package: paratype-pt-serif-fonts: {'type': 'optional'} - Package: gdouros-akkadian-fonts: {'type': 'optional'} - Package: horai-ume-pgothic-fonts: {'type': 'optional'} - Package: adf-accanthis-3-fonts: {'type': 'optional'} - Package: nafees-nastaleeq-fonts: {'type': 'optional'} - Package: cf-sorts-mill-goudy-fonts: {'type': 'optional'} - Package: vollkorn-fonts: {'type': 'optional'} - Package: ipa-gothic-fonts: {'type': 'optional'} - Package: google-noto-serif-georgian-fonts: {'type': 'optional'} - Package: bpg-courier-fonts: {'type': 'optional'} - Package: ns-bola-fonts: {'type': 'optional'} - Package: adf-tribun-fonts: {'type': 'optional'} - Package: un-core-dinaru-fonts: {'type': 'optional'} - Package: un-extra-jamonovel-fonts: {'type': 'optional'} - Package: sil-andika-fonts: {'type': 'optional'} - Package: google-noto-sans-bengali-fonts: {'type': 'optional'} - Package: chisholm-to-be-continued-fonts: {'type': 'optional'} - Package: sil-gentium-alt-fonts: {'type': 'optional'} - Package: kacst-decorative-fonts: {'type': 'optional'} - Package: thai-scalable-loma-fonts: {'type': 'optional'} - Package: ipa-ex-gothic-fonts: {'type': 'optional'} - Package: sarai-fonts: {'type': 'optional'} - Package: saab-fonts: {'type': 'optional'} - Package: horai-ume-gothic-fonts: {'type': 'optional'} - Package: nafees-pakistani-naskh-fonts: {'type': 'optional'} - Package: smc-raghumalayalam-fonts: {'type': 'optional'} - Package: thibault-rockets-fonts: {'type': 'optional'} - Package: linux-libertine-fonts: {'type': 'optional'} - Package: smc-rachana-fonts: {'type': 'optional'} - Package: allgeyer-musiqwik-fonts: {'type': 'optional'} - Package: samyak-malayalam-fonts: {'type': 'optional'} - Package: sil-charis-fonts: {'type': 'optional'} - Package: msimonson-anonymouspro-fonts: {'type': 'optional'} - Package: gdouros-alexander-fonts: {'type': 'optional'} - Package: google-noto-sans-armenian-fonts: {'type': 'optional'} - Package: google-noto-sans-fonts: {'type': 'optional'} - Package: google-noto-sans-osmanya-fonts: {'type': 'optional'} - Package: smc-anjalioldlipi-fonts: {'type': 'optional'} - Package: mona-sazanami-fonts: {'type': 'optional'} - Package: google-noto-sans-old-turkic-fonts: {'type': 'optional'} - Package: senamirmir-washra-fantuwua-fonts: {'type': 'optional'} - Package: sil-doulos-fonts: {'type': 'optional'} - Package: inkboy-fonts: {'type': 'optional'} - Package: google-noto-sans-thai-ui-fonts: {'type': 'optional'} - Package: kalapi-fonts: {'type': 'optional'} - Package: google-noto-sans-kharoshthi-fonts: {'type': 'optional'} - Package: horai-ume-uigothic-fonts: {'type': 'optional'} - Package: google-noto-sans-kannada-ui-fonts: {'type': 'optional'} - Package: gfs-ignacio-fonts: {'type': 'optional'} - Package: tiresias-sign-z-fonts: {'type': 'optional'} - Package: dejavu-lgc-serif-fonts: {'type': 'optional'} - Package: gfs-pyrsos-fonts: {'type': 'optional'} - Package: darkgarden-fonts: {'type': 'optional'} - Package: naver-nanum-pen-fonts: {'type': 'optional'} - Package: dustin-dustismo-roman-fonts: {'type': 'optional'} - Package: dustin-domestic-manners-fonts: {'type': 'optional'} - Package: google-noto-sans-vai-fonts: {'type': 'optional'} - Package: tiresias-key-v2-fonts: {'type': 'optional'} - Package: un-extra-shinmun-fonts: {'type': 'optional'} - Package: paratype-pt-sans-caption-fonts: {'type': 'optional'} - Package: lohit-malayalam-fonts: {'type': 'optional'} - Package: vdrsymbol-fonts: {'type': 'optional'} - Package: google-noto-sans-telugu-ui-fonts: {'type': 'optional'} - Package: ipa-pmincho-fonts: {'type': 'optional'} - Package: un-extra-taza-fonts: {'type': 'optional'} - Package: sj-stevehand-fonts: {'type': 'optional'} - Package: google-noto-sans-phoenician-fonts: {'type': 'optional'} - Package: bpg-serif-fonts: {'type': 'optional'} - Package: lohit-tamil-classical-fonts: {'type': 'optional'} - Package: thai-scalable-tlwgtypewriter-fonts: {'type': 'optional'} - Package: paratype-pt-serif-caption-fonts: {'type': 'optional'} - Package: google-noto-sans-telugu-fonts: {'type': 'optional'} - Package: nafees-pakistani-web-naskh-fonts: {'type': 'optional'} - Package: gargi-fonts: {'type': 'optional'} - Package: linux-libertine-biolinum-fonts: {'type': 'optional'} - Package: oflb-asana-math-fonts: {'type': 'optional'} - Package: gfs-didot-fonts: {'type': 'optional'} - Package: google-noto-sans-cherokee-fonts: {'type': 'optional'} - Package: mplus-1m-fonts: {'type': 'optional'} - Package: thai-scalable-garuda-fonts: {'type': 'optional'} - Package: google-noto-sans-kaithi-fonts: {'type': 'optional'} - Package: madan-fonts: {'type': 'optional'} - Package: gfs-theokritos-fonts: {'type': 'optional'} - Package: naver-nanum-barun-gothic-fonts: {'type': 'optional'} - Package: ctan-cm-lgc-roman-fonts: {'type': 'optional'} - Package: sil-charis-compact-fonts: {'type': 'optional'} - Package: thai-scalable-tlwgmono-fonts: {'type': 'optional'} - Package: gfs-porson-fonts: {'type': 'optional'} - Package: google-noto-sans-nko-fonts: {'type': 'optional'} - Package: ctan-cm-lgc-sans-fonts: {'type': 'optional'} - Package: serafettin-cartoon-fonts: {'type': 'optional'} - Package: oflb-goudy-bookletter-1911-fonts: {'type': 'optional'} - Package: yanone-kaffeesatz-fonts: {'type': 'optional'} - Package: ipa-mincho-fonts: {'type': 'optional'} - Package: paratype-pt-mono-fonts: {'type': 'optional'} - Package: oflb-roadstencil-fonts: {'type': 'optional'} - Package: dejavu-lgc-sans-mono-fonts: {'type': 'optional'} - Package: google-noto-sans-gujarati-fonts: {'type': 'optional'} - Package: jsmath-fonts: {'type': 'optional'} - Package: google-noto-sans-ethiopic-fonts: {'type': 'optional'} - Package: gdouros-musica-fonts: {'type': 'optional'} - Package: google-noto-sans-georgian-fonts: {'type': 'optional'} - Package: google-noto-sans-lao-fonts: {'type': 'optional'} - Package: google-noto-sans-old-south-arabian-fonts: {'type': 'optional'} - Package: senamirmir-washra-yigezu-bisrat-goffer-fonts: {'type': 'optional'} - Package: sil-gentium-basic-fonts: {'type': 'optional'} - Package: nafees-naskh-fonts: {'type': 'optional'} - Package: mgopen-moderna-fonts: {'type': 'optional'} - Package: google-droid-sans-mono-fonts: {'type': 'optional'} - Package: tiresias-pc-fonts: {'type': 'optional'} - Package: bpg-nino-medium-cond-fonts: {'type': 'optional'} - Package: woodardworks-laconic-fonts: {'type': 'optional'} - Package: pagul-fonts: {'type': 'optional'} - Package: khmeros-siemreap-fonts: {'type': 'optional'} - Package: gfs-jackson-fonts: {'type': 'optional'} - Package: google-noto-sans-imperial-aramaic-fonts: {'type': 'optional'} - Package: campivisivi-titillium-fonts: {'type': 'optional'} - Package: senamirmir-washra-zelan-fonts: {'type': 'optional'} - Package: senamirmir-washra-fonts: {'type': 'optional'} - Package: google-noto-serif-thai-fonts: {'type': 'optional'} - Package: stix-math-fonts: {'type': 'optional'} - Package: google-noto-sans-coptic-fonts: {'type': 'optional'} - Package: thai-scalable-tlwgtypist-fonts: {'type': 'optional'} - Package: cave9-mutante-fonts: {'type': 'optional'} - Package: google-noto-sans-gujarati-ui-fonts: {'type': 'optional'} - Package: scholarsfonts-cardo-fonts: {'type': 'optional'} - Package: samyak-odia-fonts: {'type': 'optional'} - Package: sil-gentium-fonts: {'type': 'optional'} - Package: google-noto-sans-malayalam-ui-fonts: {'type': 'optional'} - Package: kacst-naskh-fonts: {'type': 'optional'} - Package: conakry-fonts: {'type': 'optional'} - Package: ctan-kerkis-calligraphic-fonts: {'type': 'optional'} - Package: denemo-feta-fonts: {'type': 'optional'} - Package: ipa-ex-mincho-fonts: {'type': 'optional'} - Package: bpg-glaho-fonts: {'type': 'optional'} - Package: gfs-ambrosia-fonts: {'type': 'optional'} - Package: denemo-emmentaler-fonts: {'type': 'optional'} - Package: manchu-fonts: {'type': 'optional'} - Package: bpg-elite-fonts: {'type': 'optional'} - Package: cjkuni-ukai-fonts: {'type': 'optional'} - Package: aldusleaf-crimson-text-fonts: {'type': 'optional'} - Package: grimmer-proggy-tinysz-fonts: {'type': 'optional'} - Package: google-noto-sans-egyptian-hieroglyphs-fonts: {'type': 'optional'} - Package: drehatlas-widelands-fonts: {'type': 'optional'} - Package: google-noto-sans-shavian-fonts: {'type': 'optional'} - Package: google-noto-sans-avestan-fonts: {'type': 'optional'} - Package: mgopen-cosmetica-fonts: {'type': 'optional'} - Package: smc-suruma-fonts: {'type': 'optional'} - Package: kacst-letter-fonts: {'type': 'optional'} - Package: google-noto-sans-hebrew-fonts: {'type': 'optional'} - Package: google-noto-serif-fonts: {'type': 'optional'} - Package: google-noto-sans-bengali-ui-fonts: {'type': 'optional'} - Package: chisholm-letterslaughing-fonts: {'type': 'optional'} - Package: google-noto-sans-thai-fonts: {'type': 'optional'} - Package: un-core-gungseo-fonts: {'type': 'optional'} - Package: sazanami-mincho-fonts: {'type': 'optional'} - Package: un-extra-yetgul-fonts: {'type': 'optional'} - Package: hanazono-fonts: {'type': 'optional'} - Package: samyak-tamil-fonts: {'type': 'optional'} - Package: overpass-fonts: {'type': 'optional'} - Package: bpg-courier-s-fonts: {'type': 'optional'} - Package: oflb-icelandic-fonts: {'type': 'optional'} - Package: un-core-pilgi-fonts: {'type': 'optional'} - Package: mplus-2c-fonts: {'type': 'optional'} - Package: ipa-pgothic-fonts: {'type': 'optional'} - Package: mscore-fonts: {'type': 'optional'} - Package: beteckna-lower-case-fonts: {'type': 'optional'} - Package: paktype-tehreer-fonts: {'type': 'optional'} - Package: tiresias-lp-fonts: {'type': 'optional'} - Package: kacst-book-fonts: {'type': 'optional'} - Package: freecol-imperator-fonts: {'type': 'optional'} - Package: kacst-digital-fonts: {'type': 'optional'} - Package: bpg-sans-fonts: {'type': 'optional'} - Package: gdouros-aegean-fonts: {'type': 'optional'} - Package: google-noto-sans-kayah-li-fonts: {'type': 'optional'} - Package: baekmuk-ttf-batang-fonts: {'type': 'optional'} - Package: google-noto-serif-armenian-fonts: {'type': 'optional'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'optional'} - Package: un-core-batang-fonts: {'type': 'optional'} - Package: kanotf-fonts: {'type': 'optional'} - Package: google-noto-sans-tamil-fonts: {'type': 'optional'} - Package: extremetuxracer-papercuts-fonts: {'type': 'optional'} - Package: google-noto-sans-ugaritic-fonts: {'type': 'optional'} - Package: google-croscore-tinos-fonts: {'type': 'optional'} - Package: adf-accanthis-fonts: {'type': 'optional'} - Package: smc-kalyani-fonts: {'type': 'optional'} - Package: mona-vlgothic-fonts: {'type': 'optional'} - Package: un-extra-jamobatang-fonts: {'type': 'optional'} - Package: mplus-1mn-fonts: {'type': 'optional'} - Package: gfs-solomos-fonts: {'type': 'optional'} - Package: open-sans-fonts: {'type': 'optional'} - Package: tiresias-info-z-fonts: {'type': 'optional'} - Package: gdouros-asea-fonts: {'type': 'optional'} - Package: kacst-poster-fonts: {'type': 'optional'} - Package: tlomt-junction-fonts: {'type': 'optional'} - Package: bitstream-vera-serif-fonts: {'type': 'optional'} - Package: google-noto-sans-khmer-ui-fonts: {'type': 'optional'} - Package: mgopen-modata-fonts: {'type': 'optional'} - Package: apa-new-athena-unicode-fonts: {'type': 'optional'} - Package: naver-nanum-brush-fonts: {'type': 'optional'} - Package: ecolier-court-lignes-fonts: {'type': 'optional'} - Package: gfs-gazis-fonts: {'type': 'optional'} - Package: mgopen-canonica-fonts: {'type': 'optional'} - Package: senamirmir-washra-tint-fonts: {'type': 'optional'} - Package: un-extra-penheulim-fonts: {'type': 'optional'} - Package: bpg-sans-modern-fonts: {'type': 'optional'} - Package: google-noto-serif-khmer-fonts: {'type': 'optional'} - Package: motoya-lmaru-fonts: {'type': 'optional'} - Package: google-noto-sans-carian-fonts: {'type': 'optional'} - Package: ukij-tuz-fonts: {'type': 'optional'} - Package: thai-scalable-sawasdee-fonts: {'type': 'optional'} - Package: dejavu-lgc-sans-fonts: {'type': 'optional'} - Package: gfs-bodoni-fonts: {'type': 'optional'} - Package: motoya-lcedar-fonts: {'type': 'optional'} - Package: thai-arundina-sans-fonts: {'type': 'optional'} - Package: gfs-complutum-fonts: {'type': 'optional'} - Package: senamirmir-washra-yebse-fonts: {'type': 'optional'} - Package: levien-inconsolata-fonts: {'type': 'optional'} - Package: oflb-riordonfancy-fonts: {'type': 'optional'} - Package: adf-gillius-2-fonts: {'type': 'optional'} - Package: nafees-tehreer-naskh-fonts: {'type': 'optional'} - Package: gfs-bodoni-classic-fonts: {'type': 'optional'} - Package: tangerine-fonts: {'type': 'optional'} - Package: un-core-graphic-fonts: {'type': 'optional'} - Package: dustin-dustismo-sans-fonts: {'type': 'optional'} - Package: ns-tiza-chalk-fonts: {'type': 'optional'} - Package: cf-bonveno-fonts: {'type': 'optional'} - Package: khmeros-muol-fonts: {'type': 'optional'} - Package: bpg-ingiri-fonts: {'type': 'optional'} - Package: sil-lateef-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-ethiopic: {'type': 'optional'} - Package: tiresias-info-fonts: {'type': 'optional'} - Package: oflb-sportrop-fonts: {'type': 'optional'} - Package: mplus-2m-fonts: {'type': 'optional'} - Package: horai-ume-pmincho-fonts: {'type': 'optional'} - Package: levien-museum-fonts: {'type': 'optional'} - Package: wqy-microhei-fonts: {'type': 'optional'} - Package: impallari-lobster-fonts: {'type': 'optional'} - Package: thai-scalable-purisa-fonts: {'type': 'optional'} - Package: tlomt-orbitron-fonts: {'type': 'optional'} - Package: tibetan-machine-uni-fonts: {'type': 'optional'} - Package: lohit-nepali-fonts: {'type': 'optional'} - Package: gfs-didot-classic-fonts: {'type': 'optional'} - Package: silkscreen-expanded-fonts: {'type': 'optional'} - Package: beteckna-fonts: {'type': 'optional'} - Package: mph-2b-damase-fonts: {'type': 'optional'} - Package: bpg-serif-modern-fonts: {'type': 'optional'} - Package: google-noto-sans-symbols-fonts: {'type': 'optional'} - Package: kacst-office-fonts: {'type': 'optional'} - Package: woodardworks-laconic-shadow-fonts: {'type': 'optional'} - Package: nhn-nanum-gothic-coding-fonts: {'type': 'optional'} - Package: baekmuk-ttf-hline-fonts: {'type': 'optional'} - Package: google-noto-sans-devanagari-fonts: {'type': 'optional'} - Package: gdouros-aegyptus-fonts: {'type': 'optional'} - Package: google-noto-sans-thaana-fonts: {'type': 'optional'} - Package: un-extra-pilgia-fonts: {'type': 'optional'} - Package: google-noto-sans-ui-fonts: {'type': 'optional'} - Package: gdouros-avdira-fonts: {'type': 'optional'} - Package: gfs-garaldus-fonts: {'type': 'optional'} - Package: gfs-philostratos-fonts: {'type': 'optional'} - Package: lilypond-emmentaler-fonts: {'type': 'optional'} - Package: gfs-olga-fonts: {'type': 'optional'} - Package: un-extra-jamosora-fonts: {'type': 'optional'} - Package: baekmuk-ttf-gulim-fonts: {'type': 'optional'} - Package: drehatlas-xaporho-fonts: {'type': 'optional'} - Package: bpg-sans-medium-fonts: {'type': 'optional'} - Package: kurdit-unikurd-web-fonts: {'type': 'optional'} - Package: extremetuxracer-papercuts-outline-fonts: {'type': 'optional'} - Package: senamirmir-washra-yigezu-bisrat-gothic-fonts: {'type': 'optional'} - Package: kanjistrokeorders-fonts: {'type': 'optional'} - Package: tlomt-league-gothic-fonts: {'type': 'optional'} - Package: gfs-neohellenic-fonts: {'type': 'optional'} - Package: google-noto-sans-lydian-fonts: {'type': 'optional'} - Package: gdouros-aroania-fonts: {'type': 'optional'} - Package: bitstream-vera-sans-fonts: {'type': 'optional'} - Package: ctan-cm-lgc-typewriter-fonts: {'type': 'optional'} - Package: ubuntu-title-fonts: {'type': 'optional'} - Package: google-noto-sans-khmer-fonts: {'type': 'optional'} - Package: adf-accanthis-2-fonts: {'type': 'optional'} - Package: khmeros-metal-chrieng-fonts: {'type': 'optional'} - Package: google-noto-sans-lao-ui-fonts: {'type': 'optional'} - Package: un-extra-bom-fonts: {'type': 'optional'} - Package: khmeros-handwritten-fonts: {'type': 'optional'} - Package: moyogo-molengo-fonts: {'type': 'optional'} - Package: google-noto-sans-lycian-fonts: {'type': 'optional'} - Package: oflb-smonohand-fonts: {'type': 'optional'} - Package: mplus-1p-fonts: {'type': 'optional'} - Package: google-croscore-symbolneu-fonts: {'type': 'optional'} - Package: vemana2000-fonts: {'type': 'optional'} - Package: vlgothic-p-fonts: {'type': 'optional'} - Package: un-extra-pen-fonts: {'type': 'optional'} - Package: gfs-goschen-fonts: {'type': 'optional'} - Package: samyak-gujarati-fonts: {'type': 'optional'} - Package: kacst-pen-fonts: {'type': 'optional'} - Package: senamirmir-washra-hiwua-fonts: {'type': 'optional'} - Package: nafees-riqa-fonts: {'type': 'optional'} - Package: paktype-ajrak-fonts: {'type': 'optional'} - Package: google-croscore-cousine-fonts: {'type': 'optional'} - Package: kacst-qurn-fonts: {'type': 'optional'} - Package: thai-scalable-kinnari-fonts: {'type': 'optional'} - Package: typemade-josefinsansstd-light-fonts: {'type': 'optional'} - Package: google-noto-sans-tamil-ui-fonts: {'type': 'optional'} - Package: lato-fonts: {'type': 'optional'} - Package: thai-scalable-umpush-fonts: {'type': 'optional'} - Package: ctan-kerkis-serif-fonts: {'type': 'optional'} - Package: mplus-1c-fonts: {'type': 'optional'} - Package: sazanami-gothic-fonts: {'type': 'optional'} - Package: navilu-fonts: {'type': 'optional'} - Package: bpg-excelsior-fonts: {'type': 'optional'} - Package: drehatlas-warender-bibliothek-fonts: {'type': 'optional'} - Package: bitstream-vera-sans-mono-fonts: {'type': 'optional'} - Package: khmeros-bokor-fonts: {'type': 'optional'} - Package: apanov-edrip-fonts: {'type': 'optional'} - Package: gfs-nicefore-fonts: {'type': 'optional'} - Package: google-noto-sans-glagolitic-fonts: {'type': 'optional'} - Package: gfs-eustace-fonts: {'type': 'optional'} - Package: kacst-art-fonts: {'type': 'optional'} - Package: kacst-title-fonts: {'type': 'optional'} - Package: gdouros-analecta-fonts: {'type': 'optional'} - Package: ctan-kerkis-sans-fonts: {'type': 'optional'} - Package: google-noto-sans-kannada-fonts: {'type': 'optional'} - Package: thai-arundina-sans-mono-fonts: {'type': 'optional'} - Package: gubbi-fonts: {'type': 'optional'} - Package: paktype-naqsh-fonts: {'type': 'optional'} - Package: bpg-chveulebrivi-fonts: {'type': 'optional'} - Package: cjkuni-uming-fonts: {'type': 'optional'} - Package: kacst-farsi-fonts: {'type': 'optional'} - Package: kacst-one-fonts: {'type': 'optional'} - Package: gdouros-symbola-fonts: {'type': 'optional'} - Package: apanov-heuristica-fonts: {'type': 'optional'} - Package: freecol-shadowedblack-fonts: {'type': 'optional'} - Package: google-croscore-arimo-fonts: {'type': 'optional'} - Package: senamirmir-washra-wookianos-fonts: {'type': 'optional'} - Package: google-noto-serif-lao-fonts: {'type': 'optional'} - Package: thibault-staypuft-fonts: {'type': 'optional'} - Package: allgeyer-musisync-fonts: {'type': 'optional'} - Package: thai-scalable-tlwgtypo-fonts: {'type': 'optional'} - Package: samyak-devanagari-fonts: {'type': 'optional'} - Package: oldstandard-sfd-fonts: {'type': 'optional'} - Package: oflb-brett-fonts: {'type': 'optional'} - Package: libreoffice-opensymbol-fonts: {'type': 'optional'} - Package: thai-arundina-serif-fonts: {'type': 'optional'} - Package: ecolier-court-fonts: {'type': 'optional'} - Package: google-noto-sans-deseret-fonts: {'type': 'optional'} - Package: gfs-artemisia-fonts: {'type': 'optional'} - Package: gfs-baskerville-fonts: {'type': 'optional'} - Package: bpg-nino-medium-fonts: {'type': 'optional'} - Package: tlomt-sniglet-fonts: {'type': 'optional'} - Package: trabajo-fonts: {'type': 'optional'} - Package: google-droid-sans-fonts: {'type': 'optional'} - Package: senamirmir-washra-jiret-fonts: {'type': 'optional'} - Package: comic-neue-fonts: {'type': 'optional'} - Package: sil-scheherazade-fonts: {'type': 'optional'} - Package: google-noto-sans-malayalam-fonts: {'type': 'optional'} - Package: yanone-tagesschrift-fonts: {'type': 'optional'} - Package: tulrich-tuffy-fonts: {'type': 'optional'} - Package: un-core-dotum-fonts: {'type': 'optional'} - Package: mplus-2p-fonts: {'type': 'optional'} - Package: tiresias-pc-z-fonts: {'type': 'optional'} - Package: kacst-screen-fonts: {'type': 'optional'} - Package: fontawesome-fonts: {'type': 'optional'} - Package: gdouros-anaktoria-fonts: {'type': 'optional'} - Package: google-noto-sans-brahmi-fonts: {'type': 'optional'} - Package: google-droid-kufi-fonts: {'type': 'optional'} - Package: adf-gillius-fonts: {'type': 'optional'} - Package: denemo-music-fonts: {'type': 'optional'} - Package: bpg-sans-regular-fonts: {'type': 'optional'} - Package: sil-gentium-basic-book-fonts: {'type': 'optional'} - Package: wine-symbol-fonts: {'type': 'optional'} - Package: hiran-perizia-fonts: {'type': 'optional'} - Package: beteckna-small-caps-fonts: {'type': 'optional'} - Package: naver-nanum-myeongjo-fonts: {'type': 'optional'} - Package: khmeros-battambang-fonts: {'type': 'optional'} - Package: oflb-notcouriersans-fonts: {'type': 'optional'} - Package: pothana2000-fonts: {'type': 'optional'} - Package: smc-dyuthi-fonts: {'type': 'optional'} - Package: silkscreen-fonts: {'type': 'optional'} -Group: freeipa-server (FreeIPA Server) - Package: freeipa-server: {'type': 'mandatory'} - Package: freeipa-server-trust-ad: {'type': 'default'} - Package: bind-dyndb-ldap: {'type': 'default'} - Package: opendnssec: {'type': 'default'} - Package: freeipa-server-dns: {'type': 'default'} -Group: gnome-desktop (GNOME) - Package: cheese: {'type': 'mandatory'} - Package: gnome-disk-utility: {'type': 'mandatory'} - Package: control-center: {'type': 'mandatory'} - Package: gnome-themes-standard: {'type': 'mandatory'} - Package: file-roller-nautilus: {'type': 'mandatory'} - Package: gvfs-mtp: {'type': 'mandatory'} - Package: xdg-user-dirs-gtk: {'type': 'mandatory'} - Package: gedit: {'type': 'mandatory'} - Package: libproxy-mozjs: {'type': 'mandatory'} - Package: evince: {'type': 'mandatory'} - Package: gnome-system-monitor: {'type': 'mandatory'} - Package: gvfs-fuse: {'type': 'mandatory'} - Package: ModemManager: {'type': 'mandatory'} - Package: gnome-backgrounds: {'type': 'mandatory'} - Package: dconf: {'type': 'mandatory'} - Package: gnome-software: {'type': 'mandatory'} - Package: gdm: {'type': 'mandatory'} - Package: sane-backends-drivers-scanners: {'type': 'mandatory'} - Package: PackageKit-gtk3-module: {'type': 'mandatory'} - Package: glib-networking: {'type': 'mandatory'} - Package: totem-nautilus: {'type': 'mandatory'} - Package: gnome-bluetooth: {'type': 'mandatory'} - Package: caribou-gtk2-module: {'type': 'mandatory'} - Package: NetworkManager-adsl: {'type': 'mandatory'} - Package: gvfs-afp: {'type': 'mandatory'} - Package: NetworkManager-openconnect: {'type': 'mandatory'} - Package: gnome-calendar: {'type': 'mandatory'} - Package: gvfs-smb: {'type': 'mandatory'} - Package: gnome-contacts: {'type': 'mandatory'} - Package: gvfs-goa: {'type': 'mandatory'} - Package: gnome-documents: {'type': 'mandatory'} - Package: gnome-classic-session: {'type': 'mandatory'} - Package: caribou-gtk3-module: {'type': 'mandatory'} - Package: gnome-maps: {'type': 'mandatory'} - Package: gnome-user-share: {'type': 'mandatory'} - Package: gnome-screenshot: {'type': 'mandatory'} - Package: fprintd-pam: {'type': 'mandatory'} - Package: gnome-clocks: {'type': 'mandatory'} - Package: gnome-boxes: {'type': 'mandatory'} - Package: gnome-font-viewer: {'type': 'mandatory'} - Package: sushi: {'type': 'mandatory'} - Package: gnome-weather: {'type': 'mandatory'} - Package: gnome-session-xsession: {'type': 'mandatory'} - Package: gnome-terminal: {'type': 'mandatory'} - Package: at-spi2-core: {'type': 'mandatory'} - Package: gnome-shell: {'type': 'mandatory'} - Package: file-roller: {'type': 'mandatory'} - Package: gnome-calculator: {'type': 'mandatory'} - Package: evince-djvu: {'type': 'mandatory'} - Package: gnome-user-docs: {'type': 'mandatory'} - Package: gvfs-afc: {'type': 'mandatory'} - Package: gnome-getting-started-docs: {'type': 'mandatory'} - Package: gnome-initial-setup: {'type': 'mandatory'} - Package: libsane-hpaio: {'type': 'mandatory'} - Package: gnome-session-wayland-session: {'type': 'mandatory'} - Package: PackageKit-command-not-found: {'type': 'mandatory'} - Package: NetworkManager-vpnc-gnome: {'type': 'mandatory'} - Package: nautilus-sendto: {'type': 'mandatory'} - Package: gnome-logs: {'type': 'mandatory'} - Package: gvfs-archive: {'type': 'mandatory'} - Package: gvfs-gphoto2: {'type': 'mandatory'} - Package: NetworkManager-openvpn-gnome: {'type': 'mandatory'} - Package: gnome-color-manager: {'type': 'mandatory'} - Package: eog: {'type': 'mandatory'} - Package: evince-nautilus: {'type': 'mandatory'} - Package: libcanberra-gtk2: {'type': 'mandatory'} - Package: polkit: {'type': 'mandatory'} - Package: nautilus: {'type': 'mandatory'} - Package: totem: {'type': 'mandatory'} - Package: baobab: {'type': 'mandatory'} - Package: librsvg2: {'type': 'mandatory'} - Package: gnome-characters: {'type': 'mandatory'} - Package: NetworkManager-pptp-gnome: {'type': 'mandatory'} - Package: gnome-settings-daemon: {'type': 'mandatory'} - Package: libcanberra-gtk3: {'type': 'mandatory'} - Package: mousetweaks: {'type': 'mandatory'} - Package: rygel: {'type': 'mandatory'} - Package: yelp: {'type': 'mandatory'} - Package: avahi: {'type': 'mandatory'} - Package: caribou: {'type': 'mandatory'} - Package: at-spi2-atk: {'type': 'mandatory'} - Package: orca: {'type': 'mandatory'} -Group: gnome-software-development (GNOME Software Development) - Package: clutter-devel: {'type': 'mandatory'} - Package: pango-devel: {'type': 'mandatory'} - Package: gtk3-devel: {'type': 'mandatory'} - Package: dbus-devel: {'type': 'mandatory'} - Package: atk-devel: {'type': 'mandatory'} - Package: gtk3-devel-docs: {'type': 'mandatory'} - Package: intltool: {'type': 'mandatory'} - Package: gstreamer-devel: {'type': 'mandatory'} - Package: glib2-devel: {'type': 'mandatory'} - Package: gobject-introspection: {'type': 'default'} - Package: gobject-introspection-devel: {'type': 'default'} - Package: git: {'type': 'default'} - Package: libgnome-keyring-devel: {'type': 'default'} - Package: gnome-common: {'type': 'default'} - Package: at-spi2-core-devel: {'type': 'default'} - Package: libnotify-devel: {'type': 'default'} - Package: devhelp: {'type': 'default'} - Package: libcanberra-devel: {'type': 'default'} - Package: glib2-doc: {'type': 'default'} - Package: libgda-devel: {'type': 'default'} - Package: webkitgtk4-devel: {'type': 'default'} - Package: gnome-desktop3-devel: {'type': 'default'} - Package: gtk-doc: {'type': 'default'} - Package: clutter-gtk-devel: {'type': 'default'} - Package: gnome-devel-docs: {'type': 'default'} - Package: evolution-data-server-devel: {'type': 'default'} - Package: cairomm-devel: {'type': 'optional'} - Package: gnome-builder: {'type': 'optional'} - Package: vala: {'type': 'optional'} - Package: libsigc++20-devel: {'type': 'optional'} - Package: glibmm24-devel: {'type': 'optional'} - Package: glade3: {'type': 'optional'} - Package: gtkmm30-devel: {'type': 'optional'} - Package: cairomm-doc: {'type': 'optional'} - Package: clutter-gst-devel: {'type': 'optional'} - Package: libgtop2-devel: {'type': 'optional'} -Group: games (Games and Entertainment) - Package: six: {'type': 'optional'} - Package: pachi: {'type': 'optional'} - Package: warmux: {'type': 'optional'} - Package: lightsoff: {'type': 'optional'} - Package: funguloids: {'type': 'optional'} - Package: nazghul: {'type': 'optional'} - Package: pokerth: {'type': 'optional'} - Package: atomix: {'type': 'optional'} - Package: kdeaddons-atlantikdesigner: {'type': 'optional'} - Package: sumwars: {'type': 'optional'} - Package: liquidwar: {'type': 'optional'} - Package: slingshot: {'type': 'optional'} - Package: gl-117: {'type': 'optional'} - Package: asylum: {'type': 'optional'} - Package: xskat: {'type': 'optional'} - Package: minetest: {'type': 'optional'} - Package: nagi: {'type': 'optional'} - Package: boswars-addons: {'type': 'optional'} - Package: scorchwentbonkers: {'type': 'optional'} - Package: openalchemist: {'type': 'optional'} - Package: rafkill: {'type': 'optional'} - Package: sudoku-savant: {'type': 'optional'} - Package: xgalaxy: {'type': 'optional'} - Package: blobby: {'type': 'optional'} - Package: machineball: {'type': 'optional'} - Package: csmash: {'type': 'optional'} - Package: xword: {'type': 'optional'} - Package: pinball: {'type': 'optional'} - Package: atanks: {'type': 'optional'} - Package: raidem-music: {'type': 'optional'} - Package: boswars: {'type': 'optional'} - Package: freetennis: {'type': 'optional'} - Package: torcs-data: {'type': 'optional'} - Package: hitori: {'type': 'optional'} - Package: berusky: {'type': 'optional'} - Package: ccgo: {'type': 'optional'} - Package: gnome-robots: {'type': 'optional'} - Package: astromenace: {'type': 'optional'} - Package: warzone2100: {'type': 'optional'} - Package: vegastrike-speech: {'type': 'optional'} - Package: maniadrive: {'type': 'optional'} - Package: toppler: {'type': 'optional'} - Package: koules: {'type': 'optional'} - Package: drascula: {'type': 'optional'} - Package: puzzles: {'type': 'optional'} - Package: magicor: {'type': 'optional'} - Package: freedink: {'type': 'optional'} - Package: hedgewars: {'type': 'optional'} - Package: openarena: {'type': 'optional'} - Package: beneath-a-steel-sky: {'type': 'optional'} - Package: vegastrike: {'type': 'optional'} - Package: crossfire-client: {'type': 'optional'} - Package: tremulous: {'type': 'optional'} - Package: amoebax: {'type': 'optional'} - Package: xboard: {'type': 'optional'} - Package: CriticalMass: {'type': 'optional'} - Package: gnome-klotski: {'type': 'optional'} - Package: flight-of-the-amazon-queen-cd: {'type': 'optional'} - Package: clonekeen: {'type': 'optional'} - Package: arrows: {'type': 'optional'} - Package: bygfoot: {'type': 'optional'} - Package: magicmaze: {'type': 'optional'} - Package: xmoto: {'type': 'optional'} - Package: fillets-ng: {'type': 'optional'} - Package: grhino: {'type': 'optional'} - Package: alphabet-soup: {'type': 'optional'} - Package: chromium-bsu: {'type': 'optional'} - Package: xpilot-ng-server: {'type': 'optional'} - Package: crystal-stacker: {'type': 'optional'} - Package: coco-coq: {'type': 'optional'} - Package: gbrainy: {'type': 'optional'} - Package: plee-the-bear: {'type': 'optional'} - Package: gnujump: {'type': 'optional'} - Package: gnome-chess: {'type': 'optional'} - Package: colossus: {'type': 'optional'} - Package: blobwars: {'type': 'optional'} - Package: tunneler: {'type': 'optional'} - Package: typespeed: {'type': 'optional'} - Package: gnome-mud: {'type': 'optional'} - Package: lincity-ng: {'type': 'optional'} - Package: oneko: {'type': 'optional'} - Package: torcs: {'type': 'optional'} - Package: uqm: {'type': 'optional'} - Package: pingus: {'type': 'optional'} - Package: foobillard: {'type': 'optional'} - Package: biloba: {'type': 'optional'} - Package: drascula-music: {'type': 'optional'} - Package: wastesedge: {'type': 'optional'} - Package: pipenightdreams: {'type': 'optional'} - Package: quadrapassel: {'type': 'optional'} - Package: mine_detector: {'type': 'optional'} - Package: gweled: {'type': 'optional'} - Package: freedroidrpg: {'type': 'optional'} - Package: xu4: {'type': 'optional'} - Package: FlightGear: {'type': 'optional'} - Package: vegastrike-extra: {'type': 'optional'} - Package: abe: {'type': 'optional'} - Package: zasx: {'type': 'optional'} - Package: lordsawar: {'type': 'optional'} - Package: mirrormagic: {'type': 'optional'} - Package: chocolate-doom: {'type': 'optional'} - Package: freeciv: {'type': 'optional'} - Package: bzflag: {'type': 'optional'} - Package: kdegames3: {'type': 'optional'} - Package: londonlaw: {'type': 'optional'} - Package: monsterz: {'type': 'optional'} - Package: seahorse-adventures: {'type': 'optional'} - Package: dsi: {'type': 'optional'} - Package: 0ad: {'type': 'optional'} - Package: powermanga: {'type': 'optional'} - Package: xteddy: {'type': 'optional'} - Package: beneath-a-steel-sky-cd: {'type': 'optional'} - Package: puzzle-master: {'type': 'optional'} - Package: raidem: {'type': 'optional'} - Package: vdrift: {'type': 'optional'} - Package: sergueis-destiny: {'type': 'optional'} - Package: dgae: {'type': 'optional'} - Package: alienblaster: {'type': 'optional'} - Package: atomorun: {'type': 'optional'} - Package: berusky2: {'type': 'optional'} - Package: gnugo: {'type': 'optional'} - Package: quake3: {'type': 'optional'} - Package: trackballs-music: {'type': 'optional'} - Package: lpairs: {'type': 'optional'} - Package: asc: {'type': 'optional'} - Package: pengupop: {'type': 'optional'} - Package: trackballs: {'type': 'optional'} - Package: iagno: {'type': 'optional'} - Package: tuxmath: {'type': 'optional'} - Package: PySolFC-music: {'type': 'optional'} - Package: taggle: {'type': 'optional'} - Package: hexglass: {'type': 'optional'} - Package: naev: {'type': 'optional'} - Package: xgrav: {'type': 'optional'} - Package: glob2: {'type': 'optional'} - Package: naturette: {'type': 'optional'} - Package: trophy: {'type': 'optional'} - Package: PySolFC-cardsets: {'type': 'optional'} - Package: nogravity: {'type': 'optional'} - Package: Maelstrom: {'type': 'optional'} - Package: wordwarvi: {'type': 'optional'} - Package: freedroid: {'type': 'optional'} - Package: freedoom-freedm: {'type': 'optional'} - Package: supertux: {'type': 'optional'} - Package: dd2: {'type': 'optional'} - Package: xaos: {'type': 'optional'} - Package: escape: {'type': 'optional'} - Package: armacycles-ad: {'type': 'optional'} - Package: xpenguins: {'type': 'optional'} - Package: cave9: {'type': 'optional'} - Package: ularn: {'type': 'optional'} - Package: zaz: {'type': 'optional'} - Package: methane: {'type': 'optional'} - Package: lacewing: {'type': 'optional'} - Package: scorched3d: {'type': 'optional'} - Package: kbilliards: {'type': 'optional'} - Package: tong: {'type': 'optional'} - Package: shippy: {'type': 'optional'} - Package: gnubg: {'type': 'optional'} - Package: flobopuyo: {'type': 'optional'} - Package: vodovod: {'type': 'optional'} - Package: fortune-mod: {'type': 'optional'} - Package: sirius: {'type': 'optional'} - Package: ants: {'type': 'optional'} - Package: crack-attack: {'type': 'optional'} - Package: alex4: {'type': 'optional'} - Package: quarry: {'type': 'optional'} - Package: professor-is-missing: {'type': 'optional'} - Package: rocksndiamonds: {'type': 'optional'} - Package: qstars: {'type': 'optional'} - Package: worldofpadman: {'type': 'optional'} - Package: lbrickbuster2: {'type': 'optional'} - Package: tennix: {'type': 'optional'} - Package: extremetuxracer: {'type': 'optional'} - Package: avoision: {'type': 'optional'} - Package: freecol: {'type': 'optional'} - Package: bsd-games: {'type': 'optional'} - Package: celestia: {'type': 'optional'} - Package: adanaxisgpl: {'type': 'optional'} - Package: crossfire: {'type': 'optional'} - Package: sopwith: {'type': 'optional'} - Package: fbg2: {'type': 'optional'} - Package: gnome-mines: {'type': 'optional'} - Package: spring: {'type': 'optional'} - Package: kcheckers: {'type': 'optional'} - Package: four-in-a-row: {'type': 'optional'} - Package: redeclipse-data: {'type': 'optional'} - Package: rogue: {'type': 'optional'} - Package: gnome-nibbles: {'type': 'optional'} - Package: xarchon: {'type': 'optional'} - Package: findthatword: {'type': 'optional'} - Package: urbanterror: {'type': 'optional'} - Package: btanks: {'type': 'optional'} - Package: darkplaces-quake: {'type': 'optional'} - Package: ballbuster: {'type': 'optional'} - Package: xonotic: {'type': 'optional'} - Package: haxima: {'type': 'optional'} - Package: wesnoth: {'type': 'optional'} - Package: netpanzer: {'type': 'optional'} - Package: enigma: {'type': 'optional'} - Package: gamazons: {'type': 'optional'} - Package: taxipilot: {'type': 'optional'} - Package: kitsune: {'type': 'optional'} - Package: crystal-stacker-themes: {'type': 'optional'} - Package: gnuchess: {'type': 'optional'} - Package: scummvm: {'type': 'optional'} - Package: slashem: {'type': 'optional'} - Package: iapetal: {'type': 'optional'} - Package: tecnoballz: {'type': 'optional'} - Package: overgod: {'type': 'optional'} - Package: glaxium: {'type': 'optional'} - Package: curblaster: {'type': 'optional'} - Package: ballz: {'type': 'optional'} - Package: penguin-command: {'type': 'optional'} - Package: ember: {'type': 'optional'} - Package: nethack-vultures: {'type': 'optional'} - Package: gnome-sudoku: {'type': 'optional'} - Package: mj: {'type': 'optional'} - Package: cyphesis: {'type': 'optional'} - Package: quake3-demo: {'type': 'optional'} - Package: stormbaancoureur: {'type': 'optional'} - Package: flare: {'type': 'optional'} - Package: sar2: {'type': 'optional'} - Package: knights: {'type': 'optional'} - Package: warzone2100-sequences: {'type': 'optional'} - Package: vegastrike-music: {'type': 'optional'} - Package: flight-of-the-amazon-queen: {'type': 'optional'} - Package: gnome-hearts: {'type': 'optional'} - Package: clanbomber: {'type': 'optional'} - Package: duel3: {'type': 'optional'} - Package: bastet: {'type': 'optional'} - Package: lure: {'type': 'optional'} - Package: agistudio: {'type': 'optional'} - Package: KoboDeluxe: {'type': 'optional'} - Package: PySolFC: {'type': 'optional'} - Package: pipepanic: {'type': 'optional'} - Package: planets: {'type': 'optional'} - Package: Ri-li: {'type': 'optional'} - Package: redeclipse-server: {'type': 'optional'} - Package: kdegames: {'type': 'optional'} - Package: fgrun: {'type': 'optional'} - Package: gemdropx: {'type': 'optional'} - Package: vavoom: {'type': 'optional'} - Package: freedoom: {'type': 'optional'} - Package: rott-shareware: {'type': 'optional'} - Package: qascade: {'type': 'optional'} - Package: gnubik: {'type': 'optional'} - Package: BlockOutII: {'type': 'optional'} - Package: maniadrive-music: {'type': 'optional'} - Package: xpilot-ng: {'type': 'optional'} - Package: njam: {'type': 'optional'} - Package: billiards: {'type': 'optional'} - Package: xblast: {'type': 'optional'} - Package: apricots: {'type': 'optional'} - Package: asc-music: {'type': 'optional'} - Package: gnome-mahjongg: {'type': 'optional'} - Package: greyhounds: {'type': 'optional'} - Package: xplanet: {'type': 'optional'} - Package: five-or-more: {'type': 'optional'} - Package: widelands: {'type': 'optional'} - Package: bolzplatz2006: {'type': 'optional'} - Package: teeworlds: {'type': 'optional'} - Package: auriferous: {'type': 'optional'} - Package: alienarena: {'type': 'optional'} - Package: gnome-tetravex: {'type': 'optional'} - Package: dopewars: {'type': 'optional'} - Package: redeclipse: {'type': 'optional'} - Package: solarwolf: {'type': 'optional'} - Package: tuxpuck: {'type': 'optional'} - Package: bsp: {'type': 'optional'} - Package: cylindrix: {'type': 'optional'} - Package: barrage: {'type': 'optional'} - Package: xscorch: {'type': 'optional'} - Package: angrydd: {'type': 'optional'} - Package: pioneers: {'type': 'optional'} - Package: bombardier: {'type': 'optional'} - Package: megaglest: {'type': 'optional'} - Package: xstar: {'type': 'optional'} - Package: games-menus: {'type': 'optional'} - Package: ultimatestunts: {'type': 'optional'} - Package: mindless: {'type': 'optional'} - Package: lucidlife: {'type': 'optional'} - Package: cdogs-sdl: {'type': 'optional'} - Package: vdr-sudoku: {'type': 'optional'} - Package: swell-foop: {'type': 'optional'} - Package: supertuxkart: {'type': 'optional'} - Package: nethack: {'type': 'optional'} - Package: neverball: {'type': 'optional'} - Package: pychess: {'type': 'optional'} - Package: openlierox: {'type': 'optional'} - Package: CardManager: {'type': 'optional'} - Package: lmarbles: {'type': 'optional'} - Package: frozen-bubble: {'type': 'optional'} - Package: prboom: {'type': 'optional'} - Package: joystick: {'type': 'optional'} - Package: tali: {'type': 'optional'} - Package: biniax: {'type': 'optional'} - Package: worminator: {'type': 'optional'} -Group: georgian-support (Georgian Support) - Package: dejavu-sans-fonts: {'type': 'mandatory'} - Package: bpg-chveulebrivi-fonts: {'type': 'default'} - Package: google-noto-sans-georgian-fonts: {'type': 'default'} - Package: dejavu-serif-fonts: {'type': 'default'} - Package: google-noto-serif-georgian-fonts: {'type': 'default'} - Package: bpg-courier-fonts: {'type': 'default'} - Package: dejavu-sans-mono-fonts: {'type': 'default'} - Package: bpg-glaho-fonts: {'type': 'default'} - Package: bpg-sans-fonts: {'type': 'optional'} - Package: bpg-nino-medium-cond-fonts: {'type': 'optional'} - Package: bpg-ingiri-fonts: {'type': 'optional'} - Package: bpg-sans-medium-fonts: {'type': 'optional'} - Package: bpg-nino-medium-fonts: {'type': 'optional'} - Package: bpg-elite-fonts: {'type': 'optional'} - Package: bpg-serif-fonts: {'type': 'optional'} - Package: bpg-sans-regular-fonts: {'type': 'optional'} - Package: bpg-serif-modern-fonts: {'type': 'optional'} - Package: bpg-algeti-fonts: {'type': 'optional'} - Package: bpg-excelsior-fonts: {'type': 'optional'} - Package: bpg-courier-s-fonts: {'type': 'optional'} - Package: bpg-sans-modern-fonts: {'type': 'optional'} -Group: graphical-internet (Graphical Internet) - Package: uget: {'type': 'optional'} - Package: kita: {'type': 'optional'} - Package: firefox: {'type': 'optional'} - Package: prozilla: {'type': 'optional'} - Package: gwget: {'type': 'optional'} - Package: valknut: {'type': 'optional'} - Package: qbittorrent: {'type': 'optional'} - Package: thunderbird: {'type': 'optional'} - Package: ochusha: {'type': 'optional'} - Package: filezilla: {'type': 'optional'} - Package: gftp: {'type': 'optional'} - Package: xchat-gnome: {'type': 'optional'} - Package: liferea: {'type': 'optional'} - Package: arora: {'type': 'optional'} - Package: mitter: {'type': 'optional'} - Package: licq: {'type': 'optional'} - Package: gnash-plugin: {'type': 'optional'} - Package: knetstats: {'type': 'optional'} - Package: x3270-x11: {'type': 'optional'} - Package: kvirc: {'type': 'optional'} - Package: dillo: {'type': 'optional'} - Package: psi: {'type': 'optional'} - Package: konversation: {'type': 'optional'} - Package: qterm: {'type': 'optional'} - Package: gtk-gnutella: {'type': 'optional'} - Package: azureus: {'type': 'optional'} - Package: transmission-gtk: {'type': 'optional'} - Package: nntpgrab-gui: {'type': 'optional'} - Package: meiga: {'type': 'optional'} - Package: gtorrentviewer: {'type': 'optional'} - Package: kdewebdev: {'type': 'optional'} - Package: choqok: {'type': 'optional'} - Package: claws-mail: {'type': 'optional'} - Package: evolution-bogofilter: {'type': 'optional'} - Package: kdepim: {'type': 'optional'} - Package: nicotine+: {'type': 'optional'} - Package: xchat-ruby: {'type': 'optional'} - Package: streamtuner: {'type': 'optional'} - Package: seamonkey: {'type': 'optional'} - Package: evolution: {'type': 'optional'} - Package: pidgin: {'type': 'optional'} - Package: logjam: {'type': 'optional'} - Package: icedtea-web: {'type': 'optional'} - Package: gnome-translate: {'type': 'optional'} - Package: evolution-help: {'type': 'optional'} - Package: pcmanx-gtk2: {'type': 'optional'} - Package: mail-notification: {'type': 'optional'} - Package: mtr-gtk: {'type': 'optional'} - Package: jd: {'type': 'optional'} - Package: psimedia: {'type': 'optional'} - Package: pidgin-libnotify: {'type': 'optional'} - Package: xchat: {'type': 'optional'} - Package: bluefish: {'type': 'optional'} - Package: empathy: {'type': 'optional'} - Package: kazehakase: {'type': 'optional'} - Package: sylpheed: {'type': 'optional'} - Package: deluge: {'type': 'optional'} - Package: gajim: {'type': 'optional'} - Package: gyachi: {'type': 'optional'} - Package: balsa: {'type': 'optional'} - Package: transmission-qt: {'type': 'optional'} - Package: epiphany: {'type': 'optional'} - Package: pan: {'type': 'optional'} - Package: evolution-perl: {'type': 'optional'} - Package: rekonq: {'type': 'optional'} - Package: xchat-tcl: {'type': 'optional'} - Package: linphone: {'type': 'optional'} - Package: ekiga: {'type': 'optional'} -Group: graphics (Graphics) - Package: cbrpager: {'type': 'optional'} - Package: argyllcms: {'type': 'optional'} - Package: ImageMagick: {'type': 'optional'} - Package: comix: {'type': 'optional'} - Package: tachyon: {'type': 'optional'} - Package: gifview: {'type': 'optional'} - Package: viewnior: {'type': 'optional'} - Package: ufraw: {'type': 'optional'} - Package: graphviz: {'type': 'optional'} - Package: digikam: {'type': 'optional'} - Package: rawstudio: {'type': 'optional'} - Package: mirage: {'type': 'optional'} - Package: qiv: {'type': 'optional'} - Package: tuxpaint: {'type': 'optional'} - Package: inkscape: {'type': 'optional'} - Package: gimp: {'type': 'optional'} - Package: gnofract4d: {'type': 'optional'} - Package: uniconvertor: {'type': 'optional'} - Package: geeqie: {'type': 'optional'} - Package: ipe: {'type': 'optional'} - Package: calligra-krita: {'type': 'optional'} - Package: cinepaint: {'type': 'optional'} - Package: sane-frontends: {'type': 'optional'} - Package: tzclock: {'type': 'optional'} - Package: optipng: {'type': 'optional'} - Package: blender: {'type': 'optional'} - Package: gimp-data-extras: {'type': 'optional'} - Package: xfig: {'type': 'optional'} - Package: asymptote: {'type': 'optional'} - Package: ksnapshot: {'type': 'optional'} - Package: wings: {'type': 'optional'} - Package: gimp-help: {'type': 'optional'} - Package: dcraw: {'type': 'optional'} - Package: xpaint: {'type': 'optional'} - Package: kphotoalbum: {'type': 'optional'} - Package: renrot: {'type': 'optional'} - Package: sane-backends-drivers-scanners: {'type': 'optional'} - Package: gifsicle: {'type': 'optional'} - Package: gutenprint-plugin: {'type': 'optional'} - Package: libsane-hpaio: {'type': 'optional'} - Package: gimp-help-browser: {'type': 'optional'} - Package: xsane: {'type': 'optional'} - Package: gipfel: {'type': 'optional'} - Package: pstoedit: {'type': 'optional'} - Package: gcolor2: {'type': 'optional'} - Package: shotwell: {'type': 'optional'} - Package: gwenview: {'type': 'optional'} - Package: asciio: {'type': 'optional'} - Package: kf5-kipi-plugins: {'type': 'optional'} - Package: gv: {'type': 'optional'} - Package: pydot: {'type': 'optional'} - Package: netpbm-progs: {'type': 'optional'} - Package: sane-backends-drivers-cameras: {'type': 'optional'} - Package: simple-scan: {'type': 'optional'} - Package: kolourpaint: {'type': 'optional'} - Package: hugin: {'type': 'optional'} - Package: k3d: {'type': 'optional'} - Package: Panini: {'type': 'optional'} - Package: nip2: {'type': 'optional'} - Package: xsane-gimp: {'requires': 'gimp', 'type': 'conditional'} -Group: greek-support (Greek Support) - Package: ctan-kerkis-serif-fonts: {'type': 'optional'} - Package: gfs-theokritos-fonts: {'type': 'optional'} - Package: mgopen-modata-fonts: {'type': 'optional'} - Package: gfs-decker-fonts: {'type': 'optional'} - Package: gfs-garaldus-fonts: {'type': 'optional'} - Package: gfs-gazis-fonts: {'type': 'optional'} - Package: gfs-philostratos-fonts: {'type': 'optional'} - Package: gfs-baskerville-fonts: {'type': 'optional'} - Package: gfs-eustace-fonts: {'type': 'optional'} - Package: gfs-olga-fonts: {'type': 'optional'} - Package: gfs-jackson-fonts: {'type': 'optional'} - Package: mgopen-moderna-fonts: {'type': 'optional'} - Package: gfs-fleischman-fonts: {'type': 'optional'} - Package: mgopen-cosmetica-fonts: {'type': 'optional'} - Package: gfs-porson-fonts: {'type': 'optional'} - Package: gfs-artemisia-fonts: {'type': 'optional'} - Package: gfs-goschen-fonts: {'type': 'optional'} - Package: gfs-nicefore-fonts: {'type': 'optional'} - Package: gfs-didot-classic-fonts: {'type': 'optional'} - Package: gfs-bodoni-fonts: {'type': 'optional'} - Package: mgopen-canonica-fonts: {'type': 'optional'} - Package: ctan-kerkis-calligraphic-fonts: {'type': 'optional'} - Package: ctan-kerkis-sans-fonts: {'type': 'optional'} - Package: gfs-complutum-fonts: {'type': 'optional'} - Package: gfs-pyrsos-fonts: {'type': 'optional'} - Package: gfs-neohellenic-fonts: {'type': 'optional'} - Package: gfs-didot-fonts: {'type': 'optional'} - Package: gfs-ignacio-fonts: {'type': 'optional'} - Package: gfs-solomos-fonts: {'type': 'optional'} - Package: gfs-bodoni-classic-fonts: {'type': 'optional'} - Package: gfs-ambrosia-fonts: {'type': 'optional'} -Group: guest-agents (Guest Agents) - Package: open-vm-tools: {'type': 'mandatory'} - Package: qemu-guest-agent: {'type': 'mandatory'} -Group: guest-desktop-agents (Guest Desktop Agents) - Package: spice-vdagent: {'type': 'mandatory'} - Package: open-vm-tools-desktop: {'type': 'mandatory'} - Package: hyperv-daemons: {'type': 'mandatory'} - Package: qemu-guest-agent: {'type': 'mandatory'} -Group: gujarati-support (Gujarati Support) - Package: m17n-db: {'type': 'mandatory'} - Package: lohit-gujarati-fonts: {'type': 'mandatory'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-gujarati-fonts: {'type': 'default'} - Package: google-noto-sans-gujarati-ui-fonts: {'type': 'default'} - Package: samyak-gujarati-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: haproxy (HAProxy) - Package: haproxy: {'type': 'mandatory'} - Package: rubygem-abrt: {'type': 'mandatory'} - Package: rubygem-daemons: {'type': 'mandatory'} - Package: rubygem-rest-client: {'type': 'mandatory'} -Group: hardware-support (Hardware Support) - Package: iwl100-firmware: {'type': 'default'} - Package: ipw2200-firmware: {'type': 'default'} - Package: ipw2100-firmware: {'type': 'default'} - Package: iwl6000g2b-firmware: {'type': 'default'} - Package: iwl7260-firmware: {'type': 'default'} - Package: iwl5150-firmware: {'type': 'default'} - Package: iwl135-firmware: {'type': 'default'} - Package: iwl2000-firmware: {'type': 'default'} - Package: iwl6050-firmware: {'type': 'default'} - Package: iwl3160-firmware: {'type': 'default'} - Package: b43-openfwwf: {'type': 'default'} - Package: iwl6000g2a-firmware: {'type': 'default'} - Package: iwl3945-firmware: {'type': 'default'} - Package: iwl4965-firmware: {'type': 'default'} - Package: iwl2030-firmware: {'type': 'default'} - Package: atmel-firmware: {'type': 'default'} - Package: iwl105-firmware: {'type': 'default'} - Package: usb_modeswitch: {'type': 'default'} - Package: iwl6000-firmware: {'type': 'default'} - Package: zd1211-firmware: {'type': 'default'} - Package: libertas-usb8388-firmware: {'type': 'default'} - Package: iwl5000-firmware: {'type': 'default'} - Package: iwl1000-firmware: {'type': 'default'} - Package: b43-fwcutter: {'type': 'default'} - Package: wpan-tools: {'type': 'optional'} - Package: pcsc-lite: {'type': 'optional'} - Package: bcm283x-firmware: {'type': 'optional'} - Package: acpitool: {'type': 'optional'} - Package: gypsy: {'type': 'optional'} - Package: opensc: {'type': 'optional'} - Package: radeontop: {'type': 'optional'} - Package: lsscsi: {'type': 'optional'} - Package: openct: {'type': 'optional'} - Package: hdparm: {'type': 'optional'} - Package: acpi: {'type': 'optional'} - Package: cmospwd: {'type': 'optional'} - Package: iscan-firmware: {'type': 'optional'} - Package: multican: {'type': 'optional'} - Package: alsa-firmware: {'type': 'optional'} - Package: gpsd: {'type': 'optional'} - Package: hddtemp: {'type': 'optional'} - Package: gpsd-clients: {'type': 'optional'} - Package: i8kutils: {'type': 'optional'} - Package: libifp: {'type': 'optional'} - Package: isight-firmware-tools: {'type': 'optional'} - Package: firmware-addon-dell: {'type': 'optional'} - Package: pcsc-lite-ccid: {'type': 'optional'} -Group: server-hardware-support (Hardware Support for Server Systems) - Package: lm_sensors: {'type': 'default'} - Package: openhpi: {'type': 'default'} - Package: smp_utils: {'type': 'default'} - Package: lsscsi: {'type': 'optional'} - Package: hdparm: {'type': 'optional'} - Package: firmware-addon-dell: {'type': 'optional'} - Package: hddtemp: {'type': 'optional'} -Group: haskell (Haskell) - Package: darcs: {'type': 'mandatory'} - Package: cabal-rpm: {'type': 'mandatory'} - Package: hlint: {'type': 'mandatory'} - Package: ghc-rpm-macros: {'type': 'mandatory'} - Package: ghc: {'type': 'mandatory'} - Package: haskell-platform: {'type': 'mandatory'} - Package: hscolour: {'type': 'mandatory'} - Package: emacs-haskell-mode: {'requires': 'emacs', 'type': 'conditional'} -Group: hawaii-desktop (Hawaii) - Package: qt5-qtdeclarative: {'type': 'mandatory'} - Package: qterminal-qt5: {'type': 'mandatory'} - Package: hawaii-system-preferences: {'type': 'mandatory'} - Package: qt5-qdbusviewer: {'type': 'mandatory'} - Package: pcmanfm-qt: {'type': 'mandatory'} - Package: hawaii-widget-styles: {'type': 'mandatory'} - Package: mesa-dri-drivers: {'type': 'mandatory'} - Package: hawaii-workspace: {'type': 'mandatory'} - Package: hawaii-icon-theme: {'type': 'mandatory'} - Package: sddm: {'type': 'mandatory'} - Package: sddm-theme-hawaii: {'type': 'mandatory'} - Package: initial-setup-gui: {'type': 'mandatory'} - Package: qt5-qtbase-gui: {'type': 'mandatory'} - Package: upower: {'type': 'mandatory'} - Package: firewall-config: {'type': 'mandatory'} - Package: xdg-user-dirs: {'type': 'mandatory'} - Package: otter-browser: {'type': 'mandatory'} - Package: hawaii-shell: {'type': 'mandatory'} - Package: qt5-qtwayland: {'type': 'mandatory'} -Group: hawaii-office (Hawaii Office) - Package: libreoffice-calc: {'type': 'mandatory'} - Package: libreoffice-impress: {'type': 'mandatory'} - Package: libreoffice-writer: {'type': 'mandatory'} -Group: headless-management (Headless Management) - Package: cockpit-shell: {'type': 'mandatory'} - Package: PackageKit: {'type': 'mandatory'} - Package: openssh-server: {'type': 'mandatory'} - Package: cockpit-storaged: {'type': 'mandatory'} - Package: cockpit-bridge: {'type': 'mandatory'} - Package: cockpit-ws: {'type': 'mandatory'} - Package: cockpit-networkmanager: {'type': 'mandatory'} - Package: rolekit: {'type': 'mandatory'} - Package: cockpit-pcp: {'type': 'optional'} - Package: cockpit-kubernetes: {'type': 'optional'} -Group: virtualization-headless (Headless Virtualization) - Package: virt-install: {'type': 'mandatory'} - Package: libvirt-daemon-config-network: {'type': 'default'} - Package: qemu-kvm: {'type': 'default'} - Package: libvirt-daemon-kvm: {'type': 'default'} - Package: systemd-container: {'type': 'default'} - Package: python-libguestfs: {'type': 'optional'} - Package: virt-top: {'type': 'optional'} - Package: libguestfs-tools: {'type': 'optional'} - Package: guestfs-browser: {'type': 'optional'} -Group: hebrew-support (Hebrew Support) - Package: dejavu-sans-fonts: {'type': 'mandatory'} - Package: culmus-stamsefarad-clm-fonts: {'type': 'default'} - Package: culmus-miriam-mono-clm-fonts: {'type': 'default'} - Package: culmus-ellinia-clm-fonts: {'type': 'default'} - Package: culmus-miriam-clm-fonts: {'type': 'default'} - Package: culmus-drugulin-clm-fonts: {'type': 'default'} - Package: culmus-aharoni-clm-fonts: {'type': 'default'} - Package: google-noto-sans-hebrew-fonts: {'type': 'default'} - Package: culmus-keteryg-fonts: {'type': 'default'} - Package: culmus-stamashkenaz-clm-fonts: {'type': 'default'} - Package: culmus-yehuda-clm-fonts: {'type': 'default'} - Package: culmus-nachlieli-clm-fonts: {'type': 'default'} - Package: culmus-caladings-clm-fonts: {'type': 'default'} - Package: culmus-hadasim-clm-fonts: {'type': 'default'} - Package: culmus-frank-ruehl-clm-fonts: {'type': 'default'} - Package: culmus-david-clm-fonts: {'type': 'default'} - Package: culmus-simple-clm-fonts: {'type': 'default'} -Group: ha (High Availability) - Package: pcs: {'type': 'mandatory'} - Package: fence-agents-all: {'type': 'mandatory'} - Package: pacemaker: {'type': 'mandatory'} - Package: omping: {'type': 'mandatory'} - Package: clufter: {'type': 'optional'} -Group: hindi-support (Hindi Support) - Package: lohit-devanagari-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: samyak-devanagari-fonts: {'type': 'default'} - Package: sarai-fonts: {'type': 'default'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: input-methods (Input Methods) - Package: ibus-libzhuyin: {'type': 'default'} - Package: im-chooser: {'type': 'default'} - Package: ibus-typing-booster: {'type': 'default'} - Package: ibus-libpinyin: {'type': 'default'} - Package: imsettings: {'type': 'default'} - Package: ibus-hangul: {'type': 'default'} - Package: ibus-m17n: {'type': 'default'} - Package: ibus-rawcode: {'type': 'default'} - Package: ibus-kkc: {'type': 'default'} - Package: uim-qt3: {'type': 'optional'} - Package: uim-gtk2: {'type': 'optional'} - Package: ibus-skk: {'type': 'optional'} - Package: ibus-sayura: {'type': 'optional'} - Package: uim: {'type': 'optional'} - Package: WritRecogn: {'type': 'optional'} - Package: fcitx: {'type': 'optional'} - Package: scim-chewing: {'type': 'optional'} - Package: scim-tables-chinese-extra: {'type': 'optional'} - Package: input-pad: {'type': 'optional'} - Package: ibus-mozc: {'type': 'optional'} - Package: cellwriter: {'type': 'optional'} - Package: scim-bridge-qt3: {'type': 'optional'} - Package: ibus-fbterm: {'type': 'optional'} - Package: ibus-input-pad: {'type': 'optional'} - Package: scim-tables-chinese: {'type': 'optional'} - Package: scim-m17n: {'type': 'optional'} - Package: scim-bridge-gtk: {'type': 'optional'} - Package: scim-rawcode: {'type': 'optional'} - Package: ibus-table-cyrillic: {'type': 'optional'} - Package: ibus-table-array30: {'type': 'optional'} - Package: scim-array: {'type': 'optional'} - Package: scim-hangul: {'type': 'optional'} - Package: uim-anthy: {'type': 'optional'} - Package: scim-gtk: {'type': 'optional'} - Package: ibus-table: {'type': 'optional'} - Package: uim-canna: {'type': 'optional'} - Package: eekboard: {'type': 'optional'} - Package: ibus-xkbc: {'type': 'optional'} - Package: ibus-handwrite: {'type': 'optional'} - Package: scim-bridge-qt: {'type': 'optional'} - Package: scim-anthy: {'type': 'optional'} - Package: iok: {'type': 'optional'} - Package: ibus-bogo: {'type': 'optional'} - Package: uim-m17n: {'type': 'optional'} - Package: uim-skk: {'type': 'optional'} - Package: scim-thai: {'type': 'optional'} - Package: uim-gtk3: {'type': 'optional'} - Package: kinput2: {'type': 'optional'} - Package: scim-pinyin: {'type': 'optional'} - Package: ibus-anthy: {'type': 'optional'} - Package: scim-tables-additional: {'type': 'optional'} - Package: scim-fcitx: {'type': 'optional'} - Package: ibus-gucharmap: {'type': 'optional'} - Package: gcin: {'type': 'optional'} - Package: scim-sayura: {'type': 'optional'} - Package: imsettings-lxde: {'requires': 'lxde-common', 'type': 'conditional'} - Package: gtk2-immodule-xim: {'requires': 'gtk2', 'type': 'conditional'} - Package: imsettings-gsettings: {'requires': 'gnome-settings-daemon', 'type': 'conditional'} - Package: ibus-qt: {'requires': 'qt', 'type': 'conditional'} - Package: im-chooser-xfce: {'requires': 'xfce4-panel', 'type': 'conditional'} - Package: ibus-gtk3: {'requires': 'gtk3', 'type': 'conditional'} - Package: ibus-gtk2: {'requires': 'gtk2', 'type': 'conditional'} - Package: gtk3-immodule-xim: {'requires': 'gtk3', 'type': 'conditional'} - Package: imsettings-xfce: {'requires': 'xfce4-panel', 'type': 'conditional'} - Package: imsettings-cinnamon: {'requires': 'cinnamon', 'type': 'conditional'} - Package: imsettings-qt: {'requires': 'qt', 'type': 'conditional'} - Package: imsettings-mate: {'requires': 'mate-settings-daemon', 'type': 'conditional'} -Group: japanese-support (Japanese Support) - Package: vlgothic-p-fonts: {'type': 'default'} - Package: vlgothic-fonts: {'type': 'default'} - Package: migemo: {'type': 'optional'} - Package: stardict-dic-ja: {'type': 'optional'} - Package: ipa-gothic-fonts: {'type': 'optional'} - Package: mona-sazanami-fonts: {'type': 'optional'} - Package: sazanami-gothic-fonts: {'type': 'optional'} - Package: mecab-ipadic: {'type': 'optional'} - Package: ipa-pmincho-fonts: {'type': 'optional'} - Package: mona-bitmap-fonts: {'type': 'optional'} - Package: ibus-mozc: {'type': 'optional'} - Package: ebview: {'type': 'optional'} - Package: jfbterm: {'type': 'optional'} - Package: oniguruma: {'type': 'optional'} - Package: nkf: {'type': 'optional'} - Package: motoya-lmaru-fonts: {'type': 'optional'} - Package: mecab: {'type': 'optional'} - Package: lv: {'type': 'optional'} - Package: ipa-mincho-fonts: {'type': 'optional'} - Package: emacs-common-ddskk: {'type': 'optional'} - Package: ipa-ex-gothic-fonts: {'type': 'optional'} - Package: m17n-db-extras: {'type': 'optional'} - Package: kcc: {'type': 'optional'} - Package: motoya-lcedar-fonts: {'type': 'optional'} - Package: mecab-jumandic: {'type': 'optional'} - Package: kinput2: {'type': 'optional'} - Package: sazanami-mincho-fonts: {'type': 'optional'} - Package: scim-anthy: {'type': 'optional'} - Package: hanazono-fonts: {'type': 'optional'} - Package: ipa-ex-mincho-fonts: {'type': 'optional'} - Package: uim-canna: {'type': 'optional'} - Package: mona-vlgothic-fonts: {'type': 'optional'} - Package: eblook: {'type': 'optional'} - Package: cmigemo: {'type': 'optional'} - Package: jisksp16-1990-fonts: {'type': 'optional'} - Package: perl-NKF: {'type': 'optional'} - Package: mfiler3: {'type': 'optional'} - Package: ipa-pgothic-fonts: {'type': 'optional'} - Package: uim-skk: {'type': 'optional'} - Package: japanese-bitmap-fonts: {'type': 'optional'} - Package: ibus-kkc: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} - Package: uim-anthy: {'requires': 'uim', 'type': 'conditional'} -Group: java (Java) - Package: java-1.8.0-openjdk: {'type': 'mandatory'} - Package: icedtea-web: {'type': 'default'} - Package: abrt-java-connector: {'type': 'default'} -Group: javaenterprise (Java Application Server) - Package: wildfly: {'type': 'mandatory'} - Package: java-1.8.0-openjdk-devel: {'type': 'mandatory'} - Package: jboss-modules: {'type': 'mandatory'} - Package: maven: {'type': 'mandatory'} - Package: abrt-java-connector: {'type': 'mandatory'} - Package: java-1.8.0-openjdk: {'type': 'mandatory'} -Group: java-development (Java Development) - Package: ant: {'type': 'mandatory'} - Package: java-1.8.0-openjdk-devel: {'type': 'mandatory'} - Package: ecj: {'type': 'mandatory'} - Package: apache-commons-math: {'type': 'default'} - Package: bcel: {'type': 'default'} - Package: avalon-framework: {'type': 'default'} - Package: java_cup: {'type': 'default'} - Package: apache-commons-validator: {'type': 'default'} - Package: mx4j: {'type': 'default'} - Package: apache-commons-lang: {'type': 'default'} - Package: xml-commons-resolver: {'type': 'default'} - Package: apache-commons-discovery: {'type': 'default'} - Package: java-1.8.0-openjdk-demo: {'type': 'default'} - Package: apache-commons-exec: {'type': 'default'} - Package: apache-commons-el: {'type': 'default'} - Package: ldapjdk: {'type': 'default'} - Package: xerces-j2: {'type': 'default'} - Package: apache-commons-codec: {'type': 'default'} - Package: apache-commons-launcher: {'type': 'default'} - Package: apache-commons-configuration: {'type': 'default'} - Package: ant-antlr: {'type': 'default'} - Package: ant-apache-bcel: {'type': 'default'} - Package: java-1.8.0-openjdk-src: {'type': 'default'} - Package: regexp: {'type': 'default'} - Package: apache-commons-dbcp: {'type': 'default'} - Package: xml-commons-apis: {'type': 'default'} - Package: apache-commons-io: {'type': 'default'} - Package: xalan-j2-xsltc: {'type': 'default'} - Package: ant-apache-log4j: {'type': 'default'} - Package: gnu-getopt: {'type': 'default'} - Package: apache-commons-collections: {'type': 'default'} - Package: ant-swing: {'type': 'default'} - Package: apache-commons-net: {'type': 'default'} - Package: apache-commons-modeler: {'type': 'default'} - Package: jdepend: {'type': 'default'} - Package: avalon-logkit: {'type': 'default'} - Package: apache-commons-compress: {'type': 'default'} - Package: ant-apache-regexp: {'type': 'default'} - Package: jakarta-oro: {'type': 'default'} - Package: apache-commons-beanutils: {'type': 'default'} - Package: ant-apache-resolver: {'type': 'default'} - Package: log4j: {'type': 'default'} - Package: xalan-j2: {'type': 'default'} - Package: maven: {'type': 'default'} - Package: ant-junit: {'type': 'default'} - Package: ant-apache-oro: {'type': 'default'} - Package: ant-javamail: {'type': 'default'} - Package: jflex: {'type': 'default'} - Package: ant-commons-logging: {'type': 'default'} - Package: apache-commons-digester: {'type': 'default'} - Package: junit: {'type': 'default'} - Package: ant-jdepend: {'type': 'default'} - Package: apache-commons-pool: {'type': 'default'} - Package: abrt-java-connector: {'type': 'default'} - Package: java-1.8.0-openjdk-javadoc: {'type': 'default'} - Package: apache-commons-fileupload: {'type': 'default'} - Package: apache-commons-daemon: {'type': 'default'} - Package: apache-commons-logging: {'type': 'default'} - Package: javamail: {'type': 'default'} - Package: jinput: {'type': 'optional'} - Package: pmd: {'type': 'optional'} - Package: jcip-annotations: {'type': 'optional'} - Package: ant-findbugs: {'type': 'optional'} - Package: jsr-305: {'type': 'optional'} - Package: findbugs-tools: {'type': 'optional'} - Package: findbugs: {'type': 'optional'} -Group: kde-desktop (KDE) - Package: kde-platform-plugin: {'type': 'mandatory'} - Package: kde-print-manager: {'type': 'mandatory'} - Package: sddm-breeze: {'type': 'mandatory'} - Package: plasma-desktop: {'type': 'mandatory'} - Package: konsole5: {'type': 'mandatory'} - Package: kwrite: {'type': 'mandatory'} - Package: kscreen: {'type': 'mandatory'} - Package: kgpg: {'type': 'mandatory'} - Package: cagibi: {'type': 'mandatory'} - Package: abrt-desktop: {'type': 'mandatory'} - Package: plasma-nm-openvpn: {'type': 'mandatory'} - Package: initial-setup-gui: {'type': 'mandatory'} - Package: kcharselect: {'type': 'mandatory'} - Package: konqueror: {'type': 'mandatory'} - Package: kde-gtk-config: {'type': 'mandatory'} - Package: kf5-kipi-plugins: {'type': 'mandatory'} - Package: plasma-breeze: {'type': 'mandatory'} - Package: xorg-x11-drv-libinput: {'type': 'mandatory'} - Package: kf5-baloo-file: {'type': 'mandatory'} - Package: kmenuedit: {'type': 'mandatory'} - Package: kwalletmanager: {'type': 'mandatory'} - Package: kuser: {'type': 'mandatory'} - Package: firewall-config: {'type': 'mandatory'} - Package: plasma-workspace-drkonqi: {'type': 'mandatory'} - Package: kdepasswd: {'type': 'mandatory'} - Package: plasma-nm-l2tp: {'type': 'mandatory'} - Package: polkit-kde: {'type': 'mandatory'} - Package: plasma-desktop-doc: {'type': 'mandatory'} - Package: kdnssd: {'type': 'mandatory'} - Package: plasma-workspace-geolocation: {'type': 'mandatory'} - Package: sni-qt: {'type': 'mandatory'} - Package: sddm: {'type': 'mandatory'} - Package: plasma-nm: {'type': 'mandatory'} - Package: qt5-qtbase-gui: {'type': 'mandatory'} - Package: adwaita-gtk2-theme: {'type': 'mandatory'} - Package: kf5-akonadi-server-mysql: {'type': 'mandatory'} - Package: khotkeys: {'type': 'mandatory'} - Package: kdeplasma-addons: {'type': 'mandatory'} - Package: phonon-qt5-backend-gstreamer: {'type': 'mandatory'} - Package: kdegames-minimal: {'type': 'mandatory'} - Package: akregator: {'type': 'mandatory'} - Package: kwalletmanager5: {'type': 'mandatory'} - Package: NetworkManager-config-connectivity-fedora: {'type': 'mandatory'} - Package: kcolorchooser: {'type': 'mandatory'} - Package: kontact: {'type': 'mandatory'} - Package: colord-kde: {'type': 'mandatory'} - Package: kde-settings-pulseaudio: {'type': 'mandatory'} - Package: plasma-pa: {'type': 'mandatory'} - Package: qt5-qtdeclarative: {'type': 'mandatory'} - Package: kcm_systemd: {'type': 'mandatory'} - Package: kf5-akonadi-server: {'type': 'mandatory'} - Package: knode: {'type': 'mandatory'} - Package: plasma-nm-pptp: {'type': 'mandatory'} - Package: kde-partitionmanager: {'type': 'mandatory'} - Package: plasma-user-manager: {'type': 'mandatory'} - Package: plasma-pk-updates: {'type': 'mandatory'} - Package: pam-kwallet: {'type': 'mandatory'} - Package: kmail: {'type': 'mandatory'} - Package: kwin: {'type': 'mandatory'} - Package: kde-style-breeze: {'type': 'mandatory'} - Package: apper: {'type': 'mandatory'} - Package: kfind: {'type': 'mandatory'} - Package: korganizer: {'type': 'mandatory'} - Package: keditbookmarks: {'type': 'mandatory'} - Package: phonon-backend-gstreamer: {'type': 'mandatory'} - Package: ksysguard: {'type': 'mandatory'} - Package: kscreenlocker: {'type': 'mandatory'} - Package: glibc-all-langpacks: {'type': 'mandatory'} - Package: kruler: {'type': 'mandatory'} - Package: sddm-kcm: {'type': 'mandatory'} - Package: plasma-nm-openconnect: {'type': 'mandatory'} - Package: ksshaskpass: {'type': 'mandatory'} - Package: kde-runtime: {'type': 'mandatory'} - Package: plasma-nm-vpnc: {'type': 'mandatory'} - Package: kdeaccessibility: {'type': 'mandatory'} - Package: kamera: {'type': 'mandatory'} - Package: qt5-qdbusviewer: {'type': 'mandatory'} - Package: dolphin: {'type': 'mandatory'} - Package: plasma-nm-openswan: {'type': 'mandatory'} - Package: spectacle: {'type': 'mandatory'} - Package: kdialog: {'type': 'mandatory'} - Package: khelpcenter: {'type': 'mandatory'} - Package: kget: {'type': 'mandatory'} - Package: kinfocenter: {'type': 'mandatory'} - Package: kdegraphics-thumbnailers: {'type': 'mandatory'} - Package: cups-pk-helper: {'type': 'mandatory'} - Package: kcalc: {'type': 'mandatory'} - Package: gwenview: {'type': 'mandatory'} - Package: kaddressbook: {'type': 'mandatory'} - Package: bluedevil: {'type': 'mandatory'} - Package: kdelibs: {'type': 'mandatory'} - Package: kwebkitpart: {'type': 'mandatory'} - Package: breeze-icon-theme: {'type': 'mandatory'} - Package: gnome-keyring-pam: {'type': 'mandatory'} - Package: plasma-workspace: {'type': 'mandatory'} - Package: pinentry-qt: {'requires': 'pinentry', 'type': 'conditional'} - Package: qt-at-spi: {'requires': 'at-spi2-core', 'type': 'conditional'} - Package: libreoffice-kde: {'requires': 'libreoffice-core', 'type': 'conditional'} - Package: socat: {'requires': 'pam_kwallet', 'type': 'conditional'} -Group: kde-apps (KDE Applications) - Package: krfb: {'type': 'mandatory'} - Package: kdegames-minimal: {'type': 'mandatory'} - Package: konversation: {'type': 'mandatory'} - Package: kolourpaint: {'type': 'mandatory'} - Package: krusader: {'type': 'mandatory'} - Package: krdc: {'type': 'mandatory'} - Package: digikam: {'type': 'mandatory'} - Package: ktorrent: {'type': 'mandatory'} - Package: kde-connect: {'type': 'mandatory'} - Package: ark: {'type': 'mandatory'} -Group: kde-education (KDE Educational applications) - Package: kstars: {'type': 'mandatory'} - Package: kbruch: {'type': 'mandatory'} - Package: kanagram: {'type': 'mandatory'} - Package: parley: {'type': 'mandatory'} - Package: kiten: {'type': 'mandatory'} - Package: kalgebra: {'type': 'mandatory'} - Package: ktouch: {'type': 'mandatory'} - Package: kalzium: {'type': 'mandatory'} - Package: kmplot: {'type': 'mandatory'} - Package: klettres: {'type': 'mandatory'} - Package: kwordquiz: {'type': 'mandatory'} - Package: step: {'type': 'mandatory'} - Package: cantor: {'type': 'mandatory'} - Package: kgeography: {'type': 'mandatory'} - Package: kturtle: {'type': 'mandatory'} - Package: marble: {'type': 'mandatory'} - Package: blinken: {'type': 'mandatory'} - Package: rocs: {'type': 'mandatory'} - Package: kig: {'type': 'mandatory'} - Package: khangman: {'type': 'mandatory'} -Group: kf5-software-development (KDE Frameworks 5 Software Development) - Package: cmake: {'type': 'mandatory'} - Package: extra-cmake-modules: {'type': 'mandatory'} - Package: qt5-qtdeclarative-devel: {'type': 'default'} - Package: qt5-qttools-devel: {'type': 'default'} - Package: qt5-qtquickcontrols: {'type': 'default'} - Package: qt5-qtwebkit-devel: {'type': 'default'} - Package: qt5-qtserialport-devel: {'type': 'optional'} - Package: qt5-qtsensors-devel: {'type': 'optional'} - Package: qt5-qtlocation-devel: {'type': 'optional'} - Package: qt5-qtmultimedia-devel: {'type': 'optional'} - Package: qt5-qtxmlpatterns-devel: {'type': 'optional'} - Package: qt5-qtconnectivity-devel: {'type': 'optional'} - Package: qt5-qtscript-devel: {'type': 'optional'} - Package: qt5-qtsvg-devel: {'type': 'optional'} - Package: qt5-qtwayland-devel: {'type': 'optional'} - Package: qt-creator: {'type': 'optional'} - Package: qt5-qtx11extras-devel: {'type': 'optional'} - Package: qt5-qtimageformats-devel: {'type': 'optional'} - Package: qt5-qtquick1-devel: {'type': 'optional'} -Group: kde-media (KDE Multimedia support) - Package: kamoso: {'type': 'mandatory'} - Package: dragon: {'type': 'mandatory'} - Package: k3b: {'type': 'mandatory'} - Package: amarok: {'type': 'mandatory'} -Group: kde-office (KDE Office) - Package: calligra-stage: {'type': 'mandatory'} - Package: calligra-words: {'type': 'mandatory'} - Package: okular: {'type': 'mandatory'} - Package: calligra-sheets: {'type': 'mandatory'} -Group: kde-software-development (KDE Software Development) - Package: kdelibs-devel: {'type': 'mandatory'} - Package: cmake: {'type': 'mandatory'} - Package: qt-devel: {'type': 'mandatory'} - Package: kdesdk-kmtrace: {'type': 'default'} - Package: kdesdk-okteta: {'type': 'default'} - Package: kdesdk-umbrello: {'type': 'default'} - Package: pykde4-devel: {'type': 'default'} - Package: kdesdk-kompare: {'type': 'default'} - Package: kdesdk-kapptemplate: {'type': 'default'} - Package: kdesdk-kstartperf: {'type': 'default'} - Package: PyQt4-devel: {'type': 'default'} - Package: kdesdk-thumbnailers: {'type': 'default'} - Package: kdesdk-kcachegrind: {'type': 'default'} - Package: kdevelop: {'type': 'default'} - Package: kdepimlibs-devel: {'type': 'default'} - Package: kdesdk-dolphin-plugins: {'type': 'default'} - Package: kdesdk-kioslave: {'type': 'default'} - Package: kdesdk-scripts: {'type': 'default'} - Package: kdelibs-webkit-devel: {'type': 'default'} - Package: kdesdk-kuiviewer: {'type': 'default'} - Package: kdesdk-cervisia: {'type': 'default'} - Package: kdesdk-poxml: {'type': 'default'} - Package: kate: {'type': 'default'} - Package: kdesdk-kpartloader: {'type': 'default'} - Package: telepathy-qt4-devel: {'type': 'optional'} - Package: audiocd-kio-devel: {'type': 'optional'} - Package: kdbg: {'type': 'optional'} - Package: qt3-devel: {'type': 'optional'} - Package: kdelibs3-devel: {'type': 'optional'} - Package: rocs-devel: {'type': 'optional'} - Package: qtwebkit-devel: {'type': 'optional'} - Package: libkdegames-devel: {'type': 'optional'} - Package: kdegraphics-devel: {'type': 'optional'} - Package: krazy2: {'type': 'optional'} - Package: libkcompactdisc-devel: {'type': 'optional'} - Package: kate-devel: {'type': 'optional'} - Package: PyKDE-devel: {'type': 'optional'} - Package: kdepim-devel: {'type': 'optional'} - Package: kiten-devel: {'type': 'optional'} - Package: PyQt-devel: {'type': 'optional'} - Package: kde-baseapps-devel: {'type': 'optional'} - Package: qt-mobility-devel: {'type': 'optional'} - Package: kdebindings-devel: {'type': 'optional'} - Package: qt3-designer: {'type': 'optional'} - Package: marble-devel: {'type': 'optional'} - Package: kdenetwork-devel: {'type': 'optional'} - Package: qt-creator: {'type': 'optional'} - Package: libkcddb-devel: {'type': 'optional'} - Package: cantor-devel: {'type': 'optional'} - Package: kdewebdev-devel: {'type': 'optional'} - Package: ktp-common-internals-devel: {'type': 'optional'} - Package: gambas3-runtime: {'type': 'optional'} - Package: libkdeedu-devel: {'type': 'optional'} - Package: kdesvn: {'type': 'optional'} -Group: kde-telepathy (KDE Telepathy) - Package: ktp-text-ui: {'type': 'mandatory'} - Package: signon-kwallet-extension: {'type': 'mandatory'} - Package: ktp-contact-list: {'type': 'mandatory'} - Package: ktp-approver: {'type': 'mandatory'} - Package: ktp-contact-runner: {'type': 'mandatory'} - Package: ktp-desktop-applets: {'type': 'mandatory'} - Package: ktp-accounts-kcm: {'type': 'mandatory'} - Package: ktp-auth-handler: {'type': 'mandatory'} - Package: kaccounts-providers: {'type': 'mandatory'} - Package: ktp-send-file: {'type': 'mandatory'} - Package: ktp-kded-integration-module: {'type': 'mandatory'} - Package: ktp-filetransfer-handler: {'type': 'mandatory'} - Package: kaccounts-integration: {'type': 'mandatory'} -Group: kannada-support (Kannada Support) - Package: lohit-kannada-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: google-noto-sans-kannada-fonts: {'type': 'default'} - Package: navilu-fonts: {'type': 'default'} - Package: google-noto-sans-kannada-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: gubbi-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: kashmiri-support (Kashmiri Support) - Package: lohit-devanagari-fonts: {'type': 'mandatory'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: khmer-support (Khmer Support) - Package: khmeros-base-fonts: {'type': 'mandatory'} - Package: khmeros-battambang-fonts: {'type': 'default'} - Package: google-noto-sans-khmer-ui-fonts: {'type': 'default'} - Package: khmeros-bokor-fonts: {'type': 'default'} - Package: khmeros-metal-chrieng-fonts: {'type': 'default'} - Package: khmeros-siemreap-fonts: {'type': 'default'} - Package: khmeros-muol-fonts: {'type': 'default'} - Package: google-noto-sans-khmer-fonts: {'type': 'default'} - Package: khmeros-handwritten-fonts: {'type': 'default'} -Group: konkani-support (Konkani Support) - Package: lohit-devanagari-fonts: {'type': 'mandatory'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: korean-support (Korean Support) - Package: naver-nanum-myeongjo-fonts: {'type': 'default'} - Package: naver-nanum-pen-fonts: {'type': 'default'} - Package: naver-nanum-barun-gothic-fonts: {'type': 'default'} - Package: naver-nanum-brush-fonts: {'type': 'default'} - Package: naver-nanum-gothic-fonts: {'type': 'default'} - Package: un-extra-pilgia-fonts: {'type': 'optional'} - Package: un-extra-shinmun-fonts: {'type': 'optional'} - Package: baekmuk-ttf-dotum-fonts: {'type': 'optional'} - Package: un-core-dinaru-fonts: {'type': 'optional'} - Package: un-extra-jamonovel-fonts: {'type': 'optional'} - Package: un-extra-bom-fonts: {'type': 'optional'} - Package: un-extra-taza-fonts: {'type': 'optional'} - Package: baekmuk-ttf-batang-fonts: {'type': 'optional'} - Package: un-extra-penheulim-fonts: {'type': 'optional'} - Package: un-extra-jamosora-fonts: {'type': 'optional'} - Package: baekmuk-ttf-gulim-fonts: {'type': 'optional'} - Package: un-extra-vada-fonts: {'type': 'optional'} - Package: lv: {'type': 'optional'} - Package: un-extra-jamodotum-fonts: {'type': 'optional'} - Package: un-core-batang-fonts: {'type': 'optional'} - Package: un-core-gungseo-fonts: {'type': 'optional'} - Package: un-extra-yetgul-fonts: {'type': 'optional'} - Package: un-extra-jamobatang-fonts: {'type': 'optional'} - Package: un-extra-pen-fonts: {'type': 'optional'} - Package: un-core-graphic-fonts: {'type': 'optional'} - Package: baekmuk-bdf-fonts: {'type': 'optional'} - Package: un-core-dotum-fonts: {'type': 'optional'} - Package: nhn-nanum-gothic-coding-fonts: {'type': 'optional'} - Package: baekmuk-ttf-hline-fonts: {'type': 'optional'} - Package: un-core-pilgi-fonts: {'type': 'optional'} - Package: ibus-hangul: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: kurdish-support (Kurdish Support) - Package: kurdit-unikurd-web-fonts: {'type': 'default'} -Group: lxde-desktop (LXDE) - Package: gigolo: {'type': 'mandatory'} - Package: lxappearance: {'type': 'mandatory'} - Package: openbox: {'type': 'mandatory'} - Package: openssh-askpass: {'type': 'mandatory'} - Package: lxterminal: {'type': 'mandatory'} - Package: lxsession-edit: {'type': 'mandatory'} - Package: firewall-config: {'type': 'mandatory'} - Package: lxdm: {'type': 'mandatory'} - Package: lxtask: {'type': 'mandatory'} - Package: xscreensaver-extras: {'type': 'mandatory'} - Package: xcompmgr: {'type': 'mandatory'} - Package: fedora-icon-theme: {'type': 'mandatory'} - Package: lxsession: {'type': 'mandatory'} - Package: pcmanfm: {'type': 'mandatory'} - Package: galculator: {'type': 'mandatory'} - Package: xarchiver: {'type': 'mandatory'} - Package: notification-daemon: {'type': 'mandatory'} - Package: lxrandr: {'type': 'mandatory'} - Package: lxappearance-obconf: {'type': 'mandatory'} - Package: xdg-user-dirs-gtk: {'type': 'mandatory'} - Package: xscreensaver-base: {'type': 'mandatory'} - Package: yumex-dnf: {'type': 'mandatory'} - Package: adwaita-icon-theme: {'type': 'mandatory'} - Package: leafpad: {'type': 'mandatory'} - Package: initial-setup-gui: {'type': 'mandatory'} - Package: adwaita-gtk2-theme: {'type': 'mandatory'} - Package: xpad: {'type': 'mandatory'} - Package: nm-connection-editor: {'type': 'mandatory'} - Package: lxinput: {'type': 'mandatory'} - Package: obconf: {'type': 'mandatory'} - Package: lxlauncher: {'type': 'mandatory'} - Package: lxde-common: {'type': 'mandatory'} - Package: network-manager-applet: {'type': 'mandatory'} - Package: lxpanel: {'type': 'mandatory'} - Package: lxpolkit: {'type': 'mandatory'} - Package: perl-File-MimeInfo: {'type': 'mandatory'} - Package: upower: {'type': 'mandatory'} - Package: gpicview: {'type': 'mandatory'} - Package: gnome-keyring-pam: {'type': 'mandatory'} - Package: lxmenu-data: {'type': 'mandatory'} - Package: clipit: {'type': 'mandatory'} -Group: lxde-office (LXDE Office) - Package: gnumeric: {'type': 'mandatory'} - Package: abiword: {'type': 'mandatory'} - Package: osmo: {'type': 'mandatory'} -Group: lxqt-desktop (LXQt) - Package: lxqt-about: {'type': 'mandatory'} - Package: kwin: {'type': 'mandatory'} - Package: lxqt-session: {'type': 'mandatory'} - Package: lxqt-runner: {'type': 'mandatory'} - Package: sddm-breeze: {'type': 'mandatory'} - Package: breeze-gtk: {'type': 'mandatory'} - Package: firewall-config: {'type': 'mandatory'} - Package: qupzilla: {'type': 'mandatory'} - Package: breeze-cursor-theme: {'type': 'mandatory'} - Package: ark: {'type': 'mandatory'} - Package: fedora-icon-theme: {'type': 'mandatory'} - Package: qterminal-qt5: {'type': 'mandatory'} - Package: xdg-user-dirs: {'type': 'mandatory'} - Package: notification-daemon: {'type': 'mandatory'} - Package: lxqt-policykit: {'type': 'mandatory'} - Package: lxqt-common: {'type': 'mandatory'} - Package: openbox: {'type': 'mandatory'} - Package: lxqt-config: {'type': 'mandatory'} - Package: lxqt-globalkeys: {'type': 'mandatory'} - Package: lxqt-qtplugin: {'type': 'mandatory'} - Package: sddm: {'type': 'mandatory'} - Package: initial-setup-gui: {'type': 'mandatory'} - Package: lxqt-panel: {'type': 'mandatory'} - Package: obconf: {'type': 'mandatory'} - Package: pcmanfm-qt: {'type': 'mandatory'} - Package: lxqt-notificationd: {'type': 'mandatory'} - Package: network-manager-applet: {'type': 'mandatory'} - Package: lxqt-openssh-askpass: {'type': 'mandatory'} - Package: perl-File-MimeInfo: {'type': 'mandatory'} - Package: upower: {'type': 'mandatory'} - Package: breeze-icon-theme: {'type': 'mandatory'} - Package: qupzilla-kwallet: {'type': 'mandatory'} - Package: nm-connection-editor: {'type': 'mandatory'} - Package: lxqt-powermanagement: {'type': 'mandatory'} -Group: lxqt-office (LXQt Office) - Package: libreoffice-calc: {'type': 'mandatory'} - Package: libreoffice-impress: {'type': 'mandatory'} - Package: libreoffice-writer: {'type': 'mandatory'} -Group: legacy-fonts (Legacy Fonts) - Package: xorg-x11-fonts-misc: {'type': 'default'} - Package: xorg-x11-fonts-Type1: {'type': 'default'} - Package: xorg-x11-fonts-100dpi: {'type': 'default'} - Package: xorg-x11-fonts-ISO8859-15-100dpi: {'type': 'default'} - Package: culmus-stamashkenaz-clm-fonts: {'type': 'optional'} - Package: culmus-ellinia-clm-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-ISO8859-9-100dpi: {'type': 'optional'} - Package: nethack-bitmap-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-kates-fonts: {'type': 'optional'} - Package: culmus-drugulin-clm-fonts: {'type': 'optional'} - Package: culmus-aharoni-clm-fonts: {'type': 'optional'} - Package: oflb-dignas-handwriting-fonts: {'type': 'optional'} - Package: bitmap-fangsongti-fonts: {'type': 'optional'} - Package: fonts-KOI8-R-100dpi: {'type': 'optional'} - Package: efont-unicode-bdf: {'type': 'optional'} - Package: culmus-yehuda-clm-fonts: {'type': 'optional'} - Package: bitmap-console-fonts: {'type': 'optional'} - Package: texmacs-fedora-fonts: {'type': 'optional'} - Package: culmus-simple-clm-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-ISO8859-1-100dpi: {'type': 'optional'} - Package: artwiz-aleczapka-mints-strong-fonts: {'type': 'optional'} - Package: bitmap-lucida-typewriter-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-ethiopic: {'type': 'optional'} - Package: libdockapp-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-fonts: {'type': 'optional'} - Package: iso8859-2-misc-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-glisp-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-drift-fonts: {'type': 'optional'} - Package: culmus-miriam-clm-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-cyrillic: {'type': 'optional'} - Package: artwiz-aleczapka-edges-fonts: {'type': 'optional'} - Package: culmus-frank-ruehl-clm-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-cure-fonts: {'type': 'optional'} - Package: culmus-keteryg-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-ISO8859-14-75dpi: {'type': 'optional'} - Package: artwiz-aleczapka-lime-fonts: {'type': 'optional'} - Package: culmus-nachlieli-clm-fonts: {'type': 'optional'} - Package: culmus-caladings-clm-fonts: {'type': 'optional'} - Package: urw-fonts: {'type': 'optional'} - Package: fonts-KOI8-R-75dpi: {'type': 'optional'} - Package: culmus-david-clm-fonts: {'type': 'optional'} - Package: japanese-bitmap-fonts: {'type': 'optional'} - Package: ucs-miscfixed-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-ISO8859-14-100dpi: {'type': 'optional'} - Package: xorg-x11-fonts-ISO8859-15-75dpi: {'type': 'optional'} - Package: culmus-stamsefarad-clm-fonts: {'type': 'optional'} - Package: knm-new-fixed-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-75dpi: {'type': 'optional'} - Package: xorg-x11-fonts-ISO8859-9-75dpi: {'type': 'optional'} - Package: zvbi-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-ISO8859-1-75dpi: {'type': 'optional'} - Package: xorg-x11-fonts-ISO8859-2-100dpi: {'type': 'optional'} - Package: fonts-KOI8-R: {'type': 'optional'} - Package: terminus-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-fkp-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-ISO8859-2-75dpi: {'type': 'optional'} - Package: culmus-miriam-mono-clm-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-anorexia-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-aqui-fonts: {'type': 'optional'} - Package: iso8859-2-100dpi-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-nu-fonts: {'type': 'optional'} - Package: culmus-hadasim-clm-fonts: {'type': 'optional'} - Package: terminus-fonts-console: {'type': 'optional'} - Package: mona-bitmap-fonts: {'type': 'optional'} - Package: lyx-fonts: {'type': 'optional'} - Package: jisksp16-1990-fonts: {'type': 'optional'} - Package: ctan-musixtex-fonts: {'type': 'optional'} - Package: baekmuk-bdf-fonts: {'type': 'optional'} - Package: google-android-emoji-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-smoothansi-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-mints-mild-fonts: {'type': 'optional'} - Package: ghostscript-fonts: {'type': 'optional'} - Package: rosegarden4-feta-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-snap-fonts: {'type': 'optional'} - Package: wqy-unibit-fonts: {'type': 'optional'} - Package: iso8859-2-75dpi-fonts: {'type': 'optional'} - Package: bitmap-fixed-fonts: {'type': 'optional'} - Package: rosegarden4-parmesan-fonts: {'type': 'optional'} - Package: taipeifonts: {'type': 'optional'} - Package: wqy-bitmap-fonts: {'type': 'optional'} - Package: artwiz-aleczapka-gelly-fonts: {'type': 'optional'} -Group: legacy-network-server (Legacy Network Server) - Package: talk-server: {'type': 'optional'} - Package: telnet-server: {'type': 'optional'} - Package: rwho: {'type': 'optional'} - Package: rsh-server: {'type': 'optional'} - Package: rusers: {'type': 'optional'} - Package: bootparamd: {'type': 'optional'} - Package: rusers-server: {'type': 'optional'} - Package: tftp-server: {'type': 'optional'} - Package: rarpd: {'type': 'optional'} -Group: legacy-software-development (Legacy Software Development) - Package: compat-libstdc++-296: {'type': 'default'} - Package: compat-gcc-34: {'type': 'default'} - Package: compat-gcc-34-c++: {'type': 'default'} - Package: compat-libstdc++-33: {'type': 'default'} - Package: compat-gcc-34-g77: {'type': 'default'} -Group: legacy-software-support (Legacy Software Support) - Package: compat-libstdc++-296: {'type': 'default'} - Package: compat-libstdc++-33: {'type': 'default'} -Group: lepcha-support (Lepcha Support) - Package: sil-mingzat-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: iok: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: libreoffice (LibreOffice) - Package: libreoffice-impress: {'type': 'mandatory'} - Package: libreoffice-calc: {'type': 'mandatory'} - Package: libreoffice-emailmerge: {'type': 'mandatory'} - Package: libreoffice-graphicfilter: {'type': 'mandatory'} - Package: libreoffice-draw: {'type': 'mandatory'} - Package: libreoffice-writer: {'type': 'mandatory'} - Package: libreoffice-math: {'type': 'mandatory'} - Package: libreoffice-pyuno: {'type': 'optional'} - Package: libreoffice-base: {'type': 'optional'} -Group: libreoffice-development (LibreOffice Development) - Package: libreoffice-sdk: {'type': 'optional'} - Package: libreoffice-sdk-doc: {'type': 'optional'} -Group: livecd-tools (LiveCD Tools) - Package: kernel: {'type': 'mandatory'} - Package: syslinux: {'type': 'mandatory'} - Package: dracut-config-generic: {'type': 'mandatory'} - Package: grub2-efi: {'type': 'mandatory'} - Package: kernel-modules: {'type': 'mandatory'} - Package: kernel-modules-extra: {'type': 'mandatory'} - Package: dracut-live: {'type': 'mandatory'} -Group: load-balancer (Load Balancer) - Package: keepalived: {'type': 'mandatory'} - Package: ipvsadm: {'type': 'mandatory'} -Group: mate-desktop (MATE) - Package: exaile: {'type': 'mandatory'} - Package: gvfs-mtp: {'type': 'mandatory'} - Package: NetworkManager-vpnc-gnome: {'type': 'mandatory'} - Package: dconf-editor: {'type': 'mandatory'} - Package: pluma: {'type': 'mandatory'} - Package: xfburn: {'type': 'mandatory'} - Package: mate-applets: {'type': 'mandatory'} - Package: abrt-desktop: {'type': 'mandatory'} - Package: NetworkManager-iodine-gnome: {'type': 'mandatory'} - Package: marco: {'type': 'mandatory'} - Package: gnote: {'type': 'mandatory'} - Package: initial-setup-gui: {'type': 'mandatory'} - Package: libmatekbd: {'type': 'mandatory'} - Package: filezilla: {'type': 'mandatory'} - Package: mate-control-center: {'type': 'mandatory'} - Package: fros-recordmydesktop: {'type': 'mandatory'} - Package: hexchat: {'type': 'mandatory'} - Package: system-config-printer: {'type': 'mandatory'} - Package: system-config-users: {'type': 'mandatory'} - Package: mate-dictionary: {'type': 'mandatory'} - Package: mate-desktop: {'type': 'mandatory'} - Package: mate-terminal: {'type': 'mandatory'} - Package: caja-wallpaper: {'type': 'mandatory'} - Package: mate-panel: {'type': 'mandatory'} - Package: mate-calc: {'type': 'mandatory'} - Package: gvfs-smb: {'type': 'mandatory'} - Package: setroubleshoot: {'type': 'mandatory'} - Package: mate-themes: {'type': 'mandatory'} - Package: NetworkManager-l2tp: {'type': 'mandatory'} - Package: NetworkManager-openconnect: {'type': 'mandatory'} - Package: caja: {'type': 'mandatory'} - Package: gvfs-afc: {'type': 'mandatory'} - Package: system-config-language: {'type': 'mandatory'} - Package: mate-icon-theme: {'type': 'mandatory'} - Package: claws-mail: {'type': 'mandatory'} - Package: lightdm-gtk-greeter-settings: {'type': 'mandatory'} - Package: vim-enhanced: {'type': 'mandatory'} - Package: libmatemixer: {'type': 'mandatory'} - Package: seahorse: {'type': 'mandatory'} - Package: NetworkManager-pptp-gnome: {'type': 'mandatory'} - Package: f24-backgrounds-base: {'type': 'mandatory'} - Package: firefox: {'type': 'mandatory'} - Package: engrampa: {'type': 'mandatory'} - Package: atril: {'type': 'mandatory'} - Package: p7zip-plugins: {'type': 'mandatory'} - Package: blueman: {'type': 'mandatory'} - Package: caja-sendto: {'type': 'mandatory'} - Package: firewall-config: {'type': 'mandatory'} - Package: caja-open-terminal: {'type': 'mandatory'} - Package: NetworkManager-adsl: {'type': 'mandatory'} - Package: mate-user-guide: {'type': 'mandatory'} - Package: mozo: {'type': 'mandatory'} - Package: transmission-gtk: {'type': 'mandatory'} - Package: mate-polkit: {'type': 'mandatory'} - Package: f24-backgrounds-mate: {'type': 'mandatory'} - Package: NetworkManager-openvpn-gnome: {'type': 'mandatory'} - Package: xdg-user-dirs-gtk: {'type': 'mandatory'} - Package: gvfs-gphoto2: {'type': 'mandatory'} - Package: simple-scan: {'type': 'mandatory'} - Package: atril-caja: {'type': 'mandatory'} - Package: mate-notification-daemon: {'type': 'mandatory'} - Package: gvfs-fuse: {'type': 'mandatory'} - Package: mate-system-monitor: {'type': 'mandatory'} - Package: mate-screenshot: {'type': 'mandatory'} - Package: network-manager-applet: {'type': 'mandatory'} - Package: gucharmap: {'type': 'mandatory'} - Package: libmateweather: {'type': 'mandatory'} - Package: p7zip: {'type': 'mandatory'} - Package: mate-disk-usage-analyzer: {'type': 'mandatory'} - Package: lightdm-gtk: {'type': 'mandatory'} - Package: mate-menus-preferences-category-menu: {'type': 'mandatory'} - Package: mate-settings-daemon: {'type': 'mandatory'} - Package: lightdm: {'type': 'mandatory'} - Package: NetworkManager-libreswan-gnome: {'type': 'mandatory'} - Package: mate-media: {'type': 'mandatory'} - Package: mate-backgrounds: {'type': 'mandatory'} - Package: yumex-dnf: {'type': 'mandatory'} - Package: mate-menus: {'type': 'mandatory'} - Package: gparted: {'type': 'mandatory'} - Package: f24-backgrounds-extras-base: {'type': 'mandatory'} - Package: libsecret: {'type': 'mandatory'} - Package: gtk2-engines: {'type': 'mandatory'} - Package: NetworkManager-bluetooth: {'type': 'mandatory'} - Package: mate-screensaver: {'type': 'mandatory'} - Package: system-config-date: {'type': 'mandatory'} - Package: caja-image-converter: {'type': 'mandatory'} - Package: mate-power-manager: {'type': 'mandatory'} - Package: yelp: {'type': 'mandatory'} - Package: mate-session-manager: {'type': 'mandatory'} - Package: gvfs-archive: {'type': 'mandatory'} - Package: eom: {'type': 'mandatory'} - Package: abrt-java-connector: {'type': 'mandatory'} - Package: mate-search-tool: {'type': 'mandatory'} - Package: parole: {'type': 'mandatory'} - Package: mate-system-log: {'type': 'mandatory'} -Group: mate-applications (MATE Applications) - Package: caja-beesu: {'type': 'mandatory'} - Package: atril-thumbnailer: {'type': 'mandatory'} - Package: mate-sensors-applet: {'type': 'mandatory'} - Package: mate-utils: {'type': 'mandatory'} - Package: mintmenu: {'type': 'mandatory'} - Package: caja-beesu-manager: {'type': 'mandatory'} - Package: pidgin: {'type': 'mandatory'} - Package: python-caja: {'type': 'mandatory'} - Package: pluma-beesu-plugin: {'type': 'mandatory'} - Package: mate-applet-softupd: {'type': 'mandatory'} - Package: firewall-applet: {'type': 'mandatory'} - Package: tigervnc: {'type': 'mandatory'} - Package: caja-share: {'type': 'mandatory'} - Package: caja-actions: {'type': 'mandatory'} - Package: mate-icon-theme-faenza: {'type': 'mandatory'} -Group: mate-compiz (MATE Compiz) - Package: compizconfig-python: {'type': 'mandatory'} - Package: simple-ccsm: {'type': 'mandatory'} - Package: compiz: {'type': 'mandatory'} - Package: compiz-plugins-experimental: {'type': 'mandatory'} - Package: compiz-bcop: {'type': 'mandatory'} - Package: compiz-plugins-main: {'type': 'mandatory'} - Package: ccsm: {'type': 'mandatory'} - Package: libcompizconfig: {'type': 'mandatory'} - Package: compiz-manager: {'type': 'mandatory'} - Package: emerald-themes: {'type': 'mandatory'} - Package: compiz-plugins-extra: {'type': 'mandatory'} - Package: emerald: {'type': 'mandatory'} - Package: fusion-icon: {'type': 'mandatory'} -Group: mail-server (Mail Server) - Package: dovecot: {'type': 'default'} - Package: sendmail-cf: {'type': 'default'} - Package: cyrus-sasl: {'type': 'default'} - Package: spamassassin: {'type': 'default'} - Package: sendmail: {'type': 'default'} - Package: clamav-data: {'type': 'optional'} - Package: up-imapproxy: {'type': 'optional'} - Package: crm114: {'type': 'optional'} - Package: clamav-milter: {'type': 'optional'} - Package: mailman: {'type': 'optional'} - Package: enemies-of-carlotta: {'type': 'optional'} - Package: exim: {'type': 'optional'} - Package: roundcubemail: {'type': 'optional'} - Package: imp: {'type': 'optional'} - Package: pyzor: {'type': 'optional'} - Package: milter-regex: {'type': 'optional'} - Package: opendkim: {'type': 'optional'} - Package: clamav: {'type': 'optional'} - Package: spambayes: {'type': 'optional'} - Package: exim-clamav: {'type': 'optional'} - Package: cyrus-imapd: {'type': 'optional'} - Package: sqlgrey: {'type': 'optional'} - Package: squirrelmail: {'type': 'optional'} - Package: spamass-milter: {'type': 'optional'} - Package: amavisd-new: {'type': 'optional'} - Package: postfix: {'type': 'optional'} - Package: esmtp: {'type': 'optional'} - Package: uw-imap: {'type': 'optional'} - Package: dbmail: {'type': 'optional'} - Package: exim-doc: {'type': 'optional'} -Group: maithili-support (Maithili Support) - Package: lohit-devanagari-fonts: {'type': 'mandatory'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: malayalam-support (Malayalam Support) - Package: smc-meera-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: smc-anjalioldlipi-fonts: {'type': 'default'} - Package: smc-suruma-fonts: {'type': 'default'} - Package: smc-rachana-fonts: {'type': 'default'} - Package: google-noto-sans-malayalam-fonts: {'type': 'default'} - Package: lohit-malayalam-fonts: {'type': 'default'} - Package: samyak-malayalam-fonts: {'type': 'default'} - Package: smc-dyuthi-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: smc-raghumalayalam-fonts: {'type': 'default'} - Package: smc-kalyani-fonts: {'type': 'default'} - Package: google-noto-sans-malayalam-ui-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: manipuri-support (Manipuri Support) - Package: lohit-bengali-fonts: {'type': 'mandatory'} - Package: iok: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: marathi-support (Marathi Support) - Package: lohit-marathi-fonts: {'type': 'mandatory'} - Package: samyak-devanagari-fonts: {'type': 'default'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: mysql (MariaDB (MySQL) Database) - Package: mariadb: {'type': 'mandatory'} - Package: mariadb-server: {'type': 'default'} - Package: unixODBC: {'type': 'default'} - Package: python-mysql: {'type': 'default'} - Package: perl-DBD-MySQL: {'type': 'default'} - Package: mysql-connector-odbc: {'type': 'default'} - Package: libdbi-dbd-mysql: {'type': 'default'} - Package: qt-mysql: {'type': 'optional'} - Package: php-mysqlnd: {'type': 'optional'} - Package: mariadb-devel: {'type': 'optional'} - Package: mysqltuner: {'type': 'optional'} - Package: mysqlreport: {'type': 'optional'} - Package: mariadb-bench: {'type': 'optional'} - Package: qt3-MySQL: {'type': 'optional'} -Group: medical (Medical Applications) - Package: aeskulap: {'type': 'default'} - Package: gnumed: {'type': 'default'} - Package: gnumed-server: {'type': 'default'} -Group: milkymist (Milkymist) - Package: vim-common: {'type': 'default'} - Package: avr-gdb: {'type': 'default'} - Package: gtkwave: {'type': 'default'} - Package: flterm: {'type': 'default'} - Package: qemu: {'type': 'default'} - Package: gcc: {'type': 'default'} - Package: lemon: {'type': 'default'} - Package: libftdi-devel: {'type': 'default'} - Package: automake: {'type': 'default'} - Package: avr-binutils: {'type': 'default'} - Package: avr-libc: {'type': 'default'} - Package: llvm: {'type': 'default'} - Package: gd-devel: {'type': 'default'} - Package: avr-gcc-c++: {'type': 'default'} - Package: avr-libc-doc: {'type': 'default'} - Package: iverilog: {'type': 'default'} - Package: clang: {'type': 'default'} - Package: openocd: {'type': 'default'} - Package: gplcver: {'type': 'default'} - Package: re2c: {'type': 'default'} - Package: tftp: {'type': 'default'} - Package: autoconf: {'type': 'default'} - Package: avr-gcc: {'type': 'default'} - Package: tftp-server: {'type': 'default'} - Package: srecord: {'type': 'default'} -Group: mingw32 (MinGW cross-compiler) - Package: mingw32-binutils: {'type': 'mandatory'} - Package: mingw32-gcc: {'type': 'mandatory'} - Package: mingw32-crt: {'type': 'mandatory'} - Package: mingw32-filesystem: {'type': 'mandatory'} - Package: mingw32-headers: {'type': 'mandatory'} - Package: mingw32-crossreport: {'type': 'default'} - Package: mingw32-nsis: {'type': 'default'} - Package: wine: {'type': 'default'} - Package: mingw32-sqlite: {'type': 'optional'} - Package: mingw32-libxml2: {'type': 'optional'} - Package: mingw32-glib2: {'type': 'optional'} - Package: mingw32-libgcrypt: {'type': 'optional'} - Package: mingw32-libgpg-error: {'type': 'optional'} - Package: mingw32-zlib: {'type': 'optional'} - Package: mingw32-dlfcn: {'type': 'optional'} - Package: mingw32-termcap: {'type': 'optional'} - Package: mingw32-bzip2: {'type': 'optional'} - Package: mingw32-openssl: {'type': 'optional'} - Package: mingw32-libpng: {'type': 'optional'} - Package: mingw32-pdcurses: {'type': 'optional'} - Package: mingw32-readline: {'type': 'optional'} - Package: mingw32-SDL: {'type': 'optional'} - Package: mingw32-cairo: {'type': 'optional'} - Package: mingw32-pixman: {'type': 'optional'} - Package: mingw32-atk: {'type': 'optional'} - Package: mingw32-gdbm: {'type': 'optional'} - Package: mingw32-libjpeg-turbo: {'type': 'optional'} - Package: mingw32-win-iconv: {'type': 'optional'} - Package: mingw32-gettext: {'type': 'optional'} - Package: mingw32-pthreads: {'type': 'optional'} - Package: mingw32-proj: {'type': 'optional'} - Package: mingw32-freetype: {'type': 'optional'} - Package: mingw32-nsiswrapper: {'requires': 'mingw32-nsis', 'type': 'conditional'} -Group: mongodb (MongoDB) - Package: mongodb-server: {'type': 'mandatory'} - Package: mongodb: {'type': 'mandatory'} - Package: mongodb-devel: {'type': 'mandatory'} - Package: libmongodb: {'type': 'mandatory'} -Group: multimedia (Multimedia) - Package: alsa-utils: {'type': 'mandatory'} - Package: alsa-ucm: {'type': 'mandatory'} - Package: pulseaudio-utils: {'type': 'mandatory'} - Package: gstreamer1-plugins-bad-free: {'type': 'mandatory'} - Package: gstreamer1-plugins-good: {'type': 'mandatory'} - Package: pulseaudio: {'type': 'mandatory'} - Package: pulseaudio-module-x11: {'type': 'mandatory'} - Package: PackageKit-gstreamer-plugin: {'type': 'mandatory'} - Package: alsa-plugins-pulseaudio: {'type': 'mandatory'} - Package: gstreamer-plugins-good: {'requires': 'gstreamer', 'type': 'conditional'} - Package: gstreamer-plugins-bad-free: {'requires': 'gstreamer', 'type': 'conditional'} - Package: gstreamer-plugins-espeak: {'requires': 'gstreamer', 'type': 'conditional'} -Group: hawaii-media (Multimedia support for Hawaii) - Package: pavucontrol: {'type': 'mandatory'} -Group: lxde-media (Multimedia support for LXDE) - Package: lxmusic: {'type': 'mandatory'} - Package: pavucontrol: {'type': 'mandatory'} - Package: asunder: {'type': 'mandatory'} - Package: pnmixer: {'type': 'mandatory'} - Package: gnomebaker: {'type': 'mandatory'} -Group: lxqt-media (Multimedia support for LXQt) - Package: pavucontrol: {'type': 'mandatory'} - Package: pnmixer: {'type': 'mandatory'} -Group: xfce-media (Multimedia support for Xfce) - Package: xfburn: {'type': 'mandatory'} - Package: pavucontrol: {'type': 'mandatory'} - Package: parole: {'type': 'mandatory'} - Package: asunder: {'type': 'mandatory'} - Package: pragha: {'type': 'mandatory'} -Group: burmese-support (Myanmar (Burmese) Support) - Package: sil-padauk-fonts: {'type': 'default'} -Group: nepali-support (Nepali Support) - Package: madan-fonts: {'type': 'mandatory'} - Package: lohit-devanagari-fonts: {'type': 'mandatory'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: scim-tables-nepali: {'type': 'optional'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: network-server (Network Servers) - Package: ypserv: {'type': 'optional'} - Package: rinetd: {'type': 'optional'} - Package: ahcpd: {'type': 'optional'} - Package: openldap-servers: {'type': 'optional'} - Package: tigervnc-server: {'type': 'optional'} - Package: nsd: {'type': 'optional'} - Package: vtun: {'type': 'optional'} - Package: kannel: {'type': 'optional'} - Package: ucarp: {'type': 'optional'} - Package: cobbler: {'type': 'optional'} - Package: torque-server: {'type': 'optional'} - Package: 389-ds-base: {'type': 'optional'} - Package: koan: {'type': 'optional'} - Package: xl2tpd: {'type': 'optional'} - Package: jabberd: {'type': 'optional'} - Package: puppet-server: {'type': 'optional'} - Package: netatalk: {'type': 'optional'} - Package: dhcp: {'type': 'optional'} - Package: krb5-server: {'type': 'optional'} - Package: flumotion: {'type': 'optional'} - Package: radvd: {'type': 'optional'} - Package: ipxripd: {'type': 'optional'} - Package: fwknop: {'type': 'optional'} - Package: icecast: {'type': 'optional'} - Package: quagga: {'type': 'optional'} - Package: polipo: {'type': 'optional'} - Package: vnc-reflector: {'type': 'optional'} - Package: sobby: {'type': 'optional'} - Package: libreswan: {'type': 'optional'} - Package: oidentd: {'type': 'optional'} - Package: znc: {'type': 'optional'} - Package: freenx-server: {'type': 'optional'} - Package: babeld: {'type': 'optional'} - Package: amanda-server: {'type': 'optional'} - Package: dnsmasq: {'type': 'optional'} - Package: ejabberd: {'type': 'optional'} - Package: privoxy: {'type': 'optional'} - Package: freeradius: {'type': 'optional'} -Group: news-server (News Server) - Package: inn: {'type': 'mandatory'} - Package: newscache: {'type': 'optional'} - Package: cleanfeed: {'type': 'optional'} - Package: suck: {'type': 'optional'} - Package: leafnode: {'type': 'optional'} - Package: newsx: {'type': 'optional'} -Group: ocaml (OCaml) - Package: ocaml-findlib-devel: {'type': 'mandatory'} - Package: ocaml-x11: {'type': 'mandatory'} - Package: ocaml: {'type': 'mandatory'} - Package: ocaml-runtime: {'type': 'mandatory'} - Package: ocaml-ocamldoc: {'type': 'mandatory'} - Package: ocaml-camlp4-devel: {'type': 'default'} - Package: emacs-tuareg: {'type': 'default'} - Package: ocaml-pxp-devel: {'type': 'optional'} - Package: xemacs-tuareg: {'type': 'optional'} - Package: ocaml-ocamlgraph-devel: {'type': 'optional'} - Package: ocaml-ssl-devel: {'type': 'optional'} - Package: ocaml-zarith-devel: {'type': 'optional'} - Package: ocaml-xml-light-devel: {'type': 'optional'} - Package: ocaml-lablgtk-devel: {'type': 'optional'} - Package: ocaml-expat-devel: {'type': 'optional'} - Package: ocaml-curses-devel: {'type': 'optional'} - Package: ocaml-camomile-devel: {'type': 'optional'} - Package: ocaml-labltk-devel: {'type': 'optional'} - Package: ocaml-bitstring-devel: {'type': 'optional'} - Package: ocaml-csv-devel: {'type': 'optional'} - Package: ocaml-xmlrpc-light-devel: {'type': 'optional'} - Package: ocaml-tplib-devel: {'type': 'optional'} - Package: ocaml-lablgl-devel: {'type': 'optional'} - Package: ocaml-curl-devel: {'type': 'optional'} - Package: ocaml-extlib-devel: {'type': 'optional'} - Package: ocaml-calendar-devel: {'type': 'optional'} - Package: ocaml-pcre-devel: {'type': 'optional'} - Package: ocaml-ocamlnet-devel: {'type': 'optional'} - Package: ocaml-menhir-devel: {'type': 'optional'} -Group: odia-support (Odia Support) - Package: lohit-odia-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: samyak-odia-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: office (Office/Productivity) - Package: libreoffice-impress: {'type': 'optional'} - Package: alexandria: {'type': 'optional'} - Package: libreoffice-base: {'type': 'optional'} - Package: kreetingkard_templates: {'type': 'optional'} - Package: pdfedit: {'type': 'optional'} - Package: texmaker: {'type': 'optional'} - Package: kchmviewer-qt: {'type': 'optional'} - Package: texlive-xdvi: {'type': 'optional'} - Package: libreoffice-voikko: {'type': 'optional'} - Package: rednotebook: {'type': 'optional'} - Package: xournal: {'type': 'optional'} - Package: libreoffice-writer: {'type': 'optional'} - Package: evince: {'type': 'optional'} - Package: libreoffice-graphicfilter: {'type': 'optional'} - Package: taskjuggler: {'type': 'optional'} - Package: Zim: {'type': 'optional'} - Package: gramps: {'type': 'optional'} - Package: klatexformula-ktexteditor-plugin: {'type': 'optional'} - Package: cherrytree: {'type': 'optional'} - Package: gourmet: {'type': 'optional'} - Package: abiword: {'type': 'optional'} - Package: lyx: {'type': 'optional'} - Package: calligra: {'type': 'optional'} - Package: calibre: {'type': 'optional'} - Package: skrooge: {'type': 'optional'} - Package: calligra-stage: {'type': 'optional'} - Package: jpilot: {'type': 'optional'} - Package: starcal: {'type': 'optional'} - Package: xfbib: {'type': 'optional'} - Package: kmymoney: {'type': 'optional'} - Package: calligra-braindump: {'type': 'optional'} - Package: libreoffice-math: {'type': 'optional'} - Package: calligra-kexi: {'type': 'optional'} - Package: grisbi: {'type': 'optional'} - Package: libreoffice-xsltfilter: {'type': 'optional'} - Package: dayplanner: {'type': 'optional'} - Package: tetex-IEEEtran: {'type': 'optional'} - Package: kdepim: {'type': 'optional'} - Package: libreoffice-ogltrans: {'type': 'optional'} - Package: glom: {'type': 'optional'} - Package: planner: {'type': 'optional'} - Package: libreoffice-calc: {'type': 'optional'} - Package: glabels: {'type': 'optional'} - Package: calcurse: {'type': 'optional'} - Package: libreoffice-emailmerge: {'type': 'optional'} - Package: pybliographer: {'type': 'optional'} - Package: gnumeric: {'type': 'optional'} - Package: wyrd: {'type': 'optional'} - Package: hnb: {'type': 'optional'} - Package: calligra-plan: {'type': 'optional'} - Package: libreoffice-wiki-publisher: {'type': 'optional'} - Package: htmldoc: {'type': 'optional'} - Package: krecipes: {'type': 'optional'} - Package: keurocalc: {'type': 'optional'} - Package: calligra-sheets: {'type': 'optional'} - Package: xchm: {'type': 'optional'} - Package: Saaghar: {'type': 'optional'} - Package: calligra-words: {'type': 'optional'} - Package: gnucash: {'type': 'optional'} - Package: kreetingkard: {'type': 'optional'} - Package: dia: {'type': 'optional'} - Package: taskcoach: {'type': 'optional'} - Package: tellico: {'type': 'optional'} - Package: klatexformula: {'type': 'optional'} - Package: calligra-flow: {'type': 'optional'} - Package: MagicPoint: {'type': 'optional'} - Package: libreoffice-draw: {'type': 'optional'} - Package: revelation: {'type': 'optional'} - Package: gnumeric-plugins-extras: {'type': 'optional'} - Package: vym: {'type': 'optional'} - Package: aiksaurus-thesaurus: {'type': 'optional'} - Package: okular: {'type': 'optional'} - Package: bibus: {'type': 'optional'} - Package: libreoffice-TexMaths: {'type': 'optional'} -Group: online-docs (Online Help and Documentation) - Package: system-config-nfs-docs: {'requires': 'system-config-nfs', 'type': 'conditional'} - Package: system-config-samba-docs: {'requires': 'system-config-samba', 'type': 'conditional'} - Package: system-config-services-docs: {'requires': 'system-config-services', 'type': 'conditional'} - Package: system-config-date-docs: {'requires': 'system-config-date', 'type': 'conditional'} - Package: system-config-users-docs: {'requires': 'system-config-users', 'type': 'conditional'} -Group: php (PHP) - Package: php-pear: {'type': 'mandatory'} - Package: php-mbstring: {'type': 'mandatory'} - Package: php-devel: {'type': 'mandatory'} - Package: php-soap: {'type': 'mandatory'} - Package: php-xml: {'type': 'mandatory'} - Package: php-pecl-apc: {'type': 'mandatory'} - Package: php-imap: {'type': 'mandatory'} - Package: php-mcrypt: {'type': 'mandatory'} - Package: php-pecl-mongo: {'type': 'mandatory'} - Package: php-pdo: {'type': 'mandatory'} - Package: php-bcmath: {'type': 'mandatory'} - Package: php-pgsql: {'type': 'mandatory'} - Package: php-mysqlnd: {'type': 'mandatory'} - Package: php-gd: {'type': 'mandatory'} - Package: php: {'type': 'mandatory'} - Package: php-process: {'type': 'mandatory'} -Group: perl (Perl Development) - Package: perl-core: {'type': 'mandatory'} - Package: perltidy: {'type': 'default'} - Package: cpan-upload: {'type': 'default'} - Package: git-cpan-patch: {'type': 'default'} - Package: vim-perl-support: {'type': 'optional'} - Package: cpanspec: {'type': 'optional'} - Package: perl-Task-Catalyst: {'type': 'optional'} - Package: parrot: {'type': 'optional'} - Package: eclipse-epic: {'type': 'optional'} -Group: perl-web (Perl for Web) - Package: perl-CPANPLUS: {'type': 'mandatory'} - Package: perl-CPAN: {'type': 'mandatory'} - Package: perl-App-cpanminus: {'type': 'mandatory'} - Package: perl-DBD-MySQL: {'type': 'mandatory'} - Package: perl-core: {'type': 'mandatory'} - Package: mod_perl: {'type': 'mandatory'} - Package: ImageMagick-perl: {'type': 'mandatory'} - Package: perl-DBD-SQLite: {'type': 'mandatory'} - Package: perl-MongoDB: {'type': 'mandatory'} -Group: persian-support (Persian Support) - Package: sil-scheherazade-fonts: {'type': 'default'} - Package: sil-lateef-fonts: {'type': 'optional'} -Group: sql-server (PostgreSQL Database) - Package: postgresql: {'type': 'mandatory'} - Package: unixODBC: {'type': 'default'} - Package: postgresql-server: {'type': 'default'} - Package: libdbi-dbd-pgsql: {'type': 'default'} - Package: rhdb-utils: {'type': 'default'} - Package: perl-DBD-Pg: {'type': 'default'} - Package: qt-postgresql: {'type': 'optional'} - Package: qt3-ODBC: {'type': 'optional'} - Package: qt-odbc: {'type': 'optional'} - Package: postgresql-contrib: {'type': 'optional'} - Package: postgresql-test: {'type': 'optional'} - Package: qt3-PostgreSQL: {'type': 'optional'} - Package: postgresql-jdbc: {'type': 'optional'} - Package: postgresql-odbc: {'type': 'optional'} - Package: postgresql-docs: {'type': 'optional'} - Package: PyGreSQL: {'type': 'optional'} - Package: tcl-pgtcl: {'type': 'optional'} -Group: printing (Printing Support) - Package: ghostscript: {'type': 'mandatory'} - Package: cups: {'type': 'mandatory'} - Package: cups-filters: {'type': 'mandatory'} - Package: mpage: {'type': 'default'} - Package: system-config-printer-udev: {'type': 'default'} - Package: nss-mdns: {'type': 'default'} - Package: colord: {'type': 'default'} - Package: samba-client: {'type': 'default'} - Package: paps: {'type': 'default'} - Package: cups-pk-helper: {'type': 'default'} - Package: foomatic: {'type': 'default'} - Package: foomatic-db-ppds: {'type': 'default'} - Package: gutenprint-cups: {'type': 'default'} - Package: gutenprint: {'type': 'default'} - Package: hplip: {'type': 'default'} - Package: hpijs: {'type': 'default'} - Package: bluez-cups: {'type': 'default'} - Package: cups-pdf: {'type': 'optional'} - Package: enscript: {'type': 'optional'} - Package: min12xxw: {'type': 'optional'} - Package: pnm2ppa: {'type': 'optional'} - Package: ptouch-driver: {'type': 'optional'} - Package: system-config-printer: {'type': 'optional'} - Package: cups-bjnp: {'type': 'optional'} - Package: splix: {'type': 'optional'} - Package: a2ps: {'type': 'optional'} -Group: punjabi-support (Punjabi Support) - Package: lohit-gurmukhi-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: saab-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: python-web (Python) - Package: pymongo-gridfs: {'type': 'mandatory'} - Package: python-virtualenv: {'type': 'mandatory'} - Package: libcurl-devel: {'type': 'mandatory'} - Package: libcurl: {'type': 'mandatory'} - Package: libjpeg-turbo: {'type': 'mandatory'} - Package: pymongo: {'type': 'mandatory'} - Package: freetype-devel: {'type': 'mandatory'} - Package: numpy-f2py: {'type': 'mandatory'} - Package: python: {'type': 'mandatory'} - Package: python-mysql: {'type': 'mandatory'} - Package: python-magic: {'type': 'mandatory'} - Package: python-psycopg2: {'type': 'mandatory'} - Package: libjpeg-turbo-devel: {'type': 'mandatory'} - Package: numpy: {'type': 'mandatory'} - Package: mod_wsgi: {'type': 'mandatory'} -Group: rpm-development-tools (RPM Development Tools) - Package: rpm-build: {'type': 'mandatory'} - Package: redhat-rpm-config: {'type': 'mandatory'} - Package: rpmdevtools: {'type': 'default'} - Package: koji: {'type': 'default'} - Package: mock: {'type': 'default'} - Package: pungi: {'type': 'optional'} - Package: rpmlint: {'type': 'optional'} - Package: plague-client: {'type': 'optional'} -Group: robotics-suite (Robotics) - Package: player-doc: {'type': 'default'} - Package: python-rosinstall: {'type': 'default'} - Package: catkin: {'type': 'default'} - Package: fawkes-doc: {'type': 'default'} - Package: fawkes: {'type': 'default'} - Package: fawkes-plugin-flite: {'type': 'default'} - Package: fawkes-plugin-player: {'type': 'default'} - Package: eclipse-cdt: {'type': 'default'} - Package: fawkes-plugin-pantilt: {'type': 'default'} - Package: gazebo-doc: {'type': 'default'} - Package: openni-primesense: {'type': 'default'} - Package: fawkes-firevision-tools: {'type': 'default'} - Package: fawkes-plugin-laserht: {'type': 'default'} - Package: mrpt-apps: {'type': 'default'} - Package: rcssserver: {'type': 'default'} - Package: python-vcstools: {'type': 'default'} - Package: python-rosdistro: {'type': 'default'} - Package: player-python: {'type': 'default'} - Package: fawkes-plugin-katana: {'type': 'default'} - Package: arduino: {'type': 'default'} - Package: rcsslogplayer: {'type': 'default'} - Package: fawkes-plugin-ttmainloop: {'type': 'default'} - Package: python-wstool: {'type': 'default'} - Package: player: {'type': 'default'} - Package: opencv: {'type': 'default'} - Package: python-catkin_pkg: {'type': 'default'} - Package: python-rosinstall_generator: {'type': 'default'} - Package: pcl: {'type': 'default'} - Package: python-catkin_lint: {'type': 'default'} - Package: python-bloom: {'type': 'default'} - Package: player-examples: {'type': 'default'} - Package: gazebo: {'type': 'default'} - Package: fawkes-lua: {'type': 'default'} - Package: fawkes-core: {'type': 'default'} - Package: fawkes-guis: {'type': 'default'} - Package: rcssserver-gui: {'type': 'default'} - Package: mrpt-doc: {'type': 'default'} - Package: fawkes-plugin-worldmodel: {'type': 'default'} - Package: fawkes-plugin-xmlrpc: {'type': 'default'} - Package: fawkes-plugin-refboxcomm: {'type': 'default'} - Package: stage-playerplugin: {'type': 'default'} - Package: libphidget: {'type': 'default'} - Package: rcssmonitor: {'type': 'default'} - Package: fawkes-firevision: {'type': 'default'} - Package: fawkes-plugin-bblogger: {'type': 'default'} - Package: fawkes-plugin-bbsync: {'type': 'default'} - Package: gearbox: {'type': 'default'} - Package: fawkes-plugin-joystick: {'type': 'default'} - Package: stage: {'type': 'default'} - Package: python-rospkg: {'type': 'default'} - Package: rcssserver3d-doc: {'type': 'default'} - Package: urg: {'type': 'default'} - Package: eclipse-egit: {'type': 'default'} - Package: fawkes-plugin-skiller: {'type': 'default'} - Package: mrpt-libs: {'type': 'default'} - Package: eclipse-subclipse: {'type': 'default'} - Package: fawkes-plugin-webview: {'type': 'default'} - Package: python-catkin_tools: {'type': 'default'} - Package: python-rosdep: {'type': 'default'} - Package: player-ruby: {'type': 'default'} - Package: fawkes-plugin-laser: {'type': 'default'} - Package: rcssserver3d: {'type': 'default'} - Package: fawkes-plugin-luaagent: {'type': 'default'} - Package: rcssserver3d-devel: {'type': 'optional'} - Package: mrpt-devel: {'type': 'optional'} - Package: libphidget-devel: {'type': 'optional'} - Package: urg-devel: {'type': 'optional'} - Package: gearbox-devel: {'type': 'optional'} - Package: stage-devel: {'type': 'optional'} - Package: rcsslogplayer-devel: {'type': 'optional'} - Package: rcssserver-devel: {'type': 'optional'} - Package: fawkes-devel: {'type': 'optional'} - Package: pcl-devel: {'type': 'optional'} - Package: player-devel: {'type': 'optional'} - Package: gazebo-devel: {'type': 'optional'} -Group: ruby (Ruby) - Package: ruby: {'type': 'mandatory'} - Package: rubygem-abrt: {'type': 'default'} - Package: ruby-devel: {'type': 'default'} -Group: rubyonrails (Ruby on Rails) - Package: rubygem-minitest: {'type': 'mandatory'} - Package: rubygem-sass-rails: {'type': 'mandatory'} - Package: nodejs: {'type': 'mandatory'} - Package: rubygem-rake: {'type': 'mandatory'} - Package: rubygem-sqlite3: {'type': 'mandatory'} - Package: rubygem-uglifier: {'type': 'mandatory'} - Package: rubygem-listen: {'type': 'mandatory'} - Package: rubygem-bundler: {'type': 'mandatory'} - Package: rubygem-json: {'type': 'mandatory'} - Package: rubygem-spring-watcher-listen: {'type': 'mandatory'} - Package: rubygem-jbuilder: {'type': 'mandatory'} - Package: ruby-devel: {'type': 'mandatory'} - Package: rubygem-byebug: {'type': 'mandatory'} - Package: rubygem-rails: {'type': 'mandatory'} - Package: rubygem-bigdecimal: {'type': 'mandatory'} - Package: rubygem-spring: {'type': 'mandatory'} - Package: rubygem-sdoc: {'type': 'mandatory'} - Package: sqlite-devel: {'type': 'mandatory'} - Package: rubygem-turbolinks: {'type': 'mandatory'} - Package: rubygem-abrt: {'type': 'mandatory'} - Package: rubygem-coffee-rails: {'type': 'mandatory'} - Package: rubygem-web-console: {'type': 'mandatory'} - Package: rubygem-jquery-rails: {'type': 'mandatory'} - Package: rubygem-bcrypt: {'type': 'mandatory'} -Group: russian-support (Russian Support) - Package: paratype-pt-sans-fonts: {'type': 'default'} - Package: paratype-pt-mono-fonts: {'type': 'optional'} - Package: xorg-x11-fonts-cyrillic: {'type': 'optional'} - Package: paratype-pt-sans-caption-fonts: {'type': 'optional'} - Package: paratype-pt-serif-fonts: {'type': 'optional'} - Package: fonts-KOI8-R: {'type': 'optional'} - Package: scim-tables-russian: {'type': 'optional'} - Package: stardict-dic-ru: {'type': 'optional'} - Package: fonts-KOI8-R-100dpi: {'type': 'optional'} - Package: paratype-pt-serif-caption-fonts: {'type': 'optional'} - Package: apanov-heuristica-fonts: {'type': 'optional'} - Package: ibus-table-cyrillic: {'type': 'optional'} - Package: apanov-edrip-fonts: {'type': 'optional'} - Package: fonts-KOI8-R-75dpi: {'type': 'optional'} -Group: sanskrit-support (Sanskrit Support) - Package: m17n-db: {'type': 'mandatory'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: santali-support (Santali Support) - Package: lohit-devanagari-fonts: {'type': 'mandatory'} - Package: samyak-devanagari-fonts: {'type': 'default'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: security-lab (Security Lab) - Package: ddrescue: {'type': 'default'} - Package: pdfcrack: {'type': 'default'} - Package: nethogs: {'type': 'default'} - Package: zmap: {'type': 'default'} - Package: echoping: {'type': 'default'} - Package: paris-traceroute: {'type': 'default'} - Package: mutt: {'type': 'default'} - Package: ratproxy: {'type': 'default'} - Package: medusa: {'type': 'default'} - Package: sleuthkit: {'type': 'default'} - Package: gparted: {'type': 'default'} - Package: sipsak: {'type': 'default'} - Package: pyrit: {'type': 'default'} - Package: wget: {'type': 'default'} - Package: pwgen: {'type': 'default'} - Package: scanmem: {'type': 'default'} - Package: arp-scan: {'type': 'default'} - Package: ArpON: {'type': 'default'} - Package: uperf: {'type': 'default'} - Package: nmap-ncat: {'type': 'default'} - Package: p0f: {'type': 'default'} - Package: etherape: {'type': 'default'} - Package: foremost: {'type': 'default'} - Package: nmap-frontend: {'type': 'default'} - Package: pcapdiff: {'type': 'default'} - Package: mcabber: {'type': 'default'} - Package: inception: {'type': 'default'} - Package: ssldump: {'type': 'default'} - Package: wipe: {'type': 'default'} - Package: nbtscan: {'type': 'default'} - Package: net-snmp-utils: {'type': 'default'} - Package: iftop: {'type': 'default'} - Package: labrea: {'type': 'default'} - Package: hunt: {'type': 'default'} - Package: httrack: {'type': 'default'} - Package: httpry: {'type': 'default'} - Package: bonesi: {'type': 'default'} - Package: macchanger: {'type': 'default'} - Package: dsniff: {'type': 'default'} - Package: scapy: {'type': 'default'} - Package: ettercap: {'type': 'default'} - Package: aircrack-ng: {'type': 'default'} - Package: sslscan: {'type': 'default'} - Package: swaks: {'type': 'default'} - Package: tcptrack: {'type': 'default'} - Package: safecopy: {'type': 'default'} - Package: aide: {'type': 'default'} - Package: driftnet: {'type': 'default'} - Package: sipp: {'type': 'default'} - Package: sslstrip: {'type': 'default'} - Package: iperf: {'type': 'default'} - Package: vim-enhanced: {'type': 'default'} - Package: nano: {'type': 'default'} - Package: unhide: {'type': 'default'} - Package: tcpreen: {'type': 'default'} - Package: nebula: {'type': 'default'} - Package: raddump: {'type': 'default'} - Package: kismet: {'type': 'default'} - Package: sslsplit: {'type': 'default'} - Package: wavemon: {'type': 'default'} - Package: wireshark: {'type': 'default'} - Package: bannergrab: {'type': 'default'} - Package: siege: {'type': 'default'} - Package: ntp: {'type': 'default'} - Package: screen: {'type': 'default'} - Package: fping: {'type': 'default'} - Package: bkhive: {'type': 'default'} - Package: nmbscan: {'type': 'default'} - Package: lynis: {'type': 'default'} - Package: dnsmap: {'type': 'default'} - Package: iptraf-ng: {'type': 'default'} - Package: binwalk: {'type': 'default'} - Package: argus-clients: {'type': 'default'} - Package: httping: {'type': 'default'} - Package: tcpjunk: {'type': 'default'} - Package: openssh: {'type': 'default'} - Package: argus: {'type': 'default'} - Package: srm: {'type': 'default'} - Package: tcpick: {'type': 'default'} - Package: yersinia: {'type': 'default'} - Package: ophcrack: {'type': 'default'} - Package: xmount: {'type': 'default'} - Package: nload: {'type': 'default'} - Package: nmap: {'type': 'default'} - Package: kismon: {'type': 'default'} - Package: testdisk: {'type': 'default'} - Package: splint: {'type': 'default'} - Package: irssi: {'type': 'default'} - Package: firewalk: {'type': 'default'} - Package: bro: {'type': 'default'} - Package: ntfs-3g: {'type': 'default'} - Package: pscan: {'type': 'default'} - Package: sing: {'type': 'default'} - Package: rats: {'type': 'default'} - Package: openvas-cli: {'type': 'default'} - Package: nwipe: {'type': 'default'} - Package: hping3: {'type': 'default'} - Package: sqlninja: {'type': 'default'} - Package: openvas-scanner: {'type': 'default'} - Package: scamper: {'type': 'default'} - Package: sucrack: {'type': 'default'} - Package: hydra: {'type': 'default'} - Package: horst: {'type': 'default'} - Package: flawfinder: {'type': 'default'} - Package: john: {'type': 'default'} - Package: tcpdump: {'type': 'default'} - Package: masscan: {'type': 'default'} - Package: cmospwd: {'type': 'default'} - Package: chkrootkit: {'type': 'default'} - Package: dnstracer: {'type': 'default'} - Package: ht: {'type': 'default'} - Package: halberd: {'type': 'default'} - Package: packETH: {'type': 'default'} - Package: tcpxtract: {'type': 'default'} - Package: dc3dd: {'type': 'default'} - Package: scalpel: {'type': 'default'} - Package: hfsutils: {'type': 'default'} - Package: mc: {'type': 'default'} - Package: mtr: {'type': 'default'} - Package: pads: {'type': 'default'} - Package: airsnort: {'type': 'default'} - Package: tcpcopy: {'type': 'default'} - Package: unicornscan: {'type': 'default'} - Package: dhcping: {'type': 'default'} - Package: tripwire: {'type': 'default'} - Package: hexedit: {'type': 'default'} - Package: examiner: {'type': 'default'} - Package: skipfish: {'type': 'default'} - Package: onesixtyone: {'type': 'default'} - Package: ncrack: {'type': 'default'} - Package: wbox: {'type': 'default'} - Package: lbd: {'type': 'default'} - Package: tcpflow: {'type': 'default'} - Package: socat: {'type': 'default'} - Package: weplab: {'type': 'default'} - Package: tcpreplay: {'type': 'default'} - Package: proxychains: {'type': 'default'} - Package: netsed: {'type': 'default'} - Package: net-snmp: {'type': 'default'} - Package: cowpatty: {'type': 'default'} - Package: rkhunter: {'type': 'default'} - Package: nfswatch: {'type': 'default'} - Package: dnsenum: {'type': 'default'} - Package: ntfsprogs: {'type': 'default'} - Package: snmpcheck: {'type': 'default'} - Package: trafshow: {'type': 'default'} - Package: afftools: {'type': 'default'} - Package: goaccess: {'type': 'default'} - Package: scrub: {'type': 'default'} - Package: ntop: {'type': 'default'} - Package: telnet: {'type': 'default'} - Package: httpie: {'type': 'default'} - Package: ngrep: {'type': 'default'} - Package: whois: {'type': 'default'} - Package: slowhttptest: {'type': 'default'} - Package: vnstat: {'type': 'default'} - Package: subnetcalc: {'type': 'default'} - Package: dnstop: {'type': 'default'} - Package: netsniff-ng: {'type': 'default'} - Package: lnav: {'type': 'default'} - Package: powertop: {'type': 'default'} - Package: samdump2: {'type': 'default'} - Package: nikto: {'type': 'default'} -Group: server-cfg (Server Configuration Tools) - Package: system-config-samba: {'type': 'default'} - Package: system-config-services: {'type': 'default'} - Package: cups-pk-helper: {'type': 'default'} - Package: system-config-httpd: {'type': 'default'} - Package: system-config-nfs: {'type': 'default'} - Package: system-config-bind: {'type': 'optional'} - Package: system-config-printer: {'type': 'optional'} - Package: system-switch-mail-gnome: {'type': 'optional'} -Group: simplified-chinese-support (Simplified Chinese Support) - Package: adobe-source-han-sans-cn-fonts: {'type': 'default'} - Package: lv: {'type': 'optional'} - Package: scim-tables-chinese-extra: {'type': 'optional'} - Package: wqy-bitmap-fonts: {'type': 'optional'} - Package: wqy-zenhei-fonts: {'type': 'optional'} - Package: scim-pinyin: {'type': 'optional'} - Package: wqy-microhei-fonts: {'type': 'optional'} - Package: stardict-dic-zh_CN: {'type': 'optional'} - Package: ibus-table-chinese-yong: {'type': 'optional'} - Package: ibus-table-chinese-erbi: {'type': 'optional'} - Package: fcitx: {'type': 'optional'} - Package: wqy-unibit-fonts: {'type': 'optional'} - Package: m17n-db-extras: {'type': 'optional'} - Package: scim-fcitx: {'type': 'optional'} - Package: ibus-table-chinese-wubi-jidian: {'type': 'optional'} - Package: scim-tables-chinese: {'type': 'optional'} - Package: ibus-table-chinese-wubi-haifeng: {'type': 'optional'} - Package: ibus-libpinyin: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: sindhi-support (Sindhi Support) - Package: paktype-naskh-basic-fonts: {'type': 'mandatory'} - Package: lohit-devanagari-fonts: {'type': 'mandatory'} - Package: google-noto-sans-devanagari-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-devanagari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: sinhala-support (Sinhala Support) - Package: m17n-db: {'type': 'mandatory'} - Package: lklug-fonts: {'type': 'mandatory'} - Package: scim-sayura: {'type': 'optional'} - Package: ibus-sayura: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: sound-and-video (Sound and Video) - Package: pnmixer: {'type': 'optional'} - Package: exaile: {'type': 'optional'} - Package: totem: {'type': 'optional'} - Package: vdr-ttxtsubs: {'type': 'optional'} - Package: paprefs: {'type': 'optional'} - Package: soundconverter: {'type': 'optional'} - Package: xcdroast: {'type': 'optional'} - Package: picard: {'type': 'optional'} - Package: festvox-clb-arctic-hts: {'type': 'optional'} - Package: v4l2ucp: {'type': 'optional'} - Package: mikmod: {'type': 'optional'} - Package: decibel-audio-player: {'type': 'optional'} - Package: mybashburn: {'type': 'optional'} - Package: xfburn: {'type': 'optional'} - Package: nyquist: {'type': 'optional'} - Package: dvdisaster: {'type': 'optional'} - Package: xmp: {'type': 'optional'} - Package: grip: {'type': 'optional'} - Package: vorbis-tools: {'type': 'optional'} - Package: gnomebaker: {'type': 'optional'} - Package: vdr-streamdev-server: {'type': 'optional'} - Package: rakarrack: {'type': 'optional'} - Package: genisoimage: {'type': 'optional'} - Package: alsamixergui: {'type': 'optional'} - Package: vdr: {'type': 'optional'} - Package: banshee: {'type': 'optional'} - Package: mkvtoolnix-gui: {'type': 'optional'} - Package: easytag: {'type': 'optional'} - Package: wodim: {'type': 'optional'} - Package: soundtracker: {'type': 'optional'} - Package: argyllcms: {'type': 'optional'} - Package: vdr-osdteletext: {'type': 'optional'} - Package: gcstar: {'type': 'optional'} - Package: totem-lirc: {'type': 'optional'} - Package: xmms: {'type': 'optional'} - Package: festvox-rms-arctic-hts: {'type': 'optional'} - Package: dvdauthor: {'type': 'optional'} - Package: denemo: {'type': 'optional'} - Package: kid3: {'type': 'optional'} - Package: openfst-tools: {'type': 'optional'} - Package: icedax: {'type': 'optional'} - Package: cdcollect: {'type': 'optional'} - Package: tclabc: {'type': 'optional'} - Package: pavucontrol: {'type': 'optional'} - Package: opengrm-ngram-tools: {'type': 'optional'} - Package: milkytracker: {'type': 'optional'} - Package: xmms-flac: {'type': 'optional'} - Package: id3v2: {'type': 'optional'} - Package: kover: {'type': 'optional'} - Package: totem-nautilus: {'type': 'optional'} - Package: dvgrab: {'type': 'optional'} - Package: multimedia-menus: {'type': 'optional'} - Package: gnome-sound-recorder: {'type': 'optional'} - Package: asunder: {'type': 'optional'} - Package: vdr-epgsearch: {'type': 'optional'} - Package: tomahawk: {'type': 'optional'} - Package: amarok: {'type': 'optional'} - Package: audacity: {'type': 'optional'} - Package: volumeicon: {'type': 'optional'} - Package: whaawmp: {'type': 'optional'} - Package: vdr-tvonscreen: {'type': 'optional'} - Package: sweep: {'type': 'optional'} - Package: pitivi: {'type': 'optional'} - Package: festvox-bdl-arctic-hts: {'type': 'optional'} - Package: sox: {'type': 'optional'} - Package: pyvnc2swf: {'type': 'optional'} - Package: vdr-remote: {'type': 'optional'} - Package: cdrskin: {'type': 'optional'} - Package: gtk-v4l: {'type': 'optional'} - Package: jack-audio-connection-kit: {'type': 'optional'} - Package: pocketsphinx-plugin: {'type': 'optional'} - Package: vdr-femon: {'type': 'optional'} - Package: lxmusic: {'type': 'optional'} - Package: irstlm: {'type': 'optional'} - Package: paman: {'type': 'optional'} - Package: kmix: {'type': 'optional'} - Package: lingot: {'type': 'optional'} - Package: pocketsphinx: {'type': 'optional'} - Package: gtkpod: {'type': 'optional'} - Package: isomaster: {'type': 'optional'} - Package: juk: {'type': 'optional'} - Package: audacious: {'type': 'optional'} - Package: quodlibet: {'type': 'optional'} - Package: cdlabelgen: {'type': 'optional'} - Package: cdparanoia: {'type': 'optional'} - Package: tagtool: {'type': 'optional'} - Package: csound-csoundac: {'type': 'optional'} - Package: cmusphinx3: {'type': 'optional'} - Package: gnomad2: {'type': 'optional'} - Package: sound-juicer: {'type': 'optional'} - Package: pavumeter: {'type': 'optional'} - Package: qmmp-plugin-pack: {'type': 'optional'} - Package: vdr-streamdev-client: {'type': 'optional'} - Package: brasero: {'type': 'optional'} - Package: rhythmbox: {'type': 'optional'} - Package: pulseaudio-module-zeroconf: {'type': 'optional'} - Package: vdr-skinsoppalusikka: {'type': 'optional'} - Package: adplay: {'type': 'optional'} - Package: xmms-adplug: {'type': 'optional'} - Package: tvtime: {'type': 'optional'} - Package: kscd: {'type': 'optional'} - Package: ucview: {'type': 'optional'} - Package: pulseaudio-module-lirc: {'type': 'optional'} - Package: camE: {'type': 'optional'} - Package: vdr-sudoku: {'type': 'optional'} - Package: sphinxtrain: {'type': 'optional'} - Package: abcde: {'type': 'optional'} - Package: dragon: {'type': 'optional'} - Package: qmmp: {'type': 'optional'} - Package: rosegarden4: {'type': 'optional'} - Package: k3b: {'type': 'optional'} - Package: parole: {'type': 'optional'} - Package: regionset: {'type': 'optional'} -Group: standard (Standard) - Package: cryptsetup: {'type': 'mandatory'} - Package: vconfig: {'type': 'mandatory'} - Package: rsyslog: {'type': 'mandatory'} - Package: tar: {'type': 'mandatory'} - Package: realmd: {'type': 'mandatory'} - Package: ed: {'type': 'mandatory'} - Package: dosfstools: {'type': 'mandatory'} - Package: sudo: {'type': 'mandatory'} - Package: dnf-langpacks: {'type': 'mandatory'} - Package: usbutils: {'type': 'mandatory'} - Package: rng-tools: {'type': 'mandatory'} - Package: deltarpm: {'type': 'mandatory'} - Package: logrotate: {'type': 'mandatory'} - Package: rsync: {'type': 'mandatory'} - Package: jwhois: {'type': 'mandatory'} - Package: at: {'type': 'mandatory'} - Package: file: {'type': 'mandatory'} - Package: fedora-release-notes: {'type': 'mandatory'} - Package: pam_pkcs11: {'type': 'mandatory'} - Package: traceroute: {'type': 'mandatory'} - Package: mdadm: {'type': 'mandatory'} - Package: crontabs: {'type': 'mandatory'} - Package: bzip2: {'type': 'mandatory'} - Package: pam_krb5: {'type': 'mandatory'} - Package: abrt-cli: {'type': 'mandatory'} - Package: systemd-udev: {'type': 'mandatory'} - Package: sssd: {'type': 'mandatory'} - Package: gnupg2: {'type': 'mandatory'} - Package: btrfs-progs: {'type': 'mandatory'} - Package: microcode_ctl: {'type': 'mandatory'} - Package: which: {'type': 'mandatory'} - Package: ntfsprogs: {'type': 'mandatory'} - Package: iptstate: {'type': 'mandatory'} - Package: bridge-utils: {'type': 'mandatory'} - Package: irqbalance: {'type': 'mandatory'} - Package: mcelog: {'type': 'mandatory'} - Package: ethtool: {'type': 'mandatory'} - Package: mailcap: {'type': 'mandatory'} - Package: nmap-ncat: {'type': 'mandatory'} - Package: unzip: {'type': 'mandatory'} - Package: psacct: {'type': 'mandatory'} - Package: cyrus-sasl-plain: {'type': 'mandatory'} - Package: tcp_wrappers: {'type': 'mandatory'} - Package: bc: {'type': 'mandatory'} - Package: mlocate: {'type': 'mandatory'} - Package: time: {'type': 'mandatory'} - Package: setuptool: {'type': 'mandatory'} - Package: cpio: {'type': 'mandatory'} - Package: bash-completion: {'type': 'mandatory'} - Package: quota: {'type': 'mandatory'} - Package: pinfo: {'type': 'mandatory'} - Package: telnet: {'type': 'mandatory'} - Package: nfs-utils: {'type': 'mandatory'} - Package: words: {'type': 'mandatory'} - Package: cifs-utils: {'type': 'mandatory'} - Package: wget: {'type': 'mandatory'} - Package: dos2unix: {'type': 'mandatory'} - Package: passwdqc: {'type': 'mandatory'} - Package: coolkey: {'type': 'mandatory'} - Package: symlinks: {'type': 'mandatory'} - Package: smartmontools: {'type': 'mandatory'} - Package: fprintd-pam: {'type': 'mandatory'} - Package: attr: {'type': 'mandatory'} - Package: fpaste: {'type': 'mandatory'} - Package: mtr: {'type': 'mandatory'} - Package: tcpdump: {'type': 'mandatory'} - Package: dbus: {'type': 'mandatory'} - Package: tree: {'type': 'mandatory'} - Package: sos: {'type': 'mandatory'} - Package: acl: {'type': 'mandatory'} - Package: wireless-tools: {'type': 'mandatory'} - Package: plymouth: {'type': 'mandatory'} - Package: bind-utils: {'type': 'mandatory'} - Package: hunspell: {'type': 'mandatory'} - Package: net-tools: {'type': 'mandatory'} - Package: pciutils: {'type': 'mandatory'} - Package: man-pages: {'type': 'mandatory'} - Package: ntfs-3g: {'type': 'mandatory'} - Package: lsof: {'type': 'mandatory'} - Package: zip: {'type': 'mandatory'} - Package: nano: {'type': 'mandatory'} - Package: chrony: {'requires': 'control-center', 'type': 'conditional'} -Group: sugar-desktop (Sugar Desktop Environment) - Package: sugar-terminal: {'type': 'mandatory'} - Package: sugar-stopwatch: {'type': 'mandatory'} - Package: sugar-infoslicer: {'type': 'mandatory'} - Package: sugar-clock: {'type': 'mandatory'} - Package: lightdm: {'type': 'mandatory'} - Package: sugar-paint: {'type': 'mandatory'} - Package: gnome-power-manager: {'type': 'mandatory'} - Package: sugar-calculator: {'type': 'mandatory'} - Package: sugar-portfolio: {'type': 'mandatory'} - Package: sugar-physics: {'type': 'mandatory'} - Package: sugar-log: {'type': 'mandatory'} - Package: sugar-speak: {'type': 'mandatory'} - Package: sugar-moon: {'type': 'mandatory'} - Package: sugar-read: {'type': 'mandatory'} - Package: sugar-labyrinth: {'type': 'mandatory'} - Package: sugar-imageviewer: {'type': 'mandatory'} - Package: sugar: {'type': 'mandatory'} - Package: sugar-help: {'type': 'mandatory'} - Package: sugar-story: {'type': 'mandatory'} - Package: sugar-visualmatch: {'type': 'mandatory'} - Package: pygame: {'type': 'mandatory'} - Package: sugar-jukebox: {'type': 'mandatory'} - Package: sugar-xoirc: {'type': 'mandatory'} - Package: sugar-write: {'type': 'mandatory'} - Package: gvfs: {'type': 'mandatory'} - Package: sugar-ruler: {'type': 'mandatory'} - Package: sugar-chat: {'type': 'mandatory'} - Package: sugar-words: {'type': 'mandatory'} - Package: sugar-turtleart: {'type': 'mandatory'} - Package: sugar-abacus: {'type': 'mandatory'} - Package: sugar-record: {'type': 'mandatory'} - Package: sugar-getiabooks: {'type': 'mandatory'} - Package: metacity: {'type': 'mandatory'} - Package: sugar-cp-all: {'type': 'mandatory'} - Package: sugar-countries: {'type': 'mandatory'} - Package: csound-python: {'type': 'mandatory'} - Package: sugar-maze: {'type': 'mandatory'} - Package: sugar-toolkit-gtk3: {'type': 'mandatory'} - Package: sugar-toolkit: {'type': 'mandatory'} - Package: sugar-finance: {'type': 'mandatory'} - Package: lightdm-gtk: {'type': 'mandatory'} - Package: sugar-memorize: {'type': 'mandatory'} - Package: sugar-pippy: {'type': 'mandatory'} - Package: sugar-fototoon: {'type': 'mandatory'} - Package: sugar-browse: {'type': 'mandatory'} - Package: sugar-typing-turtle: {'type': 'mandatory'} -Group: system-tools (System Tools) - Package: NetworkManager-libreswan: {'type': 'default'} - Package: nmap: {'type': 'default'} - Package: ntfs-3g: {'type': 'default'} - Package: setserial: {'type': 'default'} - Package: NetworkManager-l2tp: {'type': 'default'} - Package: openconnect: {'type': 'default'} - Package: NetworkManager-openconnect: {'type': 'default'} - Package: openldap-clients: {'type': 'default'} - Package: openvpn: {'type': 'default'} - Package: samba-client: {'type': 'default'} - Package: screen: {'type': 'default'} - Package: xdelta: {'type': 'default'} - Package: BackupPC: {'type': 'default'} - Package: cifs-utils: {'type': 'default'} - Package: libreswan: {'type': 'default'} - Package: jigdo: {'type': 'default'} - Package: NetworkManager-openvpn: {'type': 'default'} - Package: vpnc: {'type': 'default'} - Package: NetworkManager-vpnc: {'type': 'default'} - Package: chrony: {'type': 'default'} - Package: tigervnc: {'type': 'default'} - Package: zisofs-tools: {'type': 'default'} - Package: zsh: {'type': 'default'} - Package: bonnie++: {'type': 'default'} - Package: xmobar: {'type': 'optional'} - Package: gigolo: {'type': 'optional'} - Package: remmina-plugins-telepathy: {'type': 'optional'} - Package: unison213: {'type': 'optional'} - Package: nethogs: {'type': 'optional'} - Package: inadyn-mt: {'type': 'optional'} - Package: hercules: {'type': 'optional'} - Package: htop: {'type': 'optional'} - Package: ntp-perl: {'type': 'optional'} - Package: tn5250: {'type': 'optional'} - Package: w_scan: {'type': 'optional'} - Package: gssdp: {'type': 'optional'} - Package: gnokii: {'type': 'optional'} - Package: keychain: {'type': 'optional'} - Package: dtach: {'type': 'optional'} - Package: noip: {'type': 'optional'} - Package: ghasher: {'type': 'optional'} - Package: ghex: {'type': 'optional'} - Package: cabextract: {'type': 'optional'} - Package: epylog: {'type': 'optional'} - Package: reptyr: {'type': 'optional'} - Package: xsel: {'type': 'optional'} - Package: ttywatch: {'type': 'optional'} - Package: denyhosts: {'type': 'optional'} - Package: crack: {'type': 'optional'} - Package: lirc: {'type': 'optional'} - Package: ganglia: {'type': 'optional'} - Package: fwrestart: {'type': 'optional'} - Package: remmina-plugins-xdmcp: {'type': 'optional'} - Package: am-utils: {'type': 'optional'} - Package: crash: {'type': 'optional'} - Package: p0f: {'type': 'optional'} - Package: geoclue: {'type': 'optional'} - Package: unison227: {'type': 'optional'} - Package: createrepo: {'type': 'optional'} - Package: lzop: {'type': 'optional'} - Package: radeontool: {'type': 'optional'} - Package: foremost: {'type': 'optional'} - Package: nmap-frontend: {'type': 'optional'} - Package: p7zip-plugins: {'type': 'optional'} - Package: dar: {'type': 'optional'} - Package: freerdp: {'type': 'optional'} - Package: apcupsd-gui: {'type': 'optional'} - Package: swatch: {'type': 'optional'} - Package: rear: {'type': 'optional'} - Package: synaptic: {'type': 'optional'} - Package: net-snmp-utils: {'type': 'optional'} - Package: obexftp: {'type': 'optional'} - Package: iftop: {'type': 'optional'} - Package: apcupsd: {'type': 'optional'} - Package: qstat: {'type': 'optional'} - Package: upx: {'type': 'optional'} - Package: arptables: {'type': 'optional'} - Package: macchanger: {'type': 'optional'} - Package: ettercap: {'type': 'optional'} - Package: enca: {'type': 'optional'} - Package: swaks: {'type': 'optional'} - Package: nut: {'type': 'optional'} - Package: ebtables: {'type': 'optional'} - Package: aide: {'type': 'optional'} - Package: pwgen: {'type': 'optional'} - Package: arc: {'type': 'optional'} - Package: sec: {'type': 'optional'} - Package: wlassistant: {'type': 'optional'} - Package: arj: {'type': 'optional'} - Package: shorewall: {'type': 'optional'} - Package: dkms: {'type': 'optional'} - Package: nrg2iso: {'type': 'optional'} - Package: dstat: {'type': 'optional'} - Package: ircp-tray: {'type': 'optional'} - Package: x3270-x11: {'type': 'optional'} - Package: javasysmon: {'type': 'optional'} - Package: limph: {'type': 'optional'} - Package: ntp: {'type': 'optional'} - Package: tunctl: {'type': 'optional'} - Package: mmv: {'type': 'optional'} - Package: speech-dispatcher-flite: {'type': 'optional'} - Package: pbzip2: {'type': 'optional'} - Package: torque-gui: {'type': 'optional'} - Package: conman: {'type': 'optional'} - Package: wireshark-gnome: {'type': 'optional'} - Package: etherbat: {'type': 'optional'} - Package: mrtg: {'type': 'optional'} - Package: ksmarttray: {'type': 'optional'} - Package: chrpath: {'type': 'optional'} - Package: environment-modules: {'type': 'optional'} - Package: sysstat: {'type': 'optional'} - Package: connect-proxy: {'type': 'optional'} - Package: fedora-package-config-apt: {'type': 'optional'} - Package: hfsplus-tools: {'type': 'optional'} - Package: xsupplicant: {'type': 'optional'} - Package: netstat-nat: {'type': 'optional'} - Package: grsync: {'type': 'optional'} - Package: remmina: {'type': 'optional'} - Package: par2cmdline: {'type': 'optional'} - Package: testdisk: {'type': 'optional'} - Package: nomarch: {'type': 'optional'} - Package: apt: {'type': 'optional'} - Package: speech-dispatcher-festival: {'type': 'optional'} - Package: iotop: {'type': 'optional'} - Package: puppet: {'type': 'optional'} - Package: grepmail: {'type': 'optional'} - Package: procinfo: {'type': 'optional'} - Package: apg: {'type': 'optional'} - Package: aircrack-ng: {'type': 'optional'} - Package: festival: {'type': 'optional'} - Package: ntpdate: {'type': 'optional'} - Package: syslog-ng: {'type': 'optional'} - Package: speech-dispatcher: {'type': 'optional'} - Package: john: {'type': 'optional'} - Package: gkrellm: {'type': 'optional'} - Package: powerman: {'type': 'optional'} - Package: zidrav: {'type': 'optional'} - Package: fwknop: {'type': 'optional'} - Package: gupnp: {'type': 'optional'} - Package: ipsec-tools: {'type': 'optional'} - Package: freeze: {'type': 'optional'} - Package: rdiff-backup: {'type': 'optional'} - Package: mtx: {'type': 'optional'} - Package: oddjob-mkhomedir: {'type': 'optional'} - Package: mc: {'type': 'optional'} - Package: rsnapshot: {'type': 'optional'} - Package: munin: {'type': 'optional'} - Package: amanda-client: {'type': 'optional'} - Package: rdesktop: {'type': 'optional'} - Package: convmv: {'type': 'optional'} - Package: airsnort: {'type': 'optional'} - Package: autofs: {'type': 'optional'} - Package: p7zip: {'type': 'optional'} - Package: hyperestraier: {'type': 'optional'} - Package: rootsh: {'type': 'optional'} - Package: remmina-plugins-nx: {'type': 'optional'} - Package: arpwatch: {'type': 'optional'} - Package: eiciel: {'type': 'optional'} - Package: speech-dispatcher-espeak: {'type': 'optional'} - Package: stripesnoop: {'type': 'optional'} - Package: nagios: {'type': 'optional'} - Package: ibmonitor: {'type': 'optional'} - Package: fatsort: {'type': 'optional'} - Package: socat: {'type': 'optional'} - Package: uucp: {'type': 'optional'} - Package: jfbterm: {'type': 'optional'} - Package: remmina-plugins-rdp: {'type': 'optional'} - Package: kdirstat: {'type': 'optional'} - Package: gtkhash: {'type': 'optional'} - Package: nfswatch: {'type': 'optional'} - Package: gnutls-utils: {'type': 'optional'} - Package: catfish: {'type': 'optional'} - Package: gxemul: {'type': 'optional'} - Package: emelfm2: {'type': 'optional'} - Package: cfengine: {'type': 'optional'} - Package: oddjob: {'type': 'optional'} - Package: torque-client: {'type': 'optional'} - Package: avahi-tools: {'type': 'optional'} - Package: scrub: {'type': 'optional'} - Package: ed2k_hash: {'type': 'optional'} - Package: fuse: {'type': 'optional'} - Package: PackageKit-command-not-found: {'type': 'optional'} - Package: rmanage: {'type': 'optional'} - Package: vnstat: {'type': 'optional'} - Package: ddclient: {'type': 'optional'} - Package: greadelf: {'type': 'optional'} - Package: powertop: {'type': 'optional'} - Package: portecle: {'type': 'optional'} - Package: liveusb-creator: {'type': 'optional'} - Package: bochs: {'type': 'optional'} - Package: wine: {'type': 'optional'} - Package: gtkterm: {'type': 'optional'} - Package: fdupes: {'type': 'optional'} - Package: qdbm: {'type': 'optional'} - Package: incron: {'type': 'optional'} -Group: tamil-support (Tamil Support) - Package: lohit-tamil-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: google-noto-sans-tamil-ui-fonts: {'type': 'default'} - Package: google-noto-sans-tamil-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: serafettin-cartoon-fonts: {'type': 'default'} - Package: samyak-tamil-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: telugu-support (Telugu Support) - Package: lohit-telugu-fonts: {'type': 'mandatory'} - Package: m17n-db: {'type': 'mandatory'} - Package: vemana2000-fonts: {'type': 'default'} - Package: google-noto-sans-telugu-ui-fonts: {'type': 'default'} - Package: iok: {'type': 'default'} - Package: google-noto-sans-telugu-fonts: {'type': 'default'} - Package: pothana2000-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: text-internet (Text-based Internet) - Package: isync: {'type': 'optional'} - Package: rss2email: {'type': 'optional'} - Package: fetchmail: {'type': 'optional'} - Package: irssi: {'type': 'optional'} - Package: slrn: {'type': 'optional'} - Package: fpaste: {'type': 'optional'} - Package: cone: {'type': 'optional'} - Package: mutt: {'type': 'optional'} - Package: iperf: {'type': 'optional'} - Package: sitecopy: {'type': 'optional'} - Package: websec: {'type': 'optional'} - Package: getmail: {'type': 'optional'} - Package: xprobe2: {'type': 'optional'} - Package: libtranslate: {'type': 'optional'} - Package: ctorrent: {'type': 'optional'} - Package: w3m: {'type': 'optional'} - Package: tin: {'type': 'optional'} - Package: axel: {'type': 'optional'} - Package: nmh: {'type': 'optional'} - Package: whatmask: {'type': 'optional'} - Package: archivemail: {'type': 'optional'} - Package: epic: {'type': 'optional'} - Package: rtorrent: {'type': 'optional'} - Package: lftp: {'type': 'optional'} - Package: elinks: {'type': 'optional'} - Package: youtube-dl: {'type': 'optional'} - Package: offlineimap: {'type': 'optional'} - Package: cadaver: {'type': 'optional'} - Package: snownews: {'type': 'optional'} - Package: yafc: {'type': 'optional'} - Package: ncftp: {'type': 'optional'} - Package: tftp: {'type': 'optional'} - Package: emacs-mew: {'type': 'optional'} - Package: alpine: {'type': 'optional'} - Package: centerim: {'type': 'optional'} - Package: argus: {'type': 'optional'} - Package: abook: {'type': 'optional'} - Package: maildirproc: {'type': 'optional'} - Package: deletemail: {'type': 'optional'} - Package: lynx: {'type': 'optional'} - Package: aria2: {'type': 'optional'} - Package: trickle: {'type': 'optional'} -Group: thai-support (Thai Support) - Package: google-noto-sans-thai-fonts: {'type': 'default'} - Package: thai-scalable-waree-fonts: {'type': 'default'} - Package: thai-scalable-tlwgtypo-fonts: {'type': 'default'} - Package: thai-scalable-umpush-fonts: {'type': 'default'} - Package: thai-scalable-kinnari-fonts: {'type': 'default'} - Package: thai-scalable-loma-fonts: {'type': 'default'} - Package: thai-scalable-purisa-fonts: {'type': 'default'} - Package: google-noto-sans-thai-ui-fonts: {'type': 'default'} - Package: thai-scalable-tlwgtypewriter-fonts: {'type': 'default'} - Package: google-noto-serif-thai-fonts: {'type': 'default'} - Package: thai-scalable-tlwgtypist-fonts: {'type': 'default'} - Package: thai-scalable-norasi-fonts: {'type': 'default'} - Package: thai-scalable-tlwgmono-fonts: {'type': 'default'} - Package: thai-scalable-garuda-fonts: {'type': 'default'} - Package: thai-scalable-sawasdee-fonts: {'type': 'default'} - Package: scim-tables-thai: {'type': 'optional'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: tibetan-support (Tibetan Support) - Package: tibetan-machine-uni-fonts: {'type': 'mandatory'} - Package: jomolhari-fonts: {'type': 'default'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: tomcat (Tomcat) - Package: tomcat-native: {'type': 'mandatory'} - Package: tomcat-admin-webapps: {'type': 'mandatory'} - Package: tomcat: {'type': 'mandatory'} - Package: tomcat-webapps: {'type': 'mandatory'} -Group: traditional-chinese-support (Traditional Chinese Support) - Package: adobe-source-han-sans-tw-fonts: {'type': 'default'} - Package: ibus-table-chinese-cantonese: {'type': 'optional'} - Package: cjkuni-uming-fonts: {'type': 'optional'} - Package: scim-tables-chinese-extra: {'type': 'optional'} - Package: ibus-table-chinese-easy: {'type': 'optional'} - Package: gcin: {'type': 'optional'} - Package: ibus-table-chinese-stroke5: {'type': 'optional'} - Package: ibus-table-chinese-quick: {'type': 'optional'} - Package: ibus-table-chinese-scj: {'type': 'optional'} - Package: lv: {'type': 'optional'} - Package: ibus-table-chinese-cangjie: {'type': 'optional'} - Package: scim-array: {'type': 'optional'} - Package: ibus-table-chinese-array: {'type': 'optional'} - Package: stardict-dic-zh_TW: {'type': 'optional'} - Package: scim-tables-chinese: {'type': 'optional'} - Package: taipeifonts: {'type': 'optional'} - Package: m17n-db-extras: {'type': 'optional'} - Package: cjkuni-ukai-fonts: {'type': 'optional'} - Package: ibus-libzhuyin: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: urdu-support (Urdu Support) - Package: paktype-naskh-basic-fonts: {'type': 'mandatory'} - Package: paktype-tehreer-fonts: {'type': 'mandatory'} - Package: nafees-nastaleeq-fonts: {'type': 'default'} - Package: dejavu-sans-mono-fonts: {'type': 'default'} - Package: nafees-web-naskh-fonts: {'type': 'default'} - Package: dejavu-sans-fonts: {'type': 'default'} - Package: kacst-book-fonts: {'type': 'optional'} - Package: kacst-digital-fonts: {'type': 'optional'} - Package: nafees-pakistani-web-naskh-fonts: {'type': 'optional'} - Package: kacst-pen-fonts: {'type': 'optional'} - Package: nafees-naskh-fonts: {'type': 'optional'} - Package: kacst-decorative-fonts: {'type': 'optional'} - Package: kacst-letter-fonts: {'type': 'optional'} - Package: nafees-riqa-fonts: {'type': 'optional'} - Package: paktype-ajrak-fonts: {'type': 'optional'} - Package: kacst-titlel-fonts: {'type': 'optional'} - Package: kacst-naskh-fonts: {'type': 'optional'} - Package: kacst-art-fonts: {'type': 'optional'} - Package: kacst-poster-fonts: {'type': 'optional'} - Package: nafees-pakistani-naskh-fonts: {'type': 'optional'} - Package: paktype-naqsh-fonts: {'type': 'optional'} - Package: nafees-tehreer-naskh-fonts: {'type': 'optional'} - Package: kacst-office-fonts: {'type': 'optional'} - Package: kacst-farsi-fonts: {'type': 'optional'} - Package: kacst-one-fonts: {'type': 'optional'} - Package: kacst-qurn-fonts: {'type': 'optional'} - Package: kacst-title-fonts: {'type': 'optional'} - Package: kacst-screen-fonts: {'type': 'optional'} - Package: ibus-m17n: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: platform-vmware (VMware Platform Support) - Package: open-vm-tools: {'type': 'mandatory'} -Group: vagrant (Vagrant with libvirt support) - Package: vagrant: {'type': 'mandatory'} - Package: vagrant-libvirt: {'type': 'default'} - Package: vagrant-cachier: {'type': 'optional'} - Package: vagrant-registration: {'type': 'optional'} -Group: vietnamese-support (Vietnamese Support) - Package: ibus-bogo: {'requires': 'xorg-x11-server-Xorg', 'type': 'conditional'} -Group: virtualization (Virtualization) - Package: virt-install: {'type': 'mandatory'} - Package: libvirt-daemon-config-network: {'type': 'default'} - Package: qemu-kvm: {'type': 'default'} - Package: libvirt-daemon-kvm: {'type': 'default'} - Package: virt-manager: {'type': 'default'} - Package: virt-viewer: {'type': 'default'} - Package: python-libguestfs: {'type': 'optional'} - Package: virt-top: {'type': 'optional'} - Package: libguestfs-tools: {'type': 'optional'} - Package: guestfs-browser: {'type': 'optional'} -Group: window-managers (Window Managers) - Package: dwm-user: {'type': 'optional'} - Package: i3lock: {'type': 'optional'} - Package: openbox: {'type': 'optional'} - Package: obmenu: {'type': 'optional'} - Package: fvwm: {'type': 'optional'} - Package: xcompmgr: {'type': 'optional'} - Package: hackedbox: {'type': 'optional'} - Package: wmx: {'type': 'optional'} - Package: bbkeys: {'type': 'optional'} - Package: xmonad-mate: {'type': 'optional'} - Package: matchbox-window-manager: {'type': 'optional'} - Package: dwm: {'type': 'optional'} - Package: bluetile: {'type': 'optional'} - Package: xmonad: {'type': 'optional'} - Package: blackbox: {'type': 'optional'} - Package: i3: {'type': 'optional'} - Package: WindowMaker: {'type': 'optional'} - Package: obconf: {'type': 'optional'} - Package: i3status: {'type': 'optional'} - Package: fluxbox: {'type': 'optional'} - Package: icewm: {'type': 'optional'} - Package: ratpoison: {'type': 'optional'} - Package: i3-doc: {'type': 'optional'} -Group: smb-server (Windows File Server) - Package: samba: {'type': 'mandatory'} - Package: samba-client: {'type': 'mandatory'} - Package: cifs-utils: {'type': 'default'} -Group: x-software-development (X Software Development) - Package: libX11-devel: {'type': 'mandatory'} - Package: libXaw-devel: {'type': 'mandatory'} - Package: libICE-devel: {'type': 'mandatory'} - Package: libXt-devel: {'type': 'mandatory'} - Package: libXfixes-devel: {'type': 'mandatory'} - Package: libxkbfile-devel: {'type': 'default'} - Package: libXxf86vm-devel: {'type': 'default'} - Package: freetype-devel: {'type': 'default'} - Package: libXres-devel: {'type': 'default'} - Package: pixman-devel: {'type': 'default'} - Package: libXxf86dga-devel: {'type': 'default'} - Package: libXmu-devel: {'type': 'default'} - Package: libXevie-devel: {'type': 'default'} - Package: libXrender-devel: {'type': 'default'} - Package: libXext-devel: {'type': 'default'} - Package: libXtst-devel: {'type': 'default'} - Package: libmng-devel: {'type': 'default'} - Package: libXvMC-devel: {'type': 'default'} - Package: libXfont-devel: {'type': 'default'} - Package: libtiff-devel: {'type': 'default'} - Package: SDL-devel: {'type': 'default'} - Package: xorg-x11-docs: {'type': 'default'} - Package: libSM-devel: {'type': 'default'} - Package: libXau-devel: {'type': 'default'} - Package: libXScrnSaver-devel: {'type': 'default'} - Package: gd-devel: {'type': 'default'} - Package: libXxf86misc-devel: {'type': 'default'} - Package: libXft-devel: {'type': 'default'} - Package: xorg-x11-xtrans-devel: {'type': 'default'} - Package: libdrm-devel: {'type': 'default'} - Package: libXrandr-devel: {'type': 'default'} - Package: libjpeg-turbo-devel: {'type': 'default'} - Package: giflib-devel: {'type': 'default'} - Package: Xaw3d-devel: {'type': 'default'} - Package: libXdmcp-devel: {'type': 'default'} - Package: xrestop: {'type': 'default'} - Package: libdmx-devel: {'type': 'default'} - Package: libXcomposite-devel: {'type': 'default'} - Package: mesa-libGL-devel: {'type': 'default'} - Package: libXcursor-devel: {'type': 'default'} - Package: netpbm-devel: {'type': 'default'} - Package: libpng-devel: {'type': 'default'} - Package: libXdamage-devel: {'type': 'default'} - Package: xorg-x11-xbitmaps: {'type': 'optional'} - Package: icon-slicer: {'type': 'optional'} - Package: icon-naming-utils: {'type': 'optional'} - Package: mesa-libGLU-devel: {'type': 'optional'} - Package: xorg-x11-server-devel: {'type': 'optional'} - Package: neXtaw-devel: {'type': 'optional'} - Package: libXp-devel: {'type': 'optional'} -Group: xmonad (XMonad) - Package: xmobar: {'type': 'mandatory'} - Package: xmonad: {'type': 'mandatory'} -Group: xmonad-mate (XMonad for MATE) - Package: mate-control-center: {'type': 'mandatory'} - Package: mate-panel: {'type': 'mandatory'} - Package: xmonad-mate: {'type': 'mandatory'} - Package: mate-screensaver: {'type': 'mandatory'} -Group: xfce-desktop (Xfce) - Package: xfce4-session: {'type': 'mandatory'} - Package: alsa-utils: {'type': 'mandatory'} - Package: greybird-xfce4-notifyd-theme: {'type': 'mandatory'} - Package: xfwm4-theme-nodoka: {'type': 'mandatory'} - Package: xdg-user-dirs-gtk: {'type': 'mandatory'} - Package: openssh-askpass: {'type': 'mandatory'} - Package: blueman: {'type': 'mandatory'} - Package: bluebird-gtk2-theme: {'type': 'mandatory'} - Package: bluebird-xfwm4-theme: {'type': 'mandatory'} - Package: firewall-config: {'type': 'mandatory'} - Package: NetworkManager-l2tp: {'type': 'mandatory'} - Package: xfce4-pulseaudio-plugin: {'type': 'mandatory'} - Package: NetworkManager-vpnc-gnome: {'type': 'mandatory'} - Package: xfwm4: {'type': 'mandatory'} - Package: xfce4-about: {'type': 'mandatory'} - Package: fedora-icon-theme: {'type': 'mandatory'} - Package: NetworkManager-pptp: {'type': 'mandatory'} - Package: NetworkManager-openconnect: {'type': 'mandatory'} - Package: albatross-gtk3-theme: {'type': 'mandatory'} - Package: xfce4-power-manager: {'type': 'mandatory'} - Package: xfce4-datetime-plugin: {'type': 'mandatory'} - Package: gtk-xfce-engine: {'type': 'mandatory'} - Package: tumbler: {'type': 'mandatory'} - Package: gvfs: {'type': 'mandatory'} - Package: abrt-desktop: {'type': 'mandatory'} - Package: nm-connection-editor: {'type': 'mandatory'} - Package: xfce4-screenshooter-plugin: {'type': 'mandatory'} - Package: desktop-backgrounds-compat: {'type': 'mandatory'} - Package: bluebird-gtk3-theme: {'type': 'mandatory'} - Package: albatross-xfwm4-theme: {'type': 'mandatory'} - Package: greybird-gtk3-theme: {'type': 'mandatory'} - Package: xfwm4-themes: {'type': 'mandatory'} - Package: xscreensaver-base: {'type': 'mandatory'} - Package: adwaita-icon-theme: {'type': 'mandatory'} - Package: xfce4-places-plugin: {'type': 'mandatory'} - Package: initial-setup-gui: {'type': 'mandatory'} - Package: greybird-gtk2-theme: {'type': 'mandatory'} - Package: Thunar: {'type': 'mandatory'} - Package: adwaita-gtk2-theme: {'type': 'mandatory'} - Package: xfce4-session-engines: {'type': 'mandatory'} - Package: xfce4-panel: {'type': 'mandatory'} - Package: greybird-xfwm4-theme: {'type': 'mandatory'} - Package: xfce4-terminal: {'type': 'mandatory'} - Package: thunar-volman: {'type': 'mandatory'} - Package: xfce4-settings: {'type': 'mandatory'} - Package: fros-recordmydesktop: {'type': 'mandatory'} - Package: thunar-media-tags-plugin: {'type': 'mandatory'} - Package: gvfs-archive: {'type': 'mandatory'} - Package: NetworkManager-openvpn: {'type': 'mandatory'} - Package: network-manager-applet: {'type': 'mandatory'} - Package: NetworkManager-vpnc: {'type': 'mandatory'} - Package: rodent-icon-theme: {'type': 'mandatory'} - Package: xfce4-appfinder: {'type': 'mandatory'} - Package: xfconf: {'type': 'mandatory'} - Package: xfdesktop: {'type': 'mandatory'} - Package: albatross-gtk2-theme: {'type': 'mandatory'} - Package: lightdm-gtk: {'type': 'mandatory'} - Package: thunar-archive-plugin: {'type': 'mandatory'} - Package: yumex: {'type': 'mandatory'} -Group: xfce-office (Xfce Office) - Package: gnumeric: {'type': 'mandatory'} - Package: abiword: {'type': 'mandatory'} -Group: xfce-software-development (Xfce Software Development) - Package: libxfce4ui-devel: {'type': 'mandatory'} - Package: libxfce4util-devel: {'type': 'mandatory'} - Package: xfce4-panel-devel: {'type': 'default'} - Package: xfce4-dev-tools: {'type': 'default'} - Package: xfconf-devel: {'type': 'default'} - Package: exo-devel: {'type': 'default'} - Package: garcon-devel: {'type': 'default'} - Package: tumbler-devel: {'type': 'default'} - Package: Thunar-devel: {'type': 'default'} - Package: xfce4-session-devel: {'type': 'optional'} -Group: yiddish-support (Yiddish Support) - Package: dejavu-sans-fonts: {'type': 'mandatory'} - Package: culmus-stamsefarad-clm-fonts: {'type': 'default'} - Package: culmus-miriam-mono-clm-fonts: {'type': 'default'} - Package: culmus-ellinia-clm-fonts: {'type': 'default'} - Package: culmus-miriam-clm-fonts: {'type': 'default'} - Package: culmus-drugulin-clm-fonts: {'type': 'default'} - Package: culmus-aharoni-clm-fonts: {'type': 'default'} - Package: culmus-keteryg-fonts: {'type': 'default'} - Package: culmus-stamashkenaz-clm-fonts: {'type': 'default'} - Package: culmus-yehuda-clm-fonts: {'type': 'default'} - Package: culmus-nachlieli-clm-fonts: {'type': 'default'} - Package: culmus-caladings-clm-fonts: {'type': 'default'} - Package: culmus-hadasim-clm-fonts: {'type': 'default'} - Package: culmus-frank-ruehl-clm-fonts: {'type': 'default'} - Package: culmus-david-clm-fonts: {'type': 'default'} - Package: culmus-simple-clm-fonts: {'type': 'default'} -Group: base-x (base-x) - Package: xorg-x11-drv-wacom: {'type': 'mandatory'} - Package: xorg-x11-server-Xorg: {'type': 'mandatory'} - Package: xorg-x11-drv-vmware: {'type': 'mandatory'} - Package: xorg-x11-drv-openchrome: {'type': 'mandatory'} - Package: xorg-x11-drv-qxl: {'type': 'mandatory'} - Package: xorg-x11-drv-ati: {'type': 'mandatory'} - Package: xorg-x11-drv-evdev: {'type': 'mandatory'} - Package: xorg-x11-drv-armsoc: {'type': 'mandatory'} - Package: xorg-x11-utils: {'type': 'mandatory'} - Package: mesa-dri-drivers: {'type': 'mandatory'} - Package: xorg-x11-drv-omap: {'type': 'mandatory'} - Package: xorg-x11-drv-vesa: {'type': 'mandatory'} - Package: xorg-x11-xinit: {'type': 'mandatory'} - Package: glx-utils: {'type': 'mandatory'} - Package: xorg-x11-drv-nouveau: {'type': 'mandatory'} - Package: xorg-x11-drv-freedreno: {'type': 'mandatory'} - Package: plymouth-system-theme: {'type': 'mandatory'} - Package: xorg-x11-drv-intel: {'type': 'mandatory'} - Package: xorg-x11-drv-vmmouse: {'type': 'mandatory'} - Package: xorg-x11-drv-libinput: {'type': 'mandatory'} - Package: xorg-x11-drv-fbdev: {'type': 'mandatory'} - Package: xorg-x11-xauth: {'type': 'mandatory'} - Package: xorg-x11-drv-geode: {'type': 'optional'} diff --git a/tests/test_cli/data/comps-sample.yumcomps.calls b/tests/test_cli/data/comps-sample.yumcomps.calls deleted file mode 100644 index 0c75aa5..0000000 --- a/tests/test_cli/data/comps-sample.yumcomps.calls +++ /dev/null @@ -1,39 +0,0 @@ -[ - [ "groupListAdd", [ "tag", "additional-devel" ], { "force": null, "description": "Additional development headers and libraries for developing applications", "uservisible": false, "is_default": false, "display_name": "Additional Development", "langonly": "fr" } ], - [ "groupPackageListAdd", [ "tag", "additional-devel", "binutils-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "additional-devel", "boost-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "additional-devel", "bzip2-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "additional-devel", "cyrus-sasl-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "additional-devel", "audit-libs-devel" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "additional-devel", "alsa-lib-devel" ], { "type": "default", "force": null } ], - [ "groupListAdd", [ "tag", "ansible-node" ], { "force": null, "description": "", "uservisible": true, "is_default": false, "display_name": "Ansible node", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "ansible-node", "python2-dnf" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "ansible-node", "libselinux-python" ], { "force": null, "requires": "selinux-policy", "type": "conditional" } ], - [ "groupListAdd", [ "tag", "backup-client" ], { "force": null, "description": "Client tools for connecting to a backup server and doing backups.", "uservisible": true, "is_default": true, "display_name": "Backup Client", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "backup-client", "amanda-client" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "backup-client", "bacula-client" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "backup-server" ], { "force": null, "description": "Software to centralize your infrastructure's backups.", "uservisible": true, "is_default": false, "display_name": "Backup Server", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "backup-server", "amanda-server" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "backup-server", "mtx" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "backup-server", "mt-st" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "d-development" ], { "force": null, "description": "These include development tools and libraries such as ldc, and geany-tag.", "uservisible": true, "is_default": false, "display_name": "D Development Tools and Libraries", "langonly": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ldc" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ldc-druntime" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "make" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "pkgconfig" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ldc-phobos-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ldc-druntime-devel" ], { "type": "mandatory", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "ctags" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "indent" ], { "type": "default", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "geany" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "cmake" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "derelict-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "insight" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "nemiver" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "gl3n-devel" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "astyle" ], { "type": "optional", "force": null } ], - [ "groupPackageListAdd", [ "tag", "d-development", "uncrustify" ], { "type": "optional", "force": null } ], - [ "groupListAdd", [ "tag", "empty-group-1" ], { "force": null, "description": "empty group 1 desc", "uservisible": true, "is_default": false, "display_name": "empty group 1", "langonly": null } ], - [ "groupListAdd", [ "tag", "empty-group-2" ], { "force": null, "description": "empty group 2 desc", "uservisible": true, "is_default": false, "display_name": "empty group 2", "langonly": null } ], - [ "groupListAdd", [ "tag", "unknown-group" ], { "force": null, "description": "unknown group desc", "uservisible": true, "is_default": false, "display_name": "unknown group", "langonly": null } ] -] diff --git a/tests/test_cli/data/comps-sample.yumcomps.out b/tests/test_cli/data/comps-sample.yumcomps.out deleted file mode 100644 index 1e0bb8b..0000000 --- a/tests/test_cli/data/comps-sample.yumcomps.out +++ /dev/null @@ -1,38 +0,0 @@ -WARN: yum.comps does not support the biarchonly of group and basearchonly of package -Group: additional-devel (Additional Development) - Package: binutils-devel: {'type': 'default'} - Package: boost-devel: {'type': 'default'} - Package: bzip2-devel: {'type': 'default'} - Package: cyrus-sasl-devel: {'type': 'default'} - Package: audit-libs-devel: {'type': 'default'} - Package: alsa-lib-devel: {'type': 'default'} -Group: ansible-node (Ansible node) - Package: python2-dnf: {'type': 'mandatory'} - Package: libselinux-python: {'requires': 'selinux-policy', 'type': 'conditional'} -Group: backup-client (Backup Client) - Package: amanda-client: {'type': 'mandatory'} - Package: bacula-client: {'type': 'optional'} -Group: backup-server (Backup Server) - Package: amanda-server: {'type': 'mandatory'} - Package: mtx: {'type': 'optional'} - Package: mt-st: {'type': 'optional'} -Group: d-development (D Development Tools and Libraries) - Package: ldc: {'type': 'mandatory'} - Package: ldc-druntime: {'type': 'mandatory'} - Package: make: {'type': 'mandatory'} - Package: pkgconfig: {'type': 'mandatory'} - Package: ldc-phobos-devel: {'type': 'mandatory'} - Package: ldc-druntime-devel: {'type': 'mandatory'} - Package: ctags: {'type': 'default'} - Package: indent: {'type': 'default'} - Package: geany: {'type': 'optional'} - Package: cmake: {'type': 'optional'} - Package: derelict-devel: {'type': 'optional'} - Package: insight: {'type': 'optional'} - Package: nemiver: {'type': 'optional'} - Package: gl3n-devel: {'type': 'optional'} - Package: astyle: {'type': 'optional'} - Package: uncrustify: {'type': 'optional'} -Group: empty-group-1 (empty group 1) -Group: empty-group-2 (empty group 2) -Group: unknown-group (unknown group) diff --git a/tests/test_cli/test_import_comps.py b/tests/test_cli/test_import_comps.py index 6d86f2a..8a09600 100644 --- a/tests/test_cli/test_import_comps.py +++ b/tests/test_cli/test_import_comps.py @@ -5,20 +5,10 @@ import os import sys import unittest -try: - import libcomps -except ImportError: - libcomps = None -try: - import yum.comps as yumcomps -except ImportError: - yumcomps = None from nose.plugins.skip import SkipTest -import koji_cli.commands -from koji_cli.commands import handle_import_comps, _import_comps,\ - _import_comps_alt +from koji_cli.commands import handle_import_comps from . import utils class TestImportComps(utils.CliTestCase): @@ -28,14 +18,10 @@ class TestImportComps(utils.CliTestCase): @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('koji_cli.commands.libcomps') @mock.patch('koji_cli.commands.activate_session') - @mock.patch('koji_cli.commands._import_comps') - @mock.patch('koji_cli.commands._import_comps_alt') def test_handle_import_comps_libcomps( self, - mock_import_comps_alt, - mock_import_comps, mock_activate_session, - libcomps, + mock_libcomps, stdout): filename = './data/comps-example.xml' tag = 'tag' @@ -60,98 +46,12 @@ class TestImportComps(utils.CliTestCase): # Finally, assert that things were called as we expected. mock_activate_session.assert_called_once_with(session, options) session.getTag.assert_called_once_with(tag) - mock_import_comps.assert_called_once_with( - session, filename, tag, kwargs) - mock_import_comps_alt.assert_not_called() self.assertNotEqual(rv, 1) - @mock.patch('sys.stdout', new_callable=io.StringIO) - @mock.patch('koji_cli.commands.libcomps', new=None) - @mock.patch('koji_cli.commands.yumcomps', create=True) - @mock.patch('koji_cli.commands.activate_session') - @mock.patch('koji_cli.commands._import_comps') - @mock.patch('koji_cli.commands._import_comps_alt') - def test_handle_import_comps_yumcomps( - self, - mock_import_comps_alt, - mock_import_comps, - mock_activate_session, - yumcomps, - stdout): - filename = './data/comps-example.xml' - tag = 'tag' - tag_info = {'name': tag, 'id': 1} - force = True - args = ['--force', filename, tag] - local_options = {'force': force} - options = mock.MagicMock() - - # Mock out the xmlrpc server - session = mock.MagicMock() - session.getTag.return_value = tag_info - - # Run it and check immediate output - # args: --force, ./data/comps-example.xml, tag - # expected: success - rv = handle_import_comps(options, session, args) - actual = stdout.getvalue() - expected = '' - self.assertMultiLineEqual(actual, expected) - - # Finally, assert that things were called as we expected. - mock_activate_session.assert_called_once_with(session, options) - session.getTag.assert_called_once_with(tag) - mock_import_comps.assert_not_called() - mock_import_comps_alt.assert_called_once_with( - session, filename, tag, local_options) - self.assertNotEqual(rv, 1) - - @mock.patch('sys.stderr', new_callable=io.StringIO) - @mock.patch('koji_cli.commands.libcomps', new=None) - @mock.patch('koji_cli.commands.yumcomps', new=None, create=True) - @mock.patch('koji_cli.commands.activate_session') - @mock.patch('koji_cli.commands._import_comps') - @mock.patch('koji_cli.commands._import_comps_alt') - def test_handle_import_comps_comps_na( - self, - mock_import_comps_alt, - mock_import_comps, - mock_activate_session, - stderr): - filename = './data/comps-example.xml' - tag = 'tag' - tag_info = {'name': tag, 'id': 1} - args = ['--force', filename, tag] - options = mock.MagicMock() - - # Mock out the xmlrpc server - session = mock.MagicMock() - session.getTag.return_value = tag_info - - # Run it and check immediate output - # args: --force, ./data/comps-example.xml, tag - # expected: failed, no comps available - with self.assertRaises(SystemExit) as ex: - handle_import_comps(options, session, args) - self.assertExitCode(ex, 1) - actual = stderr.getvalue() - expected = 'comps module not available\n' - self.assertMultiLineEqual(actual, expected) - - # Finally, assert that things were called as we expected. - mock_activate_session.assert_called_once_with(session, options) - session.getTag.assert_called_once_with(tag) - mock_import_comps.assert_not_called() - mock_import_comps_alt.assert_not_called() - @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') - @mock.patch('koji_cli.commands._import_comps') - @mock.patch('koji_cli.commands._import_comps_alt') def test_handle_import_comps_tag_not_exists( self, - mock_import_comps_alt, - mock_import_comps, mock_activate_session, stderr): filename = './data/comps-example.xml' @@ -177,17 +77,12 @@ class TestImportComps(utils.CliTestCase): # Finally, assert that things were called as we expected. mock_activate_session.assert_called_once_with(session, options) session.getTag.assert_called_once_with(tag) - mock_import_comps.assert_not_called() - mock_import_comps_alt.assert_not_called() @mock.patch('sys.stdout', new_callable=io.StringIO) @mock.patch('sys.stderr', new_callable=io.StringIO) @mock.patch('koji_cli.commands.activate_session') - @mock.patch('koji_cli.commands._import_comps') - @mock.patch('koji_cli.commands._import_comps_alt') def test_handle_import_comps_help( self, - mock_import_comps_alt, mock_import_comps, mock_activate_session, stderr, stdout): @@ -219,74 +114,6 @@ class TestImportComps(utils.CliTestCase): session.getTagGroups.assert_not_called() session.groupListAdd.assert_not_called() - @mock.patch('sys.stdout', new_callable=io.StringIO) - def test_import_comps_libcomps(self, stdout): - if libcomps is None: - raise SkipTest('no libcomps') - comps_file = os.path.dirname(__file__) + '/data/comps-example.xml' - stdout_file = os.path.dirname( - __file__) + '/data/comps-example.libcomps.out' - calls_file = os.path.dirname( - __file__) + '/data/comps-example.libcomps.calls' - self._test_import_comps( - _import_comps, - comps_file, - stdout_file, - calls_file, - stdout) - - @mock.patch('sys.stdout', new_callable=io.StringIO) - def test_import_comps_sample_libcomps(self, stdout): - if libcomps is None: - raise SkipTest('no libcomps') - comps_file = os.path.dirname(__file__) + '/data/comps-sample.xml' - stdout_file = os.path.dirname( - __file__) + '/data/comps-sample.libcomps.out' - calls_file = os.path.dirname( - __file__) + '/data/comps-sample.libcomps.calls' - self._test_import_comps( - _import_comps, - comps_file, - stdout_file, - calls_file, - stdout) - - @mock.patch('sys.stdout', new_callable=io.StringIO) - @mock.patch('koji_cli.commands.libcomps', new=None) - @mock.patch('koji_cli.commands.yumcomps', create=True, new=yumcomps) - def test_import_comps_yumcomps(self, stdout): - if yumcomps is None: - raise SkipTest('no yum.comps') - comps_file = os.path.dirname(__file__) + '/data/comps-example.xml' - stdout_file = os.path.dirname( - __file__) + '/data/comps-example.yumcomps.out' - calls_file = os.path.dirname( - __file__) + '/data/comps-example.yumcomps.calls' - self._test_import_comps( - _import_comps_alt, - comps_file, - stdout_file, - calls_file, - stdout) - - @mock.patch('sys.stdout', new_callable=io.StringIO) - @mock.patch('koji_cli.commands.libcomps', new=None) - @mock.patch('koji_cli.commands.yumcomps', create=True, new=yumcomps) - def test_import_comps_sample_yumcomps(self, stdout): - if yumcomps is None: - raise SkipTest('no yum.comps') - comps_file = os.path.dirname(__file__) + '/data/comps-sample.xml' - stdout_file = os.path.dirname( - __file__) + '/data/comps-sample.yumcomps.out' - calls_file = os.path.dirname( - __file__) + '/data/comps-sample.yumcomps.calls' - self._test_import_comps( - _import_comps_alt, - comps_file, - stdout_file, - calls_file, - stdout) - def _test_import_comps( self, method, @@ -322,6 +149,7 @@ class TestImportComps(utils.CliTestCase): self.assertNotEqual(rv, 1) +''' def _generate_out_calls(method, comps_file, stdout_file, calls_file): tag = 'tag' force = None @@ -356,26 +184,7 @@ def generate_out_calls(): stdout_file = path + '/data/comps-sample.libcomps.out' calls_file = path + '/data/comps-sample.libcomps.calls' _generate_out_calls(_import_comps, comps_file, stdout_file, calls_file) - - koji_cli.commands.yumcomps = yumcomps - - comps_file = path + '/data/comps-example.xml' - stdout_file = path + '/data/comps-example.yumcomps.out' - calls_file = path + '/data/comps-example.yumcomps.calls' - _generate_out_calls( - _import_comps_alt, - comps_file, - stdout_file, - calls_file) - - comps_file = path + '/data/comps-sample.xml' - stdout_file = path + '/data/comps-sample.yumcomps.out' - calls_file = path + '/data/comps-sample.yumcomps.calls' - _generate_out_calls( - _import_comps_alt, - comps_file, - stdout_file, - calls_file) +''' if __name__ == '__main__': From 541fe1e450ef2eb9ecfcb80954af03c8ee221dcc Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Aug 26 2020 13:57:57 +0000 Subject: [PATCH 8/8] flake8 --- diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index e48f844..d6518c1 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -46,6 +46,7 @@ from koji_cli.lib import ( watch_tasks ) + def handle_add_group(goptions, session, args): "[admin] Add a group to a tag" usage = _("usage: %prog add-group ")