• Luke Duncalfe's avatar
    Support merge request create with push options · aa352a95
    Luke Duncalfe authored
    To create a new merge request:
    
      git push -u origin -o merge_request.create
    
    To create a new merge request setting target branch:
    
      git push -u origin -o merge_request.create \
        -o merge_request.target=123
    
    To update an existing merge request with a new target branch:
    
      git push -u origin -o merge_request.target=123
    
    A new Gitlab::PushOptions class handles parsing and validating the push
    options array. This can be the start of the standard of GitLab accepting
    push options that follow namespacing rules. Rules are discussed in issue
    https://gitlab.com/gitlab-org/gitlab-ce/issues/43263.
    
    E.g. these push options:
    
      -o merge_request.create -o merge_request.target=123
    
    Become parsed as:
    
      {
        merge_request: {
          create: true,
          target: '123',
        }
      }
    
    And are fetched with the class via:
    
      push_options.get(:merge_request)
      push_options.get(:merge_request, :create)
      push_options.get(:merge_request, :target)
    
    A new MergeRequests::PushOptionsHandlerService takes the `merge_request`
    namespaced push options and handles creating and updating
    merge requests.
    
    Any errors encountered are passed to the existing `output` Hash in
    Api::Internal's `post_receive` endpoint, and passed to gitlab-shell
    where they're output to the user.
    
    Issue https://gitlab.com/gitlab-org/gitlab-ce/issues/43263
    aa352a95
internal_spec.rb 38.8 KB