[jhbuild] Move 'packagedb' from Buildscript into Moduleset



commit 6c485ba87f799d68782da68eb0221c53bd575763
Author: Colin Walters <walters verbum org>
Date:   Mon Jul 18 13:50:43 2011 -0400

    Move 'packagedb' from Buildscript into Moduleset
    
    The moduleset needs access to the packagedb for issues such as (see bug 654855).

 jhbuild/commands/autobuild.py    |    2 +-
 jhbuild/commands/base.py         |   16 ++++++++--------
 jhbuild/commands/bot.py          |    5 +++--
 jhbuild/commands/clean.py        |    4 ++--
 jhbuild/commands/info.py         |    2 +-
 jhbuild/commands/tinderbox.py    |    2 +-
 jhbuild/commands/uninstall.py    |    4 ++--
 jhbuild/config.py                |    9 +++++++++
 jhbuild/frontends/__init__.py    |    4 ++--
 jhbuild/frontends/autobuild.py   |    4 ++--
 jhbuild/frontends/buildscript.py |   26 +++++---------------------
 jhbuild/frontends/gtkui.py       |    4 ++--
 jhbuild/frontends/terminal.py    |    4 ++--
 jhbuild/frontends/tinderbox.py   |    4 ++--
 jhbuild/modtypes/__init__.py     |    8 ++++----
 jhbuild/modtypes/autotools.py    |    2 +-
 jhbuild/modtypes/linux.py        |    2 +-
 jhbuild/modtypes/perl.py         |    2 +-
 jhbuild/modtypes/waf.py          |    2 +-
 jhbuild/moduleset.py             |    9 +++++++++
 20 files changed, 59 insertions(+), 56 deletions(-)
---
diff --git a/jhbuild/commands/autobuild.py b/jhbuild/commands/autobuild.py
index 9cd389c..f6c0423 100644
--- a/jhbuild/commands/autobuild.py
+++ b/jhbuild/commands/autobuild.py
@@ -80,7 +80,7 @@ class cmd_autobuild(Command):
             if not module_list:
                 raise FatalError(_('%s not in module list') % options.startat)
     
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build()
 
 register_command(cmd_autobuild)
diff --git a/jhbuild/commands/base.py b/jhbuild/commands/base.py
index af629c5..5817743 100644
--- a/jhbuild/commands/base.py
+++ b/jhbuild/commands/base.py
@@ -75,7 +75,7 @@ class cmd_update(Command):
         config.build_targets = ['checkout']
         config.nonetwork = False
 
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build()
 
 register_command(cmd_update)
@@ -109,7 +109,7 @@ class cmd_updateone(Command):
         config.build_targets = ['checkout']
         config.nonetwork = False
 
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build()
 
 register_command(cmd_updateone)
@@ -145,7 +145,7 @@ class cmd_cleanone(Command):
                     _('clean command called while makeclean is set to False, skipped.'))
             return 0
 
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build(phases=['clean'])
 
 register_command(cmd_cleanone)
@@ -160,7 +160,7 @@ def check_bootstrap_updateness(config):
     except:
         # failed to get bootstrap moduleset, silently ignore.
         return
-    packagedb = jhbuild.frontends.get_buildscript(config, []).packagedb
+    packagedb = module_set.packagedb
 
     max_install_date = max([
             packagedb.installdate(module.name)
@@ -289,7 +289,7 @@ class cmd_build(Command):
                     _('requested module is in the ignore list, nothing to do.'))
             return 0
 
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build()
 
 register_command(cmd_build)
@@ -363,7 +363,7 @@ class cmd_buildone(Command):
         if not module_list:
             self.parser.error(_('This command requires a module parameter.'))
 
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build()
 
 register_command(cmd_buildone)
@@ -407,7 +407,7 @@ class cmd_run(Command):
             except KeyError, e:
                 raise FatalError(_("A module called '%s' could not be found.") % e)
 
-            build = jhbuild.frontends.get_buildscript(config, module_list)
+            build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
             builddir = module_list[0].get_builddir(build)
             try:
                 build.execute(args, cwd=builddir)
@@ -424,7 +424,7 @@ class cmd_run(Command):
             except KeyError, e:
                 raise FatalError(_("A module called '%s' could not be found.") % e)
 
-            build = jhbuild.frontends.get_buildscript(config, module_list)
+            build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
             checkoutdir = module_list[0].get_srcdir(build)
             try:
                 build.execute(args, cwd=checkoutdir)
diff --git a/jhbuild/commands/bot.py b/jhbuild/commands/bot.py
index 20a4ca7..4a5a7ff 100644
--- a/jhbuild/commands/bot.py
+++ b/jhbuild/commands/bot.py
@@ -156,7 +156,8 @@ class cmd_bot(Command):
             if args[0] in ('update', 'build', 'check', 'clean'):
                 module_set = jhbuild.moduleset.load(config)
                 buildscript = jhbuild.frontends.get_buildscript(config,
-                        [module_set.get_module(x, ignore_case=True) for x in args[1:]])
+                        [module_set.get_module(x, ignore_case=True) for x in args[1:]],
+                                                                module_set=module_set)
                 phases = None
                 if args[0] == 'update':
                     config.nonetwork = False
