diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-08-14 16:22:48 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-08-14 16:22:48 +0300 |
commit | bacad39ef984b99520f8d2a7921acd5c8bdab1ef (patch) | |
tree | 5340d199dc60320466a7ff869917e9d6aa62fa67 /app/services | |
parent | 9649f9387a4ef3c40bc2720053b716c987255363 (diff) |
Make sure target has not changed during pre-receive hook
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/commit_service.rb | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/app/services/commit_service.rb b/app/services/commit_service.rb index 92d1585840b..d158f103530 100644 --- a/app/services/commit_service.rb +++ b/app/services/commit_service.rb @@ -34,7 +34,14 @@ class CommitService repository.rugged.references.create(Gitlab::Git::BRANCH_REF_PREFIX + ref, sha) else # Update head - repository.rugged.references.update(Gitlab::Git::BRANCH_REF_PREFIX + ref, sha) + current_target = repository.find_branch(ref).target + + # Make sure target branch was not changed during pre-receive hook + if current_target == target + repository.rugged.references.update(Gitlab::Git::BRANCH_REF_PREFIX + ref, sha) + else + raise CommitError.new('Commit was rejected because branch received new push') + end end # Run GitLab post receive hook |