boklm pushed to branch main at The Tor Project / Applications / RBM
Commits:
-
27a89ca5
by Nicolas Vigier at 2023-05-08T18:06:36+02:00
-
60c5aff5
by Nicolas Vigier at 2023-05-17T08:03:40+02:00
-
37c204c3
by Nicolas Vigier at 2023-05-17T08:03:43+02:00
6 changed files:
- doc/rbm_input_files.asc
- lib/RBM.pm
- test.pl
- + test/projects/change-targets/config
- test/projects/mozmill-automation/config
- test/rbm.conf
Changes:
| ... | ... | @@ -92,6 +92,12 @@ target_prepend:: |
| 92 | 92 | The same as +target+, but instead of replacing the current targets,
|
| 93 | 93 | the new targets are prepended.
|
| 94 | 94 | |
| 95 | +target_replace::
|
|
| 96 | + A hash table containing targets to replace. The key is a regular
|
|
| 97 | + _expression_, and the value the replacement. See +perlre+ manual
|
|
| 98 | + page for details about the syntax. Note that referencing capture
|
|
| 99 | + groups in the replacement is currently not supported.
|
|
| 100 | + |
|
| 95 | 101 | enable::
|
| 96 | 102 | The files are enabled by default. If this option is set to
|
| 97 | 103 | 0, then the file is ignored.
|
| ... | ... | @@ -779,7 +779,7 @@ sub input_file_need_dl { |
| 779 | 779 | my ($input_file, $t, $fname, $action) = @_;
|
| 780 | 780 | return undef if $action eq 'getfpaths';
|
| 781 | 781 | if ($fname
|
| 782 | - && $input_file->{sha256sum}
|
|
| 782 | + && ($input_file->{sha256sum} || $input_file->{norec}{sha256sum})
|
|
| 783 | 783 | && $t->('sha256sum') ne sha256file($fname)) {
|
| 784 | 784 | sha256file($fname, { remove_cache => 1 });
|
| 785 | 785 | $fname = undef;
|
| ... | ... | @@ -787,6 +787,7 @@ sub input_file_need_dl { |
| 787 | 787 | if ($action eq 'input_files_id') {
|
| 788 | 788 | return undef if $input_file->{input_file_id};
|
| 789 | 789 | return undef if $input_file->{sha256sum};
|
| 790 | + return undef if $input_file->{norec}{sha256sum};
|
|
| 790 | 791 | return undef if $input_file->{exec};
|
| 791 | 792 | return undef if $fname;
|
| 792 | 793 | return 1 if $input_file->{URL};
|
| ... | ... | @@ -810,7 +811,9 @@ sub input_file_id { |
| 810 | 811 | my ($input_file, $t, $fname, $filename) = @_;
|
| 811 | 812 | return $t->('input_file_id') if $input_file->{input_file_id};
|
| 812 | 813 | return $input_file->{project} . ':' . $filename if $input_file->{project};
|
| 813 | - return $filename . ':' . $t->('sha256sum') if $input_file->{sha256sum};
|
|
| 814 | + if ($input_file->{sha256sum} || $input_file->{norec}{sha256sum}) {
|
|
| 815 | + return $filename . ':' . $t->('sha256sum');
|
|
| 816 | + }
|
|
| 814 | 817 | my $opts = { norec => { output_dir => '/out', getting_id => 1, }};
|
| 815 | 818 | return $filename . ':' . sha256_hex($t->('exec', $opts))
|
| 816 | 819 | if $input_file->{exec};
|
| ... | ... | @@ -898,13 +901,18 @@ sub input_files { |
| 898 | 901 | next;
|
| 899 | 902 | }
|
| 900 | 903 | if ($input_file->{target} || $input_file->{target_append}
|
| 901 | - || $input_file->{target_prepend}) {
|
|
| 904 | + || $input_file->{target_prepend}
|
|
| 905 | + || $input_file->{target_replace}) {
|
|
| 902 | 906 | $input_file = { %$input_file };
|
| 903 | 907 | foreach my $t (qw/target target_append target_prepend/) {
|
| 904 | 908 | if ($input_file->{$t} && ref $input_file->{$t} ne 'ARRAY') {
|
| 905 | 909 | exit_error("$t should be an ARRAY:\n" . pp($input_file));
|
| 906 | 910 | }
|
| 907 | 911 | }
|
| 912 | + if ($input_file->{target_replace} &&
|
|
| 913 | + ref $input_file->{target_replace} ne 'HASH') {
|
|
| 914 | + exit_error("target_replace should be a HASH\n" . pp($input_file));
|
|
| 915 | + }
|
|
| 908 | 916 | if ($input_file->{target}) {
|
| 909 | 917 | $input_file->{target} = process_template_opt($project,
|
| 910 | 918 | $input_file->{target}, $options);
|
| ... | ... | @@ -923,6 +931,14 @@ sub input_files { |
| 923 | 931 | $input_file->{target_append},
|
| 924 | 932 | $options) } ];
|
| 925 | 933 | }
|
| 934 | + if ($input_file->{target_replace}) {
|
|
| 935 | + foreach my $pattern (keys %{$input_file->{target_replace}}) {
|
|
| 936 | + my $subst = $input_file->{target_replace}{$pattern};
|
|
| 937 | + $input_file->{target} = [
|
|
| 938 | + map { s/$pattern/$subst/r } @{$input_file->{target}}
|
|
| 939 | + ];
|
|
| 940 | + }
|
|
| 941 | + }
|
|
| 926 | 942 | }
|
| 927 | 943 | if ($action eq 'getfnames') {
|
| 928 | 944 | my $getfnames_name;
|
| 1 | 1 | #!/usr/bin/perl -w
|
| 2 | 2 | use strict;
|
| 3 | 3 | use Path::Tiny;
|
| 4 | -use Test::More tests => 40;
|
|
| 4 | +use Test::More tests => 41;
|
|
| 5 | 5 | use lib 'lib/';
|
| 6 | 6 | |
| 7 | 7 | sub set_target {
|
| ... | ... | @@ -220,6 +220,14 @@ my @tests = ( |
| 220 | 220 | 'out/r3' => "1 - build\n2 - build\n3 - build\n",
|
| 221 | 221 | },
|
| 222 | 222 | },
|
| 223 | + {
|
|
| 224 | + name => 'multi-steps build with changing targets',
|
|
| 225 | + target => [ 'target_a' ],
|
|
| 226 | + build => [ 'change-targets', 'build', { pkg_type => 'build' } ],
|
|
| 227 | + files => {
|
|
| 228 | + 'out/change-targets.txt' => "no\nz\ntta\n",
|
|
| 229 | + },
|
|
| 230 | + },
|
|
| 223 | 231 | {
|
| 224 | 232 | name => 'build project in a module',
|
| 225 | 233 | target => [],
|
| 1 | +# vim: filetype=yaml sw=2
|
|
| 2 | + |
|
| 3 | +targets:
|
|
| 4 | + tt_a:
|
|
| 5 | + option_a: 'tta'
|
|
| 6 | + |
|
| 7 | + |
|
| 8 | +steps:
|
|
| 9 | + |
|
| 10 | + build:
|
|
| 11 | + filename: change-targets.txt
|
|
| 12 | + build: |
|
|
| 13 | + #!/bin/sh
|
|
| 14 | + cat preptarget.txt replacetarget-1.txt replacetarget-2.txt > [% dest_dir %]/[% c('filename') %]
|
|
| 15 | + input_files:
|
|
| 16 | + - name: preptarget
|
|
| 17 | + refresh_input: 1
|
|
| 18 | + project: change-targets
|
|
| 19 | + pkg_type: preptarget
|
|
| 20 | + target_prepend:
|
|
| 21 | + - target_b
|
|
| 22 | + - name: replacetarget
|
|
| 23 | + r: 1
|
|
| 24 | + refresh_input: 1
|
|
| 25 | + project: change-targets
|
|
| 26 | + pkg_type: replacetarget
|
|
| 27 | + target_replace:
|
|
| 28 | + '^target_a$': target_z
|
|
| 29 | + - name: replacetarget
|
|
| 30 | + r: 2
|
|
| 31 | + refresh_input: 1
|
|
| 32 | + project: change-targets
|
|
| 33 | + pkg_type: replacetarget
|
|
| 34 | + target_replace:
|
|
| 35 | + '^target_.*$': 'tt_a'
|
|
| 36 | + |
|
| 37 | + preptarget:
|
|
| 38 | + filename: preptarget.txt
|
|
| 39 | + preptarget: |
|
|
| 40 | + #!/bin/sh
|
|
| 41 | + echo [% c('option_a') %] > [% dest_dir %]/[% c('filename') %]
|
|
| 42 | + input_files: []
|
|
| 43 | + |
|
| 44 | + replacetarget:
|
|
| 45 | + filename: 'replacetarget-[% c("r") %].txt'
|
|
| 46 | + replacetarget: |
|
|
| 47 | + #!/bin/sh
|
|
| 48 | + echo [% c('option_a') %] > [% dest_dir %]/[% c('filename') %]
|
|
| 49 | + input_files: [] |
| 1 | 1 | version: '[% c("abbrev") %]'
|
| 2 | 2 | hg_url: https://hg.mozilla.org/qa/mozmill-automation/
|
| 3 | 3 | hg_hash: bbad7215c713
|
| 4 | +compress_tar: ''
|
|
| 4 | 5 | t: '[% sha256(exec("cat testrun_remote.py")) %]'
|
| 5 | 6 | build: |
|
| 6 | 7 | #!/bin/sh
|
| ... | ... | @@ -15,6 +15,8 @@ targets: |
| 15 | 15 | - target_c
|
| 16 | 16 | - target_a
|
| 17 | 17 | - target_b
|
| 18 | + target_z:
|
|
| 19 | + option_a: z
|
|
| 18 | 20 | steps:
|
| 19 | 21 | rpm:
|
| 20 | 22 | option_rpm: 1
|