@@ -191,7 +192,7 @@ class cmd_bot(Command):
     def setup(self, config):
         module_set = jhbuild.moduleset.load(config, 'buildbot')
         module_list = module_set.get_module_list('all', config.skip)
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build()
     
     def start(self, config, daemonize, pidfile, logfile):
diff --git a/jhbuild/commands/clean.py b/jhbuild/commands/clean.py
index 6384a51..d032cd0 100644
--- a/jhbuild/commands/clean.py
+++ b/jhbuild/commands/clean.py
@@ -55,14 +55,14 @@ class cmd_clean(Command):
                 raise FatalError(_('%s not in module list') % options.startat)
 
         # remove modules that are not marked as installed
-        packagedb = jhbuild.frontends.get_buildscript(config, []).packagedb
+        packagedb module_set.packagedb
         for module in module_list[:]:
             if not packagedb.check(module.name):
                 module_list.remove(module)
 
         config.nopoison = True
 
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build(phases=['clean'])
 
 register_command(cmd_clean)
diff --git a/jhbuild/commands/info.py b/jhbuild/commands/info.py
index 687cdc9..add4b92 100644
--- a/jhbuild/commands/info.py
+++ b/jhbuild/commands/info.py
@@ -41,8 +41,8 @@ class cmd_info(Command):
 
 
     def run(self, config, options, args, help=None):
-        packagedb = jhbuild.frontends.get_buildscript(config, []).packagedb
         module_set = jhbuild.moduleset.load(config)
+        packagedb = module_set.packagedb
 
         if args:
             for modname in args:
diff --git a/jhbuild/commands/tinderbox.py b/jhbuild/commands/tinderbox.py
index d22065d..5a43513 100644
--- a/jhbuild/commands/tinderbox.py
+++ b/jhbuild/commands/tinderbox.py
@@ -85,7 +85,7 @@ class cmd_tinderbox(Command):
             if not module_list:
                 raise FatalError(_('%s not in module list') % options.startat)
 
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build()
 
 register_command(cmd_tinderbox)
diff --git a/jhbuild/commands/uninstall.py b/jhbuild/commands/uninstall.py
index 988c516..949da0e 100644
--- a/jhbuild/commands/uninstall.py
+++ b/jhbuild/commands/uninstall.py
@@ -45,7 +45,7 @@ class cmd_uninstall(Command):
             self.parser.error(_('This command requires a module parameter.'))
 
         # remove modules that are not marked as installed
-        packagedb = jhbuild.frontends.get_buildscript(config, []).packagedb
+        packagedb = module_set.packagedb
         for module in module_list[:]:
             if not packagedb.check(module.name):
                 module_list.remove(module)
@@ -53,7 +53,7 @@ class cmd_uninstall(Command):
         config.nonetwork = True
         config.nopoison = True
 
-        build = jhbuild.frontends.get_buildscript(config, module_list)
+        build = jhbuild.frontends.get_buildscript(config, module_list, module_set=module_set)
         return build.build(phases=['uninstall'])
 
 register_command(cmd_uninstall)
diff --git a/jhbuild/config.py b/jhbuild/config.py
index a4c0c42..4efadc5 100644
--- a/jhbuild/config.py
+++ b/jhbuild/config.py
@@ -296,6 +296,15 @@ class Config:
             except:
                 raise FatalError(_('install prefix (%s) can not be created') % self.prefix)
 
