summaryrefslogtreecommitdiffstats
path: root/app/models/merge_request.rb
diff options
context:
space:
mode:
authorMarius Mathiesen <marius.mathiesen@gmail.com>2009-06-10 13:42:59 +0200
committerMarius Mathiesen <marius.mathiesen@gmail.com>2009-06-24 12:20:31 +0200
commitc62f9ea1cd8ed9af61465b10c3d5390883da2d43 (patch)
tree98eabb36af968254f3451095539b33115e380730 /app/models/merge_request.rb
parent8646eeb133228e5c3cda6f74de3a1841df96860e (diff)
downloadgitorious-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.rb28
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