mirror of
https://github.com/rpm-software-management/tito.git
synced 2025-02-23 20:22:46 +00:00
Refactor to just one config object.
Instead of passing package specific and global config around separately, parse them as one config object where package specific can override global should the same sections and properties exist. If you maintain custom builders/releasers, they will need to have their constructors updated.
This commit is contained in:
parent
a73c90cbf5
commit
35c51ba7a3
12 changed files with 154 additions and 134 deletions
|
@ -17,9 +17,9 @@ from tito.release import *
|
|||
class DummyReleaser(Releaser):
|
||||
|
||||
def __init__(self, name=None, version=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None):
|
||||
Releaser.__init__(self, name, version, tag, build_dir, pkg_config,
|
||||
global_config, user_config)
|
||||
config=None, user_config=None):
|
||||
Releaser.__init__(self, name, version, tag, build_dir,
|
||||
config, user_config)
|
||||
pass
|
||||
|
||||
def release(self, dry_run=False):
|
||||
|
|
|
@ -34,18 +34,18 @@ class ExternalSourceBuilder(ConfigObject, BuilderBase):
|
|||
REQUIRED_ARGS = []
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
BuilderBase.__init__(self, name=name, build_dir=build_dir,
|
||||
pkg_config=pkg_config, global_config=global_config,
|
||||
config=config,
|
||||
user_config=user_config, args=args, **kwargs)
|
||||
|
||||
if tag:
|
||||
error_out("ExternalSourceBuilder does not support building "
|
||||
"specific tags.")
|
||||
|
||||
if not pkg_config.has_option("externalsourcebuilder",
|
||||
if not config.has_option("externalsourcebuilder",
|
||||
"source_strategy"):
|
||||
error_out("ExternalSourceBuilder requires [externalsourcebuilder] source_strategy in tito.props.")
|
||||
|
||||
|
@ -58,7 +58,7 @@ class ExternalSourceBuilder(ConfigObject, BuilderBase):
|
|||
self._create_build_dirs()
|
||||
|
||||
print("Fetching sources...")
|
||||
source_strat_class = get_class_by_name(self.pkg_config.get(
|
||||
source_strat_class = get_class_by_name(self.config.get(
|
||||
'externalsourcebuilder', 'source_strategy'))
|
||||
source_strat = source_strat_class(self)
|
||||
source_strat.fetch()
|
||||
|
|
|
@ -44,7 +44,7 @@ class BuilderBase(object):
|
|||
"""
|
||||
# TODO: merge config into an object and kill the ConfigObject parent class
|
||||
def __init__(self, name=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
# Project directory where we started this build:
|
||||
|
@ -54,7 +54,7 @@ class BuilderBase(object):
|
|||
self.user_config = user_config
|
||||
self.args = args
|
||||
self.kwargs = kwargs
|
||||
self.pkg_config = pkg_config
|
||||
self.config = config
|
||||
|
||||
# Optional keyword arguments:
|
||||
self.dist = self._get_optional_arg(kwargs, 'dist', None)
|
||||
|
@ -266,7 +266,7 @@ class Builder(ConfigObject, BuilderBase):
|
|||
|
||||
# TODO: drop version
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
"""
|
||||
|
@ -278,9 +278,7 @@ class Builder(ConfigObject, BuilderBase):
|
|||
|
||||
build_dir - Temporary build directory where we can safely work.
|
||||
|
||||
pkg_config - Package specific configuration.
|
||||
|
||||
global_config - Global configuration from rel-eng/tito.props.
|
||||
config - Merged configuration. (global plus package specific)
|
||||
|
||||
user_config - User configuration from ~/.titorc.
|
||||
|
||||
|
@ -289,8 +287,9 @@ class Builder(ConfigObject, BuilderBase):
|
|||
entry. Only for things which vary on invocations of the builder,
|
||||
avoid using these if possible.
|
||||
"""
|
||||
ConfigObject.__init__(self, pkg_config=pkg_config, global_config=global_config)
|
||||
BuilderBase.__init__(self, name=name, build_dir=build_dir, pkg_config=pkg_config, global_config=global_config, user_config=user_config, args=args, **kwargs)
|
||||
ConfigObject.__init__(self, config=config)
|
||||
BuilderBase.__init__(self, name=name, build_dir=build_dir, config=config,
|
||||
user_config=user_config, args=args, **kwargs)
|
||||
self.build_tag = tag
|
||||
|
||||
self.build_version = self._get_build_version()
|
||||
|
@ -514,12 +513,12 @@ class NoTgzBuilder(Builder):
|
|||
"""
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
Builder.__init__(self, name=name, tag=tag,
|
||||
build_dir=build_dir, pkg_config=pkg_config,
|
||||
global_config=global_config, user_config=user_config,
|
||||
build_dir=build_dir, config=config,
|
||||
user_config=user_config,
|
||||
args=args, **kwargs)
|
||||
|
||||
# When syncing files with CVS, copy everything from git:
|
||||
|
@ -580,12 +579,12 @@ class GemBuilder(NoTgzBuilder):
|
|||
"""
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
NoTgzBuilder.__init__(self, name=name, tag=tag,
|
||||
build_dir=build_dir, pkg_config=pkg_config,
|
||||
global_config=global_config, user_config=user_config,
|
||||
build_dir=build_dir, config=config,
|
||||
user_config=user_config,
|
||||
args=args, **kwargs)
|
||||
|
||||
def _setup_sources(self):
|
||||
|
@ -637,12 +636,12 @@ class CvsBuilder(NoTgzBuilder):
|
|||
"""
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
NoTgzBuilder.__init__(self, name=name, tag=tag,
|
||||
build_dir=build_dir, pkg_config=pkg_config,
|
||||
global_config=global_config, user_config=user_config,
|
||||
build_dir=build_dir, config=config,
|
||||
user_config=user_config,
|
||||
args=args, **kwargs)
|
||||
|
||||
# TODO: Hack to override here, patches are in a weird place with this
|
||||
|
@ -745,20 +744,20 @@ class UpstreamBuilder(NoTgzBuilder):
|
|||
"""
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
NoTgzBuilder.__init__(self, name=name, tag=tag,
|
||||
build_dir=build_dir, pkg_config=pkg_config,
|
||||
global_config=global_config, user_config=user_config,
|
||||
build_dir=build_dir, config=config,
|
||||
user_config=user_config,
|
||||
args=args, **kwargs)
|
||||
|
||||
if not pkg_config or not pkg_config.has_option("buildconfig",
|
||||
if not config or not config.has_option("buildconfig",
|
||||
"upstream_name"):
|
||||
# No upstream_name defined, assume we're keeping the project name:
|
||||
self.upstream_name = self.project_name
|
||||
else:
|
||||
self.upstream_name = pkg_config.get("buildconfig", "upstream_name")
|
||||
self.upstream_name = config.get("buildconfig", "upstream_name")
|
||||
# Need to assign these after we've exported a copy of the spec file:
|
||||
self.upstream_version = None
|
||||
self.upstream_tag = None
|
||||
|
@ -955,17 +954,17 @@ class MockBuilder(Builder):
|
|||
REQUIRED_ARGS = ['mock']
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
# Mock builders need to use the packages normally configured builder
|
||||
# to get at a proper SRPM:
|
||||
self.normal_builder = create_builder(name, tag, version, pkg_config,
|
||||
build_dir, global_config, user_config, args, **kwargs)
|
||||
self.normal_builder = create_builder(name, tag, version, config,
|
||||
build_dir, user_config, args, **kwargs)
|
||||
|
||||
Builder.__init__(self, name=name, tag=tag,
|
||||
build_dir=build_dir, pkg_config=pkg_config,
|
||||
global_config=global_config, user_config=user_config,
|
||||
build_dir=build_dir, config=config,
|
||||
user_config=user_config,
|
||||
args=args, **kwargs)
|
||||
|
||||
self.mock_tag = args['mock']
|
||||
|
@ -1058,12 +1057,12 @@ class BrewDownloadBuilder(Builder):
|
|||
REQUIRED_ARGS = ['disttag']
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
Builder.__init__(self, name=name, tag=tag,
|
||||
build_dir=build_dir, pkg_config=pkg_config,
|
||||
global_config=global_config, user_config=user_config,
|
||||
build_dir=build_dir, config=config,
|
||||
user_config=user_config,
|
||||
args=args, **kwargs)
|
||||
|
||||
self.brew_tag = 'meow' # args['brewtag']
|
||||
|
@ -1117,11 +1116,11 @@ class ExternalSourceBuilder(ConfigObject, BuilderBase):
|
|||
REQUIRED_ARGS = []
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
args=None, **kwargs):
|
||||
|
||||
BuilderBase.__init__(self, name=name, build_dir=build_dir,
|
||||
pkg_config=pkg_config, global_config=global_config,
|
||||
config=config,
|
||||
user_config=user_config, args=args, **kwargs)
|
||||
|
||||
if tag:
|
||||
|
|
|
@ -107,9 +107,8 @@ class BaseCliModule(object):
|
|||
|
||||
def __init__(self, usage):
|
||||
self.parser = OptionParser(usage)
|
||||
self.global_config = None
|
||||
self.config = None
|
||||
self.options = None
|
||||
self.pkg_config = None
|
||||
self.user_config = read_user_config()
|
||||
|
||||
self._add_common_options()
|
||||
|
@ -148,18 +147,19 @@ class BaseCliModule(object):
|
|||
print(self.parser.error("Must supply an argument. "
|
||||
"Try -h for help."))
|
||||
|
||||
self.global_config = self._read_global_config()
|
||||
if self.global_config.has_option(GLOBALCONFIG_SECTION,
|
||||
self.config = self._read_config()
|
||||
if self.config.has_option(GLOBALCONFIG_SECTION,
|
||||
"offline"):
|
||||
self.options.offline = True
|
||||
|
||||
# TODO: Not ideal:
|
||||
if self.options.debug:
|
||||
os.environ['DEBUG'] = "true"
|
||||
|
||||
# Check if global config defines a custom lib dir:
|
||||
if self.global_config.has_option(GLOBALCONFIG_SECTION,
|
||||
if self.config.has_option(GLOBALCONFIG_SECTION,
|
||||
"lib_dir"):
|
||||
lib_dir = self.global_config.get(GLOBALCONFIG_SECTION,
|
||||
lib_dir = self.config.get(GLOBALCONFIG_SECTION,
|
||||
"lib_dir")
|
||||
if lib_dir[0] != '/':
|
||||
# Looks like a relative path, assume from the git root:
|
||||
|
@ -172,19 +172,29 @@ class BaseCliModule(object):
|
|||
print("WARNING: lib_dir specified but does not exist: %s" %
|
||||
lib_dir)
|
||||
|
||||
def _read_global_config(self):
|
||||
def _read_config(self):
|
||||
"""
|
||||
Read global build.py configuration from the rel-eng dir of the git
|
||||
repository we're being run from.
|
||||
|
||||
NOTE: We always load the latest config file, not tito.props as it
|
||||
was for the tag being operated on.
|
||||
"""
|
||||
# List of filepaths to config files we'll be loading:
|
||||
rel_eng_dir = os.path.join(find_git_root(), "rel-eng")
|
||||
filename = os.path.join(rel_eng_dir, GLOBAL_BUILD_PROPS_FILENAME)
|
||||
if not os.path.exists(filename):
|
||||
# HACK: Try the old filename location, pre-tito rename:
|
||||
oldfilename = os.path.join(rel_eng_dir, "global.build.py.props")
|
||||
if not os.path.exists(oldfilename):
|
||||
if os.path.exists(oldfilename):
|
||||
filename = oldfilename
|
||||
else:
|
||||
error_out("Unable to locate branch configuration: %s"
|
||||
"\nPlease run 'tito init'" % filename)
|
||||
|
||||
# Load the global config. Later, when we know what tag/package we're
|
||||
# building, we may also load that and potentially override some global
|
||||
# settings.
|
||||
config = ConfigParser.ConfigParser()
|
||||
config.read(filename)
|
||||
|
||||
|
@ -216,8 +226,12 @@ class BaseCliModule(object):
|
|||
the presence of a Makefile with NO_TAR_GZ, and include a hack to
|
||||
assume build properties in this scenario.
|
||||
|
||||
If we can find project specific config, we return the path to that
|
||||
config file, and a boolean indicating if that file needs to be cleaned
|
||||
up after reading.
|
||||
|
||||
If no project specific config can be found, settings come from the
|
||||
global tito.props in rel-eng/.
|
||||
global tito.props in rel-eng/, and we return None as the filepath.
|
||||
"""
|
||||
debug("Determined package name to be: %s" % project_name)
|
||||
debug("build_dir = %s" % build_dir)
|
||||
|
@ -283,20 +297,17 @@ class BaseCliModule(object):
|
|||
wrote_temp_file = True
|
||||
|
||||
# TODO: can we parse config from a string and stop writing temp files?
|
||||
config = ConfigParser.ConfigParser()
|
||||
if properties_file != None:
|
||||
debug("Using build properties: %s" % properties_file)
|
||||
config.read(properties_file)
|
||||
debug("Using package specific properties: %s" % properties_file)
|
||||
self.config.read(properties_file)
|
||||
else:
|
||||
debug("Unable to locate custom build properties for this package.")
|
||||
debug(" Using global.tito.props")
|
||||
|
||||
# TODO: Not thrilled with this:
|
||||
if wrote_temp_file and not no_cleanup:
|
||||
# Delete the temp properties file we created.
|
||||
run_command("rm %s" % properties_file)
|
||||
|
||||
return config
|
||||
|
||||
def _validate_options(self):
|
||||
"""
|
||||
|
@ -379,7 +390,7 @@ class BuildModule(BaseCliModule):
|
|||
if self.options.release:
|
||||
error_out("'tito build --release' is now deprecated. Please see 'tito release'.")
|
||||
|
||||
self.pkg_config = self._read_project_config(package_name, build_dir,
|
||||
self._read_project_config(package_name, build_dir,
|
||||
self.options.tag, self.options.no_cleanup)
|
||||
|
||||
args = self._parse_builder_args()
|
||||
|
@ -394,8 +405,8 @@ class BuildModule(BaseCliModule):
|
|||
}
|
||||
|
||||
builder = create_builder(package_name, build_tag,
|
||||
self.pkg_config,
|
||||
build_dir, self.global_config, self.user_config, args,
|
||||
self.config,
|
||||
build_dir, self.user_config, args,
|
||||
builder_class=self.options.builder, **kwargs)
|
||||
return builder.run(self.options)
|
||||
|
||||
|
@ -513,7 +524,7 @@ class ReleaseModule(BaseCliModule):
|
|||
"""
|
||||
|
||||
# Handle cvs:
|
||||
if self.global_config.has_section('cvs') and not \
|
||||
if self.config.has_section('cvs') and not \
|
||||
releaser_config.has_section("cvs"):
|
||||
print("WARNING: legacy 'cvs' section in tito.props, please "
|
||||
"consider creating a target in releasers.conf.")
|
||||
|
@ -521,12 +532,12 @@ class ReleaseModule(BaseCliModule):
|
|||
releaser_config.add_section('cvs')
|
||||
releaser_config.set('cvs', 'releaser', 'tito.release.CvsReleaser')
|
||||
for opt in ["cvsroot", "branches"]:
|
||||
if self.global_config.has_option("cvs", opt):
|
||||
releaser_config.set('cvs', opt, self.global_config.get(
|
||||
if self.config.has_option("cvs", opt):
|
||||
releaser_config.set('cvs', opt, self.config.get(
|
||||
"cvs", opt))
|
||||
|
||||
# Handle koji:
|
||||
if self.global_config.has_section("koji") and not \
|
||||
if self.config.has_section("koji") and not \
|
||||
releaser_config.has_section("koji"):
|
||||
print("WARNING: legacy 'koji' section in tito.props, please "
|
||||
"consider creating a target in releasers.conf.")
|
||||
|
@ -534,7 +545,7 @@ class ReleaseModule(BaseCliModule):
|
|||
releaser_config.add_section('koji')
|
||||
releaser_config.set('koji', 'releaser', 'tito.release.KojiReleaser')
|
||||
releaser_config.set('koji', 'autobuild_tags',
|
||||
self.global_config.get('koji', 'autobuild_tags'))
|
||||
self.config.get('koji', 'autobuild_tags'))
|
||||
|
||||
# TODO: find a way to get koji builds going through the new release
|
||||
# target config file, tricky as each koji tag gets it's own
|
||||
|
@ -542,8 +553,8 @@ class ReleaseModule(BaseCliModule):
|
|||
# target.
|
||||
|
||||
#for opt in ["autobuild_tags", "disttag", "whitelist", "blacklist"]:
|
||||
# if self.global_config.has_option("koji", opt):
|
||||
# releaser_config.set('koji', opt, self.global_config.get(
|
||||
# if self.config.has_option("koji", opt):
|
||||
# releaser_config.set('koji', opt, self.config.get(
|
||||
# "koji", opt))
|
||||
|
||||
def _print_releasers(self, releaser_config):
|
||||
|
@ -589,7 +600,7 @@ class ReleaseModule(BaseCliModule):
|
|||
|
||||
build_tag = self.options.tag
|
||||
|
||||
self.pkg_config = self._read_project_config(package_name, build_dir,
|
||||
self._read_project_config(package_name, build_dir,
|
||||
self.options.tag, self.options.no_cleanup)
|
||||
|
||||
orig_cwd = os.getcwd()
|
||||
|
@ -606,8 +617,7 @@ class ReleaseModule(BaseCliModule):
|
|||
name=package_name,
|
||||
tag=build_tag,
|
||||
build_dir=build_dir,
|
||||
pkg_config=self.pkg_config,
|
||||
global_config=self.global_config,
|
||||
config=self.config,
|
||||
user_config=self.user_config,
|
||||
target=target,
|
||||
releaser_config=releaser_config,
|
||||
|
@ -661,7 +671,7 @@ class TagModule(BaseCliModule):
|
|||
def main(self, argv):
|
||||
BaseCliModule.main(self, argv)
|
||||
|
||||
if self.global_config.has_option(GLOBALCONFIG_SECTION,
|
||||
if self.config.has_option(GLOBALCONFIG_SECTION,
|
||||
"block_tagging"):
|
||||
debug("block_tagging defined in tito.props")
|
||||
error_out("Tagging has been disabled in this git branch.")
|
||||
|
@ -669,23 +679,22 @@ class TagModule(BaseCliModule):
|
|||
build_dir = os.path.normpath(os.path.abspath(self.options.output_dir))
|
||||
package_name = get_project_name(tag=None)
|
||||
|
||||
self.pkg_config = self._read_project_config(package_name, build_dir,
|
||||
self._read_project_config(package_name, build_dir,
|
||||
None, None)
|
||||
|
||||
tagger_class = None
|
||||
if self.options.use_version:
|
||||
tagger_class = get_class_by_name("tito.tagger.ForceVersionTagger")
|
||||
elif self.pkg_config.has_option("buildconfig", "tagger"):
|
||||
tagger_class = get_class_by_name(self.pkg_config.get("buildconfig",
|
||||
elif self.config.has_option("buildconfig", "tagger"):
|
||||
tagger_class = get_class_by_name(self.config.get("buildconfig",
|
||||
"tagger"))
|
||||
else:
|
||||
tagger_class = get_class_by_name(self.global_config.get(
|
||||
tagger_class = get_class_by_name(self.config.get(
|
||||
GLOBALCONFIG_SECTION, DEFAULT_TAGGER))
|
||||
debug("Using tagger class: %s" % tagger_class)
|
||||
|
||||
tagger = tagger_class(global_config=self.global_config,
|
||||
user_config=self.user_config,
|
||||
pkg_config=self.pkg_config,
|
||||
tagger = tagger_class(config=self.config,
|
||||
user_config=self.user_config,
|
||||
keep_version=self.options.keep_version,
|
||||
offline=self.options.offline)
|
||||
|
||||
|
@ -788,15 +797,15 @@ class ReportModule(BaseCliModule):
|
|||
BaseCliModule.main(self, argv)
|
||||
|
||||
if self.options.untagged_report:
|
||||
self._run_untagged_report(self.global_config)
|
||||
self._run_untagged_report(self.config)
|
||||
sys.exit(1)
|
||||
|
||||
if self.options.untagged_commits:
|
||||
self._run_untagged_commits(self.global_config)
|
||||
self._run_untagged_commits(self.config)
|
||||
sys.exit(1)
|
||||
return []
|
||||
|
||||
def _run_untagged_commits(self, global_config):
|
||||
def _run_untagged_commits(self, config):
|
||||
"""
|
||||
Display a report of all packages with differences between HEAD and
|
||||
their most recent tag, as well as a patch for that diff. Used to
|
||||
|
@ -820,9 +829,9 @@ class ReportModule(BaseCliModule):
|
|||
relative_dir = ""
|
||||
|
||||
project_dir = os.path.join(git_root, relative_dir)
|
||||
self._print_log(global_config, md_file, version, project_dir)
|
||||
self._print_log(config, md_file, version, project_dir)
|
||||
|
||||
def _run_untagged_report(self, global_config):
|
||||
def _run_untagged_report(self, config):
|
||||
"""
|
||||
Display a report of all packages with differences between HEAD and
|
||||
their most recent tag, as well as a patch for that diff. Used to
|
||||
|
@ -846,10 +855,10 @@ class ReportModule(BaseCliModule):
|
|||
relative_dir = ""
|
||||
|
||||
project_dir = os.path.join(git_root, relative_dir)
|
||||
self._print_diff(global_config, md_file, version, project_dir,
|
||||
self._print_diff(config, md_file, version, project_dir,
|
||||
relative_dir)
|
||||
|
||||
def _print_log(self, global_config, package_name, version, project_dir):
|
||||
def _print_log(self, config, package_name, version, project_dir):
|
||||
"""
|
||||
Print the log between the most recent package tag and HEAD, if
|
||||
necessary.
|
||||
|
@ -867,7 +876,7 @@ class ReportModule(BaseCliModule):
|
|||
except:
|
||||
print("%s no longer exists" % project_dir)
|
||||
|
||||
def _print_diff(self, global_config, package_name, version,
|
||||
def _print_diff(self, config, package_name, version,
|
||||
full_project_dir, relative_project_dir):
|
||||
"""
|
||||
Print a diff between the most recent package tag and HEAD, if
|
||||
|
|
|
@ -114,7 +114,7 @@ def error_out(error_msgs):
|
|||
|
||||
|
||||
def create_builder(package_name, build_tag,
|
||||
pkg_config, build_dir, global_config, user_config, args,
|
||||
config, build_dir, user_config, args,
|
||||
builder_class=None, **kwargs):
|
||||
"""
|
||||
Create (but don't run) the builder class. Builder object may be
|
||||
|
@ -127,12 +127,12 @@ def create_builder(package_name, build_tag,
|
|||
|
||||
if builder_class is None:
|
||||
debug("---- Builder class is None")
|
||||
if pkg_config.has_option("buildconfig", "builder"):
|
||||
builder_class = get_class_by_name(pkg_config.get("buildconfig",
|
||||
if config.has_option("buildconfig", "builder"):
|
||||
builder_class = get_class_by_name(config.get("buildconfig",
|
||||
"builder"))
|
||||
else:
|
||||
debug("---- Global config")
|
||||
builder_class = get_class_by_name(global_config.get(
|
||||
builder_class = get_class_by_name(config.get(
|
||||
GLOBALCONFIG_SECTION, DEFAULT_BUILDER))
|
||||
else:
|
||||
# We were given an explicit builder class as a str, get the actual
|
||||
|
@ -145,8 +145,7 @@ def create_builder(package_name, build_tag,
|
|||
name=package_name,
|
||||
tag=build_tag,
|
||||
build_dir=build_dir,
|
||||
pkg_config=pkg_config,
|
||||
global_config=global_config,
|
||||
config=config,
|
||||
user_config=user_config,
|
||||
args=args,
|
||||
**kwargs)
|
||||
|
|
|
@ -22,21 +22,19 @@ class ConfigObject(object):
|
|||
Perent class for Builder and Tagger with shared code
|
||||
"""
|
||||
|
||||
def __init__(self, pkg_config=None, global_config=None):
|
||||
def __init__(self, config=None):
|
||||
"""
|
||||
pkg_config - Package specific configuration.
|
||||
config - Merged configuration. (global plus package specific)
|
||||
"""
|
||||
self.config = config
|
||||
|
||||
global_config - Global configuration from rel-eng/tito.props.
|
||||
"""
|
||||
self.config = global_config
|
||||
|
||||
# Override global configurations using local configurations
|
||||
for section in pkg_config.sections():
|
||||
for options in pkg_config.options(section):
|
||||
for section in config.sections():
|
||||
for options in config.options(section):
|
||||
if not self.config.has_section(section):
|
||||
self.config.add_section(section)
|
||||
self.config.set(section, options,
|
||||
pkg_config.get(section, options))
|
||||
config.get(section, options))
|
||||
|
||||
self.git_root = find_git_root()
|
||||
self.rel_eng_dir = os.path.join(self.git_root, "rel-eng")
|
||||
|
|
|
@ -26,10 +26,10 @@ class CoprReleaser(KojiReleaser):
|
|||
NAME = "Copr"
|
||||
|
||||
def __init__(self, name=None, version=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
target=None, releaser_config=None, no_cleanup=False, test=False, auto_accept=False):
|
||||
KojiReleaser.__init__(self, name, version, tag, build_dir, pkg_config,
|
||||
global_config, user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
KojiReleaser.__init__(self, name, version, tag, build_dir, config,
|
||||
user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
|
||||
self.copr_project_name = \
|
||||
self.releaser_config.get(self.target, "project_name")
|
||||
|
|
|
@ -13,9 +13,9 @@ class DistributionBuilder(UpstreamBuilder):
|
|||
Patch1: foo-1.2.13-2-to-foo-1.2.13-3-sat.patch
|
||||
"""
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None, args=None, **kwargs):
|
||||
UpstreamBuilder.__init__(self, name, tag, build_dir, pkg_config,
|
||||
global_config, user_config, args, **kwargs)
|
||||
config=None, user_config=None, args=None, **kwargs):
|
||||
UpstreamBuilder.__init__(self, name, tag, build_dir, config,
|
||||
user_config, args, **kwargs)
|
||||
self.patch_files = []
|
||||
|
||||
def patch_upstream(self):
|
||||
|
|
|
@ -28,10 +28,10 @@ class ObsReleaser(Releaser):
|
|||
cli_tool = "osc"
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
target=None, releaser_config=None, no_cleanup=False, test=False, auto_accept=False):
|
||||
Releaser.__init__(self, name, tag, build_dir, pkg_config,
|
||||
global_config, user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
Releaser.__init__(self, name, tag, build_dir,
|
||||
user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
|
||||
self.obs_project_name = \
|
||||
self.releaser_config.get(self.target, "project_name")
|
||||
|
|
|
@ -62,10 +62,10 @@ class Releaser(ConfigObject):
|
|||
OPTIONAL_CONFIG = []
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
target=None, releaser_config=None, no_cleanup=False, test=False, auto_accept=False):
|
||||
|
||||
ConfigObject.__init__(self, pkg_config=pkg_config, global_config=global_config)
|
||||
ConfigObject.__init__(self, config=config)
|
||||
self.builder_args = self._parse_builder_args(releaser_config, target)
|
||||
if test:
|
||||
self.builder_args['test'] = True # builder must know to build from HEAD
|
||||
|
@ -73,8 +73,8 @@ class Releaser(ConfigObject):
|
|||
# While we create a builder here, we don't actually call run on it
|
||||
# unless the releaser needs to:
|
||||
self.builder = create_builder(name, tag,
|
||||
pkg_config,
|
||||
build_dir, global_config, user_config, self.builder_args)
|
||||
config,
|
||||
build_dir, user_config, self.builder_args)
|
||||
self.project_name = self.builder.project_name
|
||||
|
||||
# TODO: if it looks like we need custom CVSROOT's for different users,
|
||||
|
@ -287,11 +287,11 @@ class RsyncReleaser(Releaser):
|
|||
rsync_args = "-rlvz"
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
target=None, releaser_config=None, no_cleanup=False, test=False, auto_accept=False,
|
||||
prefix="temp_dir="):
|
||||
Releaser.__init__(self, name, tag, build_dir, pkg_config,
|
||||
global_config, user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
Releaser.__init__(self, name, tag, build_dir, config,
|
||||
user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
|
||||
self.build_dir = build_dir
|
||||
self.prefix = prefix
|
||||
|
@ -299,8 +299,8 @@ class RsyncReleaser(Releaser):
|
|||
# Use the builder from the release target, rather than the default
|
||||
# one defined for this git repo or sub-package:
|
||||
self.builder = create_builder(name, tag,
|
||||
pkg_config,
|
||||
build_dir, global_config, user_config, self.builder_args,
|
||||
config,
|
||||
build_dir, user_config, self.builder_args,
|
||||
builder_class=self.releaser_config.get(self.target, 'builder'))
|
||||
if self.releaser_config.has_option(self.target, "scl"):
|
||||
self.builder.scl = self.releaser_config.get(self.target, "scl")
|
||||
|
@ -405,10 +405,10 @@ class YumRepoReleaser(RsyncReleaser):
|
|||
createrepo_command = "createrepo ."
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
target=None, releaser_config=None, no_cleanup=False, test=False, auto_accept=False):
|
||||
RsyncReleaser.__init__(self, name, tag, build_dir, pkg_config,
|
||||
global_config, user_config, target, releaser_config, no_cleanup, test, auto_accept,
|
||||
RsyncReleaser.__init__(self, name, tag, build_dir, config,
|
||||
user_config, target, releaser_config, no_cleanup, test, auto_accept,
|
||||
prefix="yumrepo-")
|
||||
|
||||
def _read_rpm_header(self, ts, new_rpm_path):
|
||||
|
@ -473,10 +473,10 @@ class FedoraGitReleaser(Releaser):
|
|||
cli_tool = "fedpkg"
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
target=None, releaser_config=None, no_cleanup=False, test=False, auto_accept=False):
|
||||
Releaser.__init__(self, name, tag, build_dir, pkg_config,
|
||||
global_config, user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
Releaser.__init__(self, name, tag, build_dir, config,
|
||||
user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
|
||||
self.git_branches = \
|
||||
self.releaser_config.get(self.target, "branches").split(" ")
|
||||
|
@ -750,10 +750,10 @@ class CvsReleaser(Releaser):
|
|||
REQUIRED_CONFIG = ['cvsroot', 'branches']
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
target=None, releaser_config=None, no_cleanup=False, test=False, auto_accept=False):
|
||||
Releaser.__init__(self, name, tag, build_dir, pkg_config,
|
||||
global_config, user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
Releaser.__init__(self, name, tag, build_dir, config,
|
||||
user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
|
||||
self.package_workdir = os.path.join(self.working_dir,
|
||||
self.project_name)
|
||||
|
@ -995,10 +995,10 @@ class KojiReleaser(Releaser):
|
|||
NAME = "Koji"
|
||||
|
||||
def __init__(self, name=None, tag=None, build_dir=None,
|
||||
pkg_config=None, global_config=None, user_config=None,
|
||||
config=None, user_config=None,
|
||||
target=None, releaser_config=None, no_cleanup=False, test=False, auto_accept=False):
|
||||
Releaser.__init__(self, name, tag, build_dir, pkg_config,
|
||||
global_config, user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
Releaser.__init__(self, name, tag, build_dir, config,
|
||||
user_config, target, releaser_config, no_cleanup, test, auto_accept)
|
||||
|
||||
self.only_tags = []
|
||||
if 'ONLY_TAGS' in os.environ:
|
||||
|
|
|
@ -46,13 +46,8 @@ class VersionTagger(ConfigObject):
|
|||
and the actual RPM "release" will always be set to 1.
|
||||
"""
|
||||
|
||||
def __init__(self, global_config=None, keep_version=False, offline=False, user_config=None, pkg_config=None):
|
||||
"""
|
||||
pkg_config - Package specific configuration.
|
||||
|
||||
global_config - Global configuration from rel-eng/tito.props.
|
||||
"""
|
||||
ConfigObject.__init__(self, pkg_config=pkg_config, global_config=global_config)
|
||||
def __init__(self, config=None, keep_version=False, offline=False, user_config=None):
|
||||
ConfigObject.__init__(self, config=config)
|
||||
self.user_config = user_config
|
||||
|
||||
self.full_project_dir = os.getcwd()
|
||||
|
|
|
@ -83,6 +83,26 @@ class MultiProjectTests(TitoGitTestFixture):
|
|||
index.add(['pkg2/tito.props'])
|
||||
index.commit("Adding tito.props for pkg2.")
|
||||
|
||||
def test_multi_config(self):
|
||||
c1 = "[s1]\na = 1\nb = 1\nc=1\n"
|
||||
c2 = "[s1]\na = 2\nb = 2\nd=1\n[s2]\ne=5\n"
|
||||
out_f = open(os.path.join(self.repo_dir, "1.props"), 'w')
|
||||
out_f.write(c1)
|
||||
out_f.close()
|
||||
out_f = open(os.path.join(self.repo_dir, "2.props"), 'w')
|
||||
out_f.write(c2)
|
||||
out_f.close()
|
||||
import ConfigParser
|
||||
config = ConfigParser.ConfigParser()
|
||||
config.read(os.path.join(self.repo_dir, "1.props"))
|
||||
config.read(os.path.join(self.repo_dir, "2.props"))
|
||||
self.assertEquals("2", config.get("s1", "a"))
|
||||
self.assertEquals("2", config.get("s1", "b"))
|
||||
self.assertEquals("1", config.get("s1", "c"))
|
||||
self.assertEquals("1", config.get("s1", "d"))
|
||||
self.assertEquals("5", config.get("s2", "e"))
|
||||
|
||||
|
||||
def test_template_version_tagger(self):
|
||||
"""
|
||||
Make sure the template is applied and results in the correct file
|
||||
|
|
Loading…
Add table
Reference in a new issue