+        if not os.path.isabs(self.top_builddir):
+            self.top_builddir = os.path.join(self.prefix, self.top_builddir)
+        if not os.path.exists(self.top_builddir):
+            try:
+                os.makedirs(self.top_builddir)
+            except OSError:
+                raise FatalError(
+                        _('working directory (%s) can not be created') % self.top_builddir)
+
         os.environ['JHBUILD_PREFIX'] = self.prefix
 
         os.environ['UNMANGLED_LD_LIBRARY_PATH'] = os.environ.get('LD_LIBRARY_PATH', '')
diff --git a/jhbuild/frontends/__init__.py b/jhbuild/frontends/__init__.py
index 064b302..72e87cc 100644
--- a/jhbuild/frontends/__init__.py
+++ b/jhbuild/frontends/__init__.py
@@ -19,8 +19,8 @@
 
 import sys
 
-def get_buildscript(config, module_list=None):
+def get_buildscript(config, module_list=None, module_set=None):
     modname = 'jhbuild.frontends.%s' % config.buildscript
     __import__(modname)
     BuildScript = sys.modules[modname].BUILD_SCRIPT
-    return BuildScript(config, module_list)
+    return BuildScript(config, module_list, module_set=module_set)
diff --git a/jhbuild/frontends/autobuild.py b/jhbuild/frontends/autobuild.py
index 8392bc5..7e6b32e 100644
--- a/jhbuild/frontends/autobuild.py
+++ b/jhbuild/frontends/autobuild.py
@@ -81,8 +81,8 @@ class AutobuildBuildScript(buildscript.BuildScript, TerminalBuildScript):
     xmlrpc_report_url = None
     verbose = False
 
-    def __init__(self, config, module_list):
-        buildscript.BuildScript.__init__(self, config, module_list)
+    def __init__(self, config, module_list, module_set=None):
+        buildscript.BuildScript.__init__(self, config, module_list, module_set=module_set)
         self.xmlrpc_report_url = config.autobuild_report_url
         self.verbose = config.verbose
         self.server = None
diff --git a/jhbuild/frontends/buildscript.py b/jhbuild/frontends/buildscript.py
index b281910..65f0094 100644
--- a/jhbuild/frontends/buildscript.py
+++ b/jhbuild/frontends/buildscript.py
@@ -21,17 +21,17 @@
 import os
 import logging
 
-from jhbuild.utils import packagedb
 from jhbuild.utils import trigger
 from jhbuild.utils import cmds
 from jhbuild.errors import FatalError, CommandError, SkipToPhase, SkipToEnd
 
 class BuildScript:
-    def __init__(self, config, module_list=None):
+    def __init__(self, config, module_list=None, module_set=None):
         if self.__class__ is BuildScript:
             raise NotImplementedError('BuildScript is an abstract base class')
 
         self.modulelist = module_list
+        self.moduleset = module_set
         self.module_num = 0
 
         self.config = config
@@ -40,15 +40,6 @@ class BuildScript:
         if not os.access(self.config.prefix, os.R_OK|os.W_OK|os.X_OK):
             raise FatalError(_('install prefix (%s) must be writable') % self.config.prefix)
 
-        if not os.path.isabs(self.config.top_builddir):
-            self.config.top_builddir = os.path.join(self.config.prefix, self.config.top_builddir)
-        if not os.path.exists(self.config.top_builddir):
-            try:
-                os.makedirs(self.config.top_builddir)
-            except OSError:
-                raise FatalError(
-                        _('working directory (%s) can not be created') % self.config.top_builddir)
-
         if not os.path.exists(self.config.checkoutroot):
             try:
                 os.makedirs(self.config.checkoutroot)
@@ -67,13 +58,6 @@ class BuildScript:
             if not os.access(self.config.copy_dir, os.R_OK|os.W_OK|os.X_OK):
                 raise FatalError(_('checkout copy dir (%s) must be writable') % self.config.copy_dir)
 
-        legacy_pkgdb_path = os.path.join(self.config.prefix, 'share', 'jhbuild', 'packagedb.xml')
-        new_pkgdb_path = os.path.join(self.config.top_builddir, 'packagedb.xml')
-        if os.path.isfile(legacy_pkgdb_path):
-            os.rename(legacy_pkgdb_path, new_pkgdb_path)
-
-        self.packagedb = packagedb.PackageDB(new_pkgdb_path)
-
         self.subprocess_nice_args = []
         if config.nice_build:
             if cmds.has_command('chrt'):
@@ -111,7 +95,7 @@ class BuildScript:
             self.module_num = self.module_num + 1
 
             if self.config.min_age is not None:
