[jhbuild] Move 'packagedb' from Buildscript into Moduleset
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [jhbuild] Move 'packagedb' from Buildscript into Moduleset
- Date: Mon, 18 Jul 2011 18:38:22 +0000 (UTC)
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]