[tbb-commits] [builders/rbm] 02/02: Bug 40048: Add a hg_clone_subdir option

gitolite role git at cupani.torproject.org
Wed Nov 2 14:55:16 UTC 2022


This is an automated email from the git hooks/post-receive script.

boklm pushed a commit to branch main
in repository builders/rbm.

commit a6ccc103fe59f6b520777308af92bf98113e2c90
Author: Nicolas Vigier <boklm at torproject.org>
AuthorDate: Tue Nov 1 18:22:58 2022 +0100

    Bug 40048: Add a hg_clone_subdir option
---
 doc/rbm_config.asc       |  7 +++++++
 lib/RBM.pm               | 21 ++++++++++++++-------
 lib/RBM/DefaultConfig.pm |  1 +
 3 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/doc/rbm_config.asc b/doc/rbm_config.asc
index dc045e2..226ccae 100644
--- a/doc/rbm_config.asc
+++ b/doc/rbm_config.asc
@@ -145,6 +145,13 @@ hg_clone_dir::
         The directory used to store clones of mercurial repositories.
         The default value is +hg_clones+.
 
+hg_clone_subdir::
+        If this option is set, the repository is cloned in a
+        subdirectory with that name. This is useful if a single project
+        requires clones of multiple mercurial repositories, for example
+        using a different +hg_url+ in each +targets+ or +steps+.
+        The default value is +.+, which means that no subdirectory is used.
+
 hg_opt::
         This option contains options that should be passed on the
         mercurial command line. This can for instance be useful if you
diff --git a/lib/RBM.pm b/lib/RBM.pm
index 86d9a9d..2209890 100644
--- a/lib/RBM.pm
+++ b/lib/RBM.pm
@@ -476,8 +476,8 @@ sub git_clone_fetch_chdir {
 }
 
 sub hg_need_fetch {
-    my ($project, $options) = @_;
-    return 0 if $config->{_rbm}{fetched_projects}{$project};
+    my ($project, $subdir, $options) = @_;
+    return 0 if $config->{_rbm}{hg_fetched_projects}{$project}{$subdir};
     my $fetch = project_config($project, 'fetch', $options);
     if ($fetch eq 'if_needed') {
         my $hg_hash = project_config($project, 'hg_hash', $options)
@@ -495,18 +495,25 @@ sub hg_clone_fetch_chdir {
                                 'hg_clone_dir', $options)));
     my $hg_url = shell_quote(project_config($project, 'hg_url', $options))
                 || exit_error "hg_url is undefined";
-    my $sq_project = shell_quote($project);
-    if (!chdir rbm_path("$clonedir/$project")) {
+    my $subdir = project_config($project, 'hg_clone_subdir', $options);
+    exit_error "hg_clone_subdir ($subdir) cannot be '..'" if $subdir eq '..';
+    exit_error "hg_clone_subdir ($subdir) cannot include / or \\"
+                if $subdir =~ m|[\\/]|;
+    my $destdir = $subdir eq '.' ? $project : "$project/$subdir";
+    my $sq_destdir = shell_quote($destdir);
+    if (!chdir rbm_path("$clonedir/$destdir")) {
         chdir $clonedir || exit_error "Can't enter directory $clonedir: $!";
-        if (system("$hg clone -q $hg_url $sq_project") != 0) {
+        mkdir $project if $subdir ne '.';
+        if (system("$hg clone -q $hg_url $sq_destdir") != 0) {
             exit_error "Error cloning $hg_url";
         }
-        chdir($project) || exit_error "Error entering $project directory";
+        chdir($destdir) || exit_error "Error entering $destdir directory";
     }
-    if (hg_need_fetch($project, $options)) {
+    if (hg_need_fetch($project, $subdir, $options)) {
         system("$hg pull -q $hg_url") == 0
                 || exit_error "Error pulling changes from $hg_url";
     }
+    $config->{_rbm}{hg_fetched_projects}{$project}{$subdir} = 1;
 }
 
 sub run_script {
diff --git a/lib/RBM/DefaultConfig.pm b/lib/RBM/DefaultConfig.pm
index b60d5c2..32072c4 100644
--- a/lib/RBM/DefaultConfig.pm
+++ b/lib/RBM/DefaultConfig.pm
@@ -116,6 +116,7 @@ our %default_config = (
     output_dir    => 'out',
     git_clone_dir => 'git_clones',
     hg_clone_dir  => 'hg_clones',
+    hg_clone_subdir  => '.',
     fetch         => 'if_needed',
     pkg_type      => 'build',
     build         => '[% INCLUDE build -%]',

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the tbb-commits mailing list