commit 8238f07edf404b82047fb09b76262e9a674ab146
Author: Nicolas Vigier <boklm(a)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