[tbb-commits] [Git][tpo/applications/rbm][main] Bug 40006: Add option to avoid doing a git checkout when using the exec template function

boklm (@boklm) git at gitlab.torproject.org
Mon Oct 28 08:49:57 UTC 2024



boklm pushed to branch main at The Tor Project / Applications / RBM


Commits:
f18daa3f by Nicolas Vigier at 2024-10-27T17:22:45+01:00
Bug 40006: Add option to avoid doing a git checkout when using the exec template function

The `exec_noco` option can be used to disable git or hg checkout when
using the exec template function.

We start using this option in the `abbrev` and `timestamp` options,
which are running git and hg commands which don't need a checkout.

- - - - -


3 changed files:

- doc/rbm_templates.asc
- lib/RBM.pm
- lib/RBM/DefaultConfig.pm


Changes:

=====================================
doc/rbm_templates.asc
=====================================
@@ -107,9 +107,11 @@ exec::
         considered to be a script, which will be written to a temporary
         file and executed. The second argument of the exec function is
         an optional $options hash, used to override values of 'git_url',
-        'hg_url', 'fetch', 'git_hash' or 'hg_hash'. If neither 'git_url'
-        nor 'hg_url' is set, the command is executed from the directory
-        where the 'rbm.conf' file is located.
+        'hg_url', 'fetch', 'git_hash' or 'hg_hash'. Before running the
+        command a checkout of 'git_hash' or 'hg_hash' is done, unless
+        'exec_noco' is set to true. If neither 'git_url' nor 'hg_url'
+        is set, the command is executed from the directory where the
+        'rbm.conf' file is located.
 
 path::
         A function to return an absolute path. It takes a path as first


=====================================
lib/RBM.pm
=====================================
@@ -551,15 +551,18 @@ sub execute {
     CORE::state %cache;
     my $res_name = '';
     my $old_cwd = getcwd;
+    my $exec_noco = ref $options eq 'HASH' && $options->{exec_noco};
     if (project_config($project, 'git_url', $options)) {
         my $git_hash = project_config($project, 'git_hash', $options)
                 || exit_error "No git_hash specified for project $project";
         $res_name = "git-$project-/-$git_hash-/-$cmd";
         return $cache{$res_name} if exists $cache{$res_name};
         git_clone_fetch_chdir($project, $options);
-        my ($stdout, $stderr, $success, $exit_code)
+        if (!$exec_noco) {
+            my ($stdout, $stderr, $success, $exit_code)
                 = capture_exec('git', 'checkout', $git_hash);
-        exit_error "Cannot checkout $git_hash:\n$stderr" unless $success;
+            exit_error "Cannot checkout $git_hash:\n$stderr" unless $success;
+        }
         git_submodule_init_sync_update()
                 if project_config($project, 'git_submodule', $options);
     } elsif (project_config($project, 'hg_url', $options)) {
@@ -568,9 +571,11 @@ sub execute {
         $res_name = "hg-$project-/-$hg_hash-/-$cmd";
         return $cache{$res_name} if exists $cache{$res_name};
         hg_clone_fetch_chdir($project, $options);
-        my ($stdout, $stderr, $success, $exit_code)
+        if (!$exec_noco) {
+            my ($stdout, $stderr, $success, $exit_code)
                 = capture_exec('hg', 'update', '-C', $hg_hash);
-        exit_error "Cannot checkout $hg_hash:\n$stderr" unless $success;
+            exit_error "Cannot checkout $hg_hash:\n$stderr" unless $success;
+        }
     } else {
         chdir($config->{basedir});
     }


=====================================
lib/RBM/DefaultConfig.pm
=====================================
@@ -126,9 +126,9 @@ our %default_config = (
     abbrev_length => '12',
     abbrev        => '[%
                          IF c("git_url");
-                                exec("git log -1 --abbrev=" _ c("abbrev_length") _ " --format=%h " _ c("git_hash"));
+                                exec("git log -1 --abbrev=" _ c("abbrev_length") _ " --format=%h " _ c("git_hash"), { exec_noco => 1 });
                          ELSE;
-                                exec(c("hg") _ " id -i -r " _ c("hg_hash"));
+                                exec(c("hg") _ " id -i -r " _ c("hg_hash"), { exec_noco => 1 });
                          END;
                       %]',
     timestamp     => sub {
@@ -136,12 +136,14 @@ our %default_config = (
         if (RBM::project_config($project, 'git_url', $options)) {
             my $git_hash = RBM::project_config($project, 'git_hash', $options);
             return RBM::execute($project,
-                "git show -s --format=format:%ct ${git_hash}^{commit}", $options);
+                "git show -s --format=format:%ct ${git_hash}^{commit}",
+                 { %$options, exec_noco => 1 });
         } elsif (RBM::project_config($project, 'hg_url', $options)) {
             my $hg = RBM::project_config($project, 'hg', $options);
             my $hg_hash = RBM::project_config($project, 'hg_hash', $options);
             my $changeset = RBM::execute($project,
-                "$hg export --noninteractive -r $hg_hash", $options);
+                "$hg export --noninteractive -r $hg_hash",
+                { %$options, exec_noco => 1 });
             foreach my $line (split "\n", $changeset) {
                 return $1 if ($line =~ m/^# Date (\d+) \d+/);
             }



View it on GitLab: https://gitlab.torproject.org/tpo/applications/rbm/-/commit/f18daa3f93d1aec674e4ba0dfbd22ac6afd6f8c9

-- 
View it on GitLab: https://gitlab.torproject.org/tpo/applications/rbm/-/commit/f18daa3f93d1aec674e4ba0dfbd22ac6afd6f8c9
You're receiving this email because of your account on gitlab.torproject.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tbb-commits/attachments/20241028/27aaca08/attachment-0001.htm>


More information about the tbb-commits mailing list