-                installdate = self.packagedb.installdate(module.name)
+                installdate = self.moduleset.packagedb.installdate(module.name)
                 if installdate > self.config.min_age:
                     self.message(_('Skipping %s (installed recently)') % module.name)
                     continue
@@ -236,9 +220,9 @@ class BuildScript:
         triggers_to_run = []
         for trig in all_triggers:
             # Skip if somehow the module isn't really installed
-            if self.packagedb.installdate(module_name) is None:
+            if self.moduleset.packagedb.installdate(module_name) is None:
                 continue
-            pkg = self.packagedb.entries[module_name]
+            pkg = self.moduleset.packagedb.entries[module_name]
 
             # Skip this if the packagedb doesn't have a manifest; this
             # can happen with old packagedb.xml files.
diff --git a/jhbuild/frontends/gtkui.py b/jhbuild/frontends/gtkui.py
index 3211367..52474c2 100644
--- a/jhbuild/frontends/gtkui.py
+++ b/jhbuild/frontends/gtkui.py
@@ -57,9 +57,9 @@ class AppWindow(gtk.Window, buildscript.BuildScript):
     error_resolution = None
     preference_dialog = None
 
-    def __init__(self, config, module_list=None):
+    def __init__(self, config, module_list=None, module_set=None):
         self.orig_modulelist = module_list
-        buildscript.BuildScript.__init__(self, config)
+        buildscript.BuildScript.__init__(self, config, module_list, module_set=module_set)
         self.config = config
         gtk.Window.__init__(self)
         self.set_resizable(False)
diff --git a/jhbuild/frontends/terminal.py b/jhbuild/frontends/terminal.py
index 31bb521..55e124c 100644
--- a/jhbuild/frontends/terminal.py
+++ b/jhbuild/frontends/terminal.py
@@ -80,8 +80,8 @@ class TerminalBuildScript(buildscript.BuildScript):
     triedcheckout = None
     is_end_of_build = False
 
-    def __init__(self, config, module_list):
-        buildscript.BuildScript.__init__(self, config, module_list)
+    def __init__(self, config, module_list, module_set=None):
+        buildscript.BuildScript.__init__(self, config, module_list, module_set=module_set)
         self.trayicon = trayicon.TrayIcon(config)
         self.notify = notify.Notify(config)
         
diff --git a/jhbuild/frontends/tinderbox.py b/jhbuild/frontends/tinderbox.py
index 5f684c4..3718cb9 100644
--- a/jhbuild/frontends/tinderbox.py
+++ b/jhbuild/frontends/tinderbox.py
@@ -159,8 +159,8 @@ class TinderboxBuildScript(buildscript.BuildScript):
     help_url = 'http://live.gnome.org/JhbuildIssues/'
     triedcheckout = None
 
-    def __init__(self, config, module_list):
-        buildscript.BuildScript.__init__(self, config, module_list)
+    def __init__(self, config, module_list, module_set=None):
+        buildscript.BuildScript.__init__(self, config, module_list, module_set=module_set)
         self.indexfp = None
         self.modulefp = None
 
diff --git a/jhbuild/modtypes/__init__.py b/jhbuild/modtypes/__init__.py
index b7fdcaf..63a9b5c 100644
--- a/jhbuild/modtypes/__init__.py
+++ b/jhbuild/modtypes/__init__.py
@@ -236,7 +236,7 @@ them into the prefix."""
 
         stripped_prefix = buildscript.config.prefix[1:]
 
-        buildscript.packagedb.add(self.name, revision or '', destdir)
+        buildscript.moduleset.packagedb.add(self.name, revision or '', destdir)
 
         install_succeeded = False
         save_broken_tree = False
@@ -324,7 +324,7 @@ them into the prefix."""
         if hasattr(self.branch, 'is_dirty') and self.branch.is_dirty():
             return
 
-        if not buildscript.packagedb.check(self.name, self.get_revision() or ''):
+        if not buildscript.moduleset.packagedb.check(self.name, self.get_revision() or ''):
             # package has not been updated
             return
 
