diff options
author | Lin Jen-Shin <godfat@godfat.org> | 2016-11-14 23:02:10 +0300 |
---|---|---|
committer | Lin Jen-Shin <godfat@godfat.org> | 2016-11-14 23:02:10 +0300 |
commit | 0b5a2eef8fa5ff4976f97883b631ec28f0553f6a (patch) | |
tree | e4410baba5cb2b077b9f7257898722fbfebf20dd /app/services/validate_new_branch_service.rb | |
parent | 3128641f7eb93fec0930ebfb83a93dfa5e0b343a (diff) |
Add `source_branch` option for various git operations
If `source_branch` option is passed, and target branch cannot be found,
`Repository#update_branch_with_hooks` would try to create a new branch
from `source_branch`.
This way, we could make changes in the new branch while only firing
the hooks once for the changes. Previously, we can only create a new
branch first then make changes to the new branch, firing hooks twice.
This behaviour is bad for CI.
Fixes #7237
Diffstat (limited to 'app/services/validate_new_branch_service.rb')
-rw-r--r-- | app/services/validate_new_branch_service.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/app/services/validate_new_branch_service.rb b/app/services/validate_new_branch_service.rb new file mode 100644 index 00000000000..2f61be184ce --- /dev/null +++ b/app/services/validate_new_branch_service.rb @@ -0,0 +1,22 @@ +require_relative 'base_service' + +class ValidateNewBranchService < BaseService + def execute(branch_name) + valid_branch = Gitlab::GitRefValidator.validate(branch_name) + + unless valid_branch + return error('Branch name is invalid') + end + + repository = project.repository + existing_branch = repository.find_branch(branch_name) + + if existing_branch + return error('Branch already exists') + end + + success + rescue GitHooksService::PreReceiveError => ex + error(ex.message) + end +end |