Commit cb59aade4e568e6146a966362385ac41af4dc604

Authored by Dmitriy Zaporozhets
1 parent 74f8bc72

Cleaning and refactoring

app/controllers/admin/projects_controller.rb
@@ -31,8 +31,7 @@ class Admin::ProjectsController < ApplicationController @@ -31,8 +31,7 @@ class Admin::ProjectsController < ApplicationController
31 UsersProject.bulk_import( 31 UsersProject.bulk_import(
32 @admin_project, 32 @admin_project,
33 params[:user_ids], 33 params[:user_ids],
34 - params[:project_access],  
35 - params[:repo_access] 34 + params[:project_access]
36 ) 35 )
37 36
38 redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.' 37 redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.'
app/controllers/admin/users_controller.rb
@@ -23,8 +23,7 @@ class Admin::UsersController < ApplicationController @@ -23,8 +23,7 @@ class Admin::UsersController < ApplicationController
23 UsersProject.user_bulk_import( 23 UsersProject.user_bulk_import(
24 @admin_user, 24 @admin_user,
25 params[:project_ids], 25 params[:project_ids],
26 - params[:project_access],  
27 - params[:repo_access] 26 + params[:project_access]
28 ) 27 )
29 28
30 redirect_to [:admin, @admin_user], notice: 'Teams were successfully updated.' 29 redirect_to [:admin, @admin_user], notice: 'Teams were successfully updated.'
app/models/project.rb
@@ -54,27 +54,6 @@ class Project < ActiveRecord::Base @@ -54,27 +54,6 @@ class Project < ActiveRecord::Base
54 UsersProject.access_roles 54 UsersProject.access_roles
55 end 55 end
56 56
57 - def repository  
58 - @repository ||= Repository.new(self)  
59 - end  
60 -  
61 - delegate :repo,  
62 - :url_to_repo,  
63 - :path_to_repo,  
64 - :update_repository,  
65 - :destroy_repository,  
66 - :tags,  
67 - :repo_exists?,  
68 - :commit,  
69 - :commits,  
70 - :commits_with_refs,  
71 - :tree,  
72 - :heads,  
73 - :commits_since,  
74 - :fresh_commits,  
75 - :commits_between,  
76 - :to => :repository, :prefix => nil  
77 -  
78 def to_param 57 def to_param
79 code 58 code
80 end 59 end
@@ -213,18 +192,6 @@ class Project < ActiveRecord::Base @@ -213,18 +192,6 @@ class Project < ActiveRecord::Base
213 keys.map(&:identifier) 192 keys.map(&:identifier)
214 end 193 end
215 194
216 - def readers  
217 - @readers ||= users_projects.includes(:user).map(&:user)  
218 - end  
219 -  
220 - def writers  
221 - @writers ||= users_projects.includes(:user).map(&:user)  
222 - end  
223 -  
224 - def admins  
225 - @admins ||= users_projects.includes(:user).where(:project_access => UsersProject::MASTER).map(&:user)  
226 - end  
227 -  
228 def allow_read_for?(user) 195 def allow_read_for?(user)
229 !users_projects.where(:user_id => user.id).empty? 196 !users_projects.where(:user_id => user.id).empty?
230 end 197 end
@@ -269,10 +236,6 @@ class Project < ActiveRecord::Base @@ -269,10 +236,6 @@ class Project < ActiveRecord::Base
269 end 236 end
270 end 237 end
271 238
272 - def last_activity_date_cached(expire = 1.hour)  
273 - last_activity_date  
274 - end  
275 -  
276 def check_limit 239 def check_limit
277 unless owner.can_create_project? 240 unless owner.can_create_project?
278 errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it") 241 errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it")
@@ -293,7 +256,127 @@ class Project &lt; ActiveRecord::Base @@ -293,7 +256,127 @@ class Project &lt; ActiveRecord::Base
293 errors.add(:path, "Invalid repository path") 256 errors.add(:path, "Invalid repository path")
294 false 257 false
295 end 258 end
  259 +
  260 + def commit(commit_id = nil)
  261 + commit = if commit_id
  262 + repo.commits(commit_id).first
  263 + else
  264 + repo.commits.first
  265 + end
  266 + Commit.new(commit) if commit
  267 + end
  268 +
  269 + def fresh_commits(n = 10)
  270 + commits = heads.map do |h|
  271 + repo.commits(h.name, n).map { |c| Commit.new(c, h) }
  272 + end.flatten.uniq { |c| c.id }
  273 +
  274 + commits.sort! do |x, y|
  275 + y.committed_date <=> x.committed_date
  276 + end
  277 +
  278 + commits[0...n]
  279 + end
  280 +
  281 + def commits_with_refs(n = 20)
  282 + commits = repo.branches.map { |ref| Commit.new(ref.commit, ref) }
  283 +
  284 + commits.sort! do |x, y|
  285 + y.committed_date <=> x.committed_date
  286 + end
  287 +
  288 + commits[0..n]
  289 + end
  290 +
  291 + def commits_since(date)
  292 + commits = heads.map do |h|
  293 + repo.log(h.name, nil, :since => date).each { |c| Commit.new(c, h) }
  294 + end.flatten.uniq { |c| c.id }
  295 +
  296 + commits.sort! do |x, y|
  297 + y.committed_date <=> x.committed_date
  298 + end
  299 +
  300 + commits
  301 + end
  302 +
  303 + def commits(ref, path = nil, limit = nil, offset = nil)
  304 + if path
  305 + repo.log(ref, path, :max_count => limit, :skip => offset)
  306 + elsif limit && offset
  307 + repo.commits(ref, limit, offset)
  308 + else
  309 + repo.commits(ref)
  310 + end.map{ |c| Commit.new(c) }
  311 + end
  312 +
  313 + def commits_between(from, to)
  314 + repo.commits_between(from, to).map { |c| Commit.new(c) }
  315 + end
  316 +
  317 + def project_id
  318 + self.id
  319 + end
  320 +
  321 + def write_hooks
  322 + %w(post-receive).each do |hook|
  323 + write_hook(hook, File.read(File.join(Rails.root, 'lib', "#{hook}-hook")))
  324 + end
  325 + end
  326 +
  327 + def write_hook(name, content)
  328 + hook_file = File.join(path_to_repo, 'hooks', name)
  329 +
  330 + File.open(hook_file, 'w') do |f|
  331 + f.write(content)
  332 + end
  333 +
  334 + File.chmod(0775, hook_file)
  335 + end
  336 +
  337 + def repo
  338 + @repo ||= Grit::Repo.new(path_to_repo)
  339 + end
  340 +
  341 + def url_to_repo
  342 + Gitlabhq::GitHost.url_to_repo(path)
  343 + end
  344 +
  345 + def path_to_repo
  346 + File.join(GIT_HOST["base_path"], "#{path}.git")
  347 + end
  348 +
  349 + def update_repository
  350 + Gitlabhq::GitHost.system.update_project(path, self)
  351 +
  352 + write_hooks if File.exists?(path_to_repo)
  353 + end
  354 +
  355 + def destroy_repository
  356 + Gitlabhq::GitHost.system.destroy_project(self)
  357 + end
  358 +
  359 + def repo_exists?
  360 + @repo_exists ||= (repo && !repo.branches.empty?)
  361 + rescue
  362 + @repo_exists = false
  363 + end
  364 +
  365 + def tags
  366 + repo.tags.map(&:name).sort.reverse
  367 + end
  368 +
  369 + def heads
  370 + @heads ||= repo.heads
  371 + end
  372 +
  373 + def tree(fcommit, path = nil)
  374 + fcommit = commit if fcommit == :head
  375 + tree = fcommit.tree
  376 + path ? (tree / path) : tree
  377 + end