@@ -334,9 +334,9 @@ them into the prefix."""
             return self.PHASE_DONE
 
         if buildscript.config.build_policy == 'updated-deps':
-            install_date = buildscript.packagedb.installdate(self.name)
+            install_date = buildscript.moduleset.packagedb.installdate(self.name)
             for dep in self.dependencies:
-                install_date_dep = buildscript.packagedb.installdate(dep)
+                install_date_dep = buildscript.moduleset.packagedb.installdate(dep)
                 if install_date_dep > install_date:
                     # a dependency has been updated
                     return None
diff --git a/jhbuild/modtypes/autotools.py b/jhbuild/modtypes/autotools.py
index ae05f19..d1a5cb0 100644
--- a/jhbuild/modtypes/autotools.py
+++ b/jhbuild/modtypes/autotools.py
@@ -296,7 +296,7 @@ class AutogenModule(Package, DownloadableModule):
     def do_uninstall(self, buildscript):
         buildscript.set_action(_('Uninstalling'), self)
         # Since we are supports_install_destdir = True, just delegate to packagedb
-        buildscript.packagedb.uninstall(self.name, buildscript)
+        buildscript.moduleset.packagedb.uninstall(self.name, buildscript)
 
     def xml_tag_and_attrs(self):
         return ('autotools',
diff --git a/jhbuild/modtypes/linux.py b/jhbuild/modtypes/linux.py
index 774f5e3..89be4f2 100644
--- a/jhbuild/modtypes/linux.py
+++ b/jhbuild/modtypes/linux.py
@@ -212,7 +212,7 @@ class LinuxModule(Package):
                     buildscript.config.prefix)
             buildscript.execute(cmd, cwd = self.branch.srcdir,
                     extra_env = self.extra_env)
-        buildscript.packagedb.add(self.name, self.get_revision() or '')
+        buildscript.moduleset.packagedb.add(self.name, self.get_revision() or '')
 
     do_headers_install.depends = [PHASE_BUILD]
     do_headers_install.error_phases = [PHASE_FORCE_CHECKOUT, PHASE_CONFIGURE]
diff --git a/jhbuild/modtypes/perl.py b/jhbuild/modtypes/perl.py
index 9238f04..074883e 100644
--- a/jhbuild/modtypes/perl.py
+++ b/jhbuild/modtypes/perl.py
@@ -70,7 +70,7 @@ class PerlModule(Package, DownloadableModule):
         buildscript.execute(
                 [make, 'install', 'PREFIX=%s' % buildscript.config.prefix],
                 cwd = builddir, extra_env = self.extra_env)
-        buildscript.packagedb.add(self.name, self.get_revision() or '')
+        buildscript.moduleset.packagedb.add(self.name, self.get_revision() or '')
     do_install.depends = [PHASE_BUILD]
 
     def xml_tag_and_attrs(self):
diff --git a/jhbuild/modtypes/waf.py b/jhbuild/modtypes/waf.py
index c9d5c88..8ff6ddd 100644
--- a/jhbuild/modtypes/waf.py
+++ b/jhbuild/modtypes/waf.py
@@ -136,7 +136,7 @@ class WafModule(Package, DownloadableModule):
         buildscript.set_action(_('Uninstalling'), self)
         cmd = [self.waf_cmd, 'uninstall']
         buildscript.execute(cmd, cwd=self.get_builddir(buildscript))
-        buildscript.packagedb.remove(self.name)
+        buildscript.moduleset.packagedb.remove(self.name)
     do_install.depends = [PHASE_BUILD]
 
     def xml_tag_and_attrs(self):
diff --git a/jhbuild/moduleset.py b/jhbuild/moduleset.py
index 98803cb..5459dcd 100644
--- a/jhbuild/moduleset.py
+++ b/jhbuild/moduleset.py
@@ -36,6 +36,7 @@ except ImportError:
 from jhbuild import modtypes
 from jhbuild.versioncontrol import get_repo_type
 from jhbuild.utils import httpcache
+from jhbuild.utils import packagedb
 from jhbuild.utils.cmds import compare_version, get_output
 from jhbuild.modtypes.testmodule import TestModule
 from jhbuild.versioncontrol.tarball import TarballBranch
@@ -51,6 +52,14 @@ class ModuleSet:
     def __init__(self, config = None):
         self.config = config
         self.modules = {}
+
+        legacy_pkgdb_path = os.path.join(self.config.prefix, 'share', 'jhbuild', 'packagedb.xml')
+        new_pkgdb_path = os.path.join(self.config.top_builddir, 'packagedb.xml')
+        if os.path.isfile(legacy_pkgdb_path):
+            os.rename(legacy_pkgdb_path, new_pkgdb_path)
+
+        self.packagedb = packagedb.PackageDB(new_pkgdb_path)
+
     def add(self, module):
         '''add a Module object to this set of modules'''
         self.modules[module.name] = module



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]