summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Mathiesen <marius@shortcut.no>2009-07-13 14:03:10 +0200
committerMarius Mathiesen <marius@shortcut.no>2009-07-13 15:15:42 +0200
commit0ec2f19f20a0bda061ed233779543ce1d1336f0c (patch)
treee6fb8a5022db2db8e1953dc37944612823afeec4
parentc8095706a0948361346e83e8de6974bf3a29674a (diff)
downloadgitorious-mainline-outdated-0ec2f19f20a0bda061ed233779543ce1d1336f0c.zip
gitorious-mainline-outdated-0ec2f19f20a0bda061ed233779543ce1d1336f0c.tar.gz
gitorious-mainline-outdated-0ec2f19f20a0bda061ed233779543ce1d1336f0c.tar.bz2
Supplying a list of status tags per repository when listing merge requests:
- add a list of unique status_tags - MergeRequest.from_filter uses a named scope by filter when given a non-defined string MergeRequest.from_filter now uses either a predefined name scope, the by_status named scope or open (when given nil)
-rw-r--r--app/controllers/merge_requests_controller.rb4
-rw-r--r--app/models/merge_request.rb7
-rw-r--r--app/models/repository.rb5
-rw-r--r--app/views/merge_requests/index.html.erb4
-rw-r--r--test/fixtures/merge_requests.yml12
-rw-r--r--test/unit/merge_request_test.rb8
-rw-r--r--test/unit/repository_test.rb8
7 files changed, 39 insertions, 9 deletions
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index 539c5a2..999e0bc 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -38,9 +38,11 @@ class MergeRequestsController < ApplicationController
#
#@open_merge_requests = @repository.merge_requests.open
@open_merge_requests = @repository.merge_requests.from_filter(params[:status]).paginate(:all, {:page => params[:page], :per_page => 10})
+
@recently_closed_merge_requests = @repository.merge_requests.closed.find(:all, {
:limit => 10, :order => "updated_at desc"
- })
+ })
+ @status_tags = @repository.merge_request_status_tags
@comment_count = @repository.comments.count
respond_to do |wants|
wants.html
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 374fd50..bef3a0b 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -80,10 +80,13 @@ class MergeRequest < ActiveRecord::Base
end
end
- named_scope :open, :conditions => ['LCASE(status_tag) in (?)', ['open','verifying']]
+ named_scope :open, :conditions => ['LCASE(status_tag) in (?) OR status_tag IS NULL', ['open','verifying']]
named_scope :closed, :conditions => ["LCASE(status_tag) in (?)", ['merged','rejected']]
named_scope :merged, :conditions => ["LCASE(status_tag) = ?", 'merged']
named_scope :rejected, :conditions => ["LCASE(status_tag) = ?", 'rejected']
+ named_scope :by_status, lambda {|state|
+ {:conditions => ["LCASE(status_tag) = ?", state ] }
+ }
def reopen_with_user(a_user)
@@ -119,6 +122,8 @@ class MergeRequest < ActiveRecord::Base
merged
when "rejected"
rejected
+ when String
+ by_status(filter_name)
else
open
end
diff --git a/app/models/repository.rb b/app/models/repository.rb
index d41446d..5371991 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -572,6 +572,11 @@ class Repository < ActiveRecord::Base
def has_tracking_repository?
!tracking_repository.nil?
end
+
+ def merge_request_status_tags
+ result = MergeRequest.find_by_sql(["SELECT status_tag FROM merge_requests WHERE target_repository_id = ? GROUP BY status_tag", self.id]).collect(&:status_tag)
+ result.compact
+ end
protected
def sharded_hashed_path(h)
diff --git a/app/views/merge_requests/index.html.erb b/app/views/merge_requests/index.html.erb
index d6dcd7d..0db9702 100644
--- a/app/views/merge_requests/index.html.erb
+++ b/app/views/merge_requests/index.html.erb
@@ -39,7 +39,7 @@
<% content_for :sidebar do -%>
<h4>Filter</h4>
<ul class="links">
- <% ["open", "merged", "rejected"].each do |status| -%>
+ <% @status_tags.each do |status| -%>
<li class="merge_requests"><%= link_to_status(@repository, status) -%></li>
<% end -%>
</ul>
@@ -56,4 +56,4 @@
</li>
<% end -%>
</ul>
-<% end -%> \ No newline at end of file
+<% end -%>
diff --git a/test/fixtures/merge_requests.yml b/test/fixtures/merge_requests.yml
index 37c952c..be1d41d 100644
--- a/test/fixtures/merge_requests.yml
+++ b/test/fixtures/merge_requests.yml
@@ -24,4 +24,14 @@ mikes_to_johans:
proposal: A merge in progress
sha_snapshot: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
ending_commit: 286e8afb9576366a2a43b12b94738f07
- status: <%= MergeRequest::STATUS_OPEN %> \ No newline at end of file
+ status: <%= MergeRequest::STATUS_OPEN %>
+ status_tag: open
+
+johans_to_mikes:
+ user_id: 1
+ source_repository_id: 1
+ target_repository_id: 2
+ proposal: Yeah
+ sha_snapshot: a99238
+ ending_commit: a99238
+ status_tag: orphaned \ No newline at end of file
diff --git a/test/unit/merge_request_test.rb b/test/unit/merge_request_test.rb
index 86c0933..9054893 100644
--- a/test/unit/merge_request_test.rb
+++ b/test/unit/merge_request_test.rb
@@ -492,10 +492,10 @@ class MergeRequestTest < ActiveSupport::TestCase
assert_equal [merge_requests(:moes_to_johans_open)], @repo.merge_requests.from_filter(nil)
end
- should "fall back to open merge-requests on invalid filter name" do
- merge_requests(:moes_to_johans).update_attribute(:status_tag, 'merged')
- assert !@repo.merge_requests.from_filter("kittens").include?(merge_requests(:moes_to_johans))
- assert_equal [merge_requests(:moes_to_johans_open)], @repo.merge_requests.from_filter("kittens")
+ should "fall back to using named_scope on other filter name" do
+ merge_requests(:moes_to_johans).update_attribute(:status_tag, 'kittens')
+ assert !@repo.merge_requests.from_filter("kittens").include?(merge_requests(:moes_to_johans_open))
+ assert_equal [merge_requests(:moes_to_johans)], @repo.merge_requests.from_filter("kittens")
end
should "find merged merge-requests" do
diff --git a/test/unit/repository_test.rb b/test/unit/repository_test.rb
index 277928c..7d53870 100644
--- a/test/unit/repository_test.rb
+++ b/test/unit/repository_test.rb
@@ -733,6 +733,14 @@ class RepositoryTest < ActiveSupport::TestCase
assert !@other_repository.requires_signoff_on_merge_requests?
end
end
+
+ context "Merge request status tags" do
+ setup {@repo = repositories(:johans)}
+
+ should "have a list of used status tags" do
+ assert_equal %w(open), @repo.merge_request_status_tags
+ end
+ end
context "Thottling" do
setup{ Repository.destroy_all }