[tor-commits] [builders/rbm] 02/06: Bug 40028: Load projects config from modules
gitolite role
git at cupani.torproject.org
Fri Jul 1 09:33:00 UTC 2022
This is an automated email from the git hooks/post-receive script.
gk pushed a commit to branch master
in repository builders/rbm.
commit 278411fb12ef71b6f2973ce70669118748474124
Author: Nicolas Vigier <boklm at torproject.org>
AuthorDate: Mon Jun 27 15:40:21 2022 +0200
Bug 40028: Load projects config from modules
---
lib/RBM.pm | 31 ++++++++++++++++++++++++------
test.pl | 17 +++++++++++++++-
test/modules/module_1/projects/a/config | 1 +
test/modules/module_1/projects/m1_a/config | 2 ++
4 files changed, 44 insertions(+), 7 deletions(-)
diff --git a/lib/RBM.pm b/lib/RBM.pm
index 7e29d3e..ee987c8 100644
--- a/lib/RBM.pm
+++ b/lib/RBM.pm
@@ -90,6 +90,13 @@ sub load_modules_config {
my $cfile = "$d/$module/rbm.module.conf";
$config->{modules}{$module} = load_config_file($cfile)
if -f $cfile;
+ next unless -d "$d/$module/projects";
+ for my $project (map { $_->basename } path("$d/$module/projects")->children) {
+ next if $config->{projects}{$project};
+ next unless -f "$d/$module/projects/$project/config";
+ $config->{modules}{$module}{projects}{$project} =
+ load_config_file("$d/$module/projects/$project/config");
+ }
}
}
}
@@ -249,8 +256,17 @@ sub project_config {
$config->{opt} = { %{$config->{opt}}, %$options } if $options;
my @modules = map { [ 'modules', $_ ] }
sort keys %{ $config->{modules} };
+ my $project_path = ['projects', $project];
+ if (!$config->{projects}{$project}) {
+ for my $module (sort keys %{ $config->{modules} }) {
+ if ($config->{modules}{$module}{projects}{$project}) {
+ $project_path = [ 'modules', $module, 'projects', $project ];
+ last;
+ }
+ }
+ }
$res = config($project, $name, $options, ['opt', 'norec'], ['opt'],
- ['run'], ['projects', $project], ['local'], [],
+ ['run'], $project_path, ['local'], [],
@modules, ['system'], ['default']);
if (!$options->{no_tmpl} && defined($res) && !ref $res
&& !notmpl(confkey_str($name), $project)) {
@@ -381,8 +397,11 @@ sub valid_id {
sub valid_project {
my ($project) = @_;
- exists $config->{projects}{$project}
- || exit_error "Unknown project $project";
+ return 1 if $config->{projects}{$project};
+ for my $module (keys %{$config->{modules}}) {
+ return 1 if $config->{modules}{$module}{projects}{$project};
+ }
+ exit_error "Unknown project $project";
}
sub create_dir {
@@ -395,7 +414,7 @@ sub create_dir {
sub git_need_fetch {
my ($project, $options) = @_;
- return 0 if $config->{projects}{$project}{fetched};
+ return 0 if $config->{_rbm}{fetched_projects}{$project};
my $fetch = project_config($project, 'fetch', $options);
if ($fetch eq 'if_needed') {
my $git_hash = project_config($project, 'git_hash', $options)
@@ -440,13 +459,13 @@ sub git_clone_fetch_chdir {
system('git', 'fetch', @fetch_submod, 'origin',
'+refs/tags/*:refs/tags/*') == 0
|| exit_error "Error fetching git repository";
- $config->{projects}{$project}{fetched} = 1;
+ $config->{_rbm}{fetched_projects}{$project} = 1;
}
}
sub hg_need_fetch {
my ($project, $options) = @_;
- return 0 if $config->{projects}{$project}{fetched};
+ return 0 if $config->{_rbm}{fetched_projects}{$project};
my $fetch = project_config($project, 'fetch', $options);
if ($fetch eq 'if_needed') {
my $hg_hash = project_config($project, 'hg_hash', $options)
diff --git a/test.pl b/test.pl
index 0700d9c..d71baaa 100755
--- a/test.pl
+++ b/test.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl -w
use strict;
use Path::Tiny;
-use Test::More tests => 31;
+use Test::More tests => 34;
use lib 'lib/';
sub set_target {
@@ -158,6 +158,21 @@ my @tests = (
config => [ 'b', 'module_m'],
expected => '1',
},
+ {
+ name => 'Using option defined in a module project',
+ config => [ 'm1_a', 'm1_a' ],
+ expected => 'm1_a',
+ },
+ {
+ name => 'Using option defined in a module project and rbm.module.conf',
+ config => [ 'm1_a', 'project_m' ],
+ expected => 'm1_a',
+ },
+ {
+ name => 'Using option defined in main projects and a module project',
+ config => [ 'a', 'project_a' ],
+ expected => 'a',
+ },
{
name => 'build + steps config - 1',
target => [ 'version_1' ],
diff --git a/test/modules/module_1/projects/a/config b/test/modules/module_1/projects/a/config
new file mode 100644
index 0000000..2f2e097
--- /dev/null
+++ b/test/modules/module_1/projects/a/config
@@ -0,0 +1 @@
+project_a: from_module_1
diff --git a/test/modules/module_1/projects/m1_a/config b/test/modules/module_1/projects/m1_a/config
new file mode 100644
index 0000000..9f8b6c6
--- /dev/null
+++ b/test/modules/module_1/projects/m1_a/config
@@ -0,0 +1,2 @@
+m1_a: m1_a
+project_m: m1_a
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the tor-commits
mailing list