BigW Consortium Gitlab

Skip to content
  • Timothy Andrew's avatar
    f51af496
    Support wildcard matches for protected branches at the model level. · f51af496
    Timothy Andrew authored
    1. The main implementation is in the `ProtectedBranch` model. The
       wildcard is converted to a Regex and compared. This has been tested
       thoroughly.
    
        - While `Project#protected_branch?` is the main entry point,
          `project#open_branches` and
          `project#developers_can_push_to_protected_branch?`
          have also been modified to work with wildcard protected branches.
    
        - The regex is memoized (within the `ProtectedBranch` instance)
    
    2. Improve the performance of `Project#protected_branch?`
    
        -  This method is called from `Project#open_branches` once _per branch_
           in the project, to check if that branch is protected or not.
    
        -  Before, `#protected_branch?` was making a database call every
           time it was invoked (in the above case, that amounts to once
           per branch), which is expensive.
    
        -  This commit caches the list of protected branches in memory, which
           reduces the number of database calls down to 1.
    
        -  A downside to this approach is that `#protected_branch?` _could_
           return a stale value (due to the caching), but this is
           an acceptable tradeoff.
    
    3. Remove the (now) unused `Project#protected_branch_names` method.
    
        - This was previously used to check for protected branch status.
    f51af496
    Support wildcard matches for protected branches at the model level.
    Timothy Andrew authored
    1. The main implementation is in the `ProtectedBranch` model. The
       wildcard is converted to a Regex and compared. This has been tested
       thoroughly.
    
        - While `Project#protected_branch?` is the main entry point,
          `project#open_branches` and
          `project#developers_can_push_to_protected_branch?`
          have also been modified to work with wildcard protected branches.
    
        - The regex is memoized (within the `ProtectedBranch` instance)
    
    2. Improve the performance of `Project#protected_branch?`
    
        -  This method is called from `Project#open_branches` once _per branch_
           in the project, to check if that branch is protected or not.
    
        -  Before, `#protected_branch?` was making a database call every
           time it was invoked (in the above case, that amounts to once
           per branch), which is expensive.
    
        -  This commit caches the list of protected branches in memory, which
           reduces the number of database calls down to 1.
    
        -  A downside to this approach is that `#protected_branch?` _could_
           return a stale value (due to the caching), but this is
           an acceptable tradeoff.
    
    3. Remove the (now) unused `Project#protected_branch_names` method.
    
        - This was previously used to check for protected branch status.
Loading