commit 8238f07edf404b82047fb09b76262e9a674ab146 Author: Nicolas Vigier boklm@torproject.org Date: Thu Jun 4 20:38:30 2020 +0200
Bug 28396: Create tmp files in rbm_tmp_dir instead of tmp_dir
rbm_tmp_dir is a directory inside tmp_dir that is automatically removed when rbm exits.
We also fix an issue in urlget when used within the exec script of an input file. In this case the input_files_id was depending on the value of tmp_dir because it is used in urlget. We fix that be setting getting_input_files_id when computing input_files ids, so that urlget can avoid using tmp_dir in this case. --- doc/rbm_config.asc | 7 +++++-- lib/RBM.pm | 19 +++++++------------ lib/RBM/DefaultConfig.pm | 13 +++++++++++-- 3 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/doc/rbm_config.asc b/doc/rbm_config.asc index 4c65a73..09776e4 100644 --- a/doc/rbm_config.asc +++ b/doc/rbm_config.asc @@ -223,8 +223,11 @@ input_files_id:: filename to trigger a rebuild when any of its input files is changed. This identifier is based on: the +input_file_id+ option of an input file if it is present, the +filename+ for an input - file of type +project+, and the +filename+ and the sha256sum of - the file for any other type of input file. + file of type +project+, the value of +exec+ for an input file + of type +exec+, and the +filename+ and the sha256sum of the file + for any other type of input file. In the case of an input file + of type +exec+, the value of +exec+ is computed with +getting_id+ + set to true.
input_files_paths:: The value of this option is an array of all the paths of input diff --git a/lib/RBM.pm b/lib/RBM.pm index d2aeab2..52b90ed 100644 --- a/lib/RBM.pm +++ b/lib/RBM.pm @@ -270,17 +270,11 @@ sub exit_error { exit (exists $_[1] ? $_[1] : 1); }
-sub get_tmp_dir { - my ($project, $options) = @_; - my $tmp_dir = project_config($project, 'tmp_dir', $options); - make_path($tmp_dir); - return $tmp_dir; -} - sub set_git_gpg_wrapper { my ($project) = @_; my $w = project_config($project, 'gpg_wrapper'); - my (undef, $tmp) = File::Temp::tempfile(DIR => get_tmp_dir($project)); + my (undef, $tmp) = File::Temp::tempfile( + DIR => project_config($project, 'rbm_tmp_dir')); path($tmp)->spew_utf8($w); chmod 0700, $tmp; system('git', 'config', 'gpg.program', $tmp) == 0 @@ -342,7 +336,7 @@ sub git_tag_sign_id { sub file_sign_id { my ($project, $options) = @_; my (undef, $gpg_wrapper) = File::Temp::tempfile(DIR => - get_tmp_dir($project, $options)); + project_config($project, 'rbm_tmp_dir', $options)); path($gpg_wrapper)->spew_utf8(project_config($project, 'gpg_wrapper', $options)); chmod 0700, $gpg_wrapper; my ($stdout, $stderr, $success, $exit_code) = @@ -576,7 +570,7 @@ sub maketar { || exit_error 'Error running git archive.'; if (project_config($project, 'git_submodule', $options)) { my $tmpdir = File::Temp->newdir( - get_tmp_dir($project, $options) . '/rbm-XXXXX'); + project_config($project, 'rbm_tmp_dir', $options) . '/rbm-XXXXX'); my ($stdout, $stderr, $success, $exit_code) = capture_exec('git', 'checkout', $commit_hash); exit_error "Cannot checkout $commit_hash: $stderr" unless $success; @@ -760,7 +754,8 @@ sub input_file_id { return $t->('input_file_id') if $input_file->{input_file_id}; return $input_file->{project} . ':' . $filename if $input_file->{project}; return $filename . ':' . $t->('sha256sum') if $input_file->{sha256sum}; - return $filename . ':' . sha256_hex($t->('exec', { norec => { output_dir => '/out' } })) + my $opts = { norec => { output_dir => '/out', getting_id => 1, }}; + return $filename . ':' . sha256_hex($t->('exec', $opts)) if $input_file->{exec}; return input_file_id_hash($fname, $filename); } @@ -1029,7 +1024,7 @@ sub build_run { valid_project($project); $options = { %$options, build_id => Data::UUID->new->create_str }; my $old_cwd = getcwd; - my $tmpdir = File::Temp->newdir(get_tmp_dir($project, $options) + my $tmpdir = File::Temp->newdir(project_config($project, 'rbm_tmp_dir', $options) . '/rbm-XXXXX'); my $srcdir = $tmpdir->dirname; my @cfiles; diff --git a/lib/RBM/DefaultConfig.pm b/lib/RBM/DefaultConfig.pm index c19d160..370f755 100644 --- a/lib/RBM/DefaultConfig.pm +++ b/lib/RBM/DefaultConfig.pm @@ -14,6 +14,7 @@ use RBM; use Cwd qw(getcwd); use IO::CaptureOutput qw(capture_exec); use File::Temp; +use File::Path qw(make_path);
sub lsb_release { my ($project, $options) = @_; @@ -89,8 +90,9 @@ sub rbm_tmp_dir { my ($project, $options) = @_; CORE::state $rbm_tmp_dir; return $rbm_tmp_dir->dirname if $rbm_tmp_dir; - my $tmp_dir = RBM::get_tmp_dir($project, $options) + my $tmp_dir = RBM::project_config($project, 'tmp_dir', $options) || RBM::exit_error('No tmp_dir specified'); + make_path($tmp_dir); $rbm_tmp_dir = File::Temp->newdir(TEMPLATE => 'rbm-XXXXXX', DIR => $tmp_dir); return $rbm_tmp_dir->dirname; @@ -397,7 +399,14 @@ OPT_END urlget => <<URLGET, #!/bin/sh set -e -tmpfile="$(mktemp -p [% shell_quote(c("tmp_dir")) %])" +[% + IF c("getting_id"); + SET rbm_tmp_dir = '/tmp'; + ELSE; + SET rbm_tmp_dir = c("rbm_tmp_dir"); + END; + -%] +tmpfile="$(mktemp -p [% shell_quote(rbm_tmp_dir) %])" wget -O"$tmpfile" [% shell_quote(c("URL")) %] mv -f "$tmpfile" [% shell_quote(dest_dir _ "/" _ c("filename")) %] URLGET