/usr/share/PackageKit/helpers/aptcc/get-distro-upgrade.py is in packagekit-backend-aptcc 0.8.12-1ubuntu5.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | #!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Provides an apt backend to PackageKit
Copyright (C) 2007 Ali Sabil <ali.sabil@gmail.com>
Copyright (C) 2007 Tom Parker <palfrey@tevp.net>
Copyright (C) 2008-2009 Sebastian Heinlein <glatzor@ubuntu.com>
Copyright (C) 2010 Daniel Nicoletti <dantti12@gmail.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.
"""
import locale
import logging
import optparse
import time
from packagekit.backend import *
logging.basicConfig(format="%(levelname)s:%(message)s")
pklog = logging.getLogger("PackageKitBackend")
pklog.setLevel(logging.NOTSET)
# 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
DEFAULT_ENCODING = "UTF-8"
# Required to get translated descriptions
try:
locale.setlocale(locale.LC_ALL, "")
except locale.Error:
pklog.debug("Failed to unset LC_ALL")
# Required to parse RFC822 time stamps
try:
locale.setlocale(locale.LC_TIME, "C")
except locale.Error:
pklog.debug("Failed to unset LC_TIME")
class PackageKitAptccBackend(PackageKitBaseBackend):
"""
PackageKit backend for aptcc
"""
# Methods ( client -> engine -> backend )
def get_distro_upgrades(self):
"""
Implement the {backend}-get-distro-upgrades functionality
"""
pklog.info("Get distro upgrades")
self.status(STATUS_INFO)
self.allow_cancel(False)
self.percentage(None)
if META_RELEASE_SUPPORT == False:
return
#FIXME Evil to start the download during init
meta_release = MetaReleaseCore(False, False)
#FIXME: should use a lock
while meta_release.downloading:
time.sleep(1)
#FIXME: Add support for description
if meta_release.new_dist != None:
self.distro_upgrade(DISTRO_UPGRADE_STABLE,
meta_release.new_dist.name,
"%s %s" % (meta_release.new_dist.name,
meta_release.new_dist.version))
def _sigquit(self, signum, frame):
self._unlock_cache()
sys.exit(1)
def debug_exception(type, value, tb):
"""
Provides an interactive debugging session on unhandled exceptions
See http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65287
"""
if hasattr(sys, 'ps1') or not sys.stderr.isatty() or \
not sys.stdin.isatty() or not sys.stdout.isatty() or type==SyntaxError:
# Calls the default handler in interactive mode, if output isĀ·
# redirected or on syntax errors
sys.__excepthook__(type, value, tb)
else:
import traceback, pdb
traceback.print_exception(type, value, tb)
print()
pdb.pm()
def run(args, single=False):
"""
Start the apt backend
"""
backend = PackageKitAptccBackend("")
if single == True:
backend.dispatch_command(args[0], args[1:])
else:
backend.dispatcher(args)
def main():
parser = optparse.OptionParser(description="Aptcc backend for PackageKit")
parser.add_option("-r", "--root",
action="store", type="string", dest="root",
help="Use the given directory as the system root "
"(Only needed by developers)")
parser.add_option("-p", "--profile",
action="store", type="string", dest="profile",
help="Store profiling stats in the given file "
"(Only needed by developers)")
parser.add_option("-d", "--debug",
action="store_true", dest="debug",
help="Show a lot of additional information and drop to "
"a debugging console on unhandled exceptions "
"(Only needed by developers)")
parser.add_option("-s", "--single",
action="store_true", dest="single",
help="Only perform one command and don't listen on stdin "
"(Only needed by developers)")
(options, args) = parser.parse_args()
if options.debug:
pklog.setLevel(logging.DEBUG)
sys.excepthook = debug_exception
run(args, options.single)
if __name__ == '__main__':
main()
# vim: ts=4 et sts=4
|