296 end 378 end
  379 +
297 # == Schema Information 380 # == Schema Information
298 # 381 #
299 # Table name: projects 382 # Table name: projects
app/models/protected_branch.rb
@@ -7,9 +7,7 @@ class ProtectedBranch &lt; ActiveRecord::Base @@ -7,9 +7,7 @@ class ProtectedBranch &lt; ActiveRecord::Base
7 after_destroy :update_repository 7 after_destroy :update_repository
8 8
9 def update_repository 9 def update_repository
10 - Gitlabhq::GitHost.system.new.configure do |c|  
11 - c.update_project(project.path, project)  
12 - end 10 + Gitlabhq::GitHost.system.update_project(project.path, project)
13 end 11 end
14 12
15 def commit 13 def commit
app/models/repository.rb
@@ -10,135 +10,4 @@ class Repository @@ -10,135 +10,4 @@ class Repository
10 def self.access_options 10 def self.access_options
11 {} 11 {}
12 end 12 end
13 -  
14 - def initialize(project)  
15 - @project = project  
16 - end  
17 -  
18 - def path  
19 - @path ||= project.path  
20 - end  
21 -  
22 - def project_id  
23 - project.id  
24 - end  
25 -  
26 - def write_hooks  
27 - %w(post-receive).each do |hook|  
28 - write_hook(hook, File.read(File.join(Rails.root, 'lib', "#{hook}-hook")))  
29 - end  
30 - end  
31 -  
32 - def write_hook(name, content)  
33 - hook_file = File.join(project.path_to_repo, 'hooks', name)  
34 -  
35 - File.open(hook_file, 'w') do |f|  
36 - f.write(content)  
37 - end  
38 -  
39 - File.chmod(0775, hook_file)  
40 - end  
41 -  
42 - def repo  
43 - @repo ||= Grit::Repo.new(project.path_to_repo)  
44 - end  
45 -  
46 - def url_to_repo  
47 - Gitlabhq::GitHost.url_to_repo(path)  
48 - end  
49 -  
50 - def path_to_repo  
51 - File.join(GIT_HOST["base_path"], "#{path}.git")  
52 - end  
53 -  
54 - def update_repository  
55 - Gitlabhq::GitHost.system.new.configure do |c|  
56 - c.update_project(path, project)  
57 - end  
58 -  
59 - write_hooks if File.exists?(project.path_to_repo)  
60 - end  
61 -  
62 - def destroy_repository  
63 - Gitlabhq::GitHost.system.new.configure do |c|  
64 - c.destroy_project(@project)  
65 - end  
66 - end  
67 -  
68 - def repo_exists?  
69 - @repo_exists ||= (repo && !repo.branches.empty?)  
70 - rescue  
71 - @repo_exists = false  
72 - end  
73 -  
74 - def tags  
75 - repo.tags.map(&:name).sort.reverse  
76 - end  
77 -  
78 - def heads  
79 - @heads ||= repo.heads  
80 - end  
81 -  
82 - def tree(fcommit, path = nil)  
83 - fcommit = commit if fcommit == :head  
84 - tree = fcommit.tree  
85 - path ? (tree / path) : tree  
86 - end  
87 -  
88 - def commit(commit_id = nil)  
89 - commit = if commit_id  
90 - repo.commits(commit_id).first  
91 - else  
92 - repo.commits.first  
93 - end  
94 - Commit.new(commit) if commit  
95 - end  
96 -  
97 - def fresh_commits(n = 10)  
98 - commits = heads.map do |h|  
99 - repo.commits(h.name, n).map { |c| Commit.new(c, h) }  
100 - end.flatten.uniq { |c| c.id }  
101 -  
102 - commits.sort! do |x, y|  
103 - y.committed_date <=> x.committed_date  
104 - end  
105 -  
106 - commits[0...n]  
107 - end  
108 -  
109 - def commits_with_refs(n = 20)  
110 - commits = repo.branches.map { |ref| Commit.new(ref.commit, ref) }  
111 -  
112 - commits.sort! do |x, y|  
113 - y.committed_date <=> x.committed_date  
114 - end  
115 -  
116 - commits[0..n]  
117 - end  
118 -  
119 - def commits_since(date)  
120 - commits = heads.map do |h|  
121 - repo.log(h.name, nil, :since => date).each { |c| Commit.new(c, h) }  
122 - end.flatten.uniq { |c| c.id }  
123 -  
124 - commits.sort! do |x, y|  
125 - y.committed_date <=> x.committed_date  
126 - end  
127 -  
128 - commits  
129 - end  
130 -  
131 - def commits(ref, path = nil, limit = nil, offset = nil)  
132 - if path  
133 - repo.log(ref, path, :max_count => limit, :skip => offset)  
134 - elsif limit && offset  
135 - repo.commits(ref, limit, offset)  
136 - else  
137 - repo.commits(ref)  
138 - end.map{ |c| Commit.new(c) }  
139 - end  
140 -  
141 - def commits_between(from, to)  
142 - repo.commits_between(from, to).map { |c| Commit.new(c) }  
143 - end  
144 end 13 end
app/models/users_project.rb
@@ -18,7 +18,7 @@ class UsersProject &lt; ActiveRecord::Base @@ -18,7 +18,7 @@ class UsersProject &lt; ActiveRecord::Base
18 18
19 delegate :name, :email, :to => :user, :prefix => true 19 delegate :name, :email, :to => :user, :prefix => true
20 20
21 - def self.bulk_import(project, user_ids, project_access, repo_access) 21 + def self.bulk_import(project, user_ids, project_access)
22 UsersProject.transaction do 22 UsersProject.transaction do
23 user_ids.each do |user_id| 23 user_ids.each do |user_id|
24 users_project = UsersProject.new( 24 users_project = UsersProject.new(
@@ -31,7 +31,7 @@ class UsersProject &lt; ActiveRecord::Base @@ -31,7 +31,7 @@ class UsersProject &lt; ActiveRecord::Base
31 end 31 end
32 end 32 end
33 33
34 - def self.user_bulk_import(user, project_ids, project_access, repo_access) 34 + def self.user_bulk_import(user, project_ids, project_access)
35 UsersProject.transaction do 35 UsersProject.transaction do
36 project_ids.each do |project_id| 36 project_ids.each do |project_id|
37 users_project = UsersProject.new( 37 users_project = UsersProject.new(
app/views/dashboard/_projects_feed.html.haml
@@ -6,4 +6,4 @@ @@ -6,4 +6,4 @@
6 = project.name 6 = project.name
7 %small 7 %small
8 last activity at 8 last activity at
9 - = project.last_activity_date_cached.stamp("Aug 25, 2011") 9 + = project.last_activity_date.stamp("Aug 25, 2011")
app/views/projects/_feed.html.haml
@@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
1 -- @activities.each do |update|  
2 - .wll  
3 - = link_to dashboard_feed_path(@project, update) do  
4 - - if update.kind_of? Note  
5 - %p  
6 - %strong  
7 - - if update.target  
8 - = update.target.class.name.titleize  
9 - = truncate update.target.id.to_s, :length => 10  
10 - commented  
11 - - else  
12 - Project wall  
13 - &ndash;  
14 - = image_tag gravatar_icon(update.author_email), :class => "", :width => 16  
15 - = truncate dashboard_feed_title(update), :length => 50  
16 - - else  
17 - %p  
18 - %strong  
19 - = update.class.name.titleize  
20 - = truncate update.id.to_s  
21 - &ndash;  
22 - = image_tag gravatar_icon(update.author_email), :class => "", :width => 16  
23 - = truncate dashboard_feed_title(update), :length => 50  
app/views/projects/_list.html.haml
@@ -1,26 +0,0 @@ @@ -1,26 +0,0 @@
1 -%table.round-borders#projects-list  
2 - %tr  
3 - %th Name  
4 - %th Path  
5 - %th Code  
6 - %th Web  
7 - %th Git  
8 - %th Admin  
9 - %th Actions  
10 -  
11 - - @projects.each do |project|  
12 - %tr{ :class => "project", :url => project_path(project) }  
13 - %td  
14 - = project.name  
15 - .small-tags= tag_list project  
16 -  
17 - %td= truncate project.url_to_repo  
18 - %td= project.code  
19 - %td= check_box_tag "read", 1, project.readers.include?(current_user), :disabled => :disabled  
20 - %td= check_box_tag "commit", 1, project.writers.include?(current_user), :disabled => :disabled  
21 - %td= check_box_tag "admin", 1, project.admins.include?(current_user), :disabled => :disabled  
22 - %td  
23 - -if can? current_user, :admin_project, project  
24 - = link_to 'Edit', edit_project_path(project), :class => "lbutton positive"  
25 -%br  
26 -  
lib/gitlabhq/gitolite.rb
@@ -6,6 +6,14 @@ module Gitlabhq @@ -6,6 +6,14 @@ module Gitlabhq
6 class Gitolite 6 class Gitolite
7 class AccessDenied < StandardError; end 7 class AccessDenied < StandardError; end
8 8
  9 + def self.update_project(path, project)
  10 + self.new.configure { |git| git.update_project(path, project) }
  11 + end
  12 +
  13 + def self.destroy_project(project)
  14 + self.new.configure { |git| git.destroy_project(project) }
  15 + end
  16 +
9 def pull 17 def pull
10 # create tmp dir 18 # create tmp dir
11 @local_dir = File.join(Dir.tmpdir,"gitlabhq-gitolite-#{Time.now.to_i}") 19 @local_dir = File.join(Dir.tmpdir,"gitlabhq-gitolite-#{Time.now.to_i}")
lib/tasks/bulk_import.rake
@@ -90,8 +90,7 @@ def create_repo_project(project_name, user_email) @@ -90,8 +90,7 @@ def create_repo_project(project_name, user_email)
90 90
91 # Add user as admin for project 91 # Add user as admin for project
92 project.users_projects.create!( 92 project.users_projects.create!(
93 - :repo_access => Repository::REPO_RW,  
94 - :project_access => Project::PROJECT_RWA, 93 + :project_access => UsersProject::MASTER,
95 :user => user 94 :user => user
96 ) 95 )
97 96
spec/models/project_spec.rb
@@ -22,10 +22,7 @@ describe Project do @@ -22,10 +22,7 @@ describe Project do
22 end 22 end
23 23
24 describe "Respond to" do 24 describe "Respond to" do
25 - it { should respond_to(:readers) }  
26 - it { should respond_to(:writers) }  
27 it { should respond_to(:repository_writers) } 25 it { should respond_to(:repository_writers) }
28 - it { should respond_to(:admins) }  
29 it { should respond_to(:add_access) } 26 it { should respond_to(:add_access) }
30 it { should respond_to(:reset_access) } 27 it { should respond_to(:reset_access) }
31 it { should respond_to(:update_repository) } 28 it { should respond_to(:update_repository) }