Commit 39ba934c0a65f571214998e056e925b61f389360
1 parent
e6c0673e
Exists in
master
and in
4 other branches
REpostiry, Team models
Showing
31 changed files
with
329 additions
and
315 deletions
Show diff stats
.gitignore
Gemfile
@@ -123,6 +123,8 @@ group :development do | @@ -123,6 +123,8 @@ group :development do | ||
123 | gem 'better_errors' | 123 | gem 'better_errors' |
124 | gem 'binding_of_caller' | 124 | gem 'binding_of_caller' |
125 | 125 | ||
126 | + gem 'rails_best_practices' | ||
127 | + | ||
126 | # Docs generator | 128 | # Docs generator |
127 | gem "sdoc" | 129 | gem "sdoc" |
128 | end | 130 | end |
Gemfile.lock
@@ -132,6 +132,8 @@ GEM | @@ -132,6 +132,8 @@ GEM | ||
132 | chosen-rails (0.9.8) | 132 | chosen-rails (0.9.8) |
133 | railties (~> 3.0) | 133 | railties (~> 3.0) |
134 | thor (~> 0.14) | 134 | thor (~> 0.14) |
135 | + code_analyzer (0.3.1) | ||
136 | + sexp_processor | ||
135 | coderay (1.0.8) | 137 | coderay (1.0.8) |
136 | coffee-rails (3.2.2) | 138 | coffee-rails (3.2.2) |
137 | coffee-script (>= 2.2.0) | 139 | coffee-script (>= 2.2.0) |
@@ -302,6 +304,7 @@ GEM | @@ -302,6 +304,7 @@ GEM | ||
302 | pg (0.14.1) | 304 | pg (0.14.1) |
303 | polyglot (0.3.3) | 305 | polyglot (0.3.3) |
304 | posix-spawn (0.3.6) | 306 | posix-spawn (0.3.6) |
307 | + progressbar (0.12.0) | ||
305 | pry (0.9.10) | 308 | pry (0.9.10) |
306 | coderay (~> 1.0.5) | 309 | coderay (~> 1.0.5) |
307 | method_source (~> 0.8) | 310 | method_source (~> 0.8) |
@@ -335,6 +338,14 @@ GEM | @@ -335,6 +338,14 @@ GEM | ||
335 | rails-dev-tweaks (0.6.1) | 338 | rails-dev-tweaks (0.6.1) |
336 | actionpack (~> 3.1) | 339 | actionpack (~> 3.1) |
337 | railties (~> 3.1) | 340 | railties (~> 3.1) |
341 | + rails_best_practices (1.13.2) | ||
342 | + activesupport | ||
343 | + awesome_print | ||
344 | + code_analyzer | ||
345 | + colored | ||
346 | + erubis | ||
347 | + i18n | ||
348 | + progressbar | ||
338 | railties (3.2.9) | 349 | railties (3.2.9) |
339 | actionpack (= 3.2.9) | 350 | actionpack (= 3.2.9) |
340 | activesupport (= 3.2.9) | 351 | activesupport (= 3.2.9) |
@@ -393,6 +404,7 @@ GEM | @@ -393,6 +404,7 @@ GEM | ||
393 | multi_json (~> 1.0) | 404 | multi_json (~> 1.0) |
394 | rubyzip | 405 | rubyzip |
395 | settingslogic (2.0.8) | 406 | settingslogic (2.0.8) |
407 | + sexp_processor (4.1.3) | ||
396 | shoulda-matchers (1.3.0) | 408 | shoulda-matchers (1.3.0) |
397 | activesupport (>= 3.0.0) | 409 | activesupport (>= 3.0.0) |
398 | simplecov (0.7.1) | 410 | simplecov (0.7.1) |
@@ -512,6 +524,7 @@ DEPENDENCIES | @@ -512,6 +524,7 @@ DEPENDENCIES | ||
512 | rack-mini-profiler | 524 | rack-mini-profiler |
513 | rails (= 3.2.9) | 525 | rails (= 3.2.9) |
514 | rails-dev-tweaks | 526 | rails-dev-tweaks |
527 | + rails_best_practices | ||
515 | raphael-rails (= 1.5.2) | 528 | raphael-rails (= 1.5.2) |
516 | rb-fsevent | 529 | rb-fsevent |
517 | rb-inotify | 530 | rb-inotify |
app/contexts/commit_load_context.rb
@@ -9,7 +9,7 @@ class CommitLoadContext < BaseContext | @@ -9,7 +9,7 @@ class CommitLoadContext < BaseContext | ||
9 | status: :ok | 9 | status: :ok |
10 | } | 10 | } |
11 | 11 | ||
12 | - commit = project.commit(params[:id]) | 12 | + commit = project.repository.commit(params[:id]) |
13 | 13 | ||
14 | if commit | 14 | if commit |
15 | commit = CommitDecorator.decorate(commit) | 15 | commit = CommitDecorator.decorate(commit) |
app/contexts/notes/load_context.rb
@@ -18,7 +18,7 @@ module Notes | @@ -18,7 +18,7 @@ module Notes | ||
18 | project.snippets.find(target_id).notes.fresh | 18 | project.snippets.find(target_id).notes.fresh |
19 | when "wall" | 19 | when "wall" |
20 | # this is the only case, where the order is DESC | 20 | # this is the only case, where the order is DESC |
21 | - project.common_notes.order("created_at DESC, id DESC").limit(50) | 21 | + project.notes.common.inc_author_project.order("created_at DESC, id DESC").limit(50) |
22 | end | 22 | end |
23 | 23 | ||
24 | @notes = if after_id | 24 | @notes = if after_id |
app/controllers/application_controller.rb
@@ -76,6 +76,12 @@ class ApplicationController < ActionController::Base | @@ -76,6 +76,12 @@ class ApplicationController < ActionController::Base | ||
76 | end | 76 | end |
77 | end | 77 | end |
78 | 78 | ||
79 | + def repository | ||
80 | + @repository ||= project.repository | ||
81 | + rescue Grit::NoSuchPathError | ||
82 | + nil | ||
83 | + end | ||
84 | + | ||
79 | def add_abilities | 85 | def add_abilities |
80 | abilities << Ability | 86 | abilities << Ability |
81 | end | 87 | end |
app/controllers/commits_controller.rb
@@ -9,10 +9,10 @@ class CommitsController < ProjectResourceController | @@ -9,10 +9,10 @@ class CommitsController < ProjectResourceController | ||
9 | before_filter :require_non_empty_project | 9 | before_filter :require_non_empty_project |
10 | 10 | ||
11 | def show | 11 | def show |
12 | - @repo = @project.repo | 12 | + @repo = @project.repository |
13 | @limit, @offset = (params[:limit] || 40), (params[:offset] || 0) | 13 | @limit, @offset = (params[:limit] || 40), (params[:offset] || 0) |
14 | 14 | ||
15 | - @commits = @project.commits(@ref, @path, @limit, @offset) | 15 | + @commits = @repo.commits(@ref, @path, @limit, @offset) |
16 | @commits = CommitDecorator.decorate(@commits) | 16 | @commits = CommitDecorator.decorate(@commits) |
17 | 17 | ||
18 | respond_to do |format| | 18 | respond_to do |format| |
app/controllers/project_resource_controller.rb
app/controllers/refs_controller.rb
@@ -31,7 +31,7 @@ class RefsController < ProjectResourceController | @@ -31,7 +31,7 @@ class RefsController < ProjectResourceController | ||
31 | contents = @tree.contents | 31 | contents = @tree.contents |
32 | @logs = contents.map do |content| | 32 | @logs = contents.map do |content| |
33 | file = params[:path] ? File.join(params[:path], content.name) : content.name | 33 | file = params[:path] ? File.join(params[:path], content.name) : content.name |
34 | - last_commit = @project.commits(@commit.id, file, 1).last | 34 | + last_commit = @repo.commits(@commit.id, file, 1).last |
35 | last_commit = CommitDecorator.decorate(last_commit) | 35 | last_commit = CommitDecorator.decorate(last_commit) |
36 | { | 36 | { |
37 | file_name: content.name, | 37 | file_name: content.name, |
@@ -45,10 +45,10 @@ class RefsController < ProjectResourceController | @@ -45,10 +45,10 @@ class RefsController < ProjectResourceController | ||
45 | def define_tree_vars | 45 | def define_tree_vars |
46 | params[:path] = nil if params[:path].blank? | 46 | params[:path] = nil if params[:path].blank? |
47 | 47 | ||
48 | - @repo = project.repo | ||
49 | - @commit = project.commit(@ref) | 48 | + @repo = project.repository |
49 | + @commit = @repo.commit(@ref) | ||
50 | @commit = CommitDecorator.decorate(@commit) | 50 | @commit = CommitDecorator.decorate(@commit) |
51 | - @tree = Tree.new(@commit.tree, project, @ref, params[:path]) | 51 | + @tree = Tree.new(@commit.tree, @ref, params[:path]) |
52 | @tree = TreeDecorator.new(@tree) | 52 | @tree = TreeDecorator.new(@tree) |
53 | @hex_path = Digest::SHA1.hexdigest(params[:path] || "") | 53 | @hex_path = Digest::SHA1.hexdigest(params[:path] || "") |
54 | 54 |
app/controllers/repositories_controller.rb
@@ -5,19 +5,19 @@ class RepositoriesController < ProjectResourceController | @@ -5,19 +5,19 @@ class RepositoriesController < ProjectResourceController | ||
5 | before_filter :require_non_empty_project | 5 | before_filter :require_non_empty_project |
6 | 6 | ||
7 | def show | 7 | def show |
8 | - @activities = @project.commits_with_refs(20) | 8 | + @activities = @repository.commits_with_refs(20) |
9 | end | 9 | end |
10 | 10 | ||
11 | def branches | 11 | def branches |
12 | - @branches = @project.branches | 12 | + @branches = @repository.branches |
13 | end | 13 | end |
14 | 14 | ||
15 | def tags | 15 | def tags |
16 | - @tags = @project.tags | 16 | + @tags = @repository.tags |
17 | end | 17 | end |
18 | 18 | ||
19 | def stats | 19 | def stats |
20 | - @stats = Gitlab::GitStats.new(@project.repo, @project.root_ref) | 20 | + @stats = Gitlab::GitStats.new(@repository.raw, @repository.root_ref) |
21 | @graph = @stats.graph | 21 | @graph = @stats.graph |
22 | end | 22 | end |
23 | 23 | ||
@@ -27,7 +27,7 @@ class RepositoriesController < ProjectResourceController | @@ -27,7 +27,7 @@ class RepositoriesController < ProjectResourceController | ||
27 | end | 27 | end |
28 | 28 | ||
29 | 29 | ||
30 | - file_path = @project.archive_repo(params[:ref]) | 30 | + file_path = @repository.archive_repo(params[:ref]) |
31 | 31 | ||
32 | if file_path | 32 | if file_path |
33 | # Send file to user | 33 | # Send file to user |
app/decorators/tree_decorator.rb
@@ -6,16 +6,14 @@ class TreeDecorator < ApplicationDecorator | @@ -6,16 +6,14 @@ class TreeDecorator < ApplicationDecorator | ||
6 | part_path = "" | 6 | part_path = "" |
7 | parts = path.split("\/") | 7 | parts = path.split("\/") |
8 | 8 | ||
9 | - #parts = parts[0...-1] if is_blob? | ||
10 | - | ||
11 | - yield(h.link_to("..", "#")) if parts.count > max_links | 9 | + yield('..', nil) if parts.count > max_links |
12 | 10 | ||
13 | parts.each do |part| | 11 | parts.each do |part| |
14 | part_path = File.join(part_path, part) unless part_path.empty? | 12 | part_path = File.join(part_path, part) unless part_path.empty? |
15 | part_path = part if part_path.empty? | 13 | part_path = part if part_path.empty? |
16 | 14 | ||
17 | next unless parts.last(2).include?(part) if parts.count > max_links | 15 | next unless parts.last(2).include?(part) if parts.count > max_links |
18 | - yield(h.link_to(h.truncate(part, length: 40), h.project_tree_path(project, h.tree_join(ref, part_path)))) | 16 | + yield(part, h.tree_join(ref, part_path)) |
19 | end | 17 | end |
20 | end | 18 | end |
21 | end | 19 | end |
@@ -26,7 +24,7 @@ class TreeDecorator < ApplicationDecorator | @@ -26,7 +24,7 @@ class TreeDecorator < ApplicationDecorator | ||
26 | 24 | ||
27 | def up_dir_path | 25 | def up_dir_path |
28 | file = File.join(path, "..") | 26 | file = File.join(path, "..") |
29 | - h.project_tree_path(project, h.tree_join(ref, file)) | 27 | + h.tree_join(ref, file) |
30 | end | 28 | end |
31 | 29 | ||
32 | def readme | 30 | def readme |
app/helpers/application_helper.rb
@@ -62,9 +62,11 @@ module ApplicationHelper | @@ -62,9 +62,11 @@ module ApplicationHelper | ||
62 | end | 62 | end |
63 | 63 | ||
64 | def grouped_options_refs(destination = :tree) | 64 | def grouped_options_refs(destination = :tree) |
65 | + repository = @project.repository | ||
66 | + | ||
65 | options = [ | 67 | options = [ |
66 | - ["Branch", @project.branch_names ], | ||
67 | - [ "Tag", @project.tag_names ] | 68 | + ["Branch", repository.branch_names ], |
69 | + [ "Tag", repository.tag_names ] | ||
68 | ] | 70 | ] |
69 | 71 | ||
70 | # If reference is commit id - | 72 | # If reference is commit id - |
@@ -103,12 +105,12 @@ module ApplicationHelper | @@ -103,12 +105,12 @@ module ApplicationHelper | ||
103 | if @project && !@project.new_record? | 105 | if @project && !@project.new_record? |
104 | project_nav = [ | 106 | project_nav = [ |
105 | { label: "#{@project.name} Issues", url: project_issues_path(@project) }, | 107 | { label: "#{@project.name} Issues", url: project_issues_path(@project) }, |
106 | - { label: "#{@project.name} Commits", url: project_commits_path(@project, @ref || @project.root_ref) }, | 108 | + { label: "#{@project.name} Commits", url: project_commits_path(@project, @ref || @project.repository.root_ref) }, |
107 | { label: "#{@project.name} Merge Requests", url: project_merge_requests_path(@project) }, | 109 | { label: "#{@project.name} Merge Requests", url: project_merge_requests_path(@project) }, |
108 | { label: "#{@project.name} Milestones", url: project_milestones_path(@project) }, | 110 | { label: "#{@project.name} Milestones", url: project_milestones_path(@project) }, |
109 | { label: "#{@project.name} Snippets", url: project_snippets_path(@project) }, | 111 | { label: "#{@project.name} Snippets", url: project_snippets_path(@project) }, |
110 | { label: "#{@project.name} Team", url: project_team_index_path(@project) }, | 112 | { label: "#{@project.name} Team", url: project_team_index_path(@project) }, |
111 | - { label: "#{@project.name} Tree", url: project_tree_path(@project, @ref || @project.root_ref) }, | 113 | + { label: "#{@project.name} Tree", url: project_tree_path(@project, @ref || @project.repository.root_ref) }, |
112 | { label: "#{@project.name} Wall", url: wall_project_path(@project) }, | 114 | { label: "#{@project.name} Wall", url: wall_project_path(@project) }, |
113 | { label: "#{@project.name} Wiki", url: project_wikis_path(@project) }, | 115 | { label: "#{@project.name} Wiki", url: project_wikis_path(@project) }, |
114 | ] | 116 | ] |
app/helpers/events_helper.rb
@@ -20,20 +20,6 @@ module EventsHelper | @@ -20,20 +20,6 @@ module EventsHelper | ||
20 | [event.action_name, target].join(" ") | 20 | [event.action_name, target].join(" ") |
21 | end | 21 | end |
22 | 22 | ||
23 | - def event_image event | ||
24 | - event_image_path = if event.push? | ||
25 | - "event_push.png" | ||
26 | - elsif event.merged? | ||
27 | - "event_mr_merged.png" | ||
28 | - end | ||
29 | - | ||
30 | - return nil unless event_image_path | ||
31 | - | ||
32 | - content_tag :div, class: 'event_icon' do | ||
33 | - image_tag event_image_path | ||
34 | - end | ||
35 | - end | ||
36 | - | ||
37 | def event_filter_link key, tooltip | 23 | def event_filter_link key, tooltip |
38 | key = key.to_s | 24 | key = key.to_s |
39 | 25 |
app/models/ability.rb
@@ -15,17 +15,19 @@ class Ability | @@ -15,17 +15,19 @@ class Ability | ||
15 | def project_abilities(user, project) | 15 | def project_abilities(user, project) |
16 | rules = [] | 16 | rules = [] |
17 | 17 | ||
18 | + team = project.team | ||
19 | + | ||
18 | # Rules based on role in project | 20 | # Rules based on role in project |
19 | - if project.master_access_for?(user) | 21 | + if team.masters.include?(user) |
20 | rules << project_master_rules | 22 | rules << project_master_rules |
21 | 23 | ||
22 | - elsif project.dev_access_for?(user) | 24 | + elsif team.developers.include?(user) |
23 | rules << project_dev_rules | 25 | rules << project_dev_rules |
24 | 26 | ||
25 | - elsif project.report_access_for?(user) | 27 | + elsif team.reporters.include?(user) |
26 | rules << project_report_rules | 28 | rules << project_report_rules |
27 | 29 | ||
28 | - elsif project.guest_access_for?(user) | 30 | + elsif team.guests.include?(user) |
29 | rules << project_guest_rules | 31 | rules << project_guest_rules |
30 | end | 32 | end |
31 | 33 |
app/models/commit.rb
@@ -83,8 +83,8 @@ class Commit | @@ -83,8 +83,8 @@ class Commit | ||
83 | 83 | ||
84 | return result unless from && to | 84 | return result unless from && to |
85 | 85 | ||
86 | - first = project.commit(to.try(:strip)) | ||
87 | - last = project.commit(from.try(:strip)) | 86 | + first = project.repository.commit(to.try(:strip)) |
87 | + last = project.repository.commit(from.try(:strip)) | ||
88 | 88 | ||
89 | if first && last | 89 | if first && last |
90 | result[:same] = (first.id == last.id) | 90 | result[:same] = (first.id == last.id) |
app/models/event.rb
@@ -110,26 +110,6 @@ class Event < ActiveRecord::Base | @@ -110,26 +110,6 @@ class Event < ActiveRecord::Base | ||
110 | target_type == "MergeRequest" | 110 | target_type == "MergeRequest" |
111 | end | 111 | end |
112 | 112 | ||
113 | - def new_issue? | ||
114 | - target_type == "Issue" && | ||
115 | - action == Created | ||
116 | - end | ||
117 | - | ||
118 | - def new_merge_request? | ||
119 | - target_type == "MergeRequest" && | ||
120 | - action == Created | ||
121 | - end | ||
122 | - | ||
123 | - def changed_merge_request? | ||
124 | - target_type == "MergeRequest" && | ||
125 | - [Closed, Reopened].include?(action) | ||
126 | - end | ||
127 | - | ||
128 | - def changed_issue? | ||
129 | - target_type == "Issue" && | ||
130 | - [Closed, Reopened].include?(action) | ||
131 | - end | ||
132 | - | ||
133 | def joined? | 113 | def joined? |
134 | action == Joined | 114 | action == Joined |
135 | end | 115 | end |
app/models/gitlab_ci_service.rb
@@ -29,10 +29,6 @@ class GitlabCiService < Service | @@ -29,10 +29,6 @@ class GitlabCiService < Service | ||
29 | hook.save | 29 | hook.save |
30 | end | 30 | end |
31 | 31 | ||
32 | - def commit_badge_path sha | ||
33 | - project_url + "/status?sha=#{sha}" | ||
34 | - end | ||
35 | - | ||
36 | def commit_status_path sha | 32 | def commit_status_path sha |
37 | project_url + "/builds/#{sha}/status.json?token=#{token}" | 33 | project_url + "/builds/#{sha}/status.json?token=#{token}" |
38 | end | 34 | end |
app/models/note.rb
@@ -4,7 +4,6 @@ | @@ -4,7 +4,6 @@ | ||
4 | # | 4 | # |
5 | # id :integer not null, primary key | 5 | # id :integer not null, primary key |
6 | # note :text | 6 | # note :text |
7 | -# noteable_id :string(255) | ||
8 | # noteable_type :string(255) | 7 | # noteable_type :string(255) |
9 | # author_id :integer | 8 | # author_id :integer |
10 | # created_at :datetime not null | 9 | # created_at :datetime not null |
@@ -12,6 +11,8 @@ | @@ -12,6 +11,8 @@ | ||
12 | # project_id :integer | 11 | # project_id :integer |
13 | # attachment :string(255) | 12 | # attachment :string(255) |
14 | # line_code :string(255) | 13 | # line_code :string(255) |
14 | +# commit_id :string(255) | ||
15 | +# noteable_id :integer | ||
15 | # | 16 | # |
16 | 17 | ||
17 | require 'carrierwave/orm/activerecord' | 18 | require 'carrierwave/orm/activerecord' |
@@ -42,7 +43,7 @@ class Note < ActiveRecord::Base | @@ -42,7 +43,7 @@ class Note < ActiveRecord::Base | ||
42 | 43 | ||
43 | # Scopes | 44 | # Scopes |
44 | scope :for_commits, ->{ where(noteable_type: "Commit") } | 45 | scope :for_commits, ->{ where(noteable_type: "Commit") } |
45 | - scope :common, ->{ where(noteable_id: nil, commit_id: nil) } | 46 | + scope :common, ->{ where(noteable_type: ["", nil]) } |
46 | scope :today, ->{ where("created_at >= :date", date: Date.today) } | 47 | scope :today, ->{ where("created_at >= :date", date: Date.today) } |
47 | scope :last_week, ->{ where("created_at >= :date", date: (Date.today - 7.days)) } | 48 | scope :last_week, ->{ where("created_at >= :date", date: (Date.today - 7.days)) } |
48 | scope :since, ->(day) { where("created_at >= :date", date: (day)) } | 49 | scope :since, ->(day) { where("created_at >= :date", date: (day)) } |
app/models/project.rb
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | # created_at :datetime not null | 9 | # created_at :datetime not null |
10 | # updated_at :datetime not null | 10 | # updated_at :datetime not null |
11 | # private_flag :boolean default(TRUE), not null | 11 | # private_flag :boolean default(TRUE), not null |
12 | -# owner_id :integer | 12 | +# creator_id :integer |
13 | # default_branch :string(255) | 13 | # default_branch :string(255) |
14 | # issues_enabled :boolean default(TRUE), not null | 14 | # issues_enabled :boolean default(TRUE), not null |
15 | # wall_enabled :boolean default(TRUE), not null | 15 | # wall_enabled :boolean default(TRUE), not null |
@@ -75,7 +75,6 @@ class Project < ActiveRecord::Base | @@ -75,7 +75,6 @@ class Project < ActiveRecord::Base | ||
75 | validate :check_limit, :repo_name | 75 | validate :check_limit, :repo_name |
76 | 76 | ||
77 | # Scopes | 77 | # Scopes |
78 | - scope :public_only, where(private_flag: false) | ||
79 | scope :without_user, ->(user) { where("id NOT IN (:ids)", ids: user.authorized_projects.map(&:id) ) } | 78 | scope :without_user, ->(user) { where("id NOT IN (:ids)", ids: user.authorized_projects.map(&:id) ) } |
80 | scope :not_in_group, ->(group) { where("id NOT IN (:ids)", ids: group.project_ids ) } | 79 | scope :not_in_group, ->(group) { where("id NOT IN (:ids)", ids: group.project_ids ) } |
81 | scope :in_namespace, ->(namespace) { where(namespace_id: namespace.id) } | 80 | scope :in_namespace, ->(namespace) { where(namespace_id: namespace.id) } |
@@ -162,6 +161,14 @@ class Project < ActiveRecord::Base | @@ -162,6 +161,14 @@ class Project < ActiveRecord::Base | ||
162 | end | 161 | end |
163 | end | 162 | end |
164 | 163 | ||
164 | + def team | ||
165 | + @team ||= Team.new(self) | ||
166 | + end | ||
167 | + | ||
168 | + def repository | ||
169 | + @repository ||= Repository.new(path_with_namespace, default_branch) | ||
170 | + end | ||
171 | + | ||
165 | def git_error? | 172 | def git_error? |
166 | error_code == :gitolite | 173 | error_code == :gitolite |
167 | end | 174 | end |
@@ -198,10 +205,6 @@ class Project < ActiveRecord::Base | @@ -198,10 +205,6 @@ class Project < ActiveRecord::Base | ||
198 | [Gitlab.config.gitlab.url, path_with_namespace].join("/") | 205 | [Gitlab.config.gitlab.url, path_with_namespace].join("/") |
199 | end | 206 | end |
200 | 207 | ||
201 | - def common_notes | ||
202 | - notes.where(noteable_type: ["", nil]).inc_author_project | ||
203 | - end | ||
204 | - | ||
205 | def build_commit_note(commit) | 208 | def build_commit_note(commit) |
206 | notes.new(commit_id: commit.id, noteable_type: "Commit") | 209 | notes.new(commit_id: commit.id, noteable_type: "Commit") |
207 | end | 210 | end |
@@ -214,14 +217,6 @@ class Project < ActiveRecord::Base | @@ -214,14 +217,6 @@ class Project < ActiveRecord::Base | ||
214 | notes.where(commit_id: commit.id, noteable_type: "Commit").where("line_code IS NOT NULL") | 217 | notes.where(commit_id: commit.id, noteable_type: "Commit").where("line_code IS NOT NULL") |
215 | end | 218 | end |
216 | 219 | ||
217 | - def public? | ||
218 | - !private_flag | ||
219 | - end | ||
220 | - | ||
221 | - def private? | ||
222 | - private_flag | ||
223 | - end | ||
224 | - | ||
225 | def last_activity | 220 | def last_activity |
226 | last_event | 221 | last_event |
227 | end | 222 | end |
@@ -284,33 +279,6 @@ class Project < ActiveRecord::Base | @@ -284,33 +279,6 @@ class Project < ActiveRecord::Base | ||
284 | users_projects.find_by_user_id(user_id) | 279 | users_projects.find_by_user_id(user_id) |
285 | end | 280 | end |
286 | 281 | ||
287 | - # Add user to project | ||
288 | - # with passed access role | ||
289 | - def add_user_to_team(user, access_role) | ||
290 | - add_user_id_to_team(user.id, access_role) | ||
291 | - end | ||
292 | - | ||
293 | - # Add multiple users to project | ||
294 | - # with same access role | ||
295 | - def add_users_to_team(users, access_role) | ||
296 | - add_users_ids_to_team(users.map(&:id), access_role) | ||
297 | - end | ||
298 | - | ||
299 | - # Add user to project | ||
300 | - # with passed access role by user id | ||
301 | - def add_user_id_to_team(user_id, access_role) | ||
302 | - users_projects.create( | ||
303 | - user_id: user_id, | ||
304 | - project_access: access_role | ||
305 | - ) | ||
306 | - end | ||
307 | - | ||
308 | - # Add multiple users to project | ||
309 | - # with same access role by user ids | ||
310 | - def add_users_ids_to_team(users_ids, access_role) | ||
311 | - UsersProject.bulk_import(self, users_ids, access_role) | ||
312 | - end | ||
313 | - | ||
314 | # Update multiple project users | 282 | # Update multiple project users |
315 | # to same access role by user ids | 283 | # to same access role by user ids |
316 | def update_users_ids_to_role(users_ids, access_role) | 284 | def update_users_ids_to_role(users_ids, access_role) |
@@ -322,30 +290,6 @@ class Project < ActiveRecord::Base | @@ -322,30 +290,6 @@ class Project < ActiveRecord::Base | ||
322 | UsersProject.bulk_delete(self, users_ids) | 290 | UsersProject.bulk_delete(self, users_ids) |
323 | end | 291 | end |
324 | 292 | ||
325 | - # Remove all users from project team | ||
326 | - def truncate_team | ||
327 | - UsersProject.truncate_team(self) | ||
328 | - end | ||
329 | - | ||
330 | - # Compatible with all access rights | ||
331 | - # Should be rewrited for new access rights | ||
332 | - def add_access(user, *access) | ||
333 | - access = if access.include?(:admin) | ||
334 | - { project_access: UsersProject::MASTER } | ||
335 | - elsif access.include?(:write) | ||
336 | - { project_access: UsersProject::DEVELOPER } | ||
337 | - else | ||
338 | - { project_access: UsersProject::REPORTER } | ||
339 | - end | ||
340 | - opts = { user: user } | ||
341 | - opts.merge!(access) | ||
342 | - users_projects.create(opts) | ||
343 | - end | ||
344 | - | ||
345 | - def reset_access(user) | ||
346 | - users_projects.where(project_id: self.id, user_id: user.id).destroy if self.id | ||
347 | - end | ||
348 | - | ||
349 | def repository_readers | 293 | def repository_readers |
350 | repository_members[UsersProject::REPORTER] | 294 | repository_members[UsersProject::REPORTER] |
351 | end | 295 | end |
@@ -368,26 +312,6 @@ class Project < ActiveRecord::Base | @@ -368,26 +312,6 @@ class Project < ActiveRecord::Base | ||
368 | keys | 312 | keys |
369 | end | 313 | end |
370 | 314 | ||
371 | - def allow_read_for?(user) | ||
372 | - !users_projects.where(user_id: user.id).empty? | ||
373 | - end | ||
374 | - | ||
375 | - def guest_access_for?(user) | ||
376 | - !users_projects.where(user_id: user.id).empty? | ||
377 | - end | ||
378 | - | ||
379 | - def report_access_for?(user) | ||
380 | - !users_projects.where(user_id: user.id, project_access: [UsersProject::REPORTER, UsersProject::DEVELOPER, UsersProject::MASTER]).empty? | ||
381 | - end | ||
382 | - | ||
383 | - def dev_access_for?(user) | ||
384 | - !users_projects.where(user_id: user.id, project_access: [UsersProject::DEVELOPER, UsersProject::MASTER]).empty? | ||
385 | - end | ||
386 | - | ||
387 | - def master_access_for?(user) | ||
388 | - !users_projects.where(user_id: user.id, project_access: [UsersProject::MASTER]).empty? | ||
389 | - end | ||
390 | - | ||
391 | def transfer(new_namespace) | 315 | def transfer(new_namespace) |
392 | Project.transaction do | 316 | Project.transaction do |
393 | old_namespace = namespace | 317 | old_namespace = namespace |
@@ -586,97 +510,21 @@ class Project < ActiveRecord::Base | @@ -586,97 +510,21 @@ class Project < ActiveRecord::Base | ||
586 | end | 510 | end |
587 | 511 | ||
588 | def empty_repo? | 512 | def empty_repo? |
589 | - !repo_exists? || !has_commits? | ||
590 | - end | ||
591 | - | ||
592 | - def commit(commit_id = nil) | ||
593 | - Commit.find_or_first(repo, commit_id, root_ref) | ||
594 | - end | ||
595 | - | ||
596 | - def fresh_commits(n = 10) | ||
597 | - Commit.fresh_commits(repo, n) | ||
598 | - end | ||
599 | - | ||
600 | - def commits_with_refs(n = 20) | ||
601 | - Commit.commits_with_refs(repo, n) | ||
602 | - end | ||
603 | - | ||
604 | - def commits_since(date) | ||
605 | - Commit.commits_since(repo, date) | ||
606 | - end | ||
607 | - | ||
608 | - def commits(ref, path = nil, limit = nil, offset = nil) | ||
609 | - Commit.commits(repo, ref, path, limit, offset) | ||
610 | - end | ||
611 | - | ||
612 | - def last_commit_for(ref, path = nil) | ||
613 | - commits(ref, path, 1).first | ||
614 | - end | ||
615 | - | ||
616 | - def commits_between(from, to) | ||
617 | - Commit.commits_between(repo, from, to) | 513 | + !repository || repository.empty_repo? |
618 | end | 514 | end |
619 | 515 | ||
620 | def satellite | 516 | def satellite |
621 | @satellite ||= Gitlab::Satellite::Satellite.new(self) | 517 | @satellite ||= Gitlab::Satellite::Satellite.new(self) |
622 | end | 518 | end |
623 | 519 | ||
624 | - def has_post_receive_file? | ||
625 | - !!hook_file | ||
626 | - end | ||
627 | - | ||
628 | - def valid_post_receive_file? | ||
629 | - valid_hook_file == hook_file | ||
630 | - end | ||
631 | - | ||
632 | - def valid_hook_file | ||
633 | - @valid_hook_file ||= File.read(Rails.root.join('lib', 'hooks', 'post-receive')) | ||
634 | - end | ||
635 | - | ||
636 | - def hook_file | ||
637 | - @hook_file ||= begin | ||
638 | - hook_path = File.join(path_to_repo, 'hooks', 'post-receive') | ||
639 | - File.read(hook_path) if File.exists?(hook_path) | ||
640 | - end | ||
641 | - end | ||
642 | - | ||
643 | - # Returns an Array of branch names | ||
644 | - def branch_names | ||
645 | - repo.branches.collect(&:name).sort | ||
646 | - end | ||
647 | - | ||
648 | - # Returns an Array of Branches | ||
649 | - def branches | ||
650 | - repo.branches.sort_by(&:name) | ||
651 | - end | ||
652 | - | ||
653 | - # Returns an Array of tag names | ||
654 | - def tag_names | ||
655 | - repo.tags.collect(&:name).sort.reverse | ||
656 | - end | ||
657 | - | ||
658 | - # Returns an Array of Tags | ||
659 | - def tags | ||
660 | - repo.tags.sort_by(&:name).reverse | ||
661 | - end | ||
662 | - | ||
663 | - # Returns an Array of branch and tag names | ||
664 | - def ref_names | ||
665 | - [branch_names + tag_names].flatten | ||
666 | - end | ||
667 | - | ||
668 | def repo | 520 | def repo |
669 | - @repo ||= Grit::Repo.new(path_to_repo) | 521 | + repository.raw |
670 | end | 522 | end |
671 | 523 | ||
672 | def url_to_repo | 524 | def url_to_repo |
673 | gitolite.url_to_repo(path_with_namespace) | 525 | gitolite.url_to_repo(path_with_namespace) |
674 | end | 526 | end |
675 | 527 | ||
676 | - def path_to_repo | ||
677 | - File.join(Gitlab.config.gitolite.repos_path, "#{path_with_namespace}.git") | ||
678 | - end | ||
679 | - | ||
680 | def namespace_dir | 528 | def namespace_dir |
681 | namespace.try(:path) || '' | 529 | namespace.try(:path) || '' |
682 | end | 530 | end |
@@ -690,21 +538,11 @@ class Project < ActiveRecord::Base | @@ -690,21 +538,11 @@ class Project < ActiveRecord::Base | ||
690 | end | 538 | end |
691 | 539 | ||
692 | def repo_exists? | 540 | def repo_exists? |
693 | - @repo_exists ||= (repo && !repo.branches.empty?) | 541 | + @repo_exists ||= (repository && repository.branches.present?) |
694 | rescue | 542 | rescue |
695 | @repo_exists = false | 543 | @repo_exists = false |
696 | end | 544 | end |
697 | 545 | ||
698 | - def heads | ||
699 | - @heads ||= repo.heads | ||
700 | - end | ||
701 | - | ||
702 | - def tree(fcommit, path = nil) | ||
703 | - fcommit = commit if fcommit == :head | ||
704 | - tree = fcommit.tree | ||
705 | - path ? (tree / path) : tree | ||
706 | - end | ||
707 | - | ||
708 | def open_branches | 546 | def open_branches |
709 | if protected_branches.empty? | 547 | if protected_branches.empty? |
710 | self.repo.heads | 548 | self.repo.heads |
@@ -714,61 +552,8 @@ class Project < ActiveRecord::Base | @@ -714,61 +552,8 @@ class Project < ActiveRecord::Base | ||
714 | end.sort_by(&:name) | 552 | end.sort_by(&:name) |
715 | end | 553 | end |
716 | 554 | ||
717 | - # Discovers the default branch based on the repository's available branches | ||
718 | - # | ||
719 | - # - If no branches are present, returns nil | ||
720 | - # - If one branch is present, returns its name | ||
721 | - # - If two or more branches are present, returns the one that has a name | ||
722 | - # matching root_ref (default_branch or 'master' if default_branch is nil) | ||
723 | - def discover_default_branch | ||
724 | - if branch_names.length == 0 | ||
725 | - nil | ||
726 | - elsif branch_names.length == 1 | ||
727 | - branch_names.first | ||
728 | - else | ||
729 | - branch_names.select { |v| v == root_ref }.first | ||
730 | - end | ||
731 | - end | ||
732 | - | ||
733 | - def has_commits? | ||
734 | - !!commit | ||
735 | - rescue Grit::NoSuchPathError | ||
736 | - false | ||
737 | - end | ||
738 | - | ||
739 | - def root_ref | ||
740 | - default_branch || "master" | ||
741 | - end | ||
742 | - | ||
743 | def root_ref?(branch) | 555 | def root_ref?(branch) |
744 | - root_ref == branch | ||
745 | - end | ||
746 | - | ||
747 | - # Archive Project to .tar.gz | ||
748 | - # | ||
749 | - # Already packed repo archives stored at | ||
750 | - # app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz | ||
751 | - # | ||
752 | - def archive_repo(ref) | ||
753 | - ref = ref || self.root_ref | ||
754 | - commit = self.commit(ref) | ||
755 | - return nil unless commit | ||
756 | - | ||
757 | - # Build file path | ||
758 | - file_name = self.path + "-" + commit.id.to_s + ".tar.gz" | ||
759 | - storage_path = Rails.root.join("tmp", "repositories", self.path_with_namespace) | ||
760 | - file_path = File.join(storage_path, file_name) | ||
761 | - | ||
762 | - # Put files into a directory before archiving | ||
763 | - prefix = self.path + "/" | ||
764 | - | ||
765 | - # Create file if not exists | ||
766 | - unless File.exists?(file_path) | ||
767 | - FileUtils.mkdir_p storage_path | ||
768 | - file = self.repo.archive_to_file(ref, prefix, file_path) | ||
769 | - end | ||
770 | - | ||
771 | - file_path | 556 | + repository.root_ref == branch |
772 | end | 557 | end |
773 | 558 | ||
774 | def ssh_url_to_repo | 559 | def ssh_url_to_repo |
@@ -0,0 +1,163 @@ | @@ -0,0 +1,163 @@ | ||
1 | +class Repository | ||
2 | + # Repository directory name with namespace direcotry | ||
3 | + # Examples: | ||
4 | + # gitlab/gitolite | ||
5 | + # diaspora | ||
6 | + # | ||
7 | + attr_accessor :path_with_namespace | ||
8 | + | ||
9 | + # Grit repo object | ||
10 | + attr_accessor :repo | ||
11 | + | ||
12 | + # Default branch in the repository | ||
13 | + attr_accessor :root_ref | ||
14 | + | ||
15 | + def initialize(path_with_namespace, root_ref = 'master') | ||
16 | + @root_ref = root_ref | ||
17 | + @path_with_namespace = path_with_namespace | ||
18 | + @repo = Grit::Repo.new(path_to_repo) | ||
19 | + end | ||
20 | + | ||
21 | + def raw | ||
22 | + repo | ||
23 | + end | ||
24 | + | ||
25 | + def path_to_repo | ||
26 | + @path_to_repo ||= File.join(Gitlab.config.gitolite.repos_path, "#{path_with_namespace}.git") | ||
27 | + end | ||
28 | + | ||
29 | + def commit(commit_id = nil) | ||
30 | + Commit.find_or_first(repo, commit_id, root_ref) | ||
31 | + end | ||
32 | + | ||
33 | + def fresh_commits(n = 10) | ||
34 | + Commit.fresh_commits(repo, n) | ||
35 | + end | ||
36 | + | ||
37 | + def commits_with_refs(n = 20) | ||
38 | + Commit.commits_with_refs(repo, n) | ||
39 | + end | ||
40 | + | ||
41 | + def commits_since(date) | ||
42 | + Commit.commits_since(repo, date) | ||
43 | + end | ||
44 | + | ||
45 | + def commits(ref, path = nil, limit = nil, offset = nil) | ||
46 | + Commit.commits(repo, ref, path, limit, offset) | ||
47 | + end | ||
48 | + | ||
49 | + def last_commit_for(ref, path = nil) | ||
50 | + commits(ref, path, 1).first | ||
51 | + end | ||
52 | + | ||
53 | + def commits_between(from, to) | ||
54 | + Commit.commits_between(repo, from, to) | ||
55 | + end | ||
56 | + | ||
57 | + def has_post_receive_file? | ||
58 | + !!hook_file | ||
59 | + end | ||
60 | + | ||
61 | + def valid_post_receive_file? | ||
62 | + valid_hook_file == hook_file | ||
63 | + end | ||
64 | + | ||
65 | + def valid_hook_file | ||
66 | + @valid_hook_file ||= File.read(Rails.root.join('lib', 'hooks', 'post-receive')) | ||
67 | + end | ||
68 | + | ||
69 | + def hook_file | ||
70 | + @hook_file ||= begin | ||
71 | + hook_path = File.join(path_to_repo, 'hooks', 'post-receive') | ||
72 | + File.read(hook_path) if File.exists?(hook_path) | ||
73 | + end | ||
74 | + end | ||
75 | + | ||
76 | + # Returns an Array of branch names | ||
77 | + def branch_names | ||
78 | + repo.branches.collect(&:name).sort | ||
79 | + end | ||
80 | + | ||
81 | + # Returns an Array of Branches | ||
82 | + def branches | ||
83 | + repo.branches.sort_by(&:name) | ||
84 | + end | ||
85 | + | ||
86 | + # Returns an Array of tag names | ||
87 | + def tag_names | ||
88 | + repo.tags.collect(&:name).sort.reverse | ||
89 | + end | ||
90 | + | ||
91 | + # Returns an Array of Tags | ||
92 | + def tags | ||
93 | + repo.tags.sort_by(&:name).reverse | ||
94 | + end | ||
95 | + | ||
96 | + # Returns an Array of branch and tag names | ||
97 | + def ref_names | ||
98 | + [branch_names + tag_names].flatten | ||
99 | + end | ||
100 | + | ||
101 | + def heads | ||
102 | + @heads ||= repo.heads | ||
103 | + end | ||
104 | + | ||
105 | + def tree(fcommit, path = nil) | ||
106 | + fcommit = commit if fcommit == :head | ||
107 | + tree = fcommit.tree | ||
108 | + path ? (tree / path) : tree | ||
109 | + end | ||
110 | + | ||
111 | + def has_commits? | ||
112 | + !!commit | ||
113 | + rescue Grit::NoSuchPathError | ||
114 | + false | ||
115 | + end | ||
116 | + | ||
117 | + def empty_repo? | ||
118 | + !has_commits? | ||
119 | + end | ||
120 | + | ||
121 | + # Discovers the default branch based on the repository's available branches | ||
122 | + # | ||
123 | + # - If no branches are present, returns nil | ||
124 | + # - If one branch is present, returns its name | ||
125 | + # - If two or more branches are present, returns the one that has a name | ||
126 | + # matching root_ref (default_branch or 'master' if default_branch is nil) | ||
127 | + def discover_default_branch | ||
128 | + if branch_names.length == 0 | ||
129 | + nil | ||
130 | + elsif branch_names.length == 1 | ||
131 | + branch_names.first | ||
132 | + else | ||
133 | + branch_names.select { |v| v == root_ref }.first | ||
134 | + end | ||
135 | + end | ||
136 | + | ||
137 | + # Archive Project to .tar.gz | ||
138 | + # | ||
139 | + # Already packed repo archives stored at | ||
140 | + # app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz | ||
141 | + # | ||
142 | + def archive_repo(ref) | ||
143 | + ref = ref || self.root_ref | ||
144 | + commit = self.commit(ref) | ||
145 | + return nil unless commit | ||
146 | + | ||
147 | + # Build file path | ||
148 | + file_name = self.path + "-" + commit.id.to_s + ".tar.gz" | ||
149 | + storage_path = Rails.root.join("tmp", "repositories", self.path_with_namespace) | ||
150 | + file_path = File.join(storage_path, file_name) | ||
151 | + | ||
152 | + # Put files into a directory before archiving | ||
153 | + prefix = self.path + "/" | ||
154 | + | ||
155 | + # Create file if not exists | ||
156 | + unless File.exists?(file_path) | ||
157 | + FileUtils.mkdir_p storage_path | ||
158 | + file = self.repo.archive_to_file(ref, prefix, file_path) | ||
159 | + end | ||
160 | + | ||
161 | + file_path | ||
162 | + end | ||
163 | +end |
@@ -0,0 +1,49 @@ | @@ -0,0 +1,49 @@ | ||
1 | +class Team | ||
2 | + attr_accessor :project | ||
3 | + | ||
4 | + def initialize(project) | ||
5 | + @project = project | ||
6 | + @roles = UsersProject.roles_hash | ||
7 | + end | ||
8 | + | ||
9 | + def add_user(user, access) | ||
10 | + add_users_ids([user.id], access) | ||
11 | + end | ||
12 | + | ||
13 | + def add_users(users, access) | ||
14 | + add_users_ids(users.map(&:id), access) | ||
15 | + end | ||
16 | + | ||
17 | + def add_users_ids(users_ids, access) | ||
18 | + UsersProject.add_users_into_projects( | ||
19 | + [project.id], | ||
20 | + user_ids, | ||
21 | + access | ||
22 | + ) | ||
23 | + end | ||
24 | + | ||
25 | + # Remove all users from project team | ||
26 | + def truncate | ||
27 | + UsersProject.truncate_team(project) | ||
28 | + end | ||
29 | + | ||
30 | + def members | ||
31 | + project.users_projects | ||
32 | + end | ||
33 | + | ||
34 | + def guests | ||
35 | + members.guests.map(&:user) | ||
36 | + end | ||
37 | + | ||
38 | + def reporters | ||
39 | + members.reporters.map(&:user) | ||
40 | + end | ||
41 | + | ||
42 | + def developers | ||
43 | + members.developers.map(&:user) | ||
44 | + end | ||
45 | + | ||
46 | + def masters | ||
47 | + members.masters.map(&:user) | ||
48 | + end | ||
49 | +end |
app/models/tree.rb
1 | class Tree | 1 | class Tree |
2 | include Linguist::BlobHelper | 2 | include Linguist::BlobHelper |
3 | - attr_accessor :path, :tree, :project, :ref | 3 | + |
4 | + attr_accessor :path, :tree, :ref | ||
4 | 5 | ||
5 | delegate :contents, :basename, :name, :data, :mime_type, | 6 | delegate :contents, :basename, :name, :data, :mime_type, |
6 | :mode, :size, :text?, :colorize, to: :tree | 7 | :mode, :size, :text?, :colorize, to: :tree |
7 | 8 | ||
8 | - def initialize(raw_tree, project, ref = nil, path = nil) | ||
9 | - @project, @ref, @path = project, ref, path | 9 | + def initialize(raw_tree, ref = nil, path = nil) |
10 | + @ref, @path = ref, path | ||
10 | @tree = if path.present? | 11 | @tree = if path.present? |
11 | raw_tree / path | 12 | raw_tree / path |
12 | else | 13 | else |
app/models/users_project.rb
@@ -42,7 +42,21 @@ class UsersProject < ActiveRecord::Base | @@ -42,7 +42,21 @@ class UsersProject < ActiveRecord::Base | ||
42 | scope :in_project, ->(project) { where(project_id: project.id) } | 42 | scope :in_project, ->(project) { where(project_id: project.id) } |
43 | 43 | ||
44 | class << self | 44 | class << self |
45 | - def add_users_into_projects(project_ids, user_ids, project_access) | 45 | + |
46 | + # Add users to project teams with passed access option | ||
47 | + # | ||
48 | + # access can be an integer representing a access code | ||
49 | + # or symbol like :master representing role | ||
50 | + # | ||
51 | + def add_users_into_projects(project_ids, user_ids, access) | ||
52 | + project_access = if @roles.has_key?(access) | ||
53 | + @roles[access] | ||
54 | + elsif @roles.values.include?(access) | ||
55 | + access | ||
56 | + else | ||
57 | + raise "Non valid access" | ||
58 | + end | ||
59 | + | ||
46 | UsersProject.transaction do | 60 | UsersProject.transaction do |
47 | project_ids.each do |project_id| | 61 | project_ids.each do |project_id| |
48 | user_ids.each do |user_id| | 62 | user_ids.each do |user_id| |
@@ -141,6 +155,15 @@ class UsersProject < ActiveRecord::Base | @@ -141,6 +155,15 @@ class UsersProject < ActiveRecord::Base | ||
141 | add_users_into_projects(project_ids, [user.id], project_access) | 155 | add_users_into_projects(project_ids, [user.id], project_access) |
142 | end | 156 | end |
143 | 157 | ||
158 | + def roles_hash | ||
159 | + { | ||
160 | + guest: GUEST, | ||
161 | + reporter: REPORTER, | ||
162 | + developer: DEVELOPER, | ||
163 | + master: MASTER | ||
164 | + } | ||
165 | + end | ||
166 | + | ||
144 | def access_roles | 167 | def access_roles |
145 | { | 168 | { |
146 | "Guest" => GUEST, | 169 | "Guest" => GUEST, |
app/views/commits/_head.html.haml
@@ -2,19 +2,19 @@ | @@ -2,19 +2,19 @@ | ||
2 | %li= render partial: 'shared/ref_switcher', locals: {destination: 'commits'} | 2 | %li= render partial: 'shared/ref_switcher', locals: {destination: 'commits'} |
3 | 3 | ||
4 | = nav_link(controller: [:commit, :commits]) do | 4 | = nav_link(controller: [:commit, :commits]) do |
5 | - = link_to 'Commits', project_commits_path(@project, @project.root_ref) | 5 | + = link_to 'Commits', project_commits_path(@project, @repository.root_ref) |
6 | = nav_link(controller: :compare) do | 6 | = nav_link(controller: :compare) do |
7 | = link_to 'Compare', project_compare_index_path(@project) | 7 | = link_to 'Compare', project_compare_index_path(@project) |
8 | 8 | ||
9 | = nav_link(html_options: {class: branches_tab_class}) do | 9 | = nav_link(html_options: {class: branches_tab_class}) do |
10 | = link_to project_repository_path(@project) do | 10 | = link_to project_repository_path(@project) do |
11 | Branches | 11 | Branches |
12 | - %span.badge= @project.branches.length | 12 | + %span.badge= @repository.branches.length |
13 | 13 | ||
14 | = nav_link(controller: :repositories, action: :tags) do | 14 | = nav_link(controller: :repositories, action: :tags) do |
15 | = link_to tags_project_repository_path(@project) do | 15 | = link_to tags_project_repository_path(@project) do |
16 | Tags | 16 | Tags |
17 | - %span.badge= @project.tags.length | 17 | + %span.badge= @repository.tags.length |
18 | 18 | ||
19 | = nav_link(controller: :repositories, action: :stats) do | 19 | = nav_link(controller: :repositories, action: :stats) do |
20 | = link_to stats_project_repository_path(@project) do | 20 | = link_to stats_project_repository_path(@project) do |
app/views/layouts/project_resource.html.haml
@@ -14,9 +14,9 @@ | @@ -14,9 +14,9 @@ | ||
14 | - if @project.repo_exists? | 14 | - if @project.repo_exists? |
15 | - if can? current_user, :download_code, @project | 15 | - if can? current_user, :download_code, @project |
16 | = nav_link(controller: %w(tree blob blame)) do | 16 | = nav_link(controller: %w(tree blob blame)) do |
17 | - = link_to 'Files', project_tree_path(@project, @ref || @project.root_ref) | 17 | + = link_to 'Files', project_tree_path(@project, @ref || @repository.root_ref) |
18 | = nav_link(controller: %w(commit commits compare repositories protected_branches)) do | 18 | = nav_link(controller: %w(commit commits compare repositories protected_branches)) do |
19 | - = link_to "Commits", project_commits_path(@project, @ref || @project.root_ref) | 19 | + = link_to "Commits", project_commits_path(@project, @ref || @repository.root_ref) |
20 | = nav_link(path: 'projects#graph') do | 20 | = nav_link(path: 'projects#graph') do |
21 | = link_to "Network", graph_project_path(@project) | 21 | = link_to "Network", graph_project_path(@project) |
22 | 22 |
app/views/repositories/_branch.html.haml
@@ -8,7 +8,7 @@ | @@ -8,7 +8,7 @@ | ||
8 | - else | 8 | - else |
9 | %i.icon-unlock | 9 | %i.icon-unlock |
10 | %strong= truncate(branch.name, length: 60) | 10 | %strong= truncate(branch.name, length: 60) |
11 | - - if branch.name == @project.root_ref | 11 | + - if branch.name == @repository.root_ref |
12 | %span.label default | 12 | %span.label default |
13 | %td | 13 | %td |
14 | = link_to project_commit_path(@project, commit.id), class: 'commit_short_id' do | 14 | = link_to project_commit_path(@project, commit.id), class: 'commit_short_id' do |
app/views/repositories/stats.html.haml
@@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
7 | %b Total commits: | 7 | %b Total commits: |
8 | %span= @stats.commits_count | 8 | %span= @stats.commits_count |
9 | %p | 9 | %p |
10 | - %b Total files in #{@project.root_ref}: | 10 | + %b Total files in #{@repository.root_ref}: |
11 | %span= @stats.files_count | 11 | %span= @stats.files_count |
12 | %p | 12 | %p |
13 | %b Authors: | 13 | %b Authors: |
app/views/tree/_tree.html.haml
@@ -3,9 +3,13 @@ | @@ -3,9 +3,13 @@ | ||
3 | %span.arrow | 3 | %span.arrow |
4 | = link_to project_tree_path(@project, @ref) do | 4 | = link_to project_tree_path(@project, @ref) do |
5 | = @project.name | 5 | = @project.name |
6 | - - tree.breadcrumbs(6) do |link| | 6 | + - tree.breadcrumbs(6) do |title, path| |
7 | \/ | 7 | \/ |
8 | - %li= link | 8 | + %li |
9 | + - if path | ||
10 | + = link_to truncate(title, length: 40), project_tree_path(@project, path) | ||
11 | + - else | ||
12 | + = link_to title, '#' | ||
9 | 13 | ||
10 | .clear | 14 | .clear |
11 | %div.tree_progress | 15 | %div.tree_progress |
@@ -26,7 +30,7 @@ | @@ -26,7 +30,7 @@ | ||
26 | %tr.tree-item | 30 | %tr.tree-item |
27 | %td.tree-item-file-name | 31 | %td.tree-item-file-name |
28 | = image_tag "file_empty.png", size: '16x16' | 32 | = image_tag "file_empty.png", size: '16x16' |
29 | - = link_to "..", tree.up_dir_path | 33 | + = link_to "..", project_tree_path(@project, tree.up_dir_path) |
30 | %td | 34 | %td |
31 | %td | 35 | %td |
32 | %td | 36 | %td |
lib/extracts_path.rb
@@ -68,7 +68,7 @@ module ExtractsPath | @@ -68,7 +68,7 @@ module ExtractsPath | ||
68 | id = input | 68 | id = input |
69 | id += '/' unless id.ends_with?('/') | 69 | id += '/' unless id.ends_with?('/') |
70 | 70 | ||
71 | - valid_refs = @project.ref_names | 71 | + valid_refs = @project.repository.ref_names |
72 | valid_refs.select! { |v| id.start_with?("#{v}/") } | 72 | valid_refs.select! { |v| id.start_with?("#{v}/") } |
73 | 73 | ||
74 | if valid_refs.length != 1 | 74 | if valid_refs.length != 1 |
@@ -114,9 +114,9 @@ module ExtractsPath | @@ -114,9 +114,9 @@ module ExtractsPath | ||
114 | 114 | ||
115 | @id = File.join(@ref, @path) | 115 | @id = File.join(@ref, @path) |
116 | 116 | ||
117 | - @commit = CommitDecorator.decorate(@project.commit(@ref)) | 117 | + @commit = CommitDecorator.decorate(@project.repository.commit(@ref)) |
118 | 118 | ||
119 | - @tree = Tree.new(@commit.tree, @project, @ref, @path) | 119 | + @tree = Tree.new(@commit.tree, @ref, @path) |
120 | @tree = TreeDecorator.new(@tree) | 120 | @tree = TreeDecorator.new(@tree) |
121 | 121 | ||
122 | raise InvalidPathError if @tree.invalid? | 122 | raise InvalidPathError if @tree.invalid? |
spec/models/note_spec.rb
@@ -4,7 +4,6 @@ | @@ -4,7 +4,6 @@ | ||
4 | # | 4 | # |
5 | # id :integer not null, primary key | 5 | # id :integer not null, primary key |
6 | # note :text | 6 | # note :text |
7 | -# noteable_id :string(255) | ||
8 | # noteable_type :string(255) | 7 | # noteable_type :string(255) |
9 | # author_id :integer | 8 | # author_id :integer |
10 | # created_at :datetime not null | 9 | # created_at :datetime not null |
@@ -12,6 +11,8 @@ | @@ -12,6 +11,8 @@ | ||
12 | # project_id :integer | 11 | # project_id :integer |
13 | # attachment :string(255) | 12 | # attachment :string(255) |
14 | # line_code :string(255) | 13 | # line_code :string(255) |
14 | +# commit_id :string(255) | ||
15 | +# noteable_id :integer | ||
15 | # | 16 | # |
16 | 17 | ||
17 | require 'spec_helper' | 18 | require 'spec_helper' |
spec/models/project_spec.rb
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | # created_at :datetime not null | 9 | # created_at :datetime not null |
10 | # updated_at :datetime not null | 10 | # updated_at :datetime not null |
11 | # private_flag :boolean default(TRUE), not null | 11 | # private_flag :boolean default(TRUE), not null |
12 | -# owner_id :integer | 12 | +# creator_id :integer |
13 | # default_branch :string(255) | 13 | # default_branch :string(255) |
14 | # issues_enabled :boolean default(TRUE), not null | 14 | # issues_enabled :boolean default(TRUE), not null |
15 | # wall_enabled :boolean default(TRUE), not null | 15 | # wall_enabled :boolean default(TRUE), not null |