Commit 0afdf39dbcc50eb5889be08e5b1aaefe162e456c
1 parent
62de22c1
Exists in
master
and in
4 other branches
New field added
Showing
6 changed files
with
37 additions
and
6 deletions
Show diff stats
app/models/project.rb
@@ -28,7 +28,7 @@ class Project < ActiveRecord::Base | @@ -28,7 +28,7 @@ class Project < ActiveRecord::Base | ||
28 | class TransferError < StandardError; end | 28 | class TransferError < StandardError; end |
29 | 29 | ||
30 | attr_accessible :name, :path, :description, :default_branch, :issues_tracker, | 30 | attr_accessible :name, :path, :description, :default_branch, :issues_tracker, |
31 | - :issues_enabled, :wall_enabled, :merge_requests_enabled, | 31 | + :issues_enabled, :wall_enabled, :merge_requests_enabled, :issues_tracker_id, |
32 | :wiki_enabled, :public, :import_url, as: [:default, :admin] | 32 | :wiki_enabled, :public, :import_url, as: [:default, :admin] |
33 | 33 | ||
34 | attr_accessible :namespace_id, :creator_id, as: :admin | 34 | attr_accessible :namespace_id, :creator_id, as: :admin |
@@ -74,6 +74,7 @@ class Project < ActiveRecord::Base | @@ -74,6 +74,7 @@ class Project < ActiveRecord::Base | ||
74 | message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" } | 74 | message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" } |
75 | validates :issues_enabled, :wall_enabled, :merge_requests_enabled, | 75 | validates :issues_enabled, :wall_enabled, :merge_requests_enabled, |
76 | :wiki_enabled, inclusion: { in: [true, false] } | 76 | :wiki_enabled, inclusion: { in: [true, false] } |
77 | + validates :issues_tracker_id, length: { within: 0..255 } | ||
77 | 78 | ||
78 | validates_uniqueness_of :name, scope: :namespace_id | 79 | validates_uniqueness_of :name, scope: :namespace_id |
79 | validates_uniqueness_of :path, scope: :namespace_id | 80 | validates_uniqueness_of :path, scope: :namespace_id |
@@ -217,6 +218,10 @@ class Project < ActiveRecord::Base | @@ -217,6 +218,10 @@ class Project < ActiveRecord::Base | ||
217 | self.issues_tracker == Project.issues_tracker.default_value | 218 | self.issues_tracker == Project.issues_tracker.default_value |
218 | end | 219 | end |
219 | 220 | ||
221 | + def can_have_issues_tracker_id? | ||
222 | + self.issues_enabled && !self.used_default_issues_tracker? | ||
223 | + end | ||
224 | + | ||
220 | def services | 225 | def services |
221 | [gitlab_ci_service].compact | 226 | [gitlab_ci_service].compact |
222 | end | 227 | end |
app/views/admin/projects/_form.html.haml
@@ -36,6 +36,10 @@ | @@ -36,6 +36,10 @@ | ||
36 | .input= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled }) | 36 | .input= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled }) |
37 | 37 | ||
38 | .clearfix | 38 | .clearfix |
39 | + = f.label :issues_tracker_id, "Project name or id in issues tracker", class: 'control-label' | ||
40 | + .input= f.text_field :issues_tracker_id, class: "xxlarge", disabled: !@project.can_have_issues_tracker_id? | ||
41 | + | ||
42 | + .clearfix | ||
39 | = f.label :merge_requests_enabled, "Merge Requests" | 43 | = f.label :merge_requests_enabled, "Merge Requests" |
40 | .input= f.check_box :merge_requests_enabled | 44 | .input= f.check_box :merge_requests_enabled |
41 | 45 |
app/views/projects/_form.html.haml
@@ -28,6 +28,10 @@ | @@ -28,6 +28,10 @@ | ||
28 | = f.label :issues_tracker, "Issues tracker", class: 'control-label' | 28 | = f.label :issues_tracker, "Issues tracker", class: 'control-label' |
29 | .input= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled }) | 29 | .input= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled }) |
30 | 30 | ||
31 | + .clearfix | ||
32 | + = f.label :issues_tracker_id, "Project name or id in issues tracker", class: 'control-label' | ||
33 | + .input= f.text_field :issues_tracker_id, class: "xxlarge", disabled: !@project.can_have_issues_tracker_id? | ||
34 | + | ||
31 | .control-group | 35 | .control-group |
32 | = f.label :merge_requests_enabled, "Merge Requests", class: 'control-label' | 36 | = f.label :merge_requests_enabled, "Merge Requests", class: 'control-label' |
33 | .controls | 37 | .controls |
config/gitlab.yml.example
@@ -7,8 +7,6 @@ | @@ -7,8 +7,6 @@ | ||
7 | # 2. Replace gitlab -> host with your domain | 7 | # 2. Replace gitlab -> host with your domain |
8 | # 3. Replace gitlab -> email_from | 8 | # 3. Replace gitlab -> email_from |
9 | 9 | ||
10 | -<<<<<<< HEAD | ||
11 | -<<<<<<< HEAD | ||
12 | production: &base | 10 | production: &base |
13 | # | 11 | # |
14 | # 1. GitLab app settings | 12 | # 1. GitLab app settings |
@@ -43,9 +41,7 @@ production: &base | @@ -43,9 +41,7 @@ production: &base | ||
43 | ## External issues trackers | 41 | ## External issues trackers |
44 | issues_tracker: | 42 | issues_tracker: |
45 | redmine: | 43 | redmine: |
46 | - ## If not nil Issues link in project page will be replaced to this | ||
47 | - url: "http://redmine.sample" | ||
48 | - ## If not nil links from /#\d/ entities from commit messages will replaced to this | 44 | + ## If not nil, links from /#\d/ entities from commit messages will replaced to this |
49 | ## Use placeholders: | 45 | ## Use placeholders: |
50 | ## :project_id - Gitlab project identifier | 46 | ## :project_id - Gitlab project identifier |
51 | ## :issues_tracker_id - Project Name or Id in external issue tracker | 47 | ## :issues_tracker_id - Project Name or Id in external issue tracker |
spec/factories.rb
@@ -31,6 +31,7 @@ FactoryGirl.define do | @@ -31,6 +31,7 @@ FactoryGirl.define do | ||
31 | 31 | ||
32 | factory :redmine_project, parent: :project do | 32 | factory :redmine_project, parent: :project do |
33 | issues_tracker { "redmine" } | 33 | issues_tracker { "redmine" } |
34 | + issues_tracker_id { "project_name_in_redmine" } | ||
34 | end | 35 | end |
35 | 36 | ||
36 | factory :group do | 37 | factory :group do |
spec/models/project_spec.rb
@@ -60,6 +60,7 @@ describe Project do | @@ -60,6 +60,7 @@ describe Project do | ||
60 | it { should ensure_inclusion_of(:wall_enabled).in_array([true, false]) } | 60 | it { should ensure_inclusion_of(:wall_enabled).in_array([true, false]) } |
61 | it { should ensure_inclusion_of(:merge_requests_enabled).in_array([true, false]) } | 61 | it { should ensure_inclusion_of(:merge_requests_enabled).in_array([true, false]) } |
62 | it { should ensure_inclusion_of(:wiki_enabled).in_array([true, false]) } | 62 | it { should ensure_inclusion_of(:wiki_enabled).in_array([true, false]) } |
63 | + it { should ensure_length_of(:issues_tracker_id).is_within(0..255) } | ||
63 | 64 | ||
64 | it "should not allow new projects beyond user limits" do | 65 | it "should not allow new projects beyond user limits" do |
65 | project.stub(:creator).and_return(double(can_create_project?: false, projects_limit: 1)) | 66 | project.stub(:creator).and_return(double(can_create_project?: false, projects_limit: 1)) |
@@ -223,4 +224,24 @@ describe Project do | @@ -223,4 +224,24 @@ describe Project do | ||
223 | end | 224 | end |
224 | end | 225 | end |
225 | 226 | ||
227 | + describe :can_have_issues_tracker_id? do | ||
228 | + let(:project) { create(:project) } | ||
229 | + let(:ext_project) { create(:redmine_project) } | ||
230 | + | ||
231 | + it "should be true for projects with external issues tracker if issues enabled" do | ||
232 | + ext_project.can_have_issues_tracker_id?.should be_true | ||
233 | + end | ||
234 | + | ||
235 | + it "should be false for projects with internal issue tracker if issues enabled" do | ||
236 | + project.can_have_issues_tracker_id?.should be_false | ||
237 | + end | ||
238 | + | ||
239 | + it "should be always false if issues disbled" do | ||
240 | + project.issues_enabled = false | ||
241 | + ext_project.issues_enabled = false | ||
242 | + | ||
243 | + project.can_have_issues_tracker_id?.should be_false | ||
244 | + ext_project.can_have_issues_tracker_id?.should be_false | ||
245 | + end | ||
246 | + end | ||
226 | end | 247 | end |