aboutsummaryrefslogtreecommitdiff
path: root/debian/patches
diff options
context:
space:
mode:
authorLibravatar Mubashshir <ahm@jadupc.com>2023-08-26 16:01:54 +0600
committerLibravatar Mubashshir <ahm@jadupc.com>2023-08-26 16:01:54 +0600
commit22b47d8f27c3d4558f1df2d79cad7a63fd7cc871 (patch)
tree4f9e55dec008a3f1de61cabfb577fe254ae6e36e /debian/patches
parent70faa8e9a0ff3cba74b4f753e257d56b768fcbd2 (diff)
downloadaptdaemon-22b47d8f27c3d4558f1df2d79cad7a63fd7cc871.tar.gz
aptdaemon-22b47d8f27c3d4558f1df2d79cad7a63fd7cc871.zip
Drop unused patches
Signed-off-by: Mubashshir <ahm@jadupc.com>
Diffstat (limited to 'debian/patches')
-rw-r--r--debian/patches/CVE-2020-15703.patch16
-rw-r--r--debian/patches/CVE-2020-16128.patch166
-rw-r--r--debian/patches/CVE-2020-27349.patch31
-rw-r--r--debian/patches/allow-unauthenticated.patch23
-rw-r--r--debian/patches/apport-report.patch24
-rw-r--r--debian/patches/dbus_timeout.patch63
-rw-r--r--debian/patches/do-not-raise-stopiteration.patch68
-rw-r--r--debian/patches/drop_pkcompat.patch2068
-rw-r--r--debian/patches/failing-tests.patch85
-rw-r--r--debian/patches/fix-dependency-solving.patch97
-rw-r--r--debian/patches/fix-high-trust-pkcompat.diff16
-rw-r--r--debian/patches/fix-installation.patch18
-rw-r--r--debian/patches/fix-some-deprecated-code.patch182
-rw-r--r--debian/patches/frontend-locking.patch56
-rw-r--r--debian/patches/gdk-gtk-versions.py13
-rw-r--r--debian/patches/key_value_typo.patch18
-rw-r--r--debian/patches/lintian_deprecated_error.patch20
-rw-r--r--debian/patches/lock-is-held-typo.patch15
-rw-r--r--debian/patches/lp1153725-temporary-workaround.patch25
-rw-r--r--debian/patches/lp1356823.diff13
-rw-r--r--debian/patches/lp1439769-aptdaemon-autoinstall.patch50
-rw-r--r--debian/patches/lp1449587.diff363
-rw-r--r--debian/patches/lp1487087.diff21
-rw-r--r--debian/patches/lp1623856-window-height.patch15
-rw-r--r--debian/patches/lp1689668-config-file-window.patch13
-rw-r--r--debian/patches/lp1690541-details-open-twice.patch12
-rw-r--r--debian/patches/native-arch.patch17
-rw-r--r--debian/patches/pep8-accommodations.diff35
-rw-r--r--debian/patches/pk-debconf-helper.patch40
-rw-r--r--debian/patches/pk1.1.1_compat.patch29
-rw-r--r--debian/patches/py3_inheritable.patch14
-rw-r--r--debian/patches/python3.7-compat.patch53
-rw-r--r--debian/patches/remove-lintian-scanning-of-local-packages.patch180
-rw-r--r--debian/patches/series33
-rw-r--r--debian/patches/test-with-timeout.patch15
35 files changed, 0 insertions, 3907 deletions
diff --git a/debian/patches/CVE-2020-15703.patch b/debian/patches/CVE-2020-15703.patch
deleted file mode 100644
index caf9360..0000000
--- a/debian/patches/CVE-2020-15703.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Description: Reject locales with full path
- _parse_localename() treats "/tmp/a." as a locale with language "/tmp/a" and
- empty region, so add an extra safety check.
-Author: Julian Andres Klode <juliank@ubuntu.com>
-Bug: https://bugs.launchpad.net/ubuntu/+source/aptdaemon/+bug/1888235
---- a/aptdaemon/core.py
-+++ b/aptdaemon/core.py
-@@ -821,6 +821,8 @@ class Transaction(DBusObject):
- """
- if self.status != enums.STATUS_SETTING_UP:
- raise errors.TransactionAlreadyRunning()
-+ if "/" in str(locale_str):
-+ raise ValueError("Security exception: Absolute path for locale")
- try:
- # ensure locale string is str() and not dbus.String()
- (lang, encoding) = locale._parse_localename(str(locale_str))
diff --git a/debian/patches/CVE-2020-16128.patch b/debian/patches/CVE-2020-16128.patch
deleted file mode 100644
index 4e10f9f..0000000
--- a/debian/patches/CVE-2020-16128.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-Description: Fix file existence disclosures (CVE-2020-16128)
- Move set_euid_egid into aptdaemon.utils and use it when setting
- Terminal and DebConfSocket properties, to ensure our checks only
- have access to the same objects the user has.
- .
- Rewrite the checks so that they avoid extra os.access lookups and
- have correct error handling for os.open() in the terminal, and
- os.stat() in the debconf case.
-Author: Julian Andres Klode <juliank@ubuntu.com>
-Bug-Ubuntu: https://bugs.launchpad.net/bugs/1899513
---- a/aptdaemon/core.py
-+++ b/aptdaemon/core.py
-@@ -60,7 +60,7 @@ from . import enums
- from defer import inline_callbacks, return_value, Deferred
- from defer.utils import dbus_deferred_method
- from . import policykit1
--from .utils import split_package_id
-+from .utils import split_package_id, set_euid_egid
- from .worker import DummyWorker
- from .worker.aptworker import (AptWorker,
- trans_only_installs_pkgs_from_high_trust_repos)
-@@ -1107,24 +1107,28 @@ class Transaction(DBusObject):
- """
- if self.status != enums.STATUS_SETTING_UP:
- raise errors.TransactionAlreadyRunning()
-- if not os.access(ttyname, os.W_OK):
-- raise errors.AptDaemonError("Pty device does not exist: "
-- "%s" % ttyname)
-- if not os.stat(ttyname)[4] == self.uid:
-- raise errors.AptDaemonError("Pty device '%s' has to be owned by"
-- "the owner of the transaction "
-- "(uid %s) " % (ttyname, self.uid))
-- if os.path.dirname(ttyname) != "/dev/pts":
-- raise errors.AptDaemonError("%s isn't a tty" % ttyname)
-- try:
-- slave_fd = os.open(ttyname, os.O_RDWR | os.O_NOCTTY)
-- if os.isatty(slave_fd):
-- self.terminal = dbus.String(ttyname)
-- self.PropertyChanged("Terminal", self.terminal)
-- else:
-+ with set_euid_egid(self.uid, self.gid):
-+ if os.path.dirname(ttyname) != "/dev/pts":
- raise errors.AptDaemonError("%s isn't a tty" % ttyname)
-- finally:
-- os.close(slave_fd)
-+
-+ slave_fd = None
-+ try:
-+ slave_fd = os.open(ttyname, os.O_RDWR | os.O_NOCTTY)
-+ except Exception:
-+ raise errors.AptDaemonError("Could not open %s" % ttyname)
-+ else:
-+ if os.fstat(slave_fd).st_uid != self.uid:
-+ raise errors.AptDaemonError("Pty device '%s' has to be owned by"
-+ "the owner of the transaction "
-+ "(uid %s) " % (ttyname, self.uid))
-+ if os.isatty(slave_fd):
-+ self.terminal = dbus.String(ttyname)
-+ self.PropertyChanged("Terminal", self.terminal)
-+ else:
-+ raise errors.AptDaemonError("%s isn't a tty" % ttyname)
-+ finally:
-+ if slave_fd is not None:
-+ os.close(slave_fd)
-
- def _set_debconf(self, debconf_socket):
- """Set the socket of the debconf proxy.
-@@ -1140,13 +1144,17 @@ class Transaction(DBusObject):
- """
- if self.status != enums.STATUS_SETTING_UP:
- raise errors.TransactionAlreadyRunning()
-- if not os.access(debconf_socket, os.W_OK):
-- raise errors.AptDaemonError("socket does not exist: "
-- "%s" % debconf_socket)
-- if not os.stat(debconf_socket)[4] == self.uid:
-- raise errors.AptDaemonError("socket '%s' has to be owned by the "
-- "owner of the "
-- "transaction" % debconf_socket)
-+ with set_euid_egid(self.uid, self.gid):
-+ try:
-+ stat = os.stat(debconf_socket)
-+ except Exception:
-+ raise errors.AptDaemonError("socket status could not be read: "
-+ "%s" % debconf_socket)
-+ else:
-+ if stat.st_uid != self.uid:
-+ raise errors.AptDaemonError("socket '%s' has to be owned by the "
-+ "owner of the "
-+ "transaction" % debconf_socket)
- self.debconf = dbus.String(debconf_socket)
- self.PropertyChanged("DebconfSocket", self.debconf)
-
---- a/aptdaemon/worker/aptworker.py
-+++ b/aptdaemon/worker/aptworker.py
-@@ -58,6 +58,7 @@ from . import BaseWorker
- from ..enums import *
- from ..errors import *
- from .. import lock
-+from ..utils import set_euid_egid
- from ..progress import (
- DaemonOpenProgress,
- DaemonInstallProgress,
-@@ -90,25 +91,6 @@ USE_HTTP="yes"
- """
-
-
--@contextlib.contextmanager
--def set_euid_egid(uid, gid):
-- # no need to drop privs
-- if os.getuid() != 0 and os.getgid() != 0:
-- yield
-- return
-- # temporary drop privs
-- os.setegid(gid)
-- old_groups = os.getgroups()
-- os.setgroups([gid])
-- os.seteuid(uid)
-- try:
-- yield
-- finally:
-- os.seteuid(os.getuid())
-- os.setegid(os.getgid())
-- os.setgroups(old_groups)
--
--
- def trans_only_installs_pkgs_from_high_trust_repos(trans,
- whitelist=set()):
- """Return True if this transaction only touches packages in the
---- a/aptdaemon/utils.py
-+++ b/aptdaemon/utils.py
-@@ -24,7 +24,9 @@ __author__ = "Sebastian Heinlein <devel@
-
- __all__ = ("deprecated", "IsoCodes")
-
-+import os
- import sys
-+import contextlib
- import gettext
- import functools
- import warnings
-@@ -58,6 +60,25 @@ def deprecated(func):
- return new_func
-
-
-+@contextlib.contextmanager
-+def set_euid_egid(uid, gid):
-+ # no need to drop privs
-+ if os.getuid() != 0 and os.getgid() != 0:
-+ yield
-+ return
-+ # temporary drop privs
-+ os.setegid(gid)
-+ old_groups = os.getgroups()
-+ os.setgroups([gid])
-+ os.seteuid(uid)
-+ try:
-+ yield
-+ finally:
-+ os.seteuid(os.getuid())
-+ os.setegid(os.getgid())
-+ os.setgroups(old_groups)
-+
-+
- class IsoCodes(object):
-
- """Provides access to the iso-codes language, script and country
diff --git a/debian/patches/CVE-2020-27349.patch b/debian/patches/CVE-2020-27349.patch
deleted file mode 100644
index 230ed4a..0000000
--- a/debian/patches/CVE-2020-27349.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 5d6e1ca82a07ef1739dfea20ad17f077ceccfdcf Mon Sep 17 00:00:00 2001
-From: Julian Andres Klode <julian.klode@canonical.com>
-Date: Tue, 1 Dec 2020 12:25:00 +0100
-Subject: [PATCH] Check PolicyKit before simulating local install
- (CVE-2020-27349)
-
-Given that we are opening a deb here as root that is controlled
-by a non-root user, without any authorization, this is a whole
-lot of safety issues.
-
-Bug-Ubuntu: https://bugs.launchpad.net/bugs/1899193/
----
- aptdaemon/core.py | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/aptdaemon/core.py b/aptdaemon/core.py
-index 885b30b..6043b17 100644
---- a/aptdaemon/core.py
-+++ b/aptdaemon/core.py
-@@ -1073,6 +1073,8 @@ class Transaction(DBusObject):
- def _simulate_real(self):
- if self._simulated_cb:
- raise errors.TransactionAlreadySimulating()
-+ if self.role == enums.ROLE_INSTALL_FILE:
-+ yield self._check_auth()
- self.queue.worker.simulate(self)
- deferred = Deferred()
- if self._idle_watch is not None:
---
-2.29.2
-
diff --git a/debian/patches/allow-unauthenticated.patch b/debian/patches/allow-unauthenticated.patch
deleted file mode 100644
index 7c84232..0000000
--- a/debian/patches/allow-unauthenticated.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Description: Forward allow_unauthenticated to python-apt
- Forward the allow_unauthenticated flag to python-apt so packages can continue
- to be downloaded without them being authenticated, avoiding breakage with recent
- python-apt uploads.
-Author: Julian Andres Klode <juliank@ubuntu.com>
-Origin: vendor
-Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/python-apt/+bug/1858973
---- a/aptdaemon/worker/aptworker.py
-+++ b/aptdaemon/worker/aptworker.py
-@@ -1068,7 +1068,12 @@ class AptWorker(BaseWorker):
- end=install_range[1])
- with self._frozen_status():
- try:
-- self._cache.commit(fetch_progress, inst_progress)
-+ # This was backported as
-+ if "allow_unauthenticated" in apt.Cache.commit.__doc__:
-+ self._cache.commit(fetch_progress, inst_progress,
-+ allow_unauthenticated=trans.allow_unauthenticated)
-+ else:
-+ self._cache.commit(fetch_progress, inst_progress)
- except apt.cache.FetchFailedException as error:
- raise TransactionFailed(ERROR_PACKAGE_DOWNLOAD_FAILED,
- str(error))
diff --git a/debian/patches/apport-report.patch b/debian/patches/apport-report.patch
deleted file mode 100644
index c715386..0000000
--- a/debian/patches/apport-report.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Description: write apport reports the right way
-Author: Brian Murray <brian@ubuntu.com>
-Origin: vendor
-Bug-Ubuntu: http://launchpad.net/bugs/1700810
-Forwarded: not-needed
-Last-Update: 2020-05-11
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/crash.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/crash.py
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/crash.py
-@@ -69,9 +69,8 @@ def create_report(error, traceback, tran
- uid = os.path.basename(trans.tid)
-
- # Write report
-- report_path = apport.fileutils.make_report_path(report, uid)
-- if not os.path.exists(report_path):
-- report.write(open(report_path, 'wb'))
-+ with apport.fileutils.make_report_file(report, uid) as f:
-+ report.write(f)
-
- if __name__ == "__main__":
- apt_pkg.init_config()
diff --git a/debian/patches/dbus_timeout.patch b/debian/patches/dbus_timeout.patch
deleted file mode 100644
index 569f450..0000000
--- a/debian/patches/dbus_timeout.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-=== modified file 'aptdaemon/client.py'
-Index: aptdaemon/aptdaemon/client.py
-===================================================================
---- aptdaemon.orig/aptdaemon/client.py
-+++ aptdaemon/aptdaemon/client.py
-@@ -47,6 +47,10 @@ from .errors import convert_dbus_excepti
- __all__ = ("AptTransaction", "AptClient", "get_transaction", "get_aptdaemon")
-
-
-+# the default timeout for dbus method calls
-+_APTDAEMON_DBUS_TIMEOUT = 86400
-+
-+
- class AptTransaction(GObject.Object):
-
- """Represents an aptdaemon transaction.
-@@ -704,7 +708,8 @@ class AptTransaction(GObject.Object):
- try:
- return self._iface.RunAfter(transaction.tid,
- error_handler=error_handler,
-- reply_handler=reply_handler)
-+ reply_handler=reply_handler,
-+ timeout=_APTDAEMON_DBUS_TIMEOUT)
- except Exception as error:
- if error_handler:
- error_handler(error)
-@@ -727,7 +732,8 @@ class AptTransaction(GObject.Object):
- """
- try:
- return self._iface.Run(error_handler=error_handler,
-- reply_handler=reply_handler)
-+ reply_handler=reply_handler,
-+ timeout=_APTDAEMON_DBUS_TIMEOUT)
- except Exception as error:
- if error_handler:
- error_handler(error)
-@@ -1609,10 +1615,11 @@ class AptClient(object):
- if async:
- deferred = defer.Deferred()
- dbus_method(reply_handler=deferred.callback,
-- error_handler=deferred.errback, *args, timeout=86400)
-+ error_handler=deferred.errback, *args,
-+ timeout=_APTDAEMON_DBUS_TIMEOUT)
- tid = yield deferred
- else:
-- tid = dbus_method(*args, timeout=86400)
-+ tid = dbus_method(*args, timeout=_APTDAEMON_DBUS_TIMEOUT)
- trans = AptTransaction(tid, self.bus)
- if self._locale:
- yield trans.set_locale(self._locale)
-Index: aptdaemon/aptdaemon/core.py
-===================================================================
---- aptdaemon.orig/aptdaemon/core.py
-+++ aptdaemon/aptdaemon/core.py
-@@ -83,7 +83,7 @@ APTDAEMON_DBUS_SERVICE = 'org.debian.apt
- APTDAEMON_TRANSACTION_DBUS_INTERFACE = 'org.debian.apt.transaction'
-
- APTDAEMON_IDLE_CHECK_INTERVAL = 60
--APTDAEMON_IDLE_TIMEOUT = 5 * 60
-+APTDAEMON_IDLE_TIMEOUT = 10 * 60
-
- # Maximum allowed time between the creation of a transaction and its queuing
- TRANSACTION_IDLE_TIMEOUT = 300
diff --git a/debian/patches/do-not-raise-stopiteration.patch b/debian/patches/do-not-raise-stopiteration.patch
deleted file mode 100644
index 7813b36..0000000
--- a/debian/patches/do-not-raise-stopiteration.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-Description: Adjust stopping generators for PEP479
- Adjust aptdaemon for PEP479, where raise StopIteration
- stopped working and should become return.
-Author: Julian Andres Klode <juliank@ubuntu.com>
-Last-Update: 2019-03-27
-
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/core.py
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/core.py
-@@ -935,7 +935,7 @@ class Transaction(DBusObject):
- self.progress = 9
- yield self._simulate_real()
- else:
-- raise StopIteration
-+ return
-
- @inline_callbacks
- def _check_auth(self):
-@@ -946,7 +946,7 @@ class Transaction(DBusObject):
- self.status = enums.STATUS_AUTHENTICATING
- action = self.ROLE_ACTION_MAP[self.role]
- if action is None:
-- raise StopIteration
-+ return
- # Special case if InstallPackages only touches stuff from the
- # high trust whitelist
- if (self.role in (enums.ROLE_INSTALL_PACKAGES,
-@@ -1028,16 +1028,16 @@ class Transaction(DBusObject):
- else:
- self.status = enums.STATUS_CANCELLING
- self.exit = enums.EXIT_CANCELLED
-- raise StopIteration
-+ return
- if self.tid in self.queue.limbo:
- self.exit = enums.EXIT_CANCELLED
-- raise StopIteration
-+ return
- elif self.cancellable:
- log_trans.debug("Setting cancel event")
- self.cancelled = True
- self.status = enums.STATUS_CANCELLING
- self.paused = False
-- raise StopIteration
-+ return
- raise errors.AptDaemonError("Could not cancel transaction")
-
- # pylint: disable-msg=C0103,C0322
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/networking.py
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/networking.py
-@@ -177,7 +177,7 @@ class NetworkManagerMonitor(NetworkMonit
- def _on_nm_active_conn_props_changed(self, props):
- """Callback if properties of the active connection changed."""
- if "Default" not in props:
-- raise StopIteration
-+ return
- yield self.get_network_state()
-
- @inline_callbacks
---- aptdaemon-1.1.1+bzr982.orig/doc/source/aptdaemon.client.rst
-+++ aptdaemon-1.1.1+bzr982/doc/source/aptdaemon.client.rst
-@@ -91,7 +91,7 @@ code in a synchronous way:
- ... transaction = yield apt_client.update()
- ... except errors.NotAuthorizedError:
- ... print "You are not allowed to update the cache!"
-- ... raise StopIteration
-+ ... return
- ... yield transaction.set_locale("de_DE")
- ... yield transaction.run()
- ... print "Transaction has started"
diff --git a/debian/patches/drop_pkcompat.patch b/debian/patches/drop_pkcompat.patch
deleted file mode 100644
index 64980a7..0000000
--- a/debian/patches/drop_pkcompat.patch
+++ /dev/null
@@ -1,2068 +0,0 @@
-From: Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>
-Subject: Drop pkcompat PackageKit compatibility module.
-
-Just use straight PackageKit.
-
----
-
----
- aptdaemon/core.py | 12
- aptdaemon/pkcompat.py | 2022 --------------------------------------------------
- 2 files changed, 2 insertions(+), 2032 deletions(-)
-
-Index: b/aptdaemon/core.py
-===================================================================
---- a/aptdaemon/core.py
-+++ b/aptdaemon/core.py
-@@ -1445,22 +1445,14 @@ class AptDaemon(DBusObject):
- load_plugins = not options.disable_plugins
- try:
- from .worker.pkworker import AptPackageKitWorker
-- from . import pkcompat
-- except ImportError:
-- self.worker = AptWorker(options.chroot, load_plugins)
-- else:
- self.worker = AptPackageKitWorker(options.chroot,
- load_plugins)
-+ except:
-+ self.worker = AptWorker(options.chroot, load_plugins)
- self.queue = TransactionQueue(self.worker)
- self.queue.connect("queue-changed", self._on_queue_changed)
- # keep state of the last information about reboot required
- self._reboot_required = self.worker.is_reboot_required()
-- try:
-- self.packagekit = pkcompat.PackageKit(self.queue, connect, bus)
-- except dbus.exceptions.NameExistsException:
-- log.warning("PackageKit is already running")
-- except NameError:
-- pass
- log.debug("Daemon was initialized")
-
- def _on_queue_changed(self, queue):
-Index: b/aptdaemon/pkcompat.py
-===================================================================
---- a/aptdaemon/pkcompat.py
-+++ /dev/null
-@@ -1,2022 +0,0 @@
--# !/usr/bin/env python
--# -*- coding: utf-8 -*-
--"""
--Provides a limited compatibility layer to PackageKit
--
--Copyright (C) 2007 Ali Sabil <ali.sabil@gmail.com>
--Copyright (C) 2007 Tom Parker <palfrey@tevp.net>
--Copyright (C) 2008-2011 Sebastian Heinlein <glatzor@ubuntu.com>
--
--Licensed under the GNU General Public License Version 2
--
--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.
--"""
--
--__author__ = "Sebastian Heinlein <devel@glatzor.de>"
--
--import datetime
--import glob
--import gzip
--import locale
--import logging
--import os
--import platform
--import re
--import subprocess
--import tempfile
--import time
--import uuid
--
--from defer import inline_callbacks, return_value
--from defer.utils import dbus_deferred_method
--import dbus
--from gi.repository import GObject, GLib
--from gi.repository import PackageKitGlib as pk
--
--# for optional plugin support
--try:
-- import pkg_resources
--except ImportError:
-- pkg_resources = None
--
--from . import policykit1
--from . import core
--from .core import APTDAEMON_TRANSACTION_DBUS_INTERFACE
--from . import enums as aptd_enums
--from .errors import TransactionFailed
--from . import errors
--from .progress import DaemonAcquireProgress
--from . import worker
--from . import networking
--from .pkutils import (bitfield_summarize, bitfield_add, bitfield_remove,
-- bitfield_contains)
--from .utils import split_package_id
--
--
--pklog = logging.getLogger("AptDaemon.PackageKit")
--
--# Check if update-manager-core is installed to get aware of the
--# latest distro releases
--try:
-- from UpdateManager.Core.MetaRelease import MetaReleaseCore
--except ImportError:
-- META_RELEASE_SUPPORT = False
--else:
-- META_RELEASE_SUPPORT = True
--
--PACKAGEKIT_DBUS_INTERFACE = "org.freedesktop.PackageKit"
--PACKAGEKIT_DBUS_SERVICE = "org.freedesktop.PackageKit"
--PACKAGEKIT_DBUS_PATH = "/org/freedesktop/PackageKit"
--
--PACKAGEKIT_TRANS_DBUS_INTERFACE = "org.freedesktop.PackageKit.Transaction"
--PACKAGEKIT_TRANS_DBUS_SERVICE = "org.freedesktop.PackageKit.Transaction"
--
--MAP_EXIT_ENUM = {
-- aptd_enums.EXIT_SUCCESS: pk.ExitEnum.SUCCESS,
-- aptd_enums.EXIT_CANCELLED: pk.ExitEnum.CANCELLED,
-- aptd_enums.EXIT_FAILED: pk.ExitEnum.FAILED,
-- aptd_enums.EXIT_FAILED: pk.ExitEnum.FAILED,
-- aptd_enums.EXIT_PREVIOUS_FAILED: pk.ExitEnum.FAILED}
--
--MAP_STATUS_ENUM = {
-- aptd_enums.STATUS_AUTHENTICATING: pk.StatusEnum.WAITING_FOR_AUTH,
-- aptd_enums.STATUS_SETTING_UP: pk.StatusEnum.SETUP,
-- aptd_enums.STATUS_QUERY: pk.StatusEnum.QUERY,
-- aptd_enums.STATUS_WAITING: pk.StatusEnum.WAIT,
-- aptd_enums.STATUS_RUNNING: pk.StatusEnum.RUNNING,
-- aptd_enums.STATUS_CANCELLING: pk.StatusEnum.CANCEL,
-- aptd_enums.STATUS_CLEANING_UP: pk.StatusEnum.CLEANUP,
-- aptd_enums.STATUS_COMMITTING: pk.StatusEnum.COMMIT,
-- aptd_enums.STATUS_DOWNLOADING: pk.StatusEnum.DOWNLOAD,
-- aptd_enums.STATUS_DOWNLOADING_REPO: pk.StatusEnum.DOWNLOAD_REPOSITORY,
-- aptd_enums.STATUS_FINISHED: pk.StatusEnum.FINISHED,
-- aptd_enums.STATUS_LOADING_CACHE: pk.StatusEnum.LOADING_CACHE,
-- aptd_enums.STATUS_RESOLVING_DEP: pk.StatusEnum.DEP_RESOLVE,
-- aptd_enums.STATUS_RUNNING: pk.StatusEnum.RUNNING,
-- aptd_enums.STATUS_WAITING_LOCK: pk.StatusEnum.WAITING_FOR_LOCK,
-- aptd_enums.STATUS_WAITING_MEDIUM: pk.StatusEnum.UNKNOWN,
-- aptd_enums.STATUS_WAITING_CONFIG_FILE_PROMPT: pk.StatusEnum.UNKNOWN}
--
--MAP_ERROR_ENUM = {
-- aptd_enums.ERROR_CACHE_BROKEN: pk.ErrorEnum.NO_CACHE,
-- aptd_enums.ERROR_DEP_RESOLUTION_FAILED: (
-- pk.ErrorEnum.DEP_RESOLUTION_FAILED),
-- aptd_enums.ERROR_INCOMPLETE_INSTALL: pk.ErrorEnum.NO_CACHE,
-- aptd_enums.ERROR_INVALID_PACKAGE_FILE: (
-- pk.ErrorEnum.PACKAGE_CORRUPT),
-- aptd_enums.ERROR_KEY_NOT_INSTALLED: pk.ErrorEnum.GPG_FAILURE,
-- aptd_enums.ERROR_KEY_NOT_REMOVED: pk.ErrorEnum.GPG_FAILURE,
-- aptd_enums.ERROR_NOT_REMOVE_ESSENTIAL_PACKAGE: (
-- pk.ErrorEnum.PACKAGE_FAILED_TO_REMOVE),
-- aptd_enums.ERROR_NO_CACHE: pk.ErrorEnum.NO_CACHE,
-- aptd_enums.ERROR_NO_LOCK: pk.ErrorEnum.CANNOT_GET_LOCK,
-- aptd_enums.ERROR_NO_PACKAGE: pk.ErrorEnum.PACKAGE_NOT_FOUND,
-- aptd_enums.ERROR_PACKAGE_ALREADY_INSTALLED: (
-- pk.ErrorEnum.PACKAGE_ALREADY_INSTALLED),
-- aptd_enums.ERROR_PACKAGE_DOWNLOAD_FAILED: (
-- pk.ErrorEnum.PACKAGE_DOWNLOAD_FAILED),
-- aptd_enums.ERROR_PACKAGE_MANAGER_FAILED: (
-- pk.ErrorEnum.TRANSACTION_ERROR),
-- aptd_enums.ERROR_PACKAGE_NOT_INSTALLED: (
-- pk.ErrorEnum.PACKAGE_NOT_INSTALLED),
-- aptd_enums.ERROR_PACKAGE_UNAUTHENTICATED: (
-- pk.ErrorEnum.BAD_GPG_SIGNATURE),
-- aptd_enums.ERROR_PACKAGE_UPTODATE: (
-- pk.ErrorEnum.NO_PACKAGES_TO_UPDATE),
-- aptd_enums.ERROR_REPO_DOWNLOAD_FAILED: (
-- pk.ErrorEnum.REPO_NOT_AVAILABLE),
-- aptd_enums.ERROR_UNREADABLE_PACKAGE_FILE: (
-- pk.ErrorEnum.INVALID_PACKAGE_FILE),
-- aptd_enums.ERROR_SYSTEM_ALREADY_UPTODATE: (
-- pk.ErrorEnum.NO_PACKAGES_TO_UPDATE),
-- aptd_enums.ERROR_NOT_AUTHORIZED: pk.ErrorEnum.NOT_AUTHORIZED,
-- aptd_enums.ERROR_AUTH_FAILED: pk.ErrorEnum.NOT_AUTHORIZED}
--
--MAP_PACKAGE_ENUM = {
-- aptd_enums.PKG_CONFIGURING: pk.InfoEnum.INSTALLING,
-- aptd_enums.PKG_DISAPPEARING: pk.InfoEnum.UNKNOWN,
-- aptd_enums.PKG_INSTALLED: pk.InfoEnum.FINISHED,
-- aptd_enums.PKG_INSTALLING: pk.InfoEnum.INSTALLING,
-- aptd_enums.PKG_PREPARING_INSTALL: pk.InfoEnum.PREPARING,
-- aptd_enums.PKG_PREPARING_PURGE: pk.InfoEnum.PREPARING,
-- aptd_enums.PKG_PREPARING_REMOVE: pk.InfoEnum.PREPARING,
-- aptd_enums.PKG_PURGED: pk.InfoEnum.FINISHED,
-- aptd_enums.PKG_PURGING: pk.InfoEnum.REMOVING,
-- aptd_enums.PKG_REMOVED: pk.InfoEnum.FINISHED,
-- aptd_enums.PKG_REMOVING: pk.InfoEnum.REMOVING,
-- aptd_enums.PKG_RUNNING_TRIGGER: pk.InfoEnum.CLEANUP,
-- aptd_enums.PKG_UNKNOWN: pk.InfoEnum.UNKNOWN,
-- aptd_enums.PKG_UNPACKING: pk.InfoEnum.DECOMPRESSING,
-- aptd_enums.PKG_UPGRADING: pk.InfoEnum.UPDATING}
--
--MAP_POLICY = {
-- "org.freedesktop.packagekit.cancel-foreign": (
-- policykit1.PK_ACTION_CANCEL_FOREIGN),
-- "org.freedesktop.packagekit.package-install": (
-- policykit1.PK_ACTION_INSTALL_OR_REMOVE_PACKAGES),
-- "org.freedesktop.packagekit.package-install-untrusted": (
-- policykit1.PK_ACTION_INSTALL_OR_REMOVE_PACKAGES),
-- "org.freedesktop.packagekit.system-trust-signing-key": (
-- policykit1.PK_ACTION_CHANGE_REPOSITORY),
-- "org.freedesktop.packagekit.package-eula-accept": (
-- policykit1.PK_ACTION_INSTALL_OR_REMOVE_PACKAGES),
-- "org.freedesktop.packagekit.package-remove": (
-- policykit1.PK_ACTION_INSTALL_OR_REMOVE_PACKAGES),
-- "org.freedesktop.packagekit.system-update": (
-- policykit1.PK_ACTION_UPGRADE_PACKAGES),
-- "org.freedesktop.packagekit.system-sources-configure": (
-- policykit1.PK_ACTION_CHANGE_REPOSITORY),
-- "org.freedesktop.packagekit.system-sources-refresh": (
-- policykit1.PK_ACTION_UPDATE_CACHE),
-- "org.freedesktop.packagekit.system-network-proxy-configure": (
-- policykit1.PK_ACTION_SET_PROXY),
-- "org.freedesktop.packagekit.device-rebind": (
-- policykit1.PK_ACTION_INSTALL_OR_REMOVE_PACKAGES),
-- "org.freedesktop.packagekit.upgrade-system": (
-- policykit1.PK_ACTION_UPGRADE_PACKAGES),
-- "org.freedesktop.packagekit.repair-system": (
-- policykit1.PK_ACTION_INSTALL_OR_REMOVE_PACKAGES),
-- "org.freedesktop.packagekit.trigger-offline-update": (
-- policykit1.PK_ACTION_UPGRADE_PACKAGES),
-- "org.freedesktop.packagekit.clear-offline-update": (
-- policykit1.PK_ACTION_UPGRADE_PACKAGES)}
--
--
--class PackageKit(core.DBusObject):
--
-- """Provides a limited set of the PackageKit system D-Bus API."""
--
-- def __init__(self, queue, connect=True, bus=None):
-- """Initialize a new PackageKit compatibility layer.
--
-- Keyword arguments:
-- connect -- if the daemon should connect to the D-Bus (default is True)
-- bus -- the D-Bus to connect to (defaults to the system bus)
-- """
-- pklog.info("Initializing PackageKit compat layer")
-- bus_name = None
-- bus_path = None
-- if connect is True:
-- if bus is None:
-- bus = dbus.SystemBus()
-- self.bus = bus
-- bus_path = PACKAGEKIT_DBUS_PATH
-- bus_name = dbus.service.BusName(PACKAGEKIT_DBUS_SERVICE, self.bus)
-- core.DBusObject.__init__(self, bus_name, bus_path)
-- self._updates_changed_timeout_id = None
-- self._updates_changed = False
-- self.queue = queue
-- self.queue.worker.connect("transaction-done",
-- self._on_transaction_done)
-- self.queue.connect("queue-changed", self._on_queue_changed)
-- self._distro_id = None
-- self.netmon = networking.get_network_monitor()
-- self.netmon.connect("network-state-changed",
-- self._on_network_state_changed)
-- self._get_network_state()
--
-- @inline_callbacks
-- def _get_network_state(self):
-- """Helper to defer the network state checking."""
-- yield self.netmon.get_network_state()
--
-- # SIGNALS
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_DBUS_INTERFACE,
-- signature="")
-- def RestartSchedule(self):
-- """A system restart has been sceduled."""
-- pass
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_DBUS_INTERFACE,
-- signature="as")
-- def TransactionListChanged(self, transactions):
-- """The transaction list has changed, because either a transaction
-- has finished or a new transaction created.
--
-- :param transactions: A list of transaction ID's.
-- :type transactions: as
-- """
-- pklog.debug("Emitting TransactionListChanged signal: %s", transactions)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_DBUS_INTERFACE,
-- signature="")
-- def UpdatesChanged(self):
-- """This signal is emitted when the number of updates has changed."""
-- pklog.debug("Emitting UpdatesChanged signal")
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_DBUS_INTERFACE,
-- signature="")
-- def RepoListChanged(self):
-- """This signal is emitted when the repository list has changed."""
-- pass
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_DBUS_INTERFACE,
-- signature="")
-- def Changed(self):
-- """This signal is emitted when a property on the interface changes."""
-- pklog.debug("Emitting PackageKit Changed()")
--
-- # METHODS
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus_deferred_method(PACKAGEKIT_DBUS_INTERFACE,
-- in_signature="s", out_signature="u",
-- sender_keyword="sender")
-- def CanAuthorize(self, action_id, sender):
-- """Allows a client to find out if it would be allowed to authorize
-- an action.
--
-- :param action_id: The action ID, e.g.
-- org.freedesktop.packagekit.system-network-proxy-configure
-- :returns: The result, either yes, no or interactive.
-- """
-- pklog.info("CanAuthorize() was called: %s", str(action_id))
-- return self._can_authorize(action_id, sender)
--
-- @inline_callbacks
-- def _can_authorize(self, action_id, sender):
-- try:
-- action_id_aptd = MAP_POLICY[action_id]
-- except KeyError:
-- return_value(pk.AuthorizeEnum.UNKNOWN)
-- try:
-- policykit1.check_authorization_by_name(
-- self, action_id, flags=policykit1.CHECK_AUTH_NONE)
-- except policykit1.NotAuthorizedError:
-- return_value(pk.AuthorizeEnum.NO)
-- except policykit1.AuthorizationFailed:
-- # check_authorization_* behaves a little bit different if the
-- # flags are set to NONE instead of INTERACTIVE
-- return_value(pk.AuthorizeEnum.INTERACTIVE)
-- except:
-- return_value(pk.AuthorizeEnum.UNKNOWN)
-- return_value(pk.AuthorizeEnum.YES)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.method(PACKAGEKIT_DBUS_INTERFACE,
-- in_signature="s", out_signature="")
-- def StateHasChanged(self, reason):
-- """This method suggests to PackageKit that the package backend state
-- may have changed. This allows plugins to the native package manager
-- to suggest that PackageKit drops it's caches.
--
-- :param reason:
-- The reason of the state change. Valid reasons are resume or
-- posttrans. Resume is given a lower priority than posttrans.
-- """
-- pklog.info("StateHasChanged() was called: %s", str(reason))
-- self._updates_changed = True
-- if reason == "cache-update":
-- self._check_updates_changed(timeout=30)
-- elif reason == "resume":
-- self._check_updates_changed(timeout=180)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus_deferred_method(PACKAGEKIT_DBUS_INTERFACE,
-- in_signature="", out_signature="o",
-- sender_keyword="sender")
-- def CreateTransaction(self, sender):
-- """Gets a new transaction ID from the daemon.
--
-- :returns: The tid, e.g. 45_dafeca_checkpoint32
-- """
-- pklog.info("CreateTransaction() was called")
-- return self._create_transaction(sender)
--
-- @inline_callbacks
-- def _create_transaction(self, sender):
-- pid, uid, gid, cmdline = yield policykit1.get_proc_info_from_dbus_name(
-- sender, self.bus)
-- pktrans = PackageKitTransaction(
-- pid, uid, gid, cmdline, self.queue, sender)
-- return_value(pktrans.tid)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.method(PACKAGEKIT_DBUS_INTERFACE,
-- in_signature="", out_signature="s")
-- def GetDaemonState(self):
-- """Return the state of the currently running transactions."""
-- pklog.info("GetDaemonState() was called")
-- # FIXME: Add some useful data here
-- return "All is fine!"
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.method(PACKAGEKIT_DBUS_INTERFACE,
-- in_signature="", out_signature="ao")
-- def GetTransactionList(self):
-- """Gets the transaction list of any transactions that are in
-- progress.
--
-- :returns: A list of transaction ID's
-- """
-- pklog.info("GetTransactionList() was called")
-- return self._get_transaction_list()
--
-- # HELPERS
--
-- def _get_properties(self, iface):
-- """Helper to get the properties of a D-Bus interface."""
-- if iface == PACKAGEKIT_DBUS_INTERFACE:
-- return {
-- # Claim that we are a current version
-- "VersionMajor": dbus.UInt32(0),
-- "VersionMinor": dbus.UInt32(8),
-- "VersionMicro": dbus.UInt32(9),
-- "BackendName": dbus.String("aptdaemon"),
-- "BackendDescription": dbus.String("Compatibility layer"),
-- "BackendAuthor": dbus.String(__author__),
-- "Groups": dbus.UInt64(self.queue.worker.groups),
-- "Provides": dbus.UInt64(self.queue.worker.provides),
-- "Filters": dbus.UInt64(self.queue.worker.filters),
-- "Roles": dbus.UInt64(self.queue.worker.roles),
-- "MimeTypes": dbus.Array(self.queue.worker.mime_types,
-- signature="s"),
-- "Locked": dbus.Boolean(False),
-- "NetworkState": dbus.UInt32(self.netmon.state),
-- "DistroId": dbus.String(self._get_distro_id())}
-- else:
-- return {}
--
-- def _get_distro_id(self):
-- """Return information about the distibution."""
-- if self._distro_id is None:
-- distro, version, _codename = platform.dist()
-- self._distro_id = "%s;%s;%s" % (distro or "unknown",
-- version or "unknown",
-- self.queue.worker.NATIVE_ARCH)
-- return self._distro_id
--
-- def _on_network_state_changed(self, mon, state):
-- self.Changed()
-- self.PropertiesChanged(PACKAGEKIT_DBUS_INTERFACE,
-- {"NetworkState": dbus.UInt32(state)}, [])
--
-- def _on_queue_changed(self, queue):
-- self.TransactionListChanged(self._get_transaction_list())
-- self._check_updates_changed()
--
-- def _get_transaction_list(self):
-- pk_transactions = []
-- for trans in self.queue.items:
-- # We currently only emit PackageKit transaction
-- # FIXME: Should we use MergedTransaction for all transactions and
-- # ROLE_UNKOWN for aptdaemon only transactions?
-- try:
-- pk_transactions.append(trans.pktrans.tid)
-- except AttributeError:
-- pass
-- try:
-- pk_transactions.append(self.queue.worker.trans.pktrans.tid)
-- except AttributeError:
-- pass
-- return pk_transactions
--
-- def _on_transaction_done(self, worker, trans):
-- # If a cache modifing transaction is completed schedule an
-- # UpdatesChanged signal
-- if trans.role in (aptd_enums.ROLE_INSTALL_FILE,
-- aptd_enums.ROLE_INSTALL_PACKAGES,
-- aptd_enums.ROLE_REMOVE_PACKAGES,
-- aptd_enums.ROLE_UPGRADE_PACKAGES,
-- aptd_enums.ROLE_COMMIT_PACKAGES,
-- aptd_enums.ROLE_UPGRADE_SYSTEM,
-- aptd_enums.ROLE_FIX_BROKEN_DEPENDS):
-- self._updates_changed = True
-- self._check_updates_changed()
-- elif trans.role == aptd_enums.ROLE_UPDATE_CACHE:
-- self._updates_changed = True
-- self._check_updates_changed(timeout=30)
--
-- def _check_updates_changed(self, timeout=60):
-- """After the queue was processed schedule a delayed UpdatesChanged
-- signal if required.
-- """
-- if not self.queue.items and self._updates_changed:
-- if self._updates_changed_timeout_id:
-- # If we already have a scheduled UpdatesChanged signal
-- # delay it even further
-- pklog.debug("UpdatesChanged signal re-scheduled")
-- GLib.source_remove(self._updates_changed_timeout_id)
-- else:
-- pklog.debug("UpdatesChanged signal scheduled")
-- self._updates_changed_timeout_id = \
-- GLib.timeout_add_seconds(timeout,
-- self._delayed_updates_changed)
--
-- def _delayed_updates_changed(self):
-- """Emit the UpdatesChanged signal and clear the timeout."""
-- self.UpdatesChanged()
-- self._updates_changed_timeout_id = None
-- self._updates_changed = False
-- return False
--
--
--class MergedTransaction(core.Transaction):
--
-- """Overlay of an Aptdaemon transaction which also provides the
-- PackageKit object and its interfaces.
-- """
--
-- def __init__(self, pktrans, role, queue, connect=True,
-- bus=None, packages=None, kwargs=None):
-- core.Transaction.__init__(self, pktrans.tid[1:], role, queue,
-- pktrans.pid, pktrans.uid, pktrans.gid,
-- pktrans.cmdline, pktrans.sender,
-- connect, bus, packages, kwargs)
-- self.pktrans = pktrans
-- self.run_time = 0
--
-- @inline_callbacks
-- def _run(self, sender):
-- """Run the transaction and convert exceptions to PackageKit ones."""
-- try:
-- yield core.Transaction._run(self, sender)
-- except (TransactionFailed, errors.NotAuthorizedError,
-- errors.AuthorizationFailed):
-- # It is sufficient for PackageKit if the exit state and error
-- # code of the transaction are set. So silently drop the execp
-- if self.error:
-- pass
-- except Exception as error:
-- raise error
--
-- @inline_callbacks
-- def _check_auth(self):
-- """Override the auth method to allow simulates without any
-- authorization.
-- """
-- if bitfield_contains(self.pktrans.flags,
-- pk.TransactionFlagEnum.SIMULATE):
-- raise StopIteration
-- else:
-- yield core.Transaction._check_auth(self)
--
-- @inline_callbacks
-- def _check_simulated(self):
-- """Skip simulate calls for simulated transactions."""
-- if bitfield_contains(self.pktrans.flags,
-- pk.TransactionFlagEnum.SIMULATE):
-- raise StopIteration
-- else:
-- yield core.Transaction._check_simulated(self)
--
-- def _set_status(self, enum):
-- core.Transaction._set_status(self, enum)
-- self.pktrans.status = get_pk_status_enum(enum)
--
-- status = property(core.Transaction._get_status, _set_status)
--
-- def _set_progress(self, percent):
-- core.Transaction._set_progress(self, percent)
-- self.pktrans.percentage = self._progress
--
-- progress = property(core.Transaction._get_progress, _set_progress)
--
-- def _set_progress_details(self, details):
-- core.Transaction._set_progress_details(self, details)
-- self.pktrans.download_size_remaing = int(details[3]) - int(details[2])
-- self.pktrans.speed = int(details[4])
-- self.pktrans.remaining_time = int(details[5])
-- self.pktrans.elapsed_time = int(time.time() - self.pktrans.start_time)
--
-- progress_details = property(core.Transaction._get_progress_details,
-- _set_progress_details)
--
-- def _set_progress_package(self, progress):
-- core.Transaction._set_progress_package(self, progress)
-- pkg_name, enum = progress
-- # Ignore dpkg triggers
-- if enum == aptd_enums.PKG_RUNNING_TRIGGER or pkg_name == "dpkg-exec":
-- return
-- try:
-- id = self.pktrans.pkg_id_cache[pkg_name]
-- except KeyError:
-- id = get_pk_package_id(pkg_name)
-- self.emit_package(get_pk_package_enum(enum), id, "")
--
-- progress_package = property(core.Transaction._get_progress_package,
-- _set_progress_package)
--
-- def _set_progress_download(self, progress_download):
-- core.Transaction._set_progress_download(self, progress_download)
-- prog_enum = progress_download[1]
-- prog_name = progress_download[2]
-- total_size = progress_download[3]
-- partial_size = progress_download[4]
--
-- try:
-- id = self.pktrans.pkg_id_cache[prog_name]
-- except KeyError:
-- return
-- self.pktrans.Package(pk.InfoEnum.DOWNLOADING, id, "")
-- if prog_enum == aptd_enums.DOWNLOAD_IDLE:
-- percentage = 0
-- elif prog_enum == aptd_enums.DOWNLOAD_FETCHING and total_size > 0:
-- percentage = partial_size * 100 / total_size
-- elif prog_enum == aptd_enums.DOWNLOAD_DONE:
-- percentage = 100
-- else:
-- # In the case of an error
-- percentage = 0
-- self.pktrans.ItemProgress(id, pk.InfoEnum.DOWNLOADING, percentage)
--
-- progress_download = property(core.Transaction._get_progress_download,
-- _set_progress_download)
--
-- def _set_exit(self, enum):
-- core.Transaction._set_exit(self, enum)
-- self.pktrans.exit = get_pk_exit_enum(enum)
--
-- exit = property(core.Transaction._get_exit, _set_exit)
--
-- def _set_error(self, excep):
-- core.Transaction._set_error(self, excep)
-- self.pktrans.ErrorCode(get_pk_error_enum(excep.code),
-- self._error_property[1])
--
-- error = property(core.Transaction._get_error, _set_error)
--
-- def _remove_from_connection_no_raise(self):
-- core.Transaction._remove_from_connection_no_raise(self)
-- if self.pktrans is None:
-- return False
-- self.pktrans.Destroy()
-- try:
-- self.pktrans.remove_from_connection()
-- except LookupError as error:
-- pklog.debug("remove_from_connection() raised LookupError: %s",
-- error)
-- finally:
-- self.pktrans.trans = None
-- self.pktrans = None
-- return False
--
-- def emit_details(self, package_id, license, group, detail, url, size):
-- self.pktrans.Details(package_id, license, group, detail, url, size)
--
-- def emit_files(self, id, file_list):
-- self.pktrans.Files(id, file_list)
--
-- def emit_package(self, info, id, summary):
-- if id.startswith("dpkg-exec;"):
-- # PackageKit would show a non existing package
-- pklog.debug("Don't emit Package() signal for the dpkg trigger")
-- return
-- self.pktrans.Package(info, id, summary)
-- self.pktrans.last_package = id
--
-- def emit_update_detail(self, package_id, updates, obsoletes, vendor_urls,
-- bugzilla_urls, cve_urls, restart, update_text,
-- changelog, state, issued, updated):
-- self.pktrans.UpdateDetail(package_id, updates, obsoletes, vendor_urls,
-- bugzilla_urls, cve_urls, restart,
-- update_text, changelog, state, issued,
-- updated)
--
--
--class PackageKitTransaction(core.DBusObject):
--
-- """Provides a PackageKit transaction object."""
--
-- def __init__(self, pid, uid, gid, cmdline, queue, sender,
-- connect=True, bus=None):
-- pklog.info("Initializing PackageKit transaction")
-- bus_name = None
-- bus_path = None
-- self.tid = "/%s" % uuid.uuid4().hex
-- if connect is True:
-- if bus is None:
-- bus = dbus.SystemBus()
-- self.bus = bus
-- bus_path = self.tid
-- bus_name = dbus.service.BusName(PACKAGEKIT_DBUS_SERVICE, bus)
-- core.DBusObject.__init__(self, bus_name, bus_path)
-- self.queue = queue
-- self.hints = {}
-- self.start_time = time.time()
-- self._elapsed_time = dbus.UInt32(0)
-- self._remaining_time = dbus.UInt32(0)
-- self._download_size_remaining = dbus.UInt64(0)
-- self._speed = dbus.UInt32(0)
-- self._caller_active = True
-- self._allow_cancel = False
-- self._percentage = dbus.UInt32(0)
-- self._status = pk.StatusEnum.SETUP
-- self._last_package = ""
-- self.uid = dbus.UInt32(uid)
-- self.gid = dbus.UInt32(gid)
-- self.pid = pid
-- self.cmdline = cmdline
-- self.role = pk.RoleEnum.UNKNOWN
-- self.sender = sender
-- self.trans = None
-- self.flags = pk.TransactionFlagEnum.NONE
-- self.pkg_id_cache = {}
--
-- @property
-- def allow_cancel(self):
-- return self._allow_cancel
--
-- @allow_cancel.setter
-- def allow_cancel(self, value):
-- self._allow_cancel = dbus.Boolean(value)
-- self.PropertiesChanged(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- {"AllowCancel": self._allow_cancel}, [])
-- self.Changed()
--
-- @property
-- def last_package(self):
-- return self._last_package
--
-- @last_package.setter
-- def last_package(self, value):
-- self._last_package = dbus.String(value)
-- self.PropertiesChanged(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- {"LastPackage": self._last_package}, [])
-- self.Changed()
--
-- @property
-- def caller_active(self):
-- return self._caller_active
--
-- @caller_active.setter
-- def caller_active(self, value):
-- self._caller_active = dbus.Boolean(value)
-- self.PropertiesChanged(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- {"CallerActive": self._caller_active}, [])
-- self.Changed()
--
-- @property
-- def percentage(self):
-- return self._percentage
--
-- @percentage.setter
-- def percentage(self, progress):
-- self._percentage = dbus.UInt32(progress)
-- self.PropertiesChanged(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- {"Percentage": self._percentage}, [])
-- self.Changed()
--
-- @property
-- def status(self):
-- return self._status
--
-- @status.setter
-- def status(self, enum):
-- self._status = dbus.UInt32(enum)
-- self.PropertiesChanged(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- {"Status": self._status}, [])
-- self.Changed()
--
-- @property
-- def elapsed_time(self):
-- return self._elapsed_time
--
-- @elapsed_time.setter
-- def elapsed_time(self, ela):
-- self._elpased_time = dbus.UInt32(ela)
-- self.PropertiesChanged(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- {"ElapsedTime": self._elapsed_time}, [])
-- self.Changed()
--
-- @property
-- def remaining_time(self):
-- return self._remaining_time
--
-- @remaining_time.setter
-- def remaining_time(self, value):
-- self._remaining_time = dbus.UInt32(value)
-- self.PropertiesChanged(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- {"RemainingTime": self._remaining_time}, [])
-- self.Changed()
--
-- @property
-- def download_size_remaining(self):
-- return self._download_size_remaining
--
-- @download_size_remaining.setter
-- def download_size_remaining(self, value):
-- self._download_size_remaining = dbus.UInt64(value)
-- self.PropertiesChanged(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- {"DownloadSizeRemaining":
-- self._download_size_remaining}, [])
-- self.Changed()
--
-- @property
-- def speed(self):
-- return self._speed
--
-- @speed.setter
-- def speed(self, speed):
-- self._speed = dbus.UInt32(speed)
-- self.PropertiesChanged(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- {"Speed": self._speed}, [])
-- self.Changed()
--
-- @property
-- def exit(self):
-- return self._exit
--
-- @exit.setter
-- def exit(self, enum):
-- self._exit = enum
-- self.run_time = int((time.time() - self.start_time) * 1000)
-- # The time could go backwards ...
-- if self.run_time < 0:
-- self.run_time = 0
-- if enum == pk.ExitEnum.CANCELLED:
-- self.ErrorCode(pk.ErrorEnum.TRANSACTION_CANCELLED, "")
-- self.status = pk.StatusEnum.FINISHED
-- self.Finished(enum, self.run_time)
--
-- # SIGNALS
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="osbuusus")
-- def Transaction(self, object_path, timespec, succeeded, role, duration,
-- data, uid, cmdline):
-- """This signal is sent when more details are required about a
-- specific transaction.
--
-- :param object_path: The transaction ID of the old transaction.
-- :param timespec: The timespec of the old transaction in ISO8601 format.
-- :param succeeded: If the transaction succeeded.
-- :param role: The role enumerated type.
-- :param duration: The duration of the transaction in milliseconds.
-- :param data: Any data associated
-- :param uid: The user ID of the user that scheduled the action.
-- :param cmdline: The command line of the tool that scheduled the action,
-- e.g. /usr/bin/gpk-application.
-- """
-- pklog.debug("Emitting Transaction signal: %s, %s, %s, %s, %s, %s, "
-- "%s, %s", object_path, timespec, succeeded,
-- pk.role_enum_to_string(role), duration, data, uid,
-- cmdline)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="us")
-- def ErrorCode(self, code, details):
-- """This signal is used to report errors back to the session program.
-- Errors should only be send on fatal abort.
--
-- :param code: Enumerated type, e.g. no-network.
-- :param details: Long description or error, e.g. "failed to connect"
--
-- :type code: u
-- :type details: s
-- """
-- pklog.debug("Emitting ErrorCode signal: %s, %s",
-- pk.error_enum_to_string(code), details)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="")
-- def Changed(self):
-- """This signal is emitted when a property on the interface changes."""
-- pklog.debug("Emitting Changed signal")
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="")
-- def Destroy(self):
-- """This signal is sent when the transaction has been destroyed
-- and is no longer available for use."""
-- pklog.debug("Emitting Destroy signal")
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="uu")
-- def Finished(self, exit_enum, runtime):
-- """This signal is used to signal that the transaction has finished.
-- :param exit: The PkExitEnum describing the exit status of the
-- transaction.
-- :param runtime: The amount of time in milliseconds that the
-- transaction ran for.
--
-- :type exit: s
-- :type runtime: u
-- """
-- pklog.debug("Emitting Finished signal: %s, %s",
-- pk.exit_enum_to_string(exit_enum), runtime)
-- pass
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="ssusst")
-- def Details(self, package_id, license, group, detail, url, size):
-- """This signal allows the backend to convey more details about the
-- package.
--
-- :param package_id: The package ID
--
-- :param license:
-- The license string, e.g. GPLv2+ or BSD and (MPLv1.1 or GPLv2+).
-- Moredetails about the correct way to format licensing strings can
-- be found on the Fedora packaging wiki.
-- :param group:
-- The enumerated package group description
-- :param detail:
-- The multi-line package description. If formatting is required,
-- then markdown syntax should be used, e.g. This is **critically**
-- important
-- :param url:
-- The upstream project homepage
-- :param size:
-- The size of the package in bytes. This should be the size of the
-- entire package file, not the size of the files installed on the
-- system. If the package is not installed, and already downloaded
-- and present in the package manager cache, then this value should
-- be set to zero.
-- """
-- pklog.debug("Emitting Details signal for %s", package_id)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="us")
-- def Message(self, kind, details):
-- """This signal is sent when the backend wants to send a message to
-- the session.
--
-- The message will be shown after the transaction has been completed.
-- """
-- pklog.debug("Emitting Message signal: %s, %s", kind, details)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="sas")
-- def Files(self, package_id, file_list):
-- """This signal is used to push file lists from the backend to the
-- session.
--
-- :param package_id:
-- The Package ID that called the method.
-- :param file_list:
-- The file list
-- """
-- pklog.debug("Emitting Files signal: %s, %s", package_id, file_list)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="suu")
-- def ItemProgress(self, package_id, status, percentage):
-- """This signal allows the backend to send information about
-- package or repository progress when using Simultanous mode.
--
-- :param package_id: The package ID
-- :param status:
-- The status enumerated value that is being completed
-- :param percentage:
-- The percentage of this action is completed
-- """
-- pklog.debug("Emitting ItemProgress signal for %s: %s, %s",
-- package_id, pk.info_enum_to_string(status), percentage)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="sasasasasasussuss")
-- def UpdateDetail(self, package_id, updates, obsoletes, vendor_urls,
-- bugzilla_urls, cve_urls, restart, update_text, changelog,
-- state, issued, updated):
-- """This signal is sent when more details are required about a
-- specific update.
--
-- :param package_id: The package ID
-- :param updates:
-- A list of package_id's that are to be updated.
-- :param obsoletes:
-- A list of package_id's that are to be obsoleted.
-- :param vendor_urls:
-- A URL with more details on the update, e.g. a page with more
-- information on the update. The format of this command should
-- be http://www.foo.org/page.html?4567;Update to SELinux
-- :param bugzilla_urls:
-- A bugzilla URL with more details on the update. If no URL is
-- available then this field should be left empty.
-- :param cve_urls:
-- A CVE URL with more details on the security advisory.
-- :param restart:
-- A valid restart type, e.g. system.
-- :param update_text:
-- The update text describing the update. If formatting is required,
-- then markdown syntax should be used, e.g. This is **critically**
-- important.
-- :param changelog:
-- The ChangeLog text describing the changes since the last version.
-- :param state:
-- The state of the update, e.g. stable or testing.
-- :param issued:
-- The ISO8601 encoded date that the update was issued.
-- :param updated:
-- The ISO8601 encoded date that the update was updated.
-- """
-- pklog.debug("Emitting UpdateDetail signal for %s", package_id)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="uss")
-- def Package(self, info, package_id, summary):
-- """This signal allows the backend to communicate packages to the
-- session.
--
-- If updating, as packages are updated then emit them to the screen.
-- This allows a summary to be presented after the transaction.
-- When returning results from a search always return installed
-- before available for the same package name.
--
-- :param info: A valid info enumerated type
-- :param package_id: This identifier is of the form
-- name;version;arch;data in a single string and is meant to
-- represent a single package unique across all local and remote
-- data stores. For a remote, not-installed package the data
-- field should be set as the repository identifier or repository
-- name. The data field for an installed package must be prefixed
-- with installed as this is used to identify which packages are
-- installable or installed in the client tools. As a special
-- extension, if the package manager is able to track which
-- repository a package was originally installed from, then the data
-- field can be set to installed:REPO-NAME which allows the frontend
-- client to advise the user of the package origin. The data field
-- for a non-installed local package must be local as this signifies
-- a repository name is not available and that package resides
-- locally on the client system rather than in any specific
-- repository.
-- :param summary: The one line package summary, e.g. Clipart for
-- OpenOffice
-- """
-- pklog.debug("Emitting Package signal: %s, %s, %s'",
-- pk.info_enum_to_string(info), package_id, summary[:10])
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="sss")
-- def DistroUpgrade(self, distro_type, name, summary):
-- """This signal allows the backend to communicate distribution upgrades
-- to the session.
-- :param type: A valid upgrade string enumerated type, e.g. stable
-- or unstable
-- :param name: The short name of the distribution, e.g. Fedora Core
-- 10 RC1
-- :param summary: The multi-line description of the release
-- """
-- pklog.debug("Emitting DistroUpgrade signal: %s, %s, %s",
-- pk.distro_upgrade_enum_to_string(distro_type),
-- name, summary)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.signal(dbus_interface=PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- signature="us")
-- def RequireRestart(self, restart_type, package_id):
-- """This signal is sent when the session client should notify the user
-- that a restart is required to get all changes into effect.
--
-- :param package_id:
-- The Package ID of the package tiggering the restart
-- :param file_list:
-- One of system, application or session
-- """
-- pklog.debug("Emitting RequireRestart signal: %s, %s",
-- pk.restart_enum_to_string(restart_type), package_id)
--
-- # METHODS
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="as", out_signature="")
-- def SetHints(self, hints):
-- """This method allows the calling session to set transaction hints
-- for the package manager which can change as the transaction runs.
--
-- This method can be sent before the transaction has been run or
-- whilst it is running. There is no limit to the number of times
-- this method can be sent, although some backends may only use the
-- values that were set before the transaction was started.
--
-- Each parameter value is optional.
--
-- :param hints: The values as an array of strings, for example
-- ['locale=en_GB.utf8','interactive=false','cache-age=3600']
-- """
-- pklog.info("SetHints() was called: %s", get_string_from_array(hints))
-- for hint in hints:
-- key, value = hint.split("=", 1)
-- if key not in ["locale", "idle", "background", "interactive",
-- "cache-age", "frontend-socket"]:
-- raise Exception("Invalid option %s" % key)
-- self.hints[key] = value
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="", out_signature="",
-- sender_keyword="sender")
-- def Cancel(self, sender):
-- """This method cancels a transaction that is already running."""
-- if self.trans:
-- return self.trans._cancel(sender)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tasbb", out_signature="",
-- sender_keyword="sender")
-- def RemovePackages(self, flags, package_ids, allow_deps, autoremove,
-- sender):
-- """This method removes packages from the local system.
--
-- This method typically emits Progress, Status and Error and Package.
--
-- Package enumerated types should be downloading, updating,
-- installing or removing.
--
-- :param flags: If the transaction should be simulated or prepared
-- :param package_ids: An array of package IDs.
-- :param allow_deps:
-- Either true or false. If true allow other packages to be removed
-- with the package, but false should cause the script to abort if
-- other packages are dependant on the package.
-- :param autoremove:
-- Either true or false. This option is only really interesting on
-- embedded devices with a limited amount of flash storage. It
-- suggests to the packagekit backend that dependencies installed at
-- the same time as the package should also be removed if they are not
-- required by anything else. For instance, if you install OpenOffice,
-- it might download libneon as a dependency. When auto_remove is set
-- to true, and you remove OpenOffice then libneon will also get
-- removed automatically.
-- """
-- pklog.info("RemovePackages() was called: %s, %s",
-- get_string_from_flags(flags),
-- get_string_from_array(package_ids))
-- return self._remove_packages(flags, package_ids, allow_deps,
-- autoremove, sender)
--
-- @inline_callbacks
-- def _remove_packages(self, flags, package_ids, allow_deps, autoremove,
-- sender):
-- self.role = pk.RoleEnum.REMOVE_PACKAGES
-- self.flags = flags
-- self.trans = self._get_merged_trans(aptd_enums.ROLE_REMOVE_PACKAGES,
-- pkg_ids=package_ids,
-- pkg_type=aptd_enums.PKGS_REMOVE)
-- yield self.trans._set_property(APTDAEMON_TRANSACTION_DBUS_INTERFACE,
-- "RemoveObsoletedDepends", autoremove,
-- sender)
-- # FIXME: Implement allow_deps
-- yield self.trans._run(sender)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tas", out_signature="",
-- sender_keyword="sender")
-- def UpdatePackages(self, flags, package_ids, sender):
-- """This method updates existing packages on the local system.
--
-- The installer should always update extra packages automatically
-- to fulfil dependencies.
--
-- This should allow an application to find out what package owns a
-- file on the system.
--
-- This method typically emits Progress, Status and Error and Package.
--
-- :param flags:
-- If the transaction is only allowed to install trusted packages.
-- Unsigned packages should not be installed if the flags
-- contains ONLY_TRUSED.
-- If this method is can only install trusted packages, and
-- the packages are unsigned, then the backend will send a
-- ErrorCode(missing-gpg-signature). On recieving this error, the
-- client may choose to retry with ONLY_TRUSTED set after
-- gaining further authentication.
-- : param package_ids: An array of package IDs.
-- """
-- pklog.info("UpdatePackages() was called: %s, %s",
-- get_string_from_flags(flags),
-- get_string_from_array(package_ids))
-- return self._update_packages(flags, package_ids, sender)
--
-- @inline_callbacks
-- def _update_packages(self, flags, package_ids, sender):
-- self.role = pk.RoleEnum.UPDATE_PACKAGES
-- self.flags = flags
-- self.trans = self._get_merged_trans(aptd_enums.ROLE_UPGRADE_PACKAGES,
-- pkg_ids=package_ids,
-- pkg_type=aptd_enums.PKGS_UPGRADE)
-- yield self.trans._set_property(
-- APTDAEMON_TRANSACTION_DBUS_INTERFACE,
-- "AllowUnauthenticated",
-- not bitfield_contains(flags,
-- pk.TransactionFlagEnum.ONLY_TRUSTED),
-- sender)
-- yield self.trans._run(sender)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="uas", out_signature="",
-- sender_keyword="sender")
-- def InstallPackages(self, flags, package_ids, sender):
-- """This method installs new packages on the local system.
--
-- The installer should always install extra packages automatically
-- as the use could call GetDepends prior to the install if a
-- confirmation is required in the UI.
--
-- This method typically emits Progress, Status and Error and Package.
--
-- Package enumerated types should be downloading, updating,
-- installing or removing.
--
-- :param flags:
-- If the transaction is only allowed to install trusted packages.
-- Unsigned packages should not be installed if the flags
-- contains ONLY_TRUSED.
-- If this method is can only install trusted packages, and
-- the packages are unsigned, then the backend will send a
-- ErrorCode(missing-gpg-signature). On recieving this error, the
-- client may choose to retry with ONLY_TRUSTED set after
-- gaining further authentication.
-- : param package_ids: An array of package IDs.
-- """
-- pklog.info("InstallPackages() was called: %s, %s",
-- get_string_from_flags(flags),
-- get_string_from_array(package_ids))
-- return self._install_packages(flags, package_ids, sender)
--
-- @inline_callbacks
-- def _install_packages(self, flags, package_ids, sender):
-- self.role = pk.RoleEnum.INSTALL_PACKAGES
-- self.flags = flags
-- self.trans = self._get_merged_trans(aptd_enums.ROLE_INSTALL_PACKAGES,
-- pkg_ids=package_ids,
-- pkg_type=aptd_enums.PKGS_INSTALL)
-- yield self.trans._set_property(
-- APTDAEMON_TRANSACTION_DBUS_INTERFACE,
-- "AllowUnauthenticated",
-- not bitfield_contains(flags,
-- pk.TransactionFlagEnum.ONLY_TRUSTED),
-- sender)
-- yield self.trans._run(sender)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="su", out_signature="",
-- sender_keyword="sender")
-- def UpgradeSystem(self, distro_id, upgrade_kind, sender):
-- """This method updates existing packages on the local system.
--
-- The installer should always update extra packages automatically
-- to fulfil dependencies.
--
-- This should allow an application to find out what package owns a
-- file on the system.
--
-- This method typically emits Progress, Status and Error and Package.
--
-- :param distro_id: The distribution id to upgrade to, e.g. saucy
-- :param upgrade_kind:
-- The type of upgrade e.g. minimal, default or complete.
-- Minimal upgrades will download the smallest amount of data
-- before launching a installer.
-- The default is to download enough data to launch a full graphical
-- installer, but a complete upgrade will be required if there is no
-- internet access during install time.
-- """
-- pklog.info("UpgradeSystem() was called")
-- GLib.idle_add(self._fail_not_implemented)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="t", out_signature="",
-- sender_keyword="sender")
-- def RepairSystem(self, flags, sender):
-- """This method recovers the package managment system from e.g.
-- unsatisified dependencies of installed packages.
--
-- :param flags:
-- If the transaction is only allowed to install trusted packages.
-- Unsigned packages should not be installed if the flags
-- contains ONLY_TRUSED.
-- If this method is can only install trusted packages, and
-- the packages are unsigned, then the backend will send a
-- ErrorCode(missing-gpg-signature). On recieving this error, the
-- client may choose to retry with ONLY_TRUSTED set after
-- gaining further authentication.
-- """
-- pklog.info("RepairSystem() was called")
-- return self._repair_system(flags, sender)
--
-- @inline_callbacks
-- def _repair_system(self, flags, sender):
-- self.role = pk.RoleEnum.REPAIR_SYSTEM
-- self.flags = flags
-- self.trans = self._get_merged_trans(aptd_enums.ROLE_FIX_BROKEN_DEPENDS)
-- yield self.trans._set_property(
-- APTDAEMON_TRANSACTION_DBUS_INTERFACE,
-- "AllowUnauthenticated",
-- not bitfield_contains(flags,
-- pk.TransactionFlagEnum.ONLY_TRUSTED),
-- sender)
-- yield self.trans._run(sender)
--
-- # pylint: disable-msg=C0103,C0322
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="b", out_signature="",
-- sender_keyword="sender")
-- def RefreshCache(self, force, sender):
-- """This method should fetch updated meta-data for all enabled
-- repositories.
--
-- When fetching each software source, ensure to emit RepoDetail for
-- the current source to give the user interface some extra details.
-- Be sure to have the "enabled" field set to true, otherwise you
-- wouldn't be fetching that source.
--
-- This method typically emits Progress, Error and RepoDetail.
--
-- :param force: If the caches should be cleaned and reloaded even if
-- there is valid, up to date data.
-- """
-- pklog.info("RefreshCache() was called")
-- self.role = pk.RoleEnum.REFRESH_CACHE
-- return self._refresh_cache(force, sender)
--
-- @inline_callbacks
-- def _refresh_cache(self, force, sender):
-- self.trans = self._get_merged_trans(aptd_enums.ROLE_UPDATE_CACHE,
-- kwargs={"sources_list": None})
-- yield self.trans._run(sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="as", out_signature="",
-- sender_keyword="sender")
-- def GetUpdateDetail(self, package_ids, sender):
-- """This method returns details about a specific update.
--
-- This method typically emits UpdateDetail and Error
--
-- :param package_ids: An array of package IDs.
-- """
-- pklog.info("GetUpdateDetail() was called")
-- self.role = pk.RoleEnum.GET_UPDATE_DETAIL
-- kwargs = {"package_ids": package_ids}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="t", out_signature="",
-- sender_keyword="sender")
-- def GetUpdates(self, filter, sender):
-- """This method should return a list of packages that are installed
-- and are upgradable. It should only return the newest update for
-- each installed package.
--
-- This method typically emits Progress, Error and Package.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- """
-- pklog.info("GetUpdates() was called")
-- self.role = pk.RoleEnum.GET_UPDATES
-- kwargs = {"filters": filter}
-- return self._run_query(kwargs, sender)
--
-- @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="", out_signature="",
-- sender_keyword="sender")
-- def GetDistroUpgrades(self, sender):
-- """This method should return a list of distribution upgrades that are
-- available. It should not return updates, only major upgrades.
--
-- This method typically emits DistroUpgrade, Error
-- """
-- pklog.info("GetDistroUpgrades() was called")
-- self.role = pk.RoleEnum.GET_DISTRO_UPGRADES
-- self.status = pk.StatusEnum.RUNNING
-- GLib.idle_add(defer_idle, self._get_distro_upgrades)
--
-- def _get_distro_upgrades(self):
-- # FIXME: Should go into the worker after the threading branch is merged
-- # It allows to run a nested loop until the download is finished
-- self.allow_cancel = False
-- self.percentage = 101
-- self.status = pk.StatusEnum.DOWNLOAD_UPDATEINFO
--
-- if META_RELEASE_SUPPORT is False:
-- self.ErrorCode(pk.ErrorEnum.INTERNAL_ERROR,
-- "Please make sure that update-manager-core is"
-- "correctly installed.")
-- self.exit = pk.ExitEnum.FAILED
-- return
--
-- # FIXME Evil to start the download during init
-- meta_release = GMetaRelease()
-- meta_release.connect("download-done",
-- self._on_distro_upgrade_download_done)
--
-- def _on_distro_upgrade_download_done(self, meta_release):
-- # FIXME: Add support for description
-- if meta_release.new_dist is not None:
-- self.DistroUpgrade("stable",
-- "%s %s" % (meta_release.new_dist.name,
-- meta_release.new_dist.version),
-- "The latest stable release")
-- self.exit = pk.ExitEnum.SUCCESS
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tas", out_signature="",
-- sender_keyword="sender")
-- def Resolve(self, filter, packages, sender):
-- """This method turns a single package name into a package_id suitable
-- for the other methods.
--
-- If the package is a fully formed package_id, then this should be
-- treated as an exact package match. This is useful to find the summary
-- or installed status of a package_id returned from other methods.
--
-- This method typically emits Error and Package.
--
-- Package enumerated types should be available or installed.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- :param packages:
-- An array of package names, e.g. scribus-clipart. The package
-- names are case sensitive, so for instance: Resolve('Packagekit')
-- would not match PackageKit. As a special case, if Resolve() is
-- called with a name prefixed with @ then this should be treated as
-- a category, for example: @web-development. In this instance, a
-- meta-package should be emitted, for example:
-- web-development;;;meta with the correct installed status and
-- summary for the category.
-- """
-- pklog.info("Resolve() was called: %s", get_string_from_array(packages))
-- self.role = pk.RoleEnum.RESOLVE
-- kwargs = {"filters": filter, "packages": packages}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="t", out_signature="",
-- sender_keyword="sender")
-- def GetPackages(self, filter, sender):
-- """This method returns all the packages without a search term.
--
-- This method typically emits Progress, Error and Package.
--
-- Package enumerated types should be available or installed.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- """
-- pklog.info("GetPackages() was called")
-- self.role = pk.RoleEnum.GET_PACKAGES
-- kwargs = {"filters": filter}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="as", out_signature="",
-- sender_keyword="sender")
-- def GetDetails(self, package_ids, sender):
-- """This method should return all the details about a specific
-- package_id.
--
-- This method typically emits Progress, Status and Error and Details.
--
-- :param package_ids: An array of package IDs.
-- """
-- pklog.info("GetDetails() was called")
-- self.role = pk.RoleEnum.GET_DETAILS
-- kwargs = {"package_ids": package_ids}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="as", out_signature="",
-- sender_keyword="sender")
-- def GetFiles(self, package_ids, sender):
-- """This method should return the file list of the package_id.
--
-- This method typically emits Progress, Status and Error and Files.
--
-- :param package_ids: An array of package IDs.
-- """
-- pklog.info("GetFiles() was called")
-- self.role = pk.RoleEnum.GET_FILES
-- kwargs = {"package_ids": package_ids}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tas", out_signature="",
-- sender_keyword="sender")
-- def SearchFiles(self, filter, values, sender):
-- """This method searches for files on the local system and files in
-- available packages.
--
-- This should search for files. This should allow an application to
-- find out what package owns a file on the system.
--
-- This method typically emits Progress, Error and Package.
--
-- Package enumerated types should be available or installed.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- :param values:
-- A filename or fully qualified path and filename on the system.
-- If the search term begins with a / it will be assumed the entire
-- path has been given and only packages that contain this exact
-- path and filename will be returned. If the search term does not
-- start with / then it should be treated as a single filename,
-- which can be in any directory. The search is case sensitive,
-- and should not be escaped or surrounded in quotes.
-- """
-- pklog.info("SearchFiles() was called")
-- self.role = pk.RoleEnum.SEARCH_FILE
-- kwargs = {"filters": filter,
-- "values": values}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tas", out_signature="",
-- sender_keyword="sender")
-- def SearchDetails(self, filter, values, sender):
-- """This method allows deeper searching than SearchName().
--
-- Do not refresh the package cache. This should be fast. This is very
-- similar to search-name. This should search as much data as possible,
-- including, if possible repo names, package summaries, descriptions,
-- licenses and URLs.
--
-- Try to emit installed before available packages first, as it allows
-- the client program to perform the GUI filtering and matching whilst
-- the daemon is running the transaction.
--
-- If the backend includes installed and available versions of the same
-- package when searching then the available version will have to be
-- filtered in the backend.
--
-- This method typically emits Progress, Error and Package.
--
-- Package enumerated types should be available or installed.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- :param values:
-- A single word search term with no wildcard chars. The search term
-- can contain many words separated by spaces. In this case, the
-- search operator is AND. For example, search of gnome power should
-- returns gnome-power-manager but not gnomesword or powertop.
-- The search should not be treated as case sensitive.
-- """
-- pklog.info("SearchDetails() was called")
-- self.role = pk.RoleEnum.SEARCH_DETAILS
-- kwargs = {"filters": filter,
-- "values": values}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tas", out_signature="",
-- sender_keyword="sender")
-- def SearchGroups(self, filter, values, sender):
-- """This method returns packages from a given group enumerated type.
--
-- Do not refresh the package cache. This should be fast.
--
-- Try to emit installed before available packages first, as it
-- allows the client program to perform the GUI filtering and matching
-- whilst the daemon is running the transaction.
--
-- If the backend includes installed and available versions of the same
-- package when searching then the available version will have to be
-- filtered in the backend.
--
-- This method typically emits Progress, Error and Package.
--
-- Package enumerated types should be available or installed.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- :param values:
-- An enumerated group type, or unknown. The search cannot contain
-- spaces. The following recommendations are made below: If the values
-- strings are prefixed with category: then the request is treated
-- as a 'category search', for example: category:web-development.
-- repo: then the request is treated as a 'repository search', for
-- example: repo:fedora-debuginfo. In this instance all packages that
-- were either installed from, or can be installed from the
-- fedora-debuginfo source would be returned.
-- """
-- pklog.info("SearchGroups() was called")
-- self.role = pk.RoleEnum.SEARCH_GROUP
-- kwargs = {"filters": filter,
-- "values": values}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tas", out_signature="",
-- sender_keyword="sender")
-- def SearchNames(self, filter, values, sender):
-- """This method searches the package database by package name.
--
-- Try to emit installed before available packages first, as it
-- allows the client program to perform the GUI filtering and matching
-- whilst the daemon is running the transaction.
--
-- If the backend includes installed and available versions of the same
-- package when searching then the available version will have to be
-- filtered in the backend.
--
-- The search methods should return all results in all repositories.
-- This may mean that multiple versions of package are returned. If this
-- is not what is wanted by the client program, then the newest filter
-- should be used.
--
-- This method typically emits Progress, Error and Package.
--
-- Package enumerated types should be available or installed.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- :param values:
-- A single word search term with no wildcard chars. The search term
-- can contain many words separated by spaces. In this case, the
-- search operator is AND. For example, search of gnome power should
-- returns gnome-power-manager but not gnomesword or powertop.
-- The search should not be treated as case sensitive.
-- """
-- pklog.info("SearchNames() was called")
-- self.role = pk.RoleEnum.SEARCH_NAME
-- kwargs = {"filters": filter,
-- "values": values}
-- return self._run_query(kwargs, sender)
--
-- @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="s", out_signature="",
-- sender_keyword="sender")
-- def AcceptEula(self, eula_id, sender):
-- """This method allows the user to accept a end user licence agreement.
--
-- :param eula_id: A valid EULA ID
-- """
-- self.role = pk.RoleEnum.ACCEPT_EULA
-- GLib.idle_add(self._fail_not_implemented)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="bas", out_signature="",
-- sender_keyword="sender")
-- def DownloadPackages(self, store_in_cache, package_ids, sender):
-- """This method downloads packages into a temporary directory.
--
-- This method should emit one Files signal for each package that
-- is downloaded, with the file list set as the name of the complete
-- downloaded file and directory, so for example:
--
-- DownloadPackages('hal;0.1.2;i386;fedora',
-- 'hal-info;2009-09-07;no-arch;updates') should send two signals,
-- e.g. Files('hal;0.1.2;i386;fedora', '/tmp/hal-0.1.2.i386.rpm')
-- and Files('hal-info;2009-09-07;no-arch;updates',
-- '/tmp/hal-info-2009-09-07.noarch.rpm').
--
-- :param store_in_cache:
-- If the downloaded files should be stored in the system package
-- cache rather than copied into a newly created directory. See the
-- developer docs for more details on how this is supposed to work.
-- :param package_ids: An array of package IDs.
-- """
-- pklog.info("DownloadPackages() was called: %s",
-- get_string_from_array(package_ids))
-- self.role = pk.RoleEnum.DOWNLOAD_PACKAGES
-- kwargs = {"store_in_cache": store_in_cache,
-- "package_ids": package_ids}
-- return self._run_query(kwargs, sender)
--
-- @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="u", out_signature="",
-- sender_keyword="sender")
-- def GetOldTransactions(self, number, sender):
-- """This method allows a client to view details for old transactions.
--
-- :param number:
-- The number of past transactions, or 0 for all known transactions.
-- """
-- pklog.info("GetOldTransactions() was called: %s", str(number))
-- self.role = pk.RoleEnum.GET_OLD_TRANSACTIONS
-- GLib.idle_add(self._fail_not_implemented)
--
-- @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="t", out_signature="",
-- sender_keyword="sender")
-- def GetRepoList(self, filter, sender):
-- """This method returns the list of repositories used in the system.
--
-- This method should emit RepoDetail.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- """
-- pklog.info("GetRepoList() was called")
-- self.role = pk.RoleEnum.GET_REPO_LIST
-- GLib.idle_add(self._fail_not_implemented)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tas", out_signature="",
-- sender_keyword="sender")
-- def InstallFiles(self, flags, full_paths, sender):
-- """This method installs local package files onto the local system.
--
-- The installer should always install extra dependant packages
-- automatically.
--
-- This method typically emits Progress, Status and Error and Package.
--
-- Package enumerated types should be downloading, updating, installing
-- or removing.
--
-- :param flags:
-- If the transaction is only allowed to install trusted packages.
-- Unsigned packages should not be installed if the flags
-- contains ONLY_TRUSED.
-- If this method is can only install trusted packages, and
-- the packages are unsigned, then the backend will send a
-- ErrorCode(missing-gpg-signature). On recieving this error, the
-- client may choose to retry with ONLY_TRUSTED set after
-- gaining further authentication.
-- :param full_paths: An array of full path and filenames to packages.
-- """
-- pklog.info("InstallFiles() was called: %s, %s",
-- get_string_from_flags(flags),
-- get_string_from_array(full_paths))
-- return self._install_files(flags, full_paths, sender)
--
-- @inline_callbacks
-- def _install_files(self, flags, full_paths, sender):
-- self.role = pk.RoleEnum.INSTALL_FILES
-- self.flags = flags
-- # Python-APT only supports installing one file
-- if len(full_paths) != 1:
-- self.ErrorCode(pk.ErrorEnum.NOT_SUPPORTED,
-- "Only one package can be "
-- "installed at the same time.")
-- self.exit = pk.ExitEnum.FAILED
-- raise StopIteration
-- path = full_paths[0]
-- if not os.path.abspath(path):
-- self.ErrorCode(pk.ErrorEnum.NOT_SUPPORTED,
-- "Path is not absolute: %s")
-- self.exit = pk.ExitEnum.FAILED
-- raise StopIteration
-- if not os.path.isfile(path):
-- self.ErrorCode(pk.ErrorEnum.INVALID_PACKAGE_FILE,
-- "File doesn't exist: %s" % path)
-- self.exit = pk.ExitEnum.FAILED
-- raise StopIteration
--
-- kwargs = {"path": path,
-- "force": True}
-- self.trans = self._get_merged_trans(aptd_enums.ROLE_INSTALL_FILE,
-- kwargs=kwargs)
-- yield self.trans._run(sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="uss", out_signature="",
-- sender_keyword="sender")
-- def InstallSignature(self, sig_type, key_id, package_id, sender):
-- """This method allows us to install new security keys.
--
-- :param sig_type: A key type, e.g. gpg
-- :param key_id: A key ID, e.g. BB7576AC
-- :param package_id:
-- A PackageID for the package that the user is trying to install
-- (ignored)
-- """
-- pklog.info("InstallSignature() was called: %s", str(key_id))
-- self.role = pk.RoleEnum.INSTALL_SIGNATURE
-- kwargs = {"sig_type": sig_type,
-- "key_id": key_id,
-- "package_id": package_id}
-- return self._run_query(kwargs, sender)
--
-- @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="sss", out_signature="",
-- sender_keyword="sender")
-- def RepoSetData(self, repo_id, parameter, value, sender):
-- """This method allows arbitary data to be passed to the repository
-- handler.
--
-- :param repo_id:
-- A repository identifier, e.g. fedora-development-debuginfo
-- :param parameter:
-- The backend specific value, e.g. set-download-url.
-- :param value:
-- The backend specific value, e.g. http://foo.bar.org/baz.
-- """
-- pklog.info("RepoSetData() was called: %s, %s, %s",
-- str(repo_id), str(parameter), str(value))
-- self.role = pk.RoleEnum.REPO_SET_DATA
-- GLib.idle_add(self._fail_not_implemented)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="sb", out_signature="",
-- sender_keyword="sender")
-- def RepoEnable(self, repo_id, enabled, sender):
-- """This method enables the repository specified.
--
-- :param repo_id:
-- A repository identifier, e.g. fedora-development-debuginfo or an
-- apt source ("deb http://... unstable main")
-- :param enabled: true if enabled, false if disabled.
-- """
-- pklog.info("RepoEnable() was called(): %s, %s",
-- str(repo_id), str(enabled))
-- self.role = pk.RoleEnum.REPO_ENABLE
-- kwargs = {"repo_id": repo_id,
-- "enabled": enabled}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tsas", out_signature="",
-- sender_keyword="sender")
-- def WhatProvides(self, filter, type, values, sender):
-- """This method returns packages that provide the supplied attributes.
-- This method is useful for finding out what package(s) provide a
-- modalias or GStreamer codec string.
--
-- This method typically emits Progress, Status and Error and Package.
--
-- Package enumerated types should be available or installed.
--
-- :param filter:
-- A correct filter, e.g. none or installed;~devel
-- :param type:
-- A PkProvideType, e.g. PK_PROVIDES_ENUM_CODEC.
-- :param values:
-- The data to send to the backend to get the packages. Note: This
-- is backend specific.
-- """
-- pklog.info("WhatProvides() was called")
-- self.role = pk.RoleEnum.WHAT_PROVIDES
-- kwargs = {"filters": filter,
-- "provides_type": type,
-- "values": values}
-- return self._run_query(kwargs, sender)
--
-- @dbus.service.method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="", out_signature="",
-- sender_keyword="sender")
-- def GetCategories(self, sender):
-- pklog.info("GetCategories() was called")
-- """This method return the collection categories"""
-- self.role = pk.RoleEnum.GET_CATEGORIES
-- GLib.idle_add(self._fail_not_implemented)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tasb", out_signature="",
-- sender_keyword="sender")
-- def GetRequires(self, filter, package_ids, recursive, sender):
-- """This method returns packages that depend on this package. This is
-- useful to know, as if package_id is being removed, we can warn the
-- user what else would be removed.
--
-- This method typically emits Progress, Status and Error and Package.
--
-- Package enumerated types should be available or installed.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- :param package_ids: An array of package IDs.
-- :param recursive:
-- Either true or false. If yes then the requirements should be
-- returned for all packages returned. This means if
-- gnome-power-manager depends on NetworkManager and NetworkManager
-- depends on HAL, then GetRequires on HAL should return both
-- gnome-power-manager and NetworkManager.
-- """
-- pklog.info("GetRequires() was called")
-- self.role = pk.RoleEnum.GET_REQUIRES
-- kwargs = {"filters": filter,
-- "package_ids": package_ids,
-- "recursive": recursive}
-- return self._run_query(kwargs, sender)
--
-- @dbus_deferred_method(PACKAGEKIT_TRANS_DBUS_INTERFACE,
-- in_signature="tasb", out_signature="",
-- sender_keyword="sender")
-- def GetDepends(self, filter, package_ids, recursive, sender):
-- """This method returns packages that this package depends on.
--
-- This method typically emits Progress, Status and Error and Package.
--
-- Package enumerated types should be available or installed.
--
-- :param filter: A correct filter, e.g. none or installed;~devel
-- :param package_ids: An array of package IDs.
-- :param recursive:
-- Either true or false. If yes then the requirements should be
-- returned for all packages returned. This means if
-- gnome-power-manager depends on NetworkManager and NetworkManager
-- depends on HAL, then GetDepends on gnome-power-manager should
-- return both HAL and NetworkManager.
-- """
-- pklog.info("GetDepends() was called")
-- self.role = pk.RoleEnum.GET_DEPENDS
-- kwargs = {"filters": filter,
-- "package_ids": package_ids,
-- "recursive": recursive}
-- return self._run_query(kwargs, sender)
--
-- # HELPERS
--
-- def _fail_not_implemented(self):
-- self.ErrorCode(pk.ErrorEnum.NOT_SUPPORTED, "Unimplemented method")
-- self.exit = pk.ExitEnum.FAILED
-- return False
--
-- def _get_properties(self, iface):
-- """Helper to get the properties of a D-Bus interface."""
-- if iface == PACKAGEKIT_TRANS_DBUS_INTERFACE:
-- return {"Role": dbus.UInt32(self.role),
-- "Status": dbus.UInt32(self.status),
-- "LastPackage": dbus.String(self.last_package),
-- "Uid": dbus.UInt32(self.uid),
-- "Percentage": dbus.UInt32(self.percentage),
-- "AllowCancel": dbus.Boolean(self.allow_cancel),
-- "CallerActive": dbus.Boolean(self.caller_active),
-- "ElapsedTime": dbus.UInt32(self.elapsed_time),
-- "RemainingTime": dbus.UInt32(self.remaining_time),
-- "DownloadSizeRemaining": dbus.UInt64(
-- self.download_size_remaining),
-- "TransactionFlags": dbus.UInt64(self.flags),
-- "Speed": dbus.UInt32(self.speed)
-- }
-- else:
-- return {}
--
-- @inline_callbacks
-- def _run_query(self, kwargs, sender):
-- self.trans = self._get_merged_trans(aptd_enums.ROLE_PK_QUERY,
-- kwargs=kwargs)
-- yield self.trans._run(sender)
--
-- def _get_aptd_package_id(self, pk_id):
-- """Convert a PackageKit Package ID to the apt syntax.
-- e.g. xterm;235;i386;installed to xterm:i386=235
-- """
-- name, version, arch, data = pk_id.split(";")
-- id = name
-- if arch != self.queue.worker.NATIVE_ARCH and arch != "all":
-- id += ":%s" % arch
-- if version:
-- id += "=%s" % version
-- return id
--
-- def _get_merged_trans(self, role, pkg_ids=None, pkg_type=None,
-- kwargs=None):
-- if pkg_ids:
-- packages = [[], [], [], [], [], []]
-- packages[pkg_type] = [self._get_aptd_package_id(pkg)
-- for pkg in pkg_ids]
-- else:
-- packages = None
-- if self.trans:
-- raise Exception("%s: Transaction may only run once." %
-- pk.ErrorEnum.TRANSACTION_FAILED)
-- trans = MergedTransaction(self, role, self.queue,
-- packages=packages, kwargs=kwargs)
-- try:
-- trans._set_locale(self.hints["locale"])
-- except (KeyError, ValueError):
-- # If the locale isn't vaild or supported a ValueError
-- # will be raised
-- pass
-- try:
-- trans._set_debconf(self.hints["frontend-socket"])
-- except KeyError:
-- pass
-- self.queue.limbo[trans.tid] = trans
-- return trans
--
--
--if META_RELEASE_SUPPORT:
--
-- class GMetaRelease(GObject.GObject, MetaReleaseCore):
--
-- __gsignals__ = {"download-done": (GObject.SignalFlags.RUN_FIRST,
-- None,
-- ())}
--
-- def __init__(self):
-- GObject.GObject.__init__(self)
-- MetaReleaseCore.__init__(self, False, False)
--
-- def download(self):
-- MetaReleaseCore.download(self)
-- self.emit("download-done")
--
--
--def get_pk_exit_enum(enum):
-- try:
-- return MAP_EXIT_ENUM[enum]
-- except KeyError:
-- return pk.ExitEnum.UNKNOWN
--
--
--def get_pk_status_enum(enum):
-- try:
-- return MAP_STATUS_ENUM[enum]
-- except KeyError:
-- return pk.StatusEnum.UNKNOWN
--
--
--def get_pk_package_enum(enum):
-- try:
-- return MAP_PACKAGE_ENUM[enum]
-- except KeyError:
-- return pk.InfoEnum.UNKNOWN
--
--
--def get_pk_error_enum(enum):
-- try:
-- return MAP_ERROR_ENUM[enum]
-- except KeyError:
-- return pk.ErrorEnum.UNKNOWN
--
--
--def get_pk_package_id(pk_id, data=""):
-- """Convert an AptDaemon package ID to the PackageKit syntax.
-- e.g. xterm:i368=235; to xterm;235;i386;installed
-- """
-- # FIXME add arch support
-- name, version, release = split_package_id(pk_id)
-- try:
-- name, arch = name.split(":", 1)
-- except ValueError:
-- arch = ""
-- if version is None:
-- version = ""
-- if release is None:
-- release = ""
-- return "%s;%s;%s;%s" % (name, version, arch, data or release)
--
--
--def defer_idle(func, *args):
-- func(*args)
-- return False
--
--
--def get_string_from_flags(flags):
-- """Return a human readable string of the applied transaction flags."""
-- ret = ""
-- if flags == pk.TransactionFlagEnum.NONE:
-- return "simulate"
-- if bitfield_contains(flags, pk.TransactionFlagEnum.SIMULATE):
-- ret += " simulate"
-- if bitfield_contains(flags, pk.TransactionFlagEnum.ONLY_DOWNLOAD):
-- ret += " only-download"
-- if bitfield_contains(flags, pk.TransactionFlagEnum.ONLY_TRUSTED):
-- ret += " only-trusted"
-- return ret.strip()
--
--
--def get_string_from_array(array):
-- """Convert a DBus Array to a human readable format"""
-- return [str(value) for value in array]
--
--
--# vim: ts=4 et sts=4
diff --git a/debian/patches/failing-tests.patch b/debian/patches/failing-tests.patch
deleted file mode 100644
index f871fde..0000000
--- a/debian/patches/failing-tests.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-Description: Fix tests
- Various test fixes, and disabling of broken ones
-Author: Julian Andres Klode <julian.klode@canonical.com>
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
---- a/tests/test_lock.py
-+++ b/tests/test_lock.py
-@@ -74,7 +74,7 @@ class LockTest(unittest.TestCase):
- # Lock!
- aptdaemon.worker.aptworker.lock.status_lock.acquire()
- self.assertEqual(2, subprocess.call(self.dpkg_cmd, env=self.env))
-- self.assertEqual(100, subprocess.call(self.apt_cmd, env=self.env,
-+ self.assertEqual(0, subprocess.call(self.apt_cmd, env=self.env,
- shell=True))
- # Relase and all should work again!
- aptdaemon.worker.aptworker.lock.status_lock.release()
-@@ -105,7 +105,7 @@ class LockTest(unittest.TestCase):
- # Dpkg and apt-get doen't care about the lock as long as there aren't
- # any downloads required
- self.assertEqual(0, subprocess.call(self.dpkg_cmd, env=self.env))
-- self.assertEqual(0, subprocess.call(self.apt_cmd, env=self.env,
-+ self.assertEqual(100, subprocess.call(self.apt_cmd, env=self.env,
- shell=True))
- self.assertEqual(100, subprocess.call(self.inst_cmd, env=self.env,
- shell=True))
---- a/tests/test_pep8.py
-+++ b/tests/test_pep8.py
-@@ -26,6 +26,7 @@ import subprocess
- import unittest
-
-
-+@unittest.skip("Does not work")
- class AptDaemonPep8TestCase(unittest.TestCase):
-
- def test(self):
---- a/tests/test_pk.py
-+++ b/tests/test_pk.py
-@@ -34,6 +34,7 @@ REPO_PATH = os.path.join(aptdaemon.test.
- DEBUG = True
-
-
-+@unittest.skip("Removed PackageKit compat")
- class PackageKitTest(aptdaemon.test.AptDaemonTestCase):
-
- """Test the PackageKit compatibility layer."""
---- a/tests/test_progress.py
-+++ b/tests/test_progress.py
-@@ -8,11 +8,17 @@ import mock
- import sys
- import unittest
-
-+import aptdaemon.test
- from aptdaemon.progress import DaemonOpenProgress
-
-
- class TestProgress(unittest.TestCase):
-
-+ def setUp(self):
-+ self.chroot = aptdaemon.test.Chroot()
-+ self.chroot.setup()
-+ self.addCleanup(self.chroot.remove)
-+
- def test_open_progress(self):
- transaction = mock.Mock()
- begin = 0
---- a/aptdaemon/test.py
-+++ b/aptdaemon/test.py
-@@ -75,6 +75,7 @@ class Chroot(object):
- os.makedirs(os.path.join(self.path, "etc/apt/apt.conf.d"))
- os.makedirs(os.path.join(self.path, "etc/apt/sources.list.d"))
- os.makedirs(os.path.join(self.path, "etc/apt/preferences.d"))
-+ os.makedirs(os.path.join(self.path, "etc/apt/trusted.gpg.d"))
- os.makedirs(os.path.join(self.path, "var/log"))
- os.makedirs(os.path.join(self.path, "media"))
-
---- a/tests/test_client.py
-+++ b/tests/test_client.py
-@@ -77,6 +77,7 @@ class ClientTest(aptdaemon.test.AptDaemo
- self.chroot.setup()
- self.addCleanup(self.chroot.remove)
- self.chroot.add_test_repository()
-+ self.chroot.add_trusted_key()
- # Start aptdaemon with the chroot on the session bus
- self.start_dbus_daemon()
- self.bus = dbus.bus.BusConnection(self.dbus_address)
diff --git a/debian/patches/fix-dependency-solving.patch b/debian/patches/fix-dependency-solving.patch
deleted file mode 100644
index 56779fe..0000000
--- a/debian/patches/fix-dependency-solving.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-Description: Fix dependency solving
- The install_protect() method was deprecated ages ago, and there are all
- sorts of issues here.
- .
- So first of all, remove the install_protect() call as it was removed in apt
- 1.9.
- .
- Secondly, do not pass auto_fix=True to mark_install(), as that creates its
- own solver for each package and solves just that packages dependencies, which
- causes odd results (the package could no longer be marked for install after
- calling mark_install if its dependencies cannot be satisfied)
- .
- Thirdly, move the whole marking bits below any changes to the candidate
- version so we actually mark the correct version for install. This worked
- OK-ish before, because the install_protect() call would re-mark the packages,
- but ugh, it's just crazy.
-Author: Julian Andres Klode <juliank@ubuntu.com>
---- a/aptdaemon/worker/aptworker.py
-+++ b/aptdaemon/worker/aptworker.py
-@@ -338,7 +338,6 @@ class AptWorker(BaseWorker):
- def _resolve_depends(self, trans, resolver):
- """Resolve the dependencies using the given ProblemResolver."""
- self._call_plugins("modify_cache_before", resolver)
-- resolver.install_protect()
- try:
- resolver.resolve()
- except SystemError:
-@@ -421,9 +420,7 @@ class AptWorker(BaseWorker):
- raise TransactionFailed(
- ERROR_PACKAGE_ALREADY_INSTALLED,
- _("Package %s is already installed"), pkg_name)
-- pkg.mark_install(False, True, from_user)
-- resolver.clear(pkg)
-- resolver.protect(pkg)
-+
- if pkg_ver:
- try:
- pkg.candidate = pkg.versions[pkg_ver]
-@@ -434,6 +431,10 @@ class AptWorker(BaseWorker):
- elif pkg_rel:
- self._set_candidate_release(pkg, pkg_rel)
-
-+ pkg.mark_install(False, False, from_user)
-+ resolver.clear(pkg)
-+ resolver.protect(pkg)
-+
- def enable_distro_comp(self, trans, component):
- """Enable given component in the sources list.
-
-@@ -777,10 +778,7 @@ class AptWorker(BaseWorker):
- _("Package %s isn't installed"),
- pkg_name)
- auto = pkg.is_auto_installed
-- pkg.mark_install(False, True, True)
-- pkg.mark_auto(auto)
-- resolver.clear(pkg)
-- resolver.protect(pkg)
-+
- if pkg_ver:
- if pkg.installed and pkg.installed.version < pkg_ver:
- # FIXME: We need a new error enum
-@@ -805,6 +803,11 @@ class AptWorker(BaseWorker):
- "downgrade %s to"),
- pkg_name)
-
-+ pkg.mark_install(False, False, True)
-+ pkg.mark_auto(auto)
-+ resolver.clear(pkg)
-+ resolver.protect(pkg)
-+
- def _mark_packages_for_upgrade(self, packages, resolver):
- """Mark packages for upgrade."""
- for pkg_name, pkg_ver, pkg_rel in [self._split_package_id(pkg)
-@@ -820,10 +823,7 @@ class AptWorker(BaseWorker):
- _("Package %s isn't installed"),
- pkg_name)
- auto = pkg.is_auto_installed
-- pkg.mark_install(False, True, True)
-- pkg.mark_auto(auto)
-- resolver.clear(pkg)
-- resolver.protect(pkg)
-+
- if pkg_ver:
- if (pkg.installed and
- apt_pkg.version_compare(pkg.installed.version,
-@@ -849,6 +849,11 @@ class AptWorker(BaseWorker):
- elif pkg_rel:
- self._set_candidate_release(pkg, pkg_rel)
-
-+ pkg.mark_install(False, False, True)
-+ pkg.mark_auto(auto)
-+ resolver.clear(pkg)
-+ resolver.protect(pkg)
-+
- @staticmethod
- def _set_candidate_release(pkg, release):
- """Set the candidate of a package to the one from the given release."""
diff --git a/debian/patches/fix-high-trust-pkcompat.diff b/debian/patches/fix-high-trust-pkcompat.diff
deleted file mode 100644
index 6084b5c..0000000
--- a/debian/patches/fix-high-trust-pkcompat.diff
+++ /dev/null
@@ -1,16 +0,0 @@
-Index: aptdaemon/aptdaemon/worker/aptworker.py
-===================================================================
---- aptdaemon.orig/aptdaemon/worker/aptworker.py
-+++ aptdaemon/aptdaemon/worker/aptworker.py
-@@ -113,8 +113,10 @@ def trans_only_installs_pkgs_from_high_t
- # paranoia(2): we must want to install something
- if not trans.packages[PKGS_INSTALL]:
- return False
-+ # we only care about the name, not the version
-+ pkgs = [pkg.split("=")[0] for pkg in trans.packages[PKGS_INSTALL]]
- # if the install packages matches the whitelisted set we are good
-- return set(trans.packages[PKGS_INSTALL]) == set(trans.high_trust_packages)
-+ return set(pkgs) == set(trans.high_trust_packages)
-
-
- def read_high_trust_repository_dir(whitelist_cfg_d):
diff --git a/debian/patches/fix-installation.patch b/debian/patches/fix-installation.patch
deleted file mode 100644
index c961842..0000000
--- a/debian/patches/fix-installation.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Description: Don't consider the "data" when installing a package - this is usually "Ubuntu" and isn't useful to pass to apt.
-Author: Justin McPherson <justin.mcpherson@canonical.com>
-Forwarded: https://code.launchpad.net/~justinmcp/aptdaemon/1352654/+merge/243354
-Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/aptdaemon/+bug/1352654
-
-Index: b/aptdaemon/pkcompat.py
-===================================================================
---- a/aptdaemon/pkcompat.py
-+++ b/aptdaemon/pkcompat.py
-@@ -1904,8 +1904,6 @@
- id += ":%s" % arch
- if version:
- id += "=%s" % version
-- if data and data not in ["local", "installed"]:
-- id += "/%s" % data
- return id
-
- def _get_merged_trans(self, role, pkg_ids=None, pkg_type=None,
diff --git a/debian/patches/fix-some-deprecated-code.patch b/debian/patches/fix-some-deprecated-code.patch
deleted file mode 100644
index 2cbca09..0000000
--- a/debian/patches/fix-some-deprecated-code.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-Description: Fix some deprecated code
-Author: Gunnar Hjalmarsson <gunnarhj@ubuntu.com>
-Bug-Ubuntu: https://launchpad.net/bugs/1951985
-Last-Update: 2021-11-23
----
- aptdaemon/client.py | 52 ++++++++++++++++++++++++++--------------------------
- aptdaemon/errors.py | 2 +-
- aptdaemon/gtk3widgets.py | 6 +++---
- 3 files changed, 30 insertions(+), 30 deletions(-)
-
-diff --git a/aptdaemon/client.py b/aptdaemon/client.py
-index c9fccd2..db032a3 100644
---- a/aptdaemon/client.py
-+++ b/aptdaemon/client.py
-@@ -385,10 +385,10 @@ class AptTransaction(GObject.Object):
- dependencies before the transaction will be executed.
- """
-
-- __gsignals__ = {"finished": (GObject.SIGNAL_RUN_FIRST,
-+ __gsignals__ = {"finished": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,)),
-- "dependencies-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "dependencies-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_PYOBJECT,
- GObject.TYPE_PYOBJECT,
-@@ -397,37 +397,37 @@ class AptTransaction(GObject.Object):
- GObject.TYPE_PYOBJECT,
- GObject.TYPE_PYOBJECT,
- GObject.TYPE_PYOBJECT)),
-- "download-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "download-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_INT64,)),
-- "space-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "space-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_INT64,)),
-- "error": (GObject.SIGNAL_RUN_FIRST,
-+ "error": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING, GObject.TYPE_STRING)),
-- "role-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "role-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,)),
-- "terminal-attached-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "terminal-attached-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_BOOLEAN,)),
-- "cancellable-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "cancellable-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_BOOLEAN,)),
-- "meta-data-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "meta-data-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_PYOBJECT,)),
-- "status-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "status-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,)),
-- "status-details-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "status-details-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,)),
-- "progress-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "progress-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_INT,)),
-- "progress-details-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "progress-details-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_INT,
- GObject.TYPE_INT,
-@@ -435,7 +435,7 @@ class AptTransaction(GObject.Object):
- GObject.TYPE_INT64,
- GObject.TYPE_INT,
- GObject.TYPE_INT64)),
-- "progress-download-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "progress-download-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,
- GObject.TYPE_STRING,
-@@ -443,7 +443,7 @@ class AptTransaction(GObject.Object):
- GObject.TYPE_INT64,
- GObject.TYPE_INT64,
- GObject.TYPE_STRING)),
-- "packages-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "packages-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_PYOBJECT,
- GObject.TYPE_PYOBJECT,
-@@ -451,39 +451,39 @@ class AptTransaction(GObject.Object):
- GObject.TYPE_PYOBJECT,
- GObject.TYPE_PYOBJECT,
- GObject.TYPE_PYOBJECT)),
-- "unauthenticated-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "unauthenticated-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_PYOBJECT,)),
-- "paused": (GObject.SIGNAL_RUN_FIRST,
-+ "paused": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- ()),
-- "resumed": (GObject.SIGNAL_RUN_FIRST,
-+ "resumed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- ()),
-- "allow-unauthenticated-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "allow-unauthenticated-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_BOOLEAN,)),
- "remove-obsoleted-depends-changed": (
-- GObject.SIGNAL_RUN_FIRST,
-+ GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_BOOLEAN,)),
-- "locale-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "locale-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,)),
-- "terminal-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "terminal-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,)),
-- "debconf-socket-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "debconf-socket-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,)),
-- "http-proxy-changed": (GObject.SIGNAL_RUN_FIRST,
-+ "http-proxy-changed": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,)),
-- "medium-required": (GObject.SIGNAL_RUN_FIRST,
-+ "medium-required": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,
- GObject.TYPE_STRING)),
-- "config-file-conflict": (GObject.SIGNAL_RUN_FIRST,
-+ "config-file-conflict": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE,
- (GObject.TYPE_STRING,
- GObject.TYPE_STRING)),
-diff --git a/aptdaemon/errors.py b/aptdaemon/errors.py
-index 4783179..cd98d6e 100644
---- a/aptdaemon/errors.py
-+++ b/aptdaemon/errors.py
-@@ -174,7 +174,7 @@ def convert_dbus_exception(func):
- This decorator requires introspection to the decorated function. So it
- cannot be used on any already decorated method.
- """
-- argnames, varargs, kwargs, defaults = inspect.getargspec(func)
-+ argnames, varargs, kwargs, defaults = inspect.getfullargspec(func)[:4]
-
- @wraps(func)
- def _convert_dbus_exception(*args, **kwargs):
-diff --git a/aptdaemon/gtk3widgets.py b/aptdaemon/gtk3widgets.py
-index af9faec..5c99c1d 100644
---- a/aptdaemon/gtk3widgets.py
-+++ b/aptdaemon/gtk3widgets.py
-@@ -562,7 +562,7 @@ class AptProgressDialog(Gtk.Dialog):
- features a progress bar, cancel button, status icon and label
- """
-
-- __gsignals__ = {"finished": (GObject.SIGNAL_RUN_FIRST,
-+ __gsignals__ = {"finished": (GObject.SignalFlags.RUN_FIRST,
- GObject.TYPE_NONE, ())}
-
- def __init__(self, transaction=None, parent=None, terminal=True,
-@@ -1086,8 +1086,8 @@ class AptConfigFileConflictDialog(_ExpandableDialog):
- return _ExpandableDialog.run(self)
-
-
--REGEX_RANGE = "^@@ \-(?P<from_start>[0-9]+)(?:,(?P<from_context>[0-9]+))? " \
-- "\+(?P<to_start>[0-9]+)(?:,(?P<to_context>[0-9]+))? @@"
-+REGEX_RANGE = "^@@ \\-(?P<from_start>[0-9]+)(?:,(?P<from_context>[0-9]+))? " \
-+ "\\+(?P<to_start>[0-9]+)(?:,(?P<to_context>[0-9]+))? @@"
-
-
- class DiffView(Gtk.TextView):
diff --git a/debian/patches/frontend-locking.patch b/debian/patches/frontend-locking.patch
deleted file mode 100644
index 1045124..0000000
--- a/debian/patches/frontend-locking.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-Description: Various locking fixes (LP: #1831981)
- - Implement frontend locking
- - Adjust locking order to match APT
- - Use reverse order for unlocking
-Author: Julian Andres Klode <juliank@ubuntu.com>
-Bug-Ubuntu: https://bugs.launchpad.net/bugs/1831981
-
---- a/aptdaemon/lock.py
-+++ b/aptdaemon/lock.py
-@@ -118,6 +118,7 @@ apt_pkg.init()
- #: The lock for dpkg status file
- _status_dir = os.path.dirname(apt_pkg.config.find_file("Dir::State::status"))
- status_lock = FileLock(os.path.join(_status_dir, "lock"))
-+frontend_lock = FileLock(os.path.join(_status_dir, "lock-frontend"))
-
- #: The lock for the package archive
- _archives_dir = apt_pkg.config.find_dir("Dir::Cache::Archives")
-@@ -131,19 +132,25 @@ lists_lock = FileLock(os.path.join(
- def acquire():
- """Acquire an exclusive lock for the package management system."""
- try:
-- for lock in archive_lock, status_lock, lists_lock:
-+ for lock in frontend_lock, status_lock, archive_lock, lists_lock:
- if not lock.locked:
- lock.acquire()
- except:
- release()
- raise
-
-+ os.environ['DPKG_FRONTEND_LOCKED'] = '1'
-
- def release():
- """Release an exclusive lock for the package management system."""
-- for lock in archive_lock, status_lock, lists_lock:
-+ for lock in lists_lock, archive_lock, status_lock, frontend_lock:
- lock.release()
-
-+ try:
-+ del os.environ['DPKG_FRONTEND_LOCKED']
-+ except KeyError:
-+ pass
-+
-
- def wait_for_lock(trans, alt_lock=None):
- """Acquire the system lock or the optionally given one. If the lock
---- a/aptdaemon/worker/aptworker.py
-+++ b/aptdaemon/worker/aptworker.py
-@@ -198,6 +198,8 @@ class AptWorker(BaseWorker):
- apt_pkg.config["DPkg::Options::"] = ("--log=%s/var/log/dpkg.log" %
- chroot)
- status_file = apt_pkg.config.find_file("Dir::State::status")
-+ lock.frontend_lock.path = os.path.join(os.path.dirname(status_file),
-+ "lock-frontend")
- lock.status_lock.path = os.path.join(os.path.dirname(status_file),
- "lock")
- archives_dir = apt_pkg.config.find_dir("Dir::Cache::Archives")
diff --git a/debian/patches/gdk-gtk-versions.py b/debian/patches/gdk-gtk-versions.py
deleted file mode 100644
index ce1e950..0000000
--- a/debian/patches/gdk-gtk-versions.py
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/gtk3widgets.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/gtk3widgets.py
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/gtk3widgets.py
-@@ -40,6 +40,8 @@ import re
-
- import gi
- gi.require_version("Vte", "2.91")
-+gi.require_version("Gdk", "3.0")
-+gi.require_version("Gtk", "3.0")
-
- import apt_pkg
- from gi.repository import GObject
diff --git a/debian/patches/key_value_typo.patch b/debian/patches/key_value_typo.patch
deleted file mode 100644
index b286df1..0000000
--- a/debian/patches/key_value_typo.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Description: Remove trailing comma, was causing a TypeError.
-Author: Justin McPherson <justin.mcpherson@canonical.com>
-Forwarded: https://code.launchpad.net/~justinmcp/aptdaemon/1352654/+merge/243354
-Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/aptdaemon/+bug/1352654
-=== modified file 'aptdaemon/aptdaemon/worker/aptworker.py'
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/worker/aptworker.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/worker/aptworker.py
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/worker/aptworker.py
-@@ -1511,7 +1511,7 @@ class AptWorker(BaseWorker):
- key = "APT::Periodic::AutocleanInterval"
- return apt_pkg.config.find_i(key, 0)
- elif option == "UnattendedUpgrade":
-- key = "APT::Periodic::Unattended-Upgrade",
-+ key = "APT::Periodic::Unattended-Upgrade"
- return apt_pkg.config.find_b(key, False)
- elif option == "GetPopconParticipation":
- return self._get_popcon_pariticipation()
diff --git a/debian/patches/lintian_deprecated_error.patch b/debian/patches/lintian_deprecated_error.patch
deleted file mode 100644
index a9b0309..0000000
--- a/debian/patches/lintian_deprecated_error.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Description: don't list deprecated lintian case
-Author: Sebastien Bacher <seb128@ubuntu.com>
-Forwarded: https://code.launchpad.net/~seb128/aptdaemon/lintian-upx-deprecated/+merge/272924
-Bug-Ubuntu: https://launchpad.net/bugs/1490169
-=== modified file 'aptdaemon/data/lintian/ubuntu/aptdaemon.profile'
-Index: aptdaemon-1.1.1+bzr982/data/lintian/ubuntu/aptdaemon.profile
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/data/lintian/ubuntu/aptdaemon.profile
-+++ aptdaemon-1.1.1+bzr982/data/lintian/ubuntu/aptdaemon.profile
-@@ -5,9 +5,8 @@ Disable-Tags:
- FSSTND-dir-in-usr,
- FSSTND-dir-in-var,
- arch-dependent-file-in-usr-share,
-- binary-file-compressed-with-upx,
- binary-or-shlib-defines-rpath,
-- control-interpreter-in-usr-local,
-+ control-interpreter-in-usr-local,
- copyright-contains-dh_make-todo-boilerplate,
- copyright-file-compressed,
- copyright-file-is-symlink,
diff --git a/debian/patches/lock-is-held-typo.patch b/debian/patches/lock-is-held-typo.patch
deleted file mode 100644
index 5220b7d..0000000
--- a/debian/patches/lock-is-held-typo.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Description: Fix typo hold vs held.
-Author: Julian Andres Klode <juliank@ubuntu.com>
-Last-Update: 2019-06-21
-
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/lock.py
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/lock.py
-@@ -45,7 +45,7 @@ class LockFailedError(Exception):
- """
- msg = "Could not acquire lock on %s." % flock
- if process:
-- msg += " The lock is hold by %s." % process
-+ msg += " The lock is held by %s." % process
- Exception.__init__(self, msg)
- self.flock = flock
- self.process = process
diff --git a/debian/patches/lp1153725-temporary-workaround.patch b/debian/patches/lp1153725-temporary-workaround.patch
deleted file mode 100644
index 8332058..0000000
--- a/debian/patches/lp1153725-temporary-workaround.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Description: Skip expected failures due to LP: #1153725.
- Remove this when the actual bug is fixed or when we have a better patch.
-Author: Barry Warsaw <barry@ubuntu.com>
-Forwarded: not-needed
-
-Index: aptdaemon-1.0/tests/test_high_trust_repository_whitelist.py
-===================================================================
---- aptdaemon-1.0.orig/tests/test_high_trust_repository_whitelist.py 2013-03-18 14:24:18.377381909 +0100
-+++ aptdaemon-1.0/tests/test_high_trust_repository_whitelist.py 2013-03-18 14:24:43.493382864 +0100
-@@ -72,6 +72,7 @@
- self.worker.connect("transaction-simulated",
- lambda w, t: self.loop.quit())
-
-+ @unittest.expectedFailure
- def test_read_high_trust_repository_whitelist_dir(self):
- whitelist = read_high_trust_repository_dir(
- os.path.join(aptdaemon.test.get_tests_dir(),
-@@ -167,6 +168,7 @@
- self.start_fake_polkitd(PK_ACTION)
- time.sleep(1)
-
-+ @unittest.expectedFailure
- def test_high_trust_polkit_ok(self):
- self.client = aptdaemon.client.AptClient(self.bus)
- # test that the high trust whitelist works
diff --git a/debian/patches/lp1356823.diff b/debian/patches/lp1356823.diff
deleted file mode 100644
index db7efb4..0000000
--- a/debian/patches/lp1356823.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-=== modified file 'aptdaemon/pkcompat.py'
---- old/aptdaemon/pkcompat.py 2014-06-26 07:07:15 +0000
-+++ new/aptdaemon/pkcompat.py 2015-04-16 15:04:08 +0000
-@@ -586,6 +586,8 @@
-
- def _remove_from_connection_no_raise(self):
- core.Transaction._remove_from_connection_no_raise(self)
-+ if self.pktrans is None:
-+ return False
- self.pktrans.Destroy()
- try:
- self.pktrans.remove_from_connection()
-
diff --git a/debian/patches/lp1439769-aptdaemon-autoinstall.patch b/debian/patches/lp1439769-aptdaemon-autoinstall.patch
deleted file mode 100644
index 91120c9..0000000
--- a/debian/patches/lp1439769-aptdaemon-autoinstall.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Description: Take a flag to indicate whether a requested package is auto-installed
- The aptdaemon API takes a complete list of packages to be installed,
- including dependencies. This means that all packages are marked as
- "selected" by the "user" for installation, even if on the other end of the
- API they were selected for installation only to resolve dependencies of
- other packages.
- .
- This patch adds an optional "auto" flag to the list of packages passed from
- the client, so that aptdaemon can pass this information on to apt.
-Author: Michael Vogt <mvo@ubuntu.com>
-Bug-Ubuntu: https://bugs.launchpad.net/bugs/1439769
-
-=== modified file 'aptdaemon/core.py'
-Index: wily/aptdaemon/core.py
-===================================================================
---- wily.orig/aptdaemon/core.py
-+++ wily/aptdaemon/core.py
-@@ -2069,6 +2069,10 @@ class AptDaemon(DBusObject):
- """
- for fullname in pkg_names:
- name, version, release = split_package_id(fullname)
-+ name, sep, auto_flag = name.partition("#")
-+ if not auto_flag in ("", "auto"):
-+ raise errors.AptDaemonError("%s isn't a valid flag" %
-+ auto_flag)
- if not re.match(REGEX_VALID_PACKAGENAME, name):
- raise errors.AptDaemonError("%s isn't a valid package name" %
- name)
-Index: wily/aptdaemon/worker/aptworker.py
-===================================================================
---- wily.orig/aptdaemon/worker/aptworker.py
-+++ wily/aptdaemon/worker/aptworker.py
-@@ -388,6 +388,8 @@ class AptWorker(BaseWorker):
- """Mark packages for installation."""
- for pkg_name, pkg_ver, pkg_rel in [self._split_package_id(pkg)
- for pkg in packages]:
-+ pkg_name, sep, auto_marker = pkg_name.partition("#")
-+ from_user = (auto_marker != "auto")
- try:
- pkg = self._cache[pkg_name]
- except KeyError:
-@@ -417,7 +419,7 @@ class AptWorker(BaseWorker):
- raise TransactionFailed(
- ERROR_PACKAGE_ALREADY_INSTALLED,
- _("Package %s is already installed"), pkg_name)
-- pkg.mark_install(False, True, True)
-+ pkg.mark_install(False, True, from_user)
- resolver.clear(pkg)
- resolver.protect(pkg)
- if pkg_ver:
diff --git a/debian/patches/lp1449587.diff b/debian/patches/lp1449587.diff
deleted file mode 100644
index 16f82b6..0000000
--- a/debian/patches/lp1449587.diff
+++ /dev/null
@@ -1,363 +0,0 @@
-=== modified file 'aptdaemon/core.py'
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/core.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/core.py 2015-06-11 09:18:21.910695506 -0400
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/core.py 2015-06-11 09:18:21.906695457 -0400
-@@ -324,7 +324,7 @@
- "DebconfSocket", "MetaData", "Locale",
- "RemoveObsoleteDepends")
-
-- def __init__(self, tid, role, queue, pid, uid, cmdline, sender,
-+ def __init__(self, tid, role, queue, pid, uid, gid, cmdline, sender,
- connect=True, bus=None, packages=None, kwargs=None):
- """Initialize a new Transaction instance.
-
-@@ -360,6 +360,7 @@
- kwargs = {}
- self.queue = queue
- self.uid = uid
-+ self.gid = gid
- self.locale = dbus.String("")
- self.allow_unauthenticated = dbus.Boolean(False)
- self.remove_obsoleted_depends = dbus.Boolean(False)
-@@ -1521,11 +1522,12 @@
- @inline_callbacks
- def _create_trans(self, role, sender, packages=None, kwargs=None):
- """Helper method which returns the tid of a new transaction."""
-- pid, uid, cmdline = (
-+ pid, uid, gid, cmdline = (
- yield policykit1.get_proc_info_from_dbus_name(sender, self.bus))
- tid = uuid.uuid4().hex
-- trans = Transaction(tid, role, self.queue, pid, uid, cmdline, sender,
-- packages=packages, kwargs=kwargs, bus=self.bus)
-+ trans = Transaction(
-+ tid, role, self.queue, pid, uid, gid, cmdline, sender,
-+ packages=packages, kwargs=kwargs, bus=self.bus)
- self.queue.limbo[trans.tid] = trans
- return_value(trans.tid)
-
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/pkcompat.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/pkcompat.py 2015-06-11 09:18:21.910695506 -0400
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/pkcompat.py 2015-06-11 09:18:21.910695506 -0400
-@@ -334,9 +334,10 @@
-
- @inline_callbacks
- def _create_transaction(self, sender):
-- pid, uid, cmdline = yield policykit1.get_proc_info_from_dbus_name(
-+ pid, uid, gid, cmdline = yield policykit1.get_proc_info_from_dbus_name(
- sender, self.bus)
-- pktrans = PackageKitTransaction(pid, uid, cmdline, self.queue, sender)
-+ pktrans = PackageKitTransaction(
-+ pid, uid, gid, cmdline, self.queue, sender)
- return_value(pktrans.tid)
-
- # pylint: disable-msg=C0103,C0322
-@@ -468,7 +469,7 @@
- def __init__(self, pktrans, role, queue, connect=True,
- bus=None, packages=None, kwargs=None):
- core.Transaction.__init__(self, pktrans.tid[1:], role, queue,
-- pktrans.pid, pktrans.uid,
-+ pktrans.pid, pktrans.uid, pktrans.gid,
- pktrans.cmdline, pktrans.sender,
- connect, bus, packages, kwargs)
- self.pktrans = pktrans
-@@ -626,7 +627,7 @@
-
- """Provides a PackageKit transaction object."""
-
-- def __init__(self, pid, uid, cmdline, queue, sender,
-+ def __init__(self, pid, uid, gid, cmdline, queue, sender,
- connect=True, bus=None):
- pklog.info("Initializing PackageKit transaction")
- bus_name = None
-@@ -652,6 +653,7 @@
- self._status = pk.StatusEnum.SETUP
- self._last_package = ""
- self.uid = dbus.UInt32(uid)
-+ self.gid = dbus.UInt32(gid)
- self.pid = pid
- self.cmdline = cmdline
- self.role = pk.RoleEnum.UNKNOWN
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/policykit1.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/policykit1.py 2015-06-11 09:18:21.910695506 -0400
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/policykit1.py 2015-06-11 09:18:21.910695506 -0400
-@@ -161,12 +161,15 @@
- bus = dbus.SystemBus()
- pid = yield get_pid_from_dbus_name(dbus_name, bus)
- with open("/proc/%s/status" % pid) as proc:
-- values = [v for v in proc.readlines() if v.startswith("Uid:")]
-+ lines = proc.readlines()
-+ uid_values = [v for v in lines if v.startswith("Uid:")]
-+ gid_values = [v for v in lines if v.startswith("Gid:")]
- # instead of ", encoding='utf8'" we use the "rb"/decode() here for
- # py2 compatibility
- with open("/proc/%s/cmdline" % pid, "rb") as cmdline_file:
- cmdline = cmdline_file.read().decode("utf-8")
-- uid = int(values[0].split()[1])
-- return_value((pid, uid, cmdline))
-+ uid = int(uid_values[0].split()[1])
-+ gid = int(gid_values[0].split()[1])
-+ return_value((pid, uid, gid, cmdline))
-
- # vim:ts=4:sw=4:et
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/progress.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/progress.py 2015-06-11 09:18:21.910695506 -0400
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/progress.py 2015-06-11 09:18:21.910695506 -0400
-@@ -628,6 +628,11 @@
-
- def _child(self, path):
- # Avoid running lintian as root
-+ try:
-+ os.setgroups([self.transaction.gid])
-+ except OSError:
-+ pass
-+ os.setgid(self.transaction.gid)
- os.setuid(self.transaction.uid)
-
- if platform.dist()[1] == "debian":
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/worker/aptworker.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/worker/aptworker.py 2015-06-11 09:18:21.910695506 -0400
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/worker/aptworker.py 2015-06-11 09:18:21.910695506 -0400
-@@ -91,6 +91,25 @@
- """
-
-
-+@contextlib.contextmanager
-+def set_euid_egid(uid, gid):
-+ # no need to drop privs
-+ if os.getuid() != 0 and os.getgid() != 0:
-+ yield
-+ return
-+ # temporary drop privs
-+ os.setegid(gid)
-+ old_groups = os.getgroups()
-+ os.setgroups([gid])
-+ os.seteuid(uid)
-+ try:
-+ yield
-+ finally:
-+ os.seteuid(os.getuid())
-+ os.setegid(os.getgid())
-+ os.setgroups(old_groups)
-+
-+
- def trans_only_installs_pkgs_from_high_trust_repos(trans,
- whitelist=set()):
- """Return True if this transaction only touches packages in the
-@@ -1199,8 +1218,16 @@
-
- :returns: An apt.debfile.Debfile instance.
- """
-- if not os.path.isfile(path):
-- raise TransactionFailed(ERROR_UNREADABLE_PACKAGE_FILE, path)
-+ # This code runs as root for simulate and simulate requires no
-+ # authentication - so we need to ensure we do not leak information
-+ # about files here (LP: #1449587, CVE-2015-1323)
-+ #
-+ # Note that the actual lintian run is also droping privs (real,
-+ # not just seteuid)
-+ with set_euid_egid(trans.uid, trans.gid):
-+ if not os.path.isfile(path):
-+ raise TransactionFailed(ERROR_UNREADABLE_PACKAGE_FILE, path)
-+
- if not force and os.path.isfile("/usr/bin/lintian"):
- with DaemonLintianProgress(trans) as progress:
- progress.run(path)
-Index: aptdaemon-1.1.1+bzr982/tests/test_high_trust_repository_whitelist.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/tests/test_high_trust_repository_whitelist.py 2015-06-11 09:18:21.910695506 -0400
-+++ aptdaemon-1.1.1+bzr982/tests/test_high_trust_repository_whitelist.py 2015-06-11 09:18:21.910695506 -0400
-@@ -115,7 +115,7 @@
- ("Ubuntu", "", "silly.*"))
- # a high-trust whitelisted pkg and a non-whitelisted one
- trans = Transaction(None, enums.ROLE_INSTALL_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[["silly-base", "other-pkg"], [], [], [],
- [], []])
-@@ -127,7 +127,7 @@
- trans, self.worker._high_trust_repositories))
- # whitelisted only
- trans = Transaction(None, enums.ROLE_INSTALL_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[["silly-base"], [], [], [], [], []])
- self.worker.simulate(trans)
-Index: aptdaemon-1.1.1+bzr982/tests/test_worker.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/tests/test_worker.py 2015-06-11 09:18:21.910695506 -0400
-+++ aptdaemon-1.1.1+bzr982/tests/test_worker.py 2015-06-11 09:18:21.910695506 -0400
-@@ -77,7 +77,8 @@
- self.chroot.add_repository("/does/not/exist", copy_list=False)
- # Only update the repository from the working snippet
- trans = Transaction(None, enums.ROLE_UPDATE_CACHE,
-- self.queue, os.getpid(), os.getuid(), sys.argv[0],
-+ self.queue, os.getpid(), os.getuid(),
-+ os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- kwargs={"sources_list": "test.list"})
- self.worker.simulate(trans)
-@@ -99,7 +100,7 @@
- "silly-base_0.1-0_all.deb"))
- # Install the package
- trans = Transaction(None, enums.ROLE_UPGRADE_SYSTEM,
-- self.queue, os.getpid(),
-+ self.queue, os.getpid(), os.getgid(),
- os.getuid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- kwargs={"safe_mode": False})
-@@ -130,7 +131,7 @@
- self.chroot.add_test_repository(copy_sig=False)
- # Install the package
- trans = Transaction(None, enums.ROLE_INSTALL_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[["silly-base"], [], [], [], [], []])
- self.worker.simulate(trans)
-@@ -144,7 +145,7 @@
-
- # Allow installation of unauthenticated packages
- trans = Transaction(None, enums.ROLE_INSTALL_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[["silly-base"], [], [], [], [], []])
- trans.allow_unauthenticated = True
-@@ -164,7 +165,7 @@
- self.chroot.add_test_repository()
- # Install the package
- trans = Transaction(None, enums.ROLE_INSTALL_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[["silly-depend-base"], [], [], [],
- [], []])
-@@ -193,7 +194,7 @@
- Architecture: all
- Auto-Installed: 1""")
- trans = Transaction(None, enums.ROLE_REMOVE_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[[], [], ["silly-depend-base"], [],
- [], []])
-@@ -219,7 +220,7 @@
- "silly-depend-base_0.1-0_all.deb"]:
- self.chroot.install_debfile(os.path.join(REPO_PATH, pkg))
- trans = Transaction(None, enums.ROLE_REMOVE_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[[], [], ["silly-base"], [], [], []])
- self.worker.simulate(trans)
-@@ -240,7 +241,7 @@
- pass
- # Don't allow to remove essential packages
- trans = Transaction(None, enums.ROLE_REMOVE_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[[], [], ["silly-essential"], [], [], []])
- self.worker.run(trans)
-@@ -263,7 +264,7 @@
- Architecture: all
- Auto-Installed: 1""")
- trans = Transaction(None, enums.ROLE_COMMIT_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[[], [], [], [],
- ["silly-base=0.1-0update1"], []])
-@@ -283,7 +284,7 @@
- pkg = os.path.join(REPO_PATH, "silly-base_0.1-0update1_all.deb")
- self.chroot.install_debfile(pkg)
- trans = Transaction(None, enums.ROLE_COMMIT_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[[], [], [], [], [],
- ["silly-base=0.1-0"]])
-@@ -301,7 +302,7 @@
- for pkg in ["silly-base_0.1-0_all.deb", "silly-config_0.1-0_all.deb"]:
- self.chroot.install_debfile(os.path.join(REPO_PATH, pkg))
- trans = Transaction(None, enums.ROLE_REMOVE_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- packages=[[], [], [], ["silly-config"], [], []])
- self.worker.run(trans)
-@@ -324,7 +325,7 @@
- pkg = os.path.join(REPO_PATH,
- "silly-depend-base-lintian-broken_0.1-0_all.deb")
- trans = Transaction(None, enums.ROLE_INSTALL_FILE, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- kwargs={"path": os.path.join(REPO_PATH, pkg),
- "force": False})
-@@ -359,7 +360,7 @@
- self.chroot.install_debfile(os.path.join(REPO_PATH, pkg_base))
- pkg = os.path.join(REPO_PATH, "silly-bully_0.1-0_all.deb")
- trans = Transaction(None, enums.ROLE_INSTALL_FILE, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- kwargs={"path": os.path.join(REPO_PATH, pkg),
- "force": True})
-@@ -379,7 +380,7 @@
- """
- pkg = os.path.join(REPO_PATH, "silly-base_0.1-0_all.deb")
- trans = Transaction(None, enums.ROLE_INSTALL_FILE, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
- kwargs={"path": os.path.join(REPO_PATH, pkg),
- "force": True})
-@@ -400,7 +401,7 @@
- for pkg in ["silly-base_0.1-0_all.deb", "silly-broken_0.1-0_all.deb"]:
- self.chroot.install_debfile(os.path.join(REPO_PATH, pkg), True)
- trans = Transaction(None, enums.ROLE_FIX_BROKEN_DEPENDS, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False)
- self.worker.simulate(trans)
- self.loop.run()
-@@ -420,7 +421,7 @@
- """
- self.chroot.add_test_repository()
- trans = Transaction(None, enums.ROLE_COMMIT_PACKAGES, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test",
- packages=[["silly-broken"], [], [], [], [], []],
- connect=False)
-@@ -459,7 +460,7 @@
-
- self.chroot.add_test_repository()
- trans = Transaction(None, enums.ROLE_ADD_LICENSE_KEY, self.queue,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test",
- kwargs={"pkg_name": "silly-license",
- "json_token": "lalelu",
-Index: aptdaemon-1.1.1+bzr982/tests/_test_py2_string_handling.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/tests/_test_py2_string_handling.py 2012-12-29 18:40:46.000000000 -0500
-+++ aptdaemon-1.1.1+bzr982/tests/_test_py2_string_handling.py 2015-06-11 09:47:02.608070571 -0400
-@@ -49,7 +49,8 @@
- self.start_dbus_daemon()
- self.dbus = dbus.bus.BusConnection(self.dbus_address)
- self.trans = Transaction(None, "role-test", None,
-- os.getpid(), os.getuid(), sys.argv[0],
-+ os.getpid(), os.getuid(), os.getgid(),
-+ sys.argv[0],
- "org.debian.apt.test", bus=self.dbus)
-
- def test(self):
diff --git a/debian/patches/lp1487087.diff b/debian/patches/lp1487087.diff
deleted file mode 100644
index fdab301..0000000
--- a/debian/patches/lp1487087.diff
+++ /dev/null
@@ -1,21 +0,0 @@
-Description: .assert_called() is not a valid mock method, and its presence
- masks a failing test. Under Python 3.5, an AttributeError is raised whereas
- in earlier Python's this just silently passed. Since the intent of the test
- can't be determined, for now just skip it. We don't use @unittest.skip
- though because there is apparently some test leakage, so that if this entire
- test is skipped, other tests fail.
-Author: Barry Warsaw <barry@ubuntu.com>
-Bug: https://bugs.launchpad.net/aptdaemon/+bug/1487087
-
---- a/tests/test_high_trust_repository_whitelist.py
-+++ b/tests/test_high_trust_repository_whitelist.py
-@@ -96,7 +96,8 @@
- "data/high-trust-repository-whitelist-broken.cfg"))
- self.assertEqual(whitelist, set())
- # ensure we log a error if the config file is broken
-- mock_log.error.assert_called()
-+ # Skip due to LP: #1487087
-+ #mock_log.error.assert_called()
-
- @patch("aptdaemon.worker.log")
- def test_read_high_trust_repository_whitelist_not_there(self, mock_log):
diff --git a/debian/patches/lp1623856-window-height.patch b/debian/patches/lp1623856-window-height.patch
deleted file mode 100644
index a042895..0000000
--- a/debian/patches/lp1623856-window-height.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Description: Set the minimum scrolled window height
-Author: Martin Wimpress
-Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1623856
-
-=== modified file 'aptdaemon/gtk3widgets.py'
---- a/aptdaemon/gtk3widgets.py
-+++ b/aptdaemon/gtk3widgets.py
-@@ -338,6 +338,7 @@
- self.download_scrolled.set_policy(Gtk.PolicyType.NEVER,
- Gtk.PolicyType.AUTOMATIC)
- self.download_scrolled.add(self.download_view)
-+ self.download_scrolled.set_min_content_height(200)
- hbox = Gtk.HBox()
- hbox.pack_start(self.download_scrolled, True, True, 0)
- if self.terminal:
diff --git a/debian/patches/lp1689668-config-file-window.patch b/debian/patches/lp1689668-config-file-window.patch
deleted file mode 100644
index 15d05c5..0000000
--- a/debian/patches/lp1689668-config-file-window.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/gtk3widgets.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/gtk3widgets.py
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/gtk3widgets.py
-@@ -1066,7 +1066,7 @@ class AptConfigFileConflictDialog(_Expan
- "the configuration file?") % from_path
- msg = _("If you don't know why the file is there already, it is "
- "usually safe to replace it.")
-- scrolled = Gtk.ScrolledWindow()
-+ scrolled = Gtk.ScrolledWindow(hexpand=True, vexpand=True)
- scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
- scrolled.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
- self.diffview = DiffView()
diff --git a/debian/patches/lp1690541-details-open-twice.patch b/debian/patches/lp1690541-details-open-twice.patch
deleted file mode 100644
index 329515f..0000000
--- a/debian/patches/lp1690541-details-open-twice.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: aptdaemon-1.1.1+bzr982/aptdaemon/gtk3widgets.py
-===================================================================
---- aptdaemon-1.1.1+bzr982.orig/aptdaemon/gtk3widgets.py
-+++ aptdaemon-1.1.1+bzr982/aptdaemon/gtk3widgets.py
-@@ -395,6 +395,7 @@ class AptTerminal(Vte.Terminal):
- self._master, self._slave = pty.openpty()
- self._ttyname = os.ttyname(self._slave)
- self.set_size(80, 24)
-+ self.set_vexpand(True)
- self.set_pty(Vte.Pty.new_foreign_sync(self._master))
- if transaction is not None:
- self.set_transaction(transaction)
diff --git a/debian/patches/native-arch.patch b/debian/patches/native-arch.patch
deleted file mode 100644
index a0c37fa..0000000
--- a/debian/patches/native-arch.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Description: Fix NATIVE_ARCH not being defined
-Author: Justin McPherson <justin.mcpherson@canonical.com>
-Forwarded: https://code.launchpad.net/~justinmcp/aptdaemon/1352654/+merge/243354
-
-Index: b/aptdaemon/pkcompat.py
-===================================================================
---- a/aptdaemon/pkcompat.py
-+++ b/aptdaemon/pkcompat.py
-@@ -392,7 +392,7 @@
- distro, version, _codename = platform.dist()
- self._distro_id = "%s;%s;%s" % (distro or "unknown",
- version or "unknown",
-- NATIVE_ARCH)
-+ self.queue.worker.NATIVE_ARCH)
- return self._distro_id
-
- def _on_network_state_changed(self, mon, state):
diff --git a/debian/patches/pep8-accommodations.diff b/debian/patches/pep8-accommodations.diff
deleted file mode 100644
index 68ee5e4..0000000
--- a/debian/patches/pep8-accommodations.diff
+++ /dev/null
@@ -1,35 +0,0 @@
-Description: Various accommodations so that the PEP 8 tests don't cause
- autopkgtests to fail. These include fixing the --exclude argument, adding
- more files to the exclude pattern, and ignoring E402, which is bogus; see
- https://github.com/PyCQA/pep8/issues/394. I also fixed one legitimate
- looking violation.
-Author: Barry Warsaw <barry@ubuntu.com>
-Bug: https://bugs.launchpad.net/aptdaemon/+bug/1486646
-
---- a/tests/test_pep8.py
-+++ b/tests/test_pep8.py
-@@ -30,9 +30,11 @@
-
- def test(self):
- """Check if the source code matches the PEP8 style conventions."""
-- subprocess.check_call(["pep8", "--statistics", "--show-source",
-- "--show-pep8", "--exclude", "pkenums.py",
-- "aptdaemon", "tests"])
-+ subprocess.check_call([
-+ "pep8", "--statistics", "--show-source",
-+ "--show-pep8", "--exclude",
-+ "pkenums.py,aptdaemon,tests,debian,doc,.pc,gtk3-demo.py,setup.py",
-+ "--ignore=E402"])
-
-
- if __name__ == "__main__":
---- a/apport/aptdaemon.py
-+++ b/apport/aptdaemon.py
-@@ -28,6 +28,7 @@
-
- apt_pkg.init()
-
-+
- def add_info(report):
- """Collect and append additional information about a crash.
-
diff --git a/debian/patches/pk-debconf-helper.patch b/debian/patches/pk-debconf-helper.patch
deleted file mode 100644
index 9e672c7..0000000
--- a/debian/patches/pk-debconf-helper.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Description: Use PackageKit debconf socket
-Author: Julian Andres Klode <julian.klode@canonical.com>
-Bug-Ubuntu: https://bugs.launchpad.net/bugs/1726068
-Last-Update: 2019-05-24 <YYYY-MM-DD, last update of the meta-information, optional>
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
---- a/aptdaemon/client.py
-+++ b/aptdaemon/client.py
-@@ -888,6 +888,16 @@ class AptTransaction(GObject.Object):
- _reply_handler = lambda: reply_handler(self)
- else:
- _reply_handler = None
-+
-+ pk_socket = "/run/user/%d/pk-debconf-socket" % os.getuid()
-+ if os.path.exists(pk_socket):
-+ self._proxy.Set("org.debian.apt.transaction", "DebconfSocket",
-+ pk_socket,
-+ dbus_interface=dbus.PROPERTIES_IFACE,
-+ reply_handler=_reply_handler,
-+ error_handler=error_handler)
-+ return
-+
- self._debconf_helper = debconf.DebconfProxy(frontend)
- self._proxy.Set("org.debian.apt.transaction", "DebconfSocket",
- self._debconf_helper.socket_path,
---- a/aptdaemon/core.py
-+++ b/aptdaemon/core.py
-@@ -368,7 +368,11 @@ class Transaction(DBusObject):
- self.pid = pid
- self.http_proxy = dbus.String("")
- self.terminal = dbus.String("")
-- self.debconf = dbus.String("")
-+ pk_socket = "/run/user/%d/pk-debconf-socket" % self.uid
-+ if os.path.exists(pk_socket):
-+ self.debconf = dbus.String(pk_socket)
-+ else:
-+ self.debconf = dbus.String("")
- self.kwargs = kwargs
- self._translation = None
- # The transaction which should be executed after this one
diff --git a/debian/patches/pk1.1.1_compat.patch b/debian/patches/pk1.1.1_compat.patch
deleted file mode 100644
index a744413..0000000
--- a/debian/patches/pk1.1.1_compat.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From: Michael Vogt <mvo@ubuntu.com>
-Subject: Remove API that is no longer available in PK 1.1.1
-
----
- aptdaemon/worker/pkworker.py | 6 ------
- 1 file changed, 6 deletions(-)
-
---- a/aptdaemon/worker/pkworker.py
-+++ b/aptdaemon/worker/pkworker.py
-@@ -172,8 +172,6 @@
- pk.RoleEnum.GET_UPDATE_DETAIL,
- pk.RoleEnum.GET_PACKAGES,
- pk.RoleEnum.GET_DETAILS,
-- pk.RoleEnum.GET_DEPENDS,
-- pk.RoleEnum.GET_REQUIRES,
- pk.RoleEnum.SEARCH_NAME,
- pk.RoleEnum.SEARCH_DETAILS,
- pk.RoleEnum.SEARCH_GROUP,
-@@ -289,10 +287,6 @@
- self.search_details(trans, **trans.kwargs)
- elif trans.pktrans.role == pk.RoleEnum.SEARCH_FILE:
- self.search_files(trans, **trans.kwargs)
-- elif trans.pktrans.role == pk.RoleEnum.GET_DEPENDS:
-- self.get_depends(trans, **trans.kwargs)
-- elif trans.pktrans.role == pk.RoleEnum.GET_REQUIRES:
-- self.get_requires(trans, **trans.kwargs)
- elif trans.pktrans.role == pk.RoleEnum.GET_DETAILS:
- self.get_details(trans, **trans.kwargs)
- elif trans.pktrans.role == pk.RoleEnum.DOWNLOAD_PACKAGES:
diff --git a/debian/patches/py3_inheritable.patch b/debian/patches/py3_inheritable.patch
deleted file mode 100644
index f642733..0000000
--- a/debian/patches/py3_inheritable.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-=== modified file 'aptdaemon/progress.py'
---- a/aptdaemon/progress.py 2014-02-07 20:40:15 +0000
-+++ b/aptdaemon/progress.py 2014-04-11 11:58:33 +0000
-@@ -395,6 +395,9 @@
- self.last_activity = 0
- self.child_pid = 0
- self.status_parent_fd, self.status_child_fd = os.pipe()
-+ if hasattr(os, "set_inheritable"):
-+ os.set_inheritable(self.status_parent_fd, True)
-+ os.set_inheritable(self.status_child_fd, True)
- self.output = ""
- self._line_buffer = ""
-
-
diff --git a/debian/patches/python3.7-compat.patch b/debian/patches/python3.7-compat.patch
deleted file mode 100644
index 867c6d2..0000000
--- a/debian/patches/python3.7-compat.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-Description: do not use 'async' as a variable name
- It is a keyword in Python 3.7.
-Author: Michael Hudson-Doyle <michael.hudson@ubuntu.com>
-Origin: vendor
-Last-Update: 2018-08-02
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
---- a/aptdaemon/client.py
-+++ b/aptdaemon/client.py
-@@ -1567,17 +1567,17 @@
-
- def _run_transaction(self, method_name, args, wait, reply_handler,
- error_handler):
-- async = reply_handler and error_handler
-+ async_ = reply_handler and error_handler
- try:
- deferred = self._run_transaction_helper(method_name, args, wait,
-- async)
-+ async_)
- except Exception as error:
-- if async:
-+ if async_:
- error_handler(error)
- return
- else:
- raise
-- if async:
-+ if async_:
- def on_error(error):
- """Convert the DeferredException to a normal exception."""
- try:
-@@ -1609,10 +1609,10 @@
- return trans
-
- @defer.inline_callbacks
-- def _run_transaction_helper(self, method_name, args, wait, async):
-+ def _run_transaction_helper(self, method_name, args, wait, async_):
- daemon = get_aptdaemon(self.bus)
- dbus_method = daemon.get_dbus_method(method_name)
-- if async:
-+ if async_:
- deferred = defer.Deferred()
- dbus_method(reply_handler=deferred.callback,
- error_handler=deferred.errback, *args,
-@@ -1626,7 +1626,7 @@
- if self.terminal:
- yield trans.set_terminal(self.terminal)
- yield trans.sync()
-- if wait and async:
-+ if wait and async_:
- deferred_wait = defer.Deferred()
- sig = trans.connect("finished",
- lambda trans, exit:
diff --git a/debian/patches/remove-lintian-scanning-of-local-packages.patch b/debian/patches/remove-lintian-scanning-of-local-packages.patch
deleted file mode 100644
index 64f20a4..0000000
--- a/debian/patches/remove-lintian-scanning-of-local-packages.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-From: Michael Hudson-Doyle <michael.hudson@canonical.com>
-Date: Thu, 1 Aug 2019 12:13:07 +1200
-Subject: Remove lintian scanning of local packages.
-
-lintian has changed in Debian in ways that break this feature and
-removing it seems like a better use of time than fixing it.
----
- aptdaemon/progress.py | 30 +-----------------------------
- aptdaemon/worker/aptworker.py | 12 ------------
- setup.py | 4 ----
- tests/test_pk.py | 6 +++---
- tests/test_worker.py | 14 ++------------
- 5 files changed, 6 insertions(+), 60 deletions(-)
-
-diff --git a/aptdaemon/progress.py b/aptdaemon/progress.py
-index 0a0cd7b..5312c5a 100644
---- a/aptdaemon/progress.py
-+++ b/aptdaemon/progress.py
-@@ -14,8 +14,7 @@ __author__ = "Sebastian Heinlein <devel@glatzor.de>"
-
- __all__ = ("DaemonAcquireProgress", "DaemonOpenProgress",
- "DaemonInstallProgress", "DaemonDpkgInstallProgress",
-- "DaemonForkProgress", "DaemonDpkgRecoverProgress",
-- "DaemonLintianProgress")
-+ "DaemonForkProgress", "DaemonDpkgRecoverProgress")
-
- import locale
- import logging
-@@ -622,33 +621,6 @@ class DaemonForkProgress(object):
- return False
-
-
--class DaemonLintianProgress(DaemonForkProgress):
--
-- """Performs a lintian call."""
--
-- def _child(self, path):
-- # Avoid running lintian as root
-- try:
-- os.setgroups([self.transaction.gid])
-- except OSError:
-- pass
-- os.setgid(self.transaction.gid)
-- os.setuid(self.transaction.uid)
--
-- if platform.dist()[1] == "debian":
-- profile = "debian/aptdaemon"
-- else:
-- profile = "ubuntu/aptdaemon"
-- # If HOME isn't set lintian won't try to load user profiles
-- os.unsetenv("HOME")
--
-- lintian_path = apt_pkg.config.find_file("Dir::Bin::Lintian",
-- "/usr/bin/lintian")
-- os.execlp(lintian_path, lintian_path, "--no-cfg", "--fail-on-warnings",
-- "--profile", profile, path)
-- os._exit(1)
--
--
- class DaemonInstallProgress(DaemonForkProgress):
-
- """Progress to execute APT package operations in a child process."""
-diff --git a/aptdaemon/worker/aptworker.py b/aptdaemon/worker/aptworker.py
-index 5211365..d936e10 100644
---- a/aptdaemon/worker/aptworker.py
-+++ b/aptdaemon/worker/aptworker.py
-@@ -66,7 +66,6 @@ from ..progress import (
- DaemonDpkgInstallProgress,
- DaemonDpkgReconfigureProgress,
- DaemonDpkgRecoverProgress,
-- DaemonLintianProgress,
- DaemonForkProgress)
-
- log = logging.getLogger("AptDaemon.Worker")
-@@ -1230,21 +1229,10 @@ class AptWorker(BaseWorker):
- # This code runs as root for simulate and simulate requires no
- # authentication - so we need to ensure we do not leak information
- # about files here (LP: #1449587, CVE-2015-1323)
-- #
-- # Note that the actual lintian run is also droping privs (real,
-- # not just seteuid)
- with set_euid_egid(trans.uid, trans.gid):
- if not os.path.isfile(path):
- raise TransactionFailed(ERROR_UNREADABLE_PACKAGE_FILE, path)
-
-- if not force and os.path.isfile("/usr/bin/lintian"):
-- with DaemonLintianProgress(trans) as progress:
-- progress.run(path)
-- # FIXME: Add an error to catch return state 2 (failure)
-- if progress._child_exit != 0:
-- raise TransactionFailed(ERROR_INVALID_PACKAGE_FILE,
-- "Lintian check results for %s:"
-- "\n%s" % (path, progress.output))
- try:
- deb = apt.debfile.DebPackage(path, self._cache)
- except IOError:
-diff --git a/setup.py b/setup.py
-index 45273df..c08cb5e 100755
---- a/setup.py
-+++ b/setup.py
-@@ -50,10 +50,6 @@ setup(name="aptdaemon",
- ("share/dbus-1/system-services/",
- ["data/org.debian.apt.service",
- "data/org.freedesktop.PackageKit.service"]),
-- ("share/lintian/profiles/ubuntu/",
-- ["data/lintian/ubuntu/aptdaemon.profile"]),
-- ("share/lintian/profiles/debian/",
-- ["data/lintian/debian/aptdaemon.profile"]),
- ("share/man/man1",
- ["doc/aptd.1", "doc/aptdcon.1"]),
- ("share/man/man7",
-diff --git a/tests/test_pk.py b/tests/test_pk.py
-index dd386b4..1c73632 100644
---- a/tests/test_pk.py
-+++ b/tests/test_pk.py
-@@ -119,9 +119,9 @@ class PackageKitTest(aptdaemon.test.AptDaemonTestCase):
- def test_install_files(self):
- """Test installing local package files."""
-
-- path_pkg_lintian_fail = os.path.join(
-+ path_pkg_config = os.path.join(
- REPO_PATH,
-- "silly-depend-base-lintian-broken_0.1-0_all.deb")
-+ "silly-config_.1-0_all.deb")
- path_pkg = os.path.join(
- REPO_PATH,
- "silly-depend-base_0.1-0_all.deb")
-@@ -131,7 +131,7 @@ class PackageKitTest(aptdaemon.test.AptDaemonTestCase):
- # Fail if more than package should be installed
- try:
- client.install_files(pk.TransactionFlagEnum.NONE,
-- [path_pkg_lintian_fail, path_pkg], None,
-+ [path_pkg_config, path_pkg], None,
- lambda p, t, d: True, None)
- except GLib.GError as error:
- self.assertTrue("Only one package" in error.message)
-diff --git a/tests/test_worker.py b/tests/test_worker.py
-index 474be13..e82ace0 100644
---- a/tests/test_worker.py
-+++ b/tests/test_worker.py
-@@ -315,15 +315,12 @@ Auto-Installed: 1""")
- "etc/silly-packages.cfg")),
- "Configuration file wasn't removed.")
-
-- @unittest.skipUnless(
-- os.path.exists('/usr/share/lintian/profiles/debian/aptdaemon.profile'),
-- 'this test needs aptdaemon installed, for the lintian profiles')
- def test_install_file(self):
- """Test the installation of a local package file."""
- # test
- self.chroot.add_test_repository()
- pkg = os.path.join(REPO_PATH,
-- "silly-depend-base-lintian-broken_0.1-0_all.deb")
-+ "silly-depend-base_0.1-0_all.deb")
- trans = Transaction(None, enums.ROLE_INSTALL_FILE, self.queue,
- os.getpid(), os.getuid(), os.getgid(), sys.argv[0],
- "org.debian.apt.test", connect=False,
-@@ -331,13 +328,6 @@ Auto-Installed: 1""")
- "force": False})
- self.worker.simulate(trans)
- self.loop.run()
-- self.assertIn("wrong-file-owner-uid-or-gid", trans.error.details)
-- self.assertEqual(trans.error.code, enums.ERROR_INVALID_PACKAGE_FILE,
-- "Lintian failed to detect a broken package")
-- # Now allow to install invalid packages
-- trans.kwargs["force"] = True
-- self.worker.simulate(trans)
-- self.loop.run()
- self.assertEqual(trans.depends[enums.PKGS_INSTALL],
- ["silly-base=0.1-0update1"])
- self.assertTrue(trans.space > 0)
-@@ -347,7 +337,7 @@ Auto-Installed: 1""")
- "%s: %s" % (trans._error_property[0],
- trans._error_property[1]))
- self.worker._cache.open()
-- pkg = self.worker._cache["silly-depend-base-lintian-broken"]
-+ pkg = self.worker._cache["silly-depend-base"]
- self.assertTrue(pkg.is_installed)
-
- def test_install_conflicting_file(self):
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index 0202a08..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1,33 +0,0 @@
-fix-high-trust-pkcompat.diff
-dbus_timeout.patch
-py3_inheritable.patch
-lp1356823.diff
-lp1449587.diff
-pep8-accommodations.diff
-lp1487087.diff
-fix-installation.patch
-native-arch.patch
-key_value_typo.patch
-lintian_deprecated_error.patch
-lp1439769-aptdaemon-autoinstall.patch
-drop_pkcompat.patch
-pk1.1.1_compat.patch
-lp1623856-window-height.patch
-lp1689668-config-file-window.patch
-lp1690541-details-open-twice.patch
-python3.7-compat.patch
-do-not-raise-stopiteration.patch
-pk-debconf-helper.patch
-failing-tests.patch
-frontend-locking.patch
-lock-is-held-typo.patch
-fix-dependency-solving.patch
-remove-lintian-scanning-of-local-packages.patch
-allow-unauthenticated.patch
-apport-report.patch
-CVE-2020-15703.patch
-test-with-timeout.patch
-CVE-2020-16128.patch
-CVE-2020-27349.patch
-fix-some-deprecated-code.patch
-gdk-gtk-versions.py
diff --git a/debian/patches/test-with-timeout.patch b/debian/patches/test-with-timeout.patch
deleted file mode 100644
index 8a51396..0000000
--- a/debian/patches/test-with-timeout.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Description: Run tests with a timeout
- Tests are getting stuck for almost 3 hours because we race somewhere and end up
- getting stuck waiting for calls that never happen.
-Author: Julian Andres Klode <juliank@ubuntu.com>
---- a/aptdaemon/test.py
-+++ b/aptdaemon/test.py
-@@ -223,7 +223,7 @@ class AptDaemonTestCase(unittest.TestCas
- path = "/usr/sbin/aptd"
- else:
- path = os.path.join(dir, "../aptd")
-- cmd = ["python3", path, "--disable-timeout", "--disable-plugins",
-+ cmd = ["python3", path, "--disable-plugins",
- "--chroot", chroot]
- if debug:
- cmd.append("--debug")