~ubuntu-branches/ubuntu/lucid/landscape-client/lucid

« back to all changes in this revision

Viewing changes to landscape/manager/packagemanager.py

  • Committer: Bazaar Package Importer
  • Author(s): Free Ekanayaka
  • Date: 2009-12-16 10:50:05 UTC
  • mfrom: (1.2.2 upstream)
  • mto: This revision was merged to the branch mainline in revision 27.
  • Revision ID: james.westby@ubuntu.com-20091216105005-bmki8i2of1dmcdkc
Tags: 1.4.0-0ubuntu0.9.10.0
* New upstream release (LP: #497351)

* Bug fixes:
  - Fix landscape daemons fail to start when too many groups are
    available (LP: #456124)
  - Fix landscape programs wake up far too much. (LP: #340843)
  - Fix Package manager fails with 'no such table: task' (LP #465846)
  - Fix test suite leaving temporary files around (LP #476418)
  - Fix the 1hr long wait for user data to be uploaded following a
    resynchronisation (LP #369000)

* Add support for Ubuntu release upgrades:
  - Add helper function to fetch many files at once (LP: #450629)
  - Handle release-upgrade messages in the packagemanager
    plugin (LP: #455217)
  - Add a release-upgrader task handler (LP: #462543)
  - Support upgrade-tool environment variables (LP: #463321)

* Add initial support for Smart package locking:
  - Detect and report changes about Smart package locks (#488108)

* Packaging fixes:
  - Turn unnecessary Pre-Depends on python-gobject into a regular Depends
  - If it's empty, remove /etc/landscape upon purge

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
from twisted.internet.defer import succeed
6
6
 
7
7
from landscape.package.store import PackageStore
8
 
from landscape.package.changer import find_changer_command
 
8
from landscape.package.changer import PackageChanger
 
9
from landscape.package.releaseupgrader import ReleaseUpgrader
9
10
from landscape.manager.manager import ManagerPlugin
10
11
 
11
12
 
12
13
class PackageManager(ManagerPlugin):
13
14
 
14
15
    run_interval = 1800
15
 
 
16
 
    def __init__(self, package_store_filename=None):
17
 
        super(PackageManager, self).__init__()
18
 
        if package_store_filename:
19
 
            self._package_store = PackageStore(package_store_filename)
20
 
        else:
21
 
            self._package_store = None
22
 
        self._changer_command = find_changer_command()
 
16
    _package_store = None
23
17
 
24
18
    def register(self, registry):
25
19
        super(PackageManager, self).register(registry)
31
25
            self._package_store = PackageStore(filename)
32
26
 
33
27
        registry.register_message("change-packages",
34
 
                                  self._enqueue_message_as_changer_task)
 
28
                                  self.handle_change_packages)
 
29
        registry.register_message("release-upgrade",
 
30
                                  self.handle_release_upgrade)
35
31
 
36
32
        self.run()
37
33
 
38
 
    def _enqueue_message_as_changer_task(self, message):
39
 
        self._package_store.add_task("changer", message)
40
 
        self.spawn_changer()
 
34
    def _handle(self, cls, message):
 
35
        """Queue C{message} as a task, and spawn the proper handler."""
 
36
        self._package_store.add_task(cls.queue_name, message)
 
37
        self.spawn_handler(cls)
 
38
 
 
39
    def handle_change_packages(self, message):
 
40
        return self._handle(PackageChanger, message)
 
41
 
 
42
    def handle_release_upgrade(self, message):
 
43
        return self._handle(ReleaseUpgrader, message)
41
44
 
42
45
    def run(self):
43
46
        result = self.registry.broker.get_accepted_message_types()
46
49
 
47
50
    def _got_message_types(self, message_types):
48
51
        if "change-packages-result" in message_types:
49
 
            self.spawn_changer()
 
52
            self.spawn_handler(PackageChanger)
 
53
        if "operation-result" in message_types:
 
54
            self.spawn_handler(ReleaseUpgrader)
50
55
 
51
 
    def spawn_changer(self):
 
56
    def spawn_handler(self, cls):
52
57
        args = ["--quiet"]
53
58
        if self.config.config:
54
59
            args.extend(["-c", self.config.config])
55
 
        if self._package_store.get_next_task("changer"):
 
60
        if self._package_store.get_next_task(cls.queue_name):
56
61
            # path is set to None so that getProcessOutput does not
57
62
            # chdir to "." see bug #211373
58
 
            result = getProcessOutput(self._changer_command,
 
63
            result = getProcessOutput(cls.find_command(),
59
64
                                      args=args, env=os.environ,
60
65
                                      errortoo=1,
61
66
                                      path=None)
62
 
            result.addCallback(self._got_changer_output)
 
67
            result.addCallback(self._got_output, cls)
63
68
        else:
64
69
            result = succeed(None)
65
70
        return result
66
71
 
67
 
    def _got_changer_output(self, output):
 
72
    def _got_output(self, output, cls):
68
73
        if output:
69
 
            logging.warning("Package changer output:\n%s" % output)
 
74
            logging.warning("Package %s output:\n%s" %
 
75
                            (cls.queue_name, output))