diff options
author | Marius Mathiesen <marius.mathiesen@gmail.com> | 2009-06-10 13:42:59 +0200 |
---|---|---|
committer | Marius Mathiesen <marius.mathiesen@gmail.com> | 2009-06-24 12:20:31 +0200 |
commit | c62f9ea1cd8ed9af61465b10c3d5390883da2d43 (patch) | |
tree | 98eabb36af968254f3451095539b33115e380730 /app/models/merge_request.rb | |
parent | 8646eeb133228e5c3cda6f74de3a1841df96860e (diff) | |
download | gitorious-mainline-outdated-c62f9ea1cd8ed9af61465b10c3d5390883da2d43.zip gitorious-mainline-outdated-c62f9ea1cd8ed9af61465b10c3d5390883da2d43.tar.gz gitorious-mainline-outdated-c62f9ea1cd8ed9af61465b10c3d5390883da2d43.tar.bz2 |
Let merge requests live their own life in a branch
Requests are now living inside a ref/reviews branch in the tracking repository, and can be updated though normal pushes to the real repository.
No authorization yet on pushing updates to a review - merge request owners will not yet be able to push to the target repository, but users with commit access will.
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r-- | app/models/merge_request.rb | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 2b9a61b..c6fc1c9 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -30,6 +30,7 @@ class MergeRequest < ActiveRecord::Base has_many :comments, :as => :target, :dependent => :destroy before_destroy :nullify_messages + is_indexed :fields => ["proposal"], :include => [{ :association_name => "user", @@ -238,6 +239,18 @@ class MergeRequest < ActiveRecord::Base end def commits_to_be_merged + if version > 0 + commit_diff_from_tracking_repo + else + [] + end + end + + def commit_diff_from_tracking_repo + @commits_to_be_merged ||= target_repository.git.commit_deltas_from(target_repository.tracking_repository.git, target_branch, "refs/reviews/#{id}/#{version}") + end + + def potential_commits if applies_to_specific_commits? idx = commits_for_selection.index(commits_for_selection.find{|c| c.id == ending_commit}) return idx ? commits_for_selection[idx..-1] : [] @@ -369,6 +382,10 @@ class MergeRequest < ActiveRecord::Base }.merge(opts)) end + def update_from_push! + push_new_branch_to_tracking_repo + save + end def valid_oauth_credentials? response = access_token.get("/") @@ -380,9 +397,16 @@ class MergeRequest < ActiveRecord::Base end def push_to_tracking_repository! - merge_request_repo = target_repository.tracking_repository branch_spec = "#{ending_commit}:refs/reviews/#{id}" - source_repository.git.git.push({}, merge_request_repo.full_repository_path, "#{branch_spec}/1") source_repository.git.git.push({}, target_repository.full_repository_path, branch_spec) + push_new_branch_to_tracking_repo end + + def push_new_branch_to_tracking_repo + self.version = self.version + 1 + branch_spec = "refs/reviews/#{id}:refs/reviews/#{id}/#{version}" + target_repository.git.git.push({}, target_repository.tracking_repository.full_repository_path, branch_spec) + end + + end |