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

Commits:

2 changed files:

Changes:

  • doc/rbm_config.asc
    ... ... @@ -191,7 +191,8 @@ fetch::
    191 191
             from the remote git or hg repository should be fetched
    
    192 192
             automatically. If the value is +if_needed+, the git or hg
    
    193 193
             repository is fetched only if the selected commit cannot be
    
    194
    -        found in the local clone. The default is +if_needed+.
    
    194
    +        found in the local clone, or if +git_hash+ is not pointing to
    
    195
    +        a git tag or full hash. The default is +if_needed+.
    
    195 196
     
    
    196 197
     ENV::
    
    197 198
             This option, defined in the workspace config, is a hash
    

  • lib/RBM.pm
    ... ... @@ -424,8 +424,16 @@ sub git_need_fetch {
    424 424
         if ($fetch eq 'if_needed') {
    
    425 425
             my $git_hash = project_config($project, 'git_hash', $options)
    
    426 426
                     || exit_error "No git_hash specified for project $project";
    
    427
    -        my (undef, undef, $success) = capture_exec('git', 'rev-parse',
    
    427
    +        my ($stdout, undef, $success) = capture_exec('git', 'rev-parse',
    
    428 428
                                             '--verify', "$git_hash^{commit}");
    
    429
    +        return 1 unless $success;
    
    430
    +        # If rev-parse returns the same as git_hash, then git_hash is
    
    431
    +        # a hash and there is no need to fetch
    
    432
    +        return 0 if $stdout eq $git_hash;
    
    433
    +        # Check if git_hash is a tag. If it's not a tag or hash then
    
    434
    +        # it's probably a branch and we should do a fetch.
    
    435
    +        (undef, undef, $success) = capture_exec('git', 'rev-parse',
    
    436
    +                                        '--verify', "$git_hash^{tag}");
    
    429 437
             return !$success;
    
    430 438
         }
    
    431 439
         return $fetch;