Commit 70bf7f6e191c0e99ad03e1eec2ecbe2aae53fa09
1 parent
cc52eed9
Exists in
master
and in
4 other branches
Project -> update repo only on create and destroy. Fixtures Updated with namespa…
…ces. Fixed moving repo
Showing
11 changed files
with
45 additions
and
31 deletions
Show diff stats
app/controllers/projects_controller.rb
@@ -36,7 +36,7 @@ class ProjectsController < ProjectResourceController | @@ -36,7 +36,7 @@ class ProjectsController < ProjectResourceController | ||
36 | def update | 36 | def update |
37 | namespace_id = params[:project].delete(:namespace_id) | 37 | namespace_id = params[:project].delete(:namespace_id) |
38 | 38 | ||
39 | - if namespace_id | 39 | + if namespace_id.present? and namespace_id.to_i != project.namespace_id |
40 | namespace = Namespace.find(namespace_id) | 40 | namespace = Namespace.find(namespace_id) |
41 | project.transfer(namespace) | 41 | project.transfer(namespace) |
42 | end | 42 | end |
app/models/namespace.rb
@@ -27,6 +27,7 @@ class Namespace < ActiveRecord::Base | @@ -27,6 +27,7 @@ class Namespace < ActiveRecord::Base | ||
27 | 27 | ||
28 | after_create :ensure_dir_exist | 28 | after_create :ensure_dir_exist |
29 | after_update :move_dir | 29 | after_update :move_dir |
30 | + after_destroy :rm_dir | ||
30 | 31 | ||
31 | scope :root, where('type IS NULL') | 32 | scope :root, where('type IS NULL') |
32 | 33 | ||
@@ -52,4 +53,9 @@ class Namespace < ActiveRecord::Base | @@ -52,4 +53,9 @@ class Namespace < ActiveRecord::Base | ||
52 | new_path = File.join(Gitlab.config.git_base_path, path) | 53 | new_path = File.join(Gitlab.config.git_base_path, path) |
53 | system("mv #{old_path} #{new_path}") | 54 | system("mv #{old_path} #{new_path}") |
54 | end | 55 | end |
56 | + | ||
57 | + def rm_dir | ||
58 | + dir_path = File.join(Gitlab.config.git_base_path, path) | ||
59 | + system("rm -rf #{dir_path}") | ||
60 | + end | ||
55 | end | 61 | end |
app/models/project.rb
@@ -254,6 +254,10 @@ class Project < ActiveRecord::Base | @@ -254,6 +254,10 @@ class Project < ActiveRecord::Base | ||
254 | old_dir = old_namespace.try(:path) || '' | 254 | old_dir = old_namespace.try(:path) || '' |
255 | new_dir = new_namespace.try(:path) || '' | 255 | new_dir = new_namespace.try(:path) || '' |
256 | 256 | ||
257 | + old_repo = File.join(old_dir, self.path) | ||
258 | + | ||
259 | + git_host.move_repository(old_repo, self.path_with_namespace, self) | ||
260 | + | ||
257 | Gitlab::ProjectMover.new(self, old_dir, new_dir).execute | 261 | Gitlab::ProjectMover.new(self, old_dir, new_dir).execute |
258 | 262 | ||
259 | save! | 263 | save! |
app/observers/project_observer.rb
1 | class ProjectObserver < ActiveRecord::Observer | 1 | class ProjectObserver < ActiveRecord::Observer |
2 | - def after_save(project) | 2 | + def after_create(project) |
3 | project.update_repository | 3 | project.update_repository |
4 | end | 4 | end |
5 | 5 | ||
6 | + def after_save(project) | ||
7 | + end | ||
8 | + | ||
6 | def after_destroy(project) | 9 | def after_destroy(project) |
7 | log_info("Project \"#{project.name}\" was removed") | 10 | log_info("Project \"#{project.name}\" was removed") |
8 | 11 |
app/views/layouts/notify.html.haml
@@ -4,7 +4,7 @@ | @@ -4,7 +4,7 @@ | ||
4 | %title | 4 | %title |
5 | GitLab | 5 | GitLab |
6 | :css | 6 | :css |
7 | - .header h1 {color: #BBBBBB !important; font: bold 32px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 40px;} | 7 | + .header h1 {color: #BBBBBB !important; font: bold 22px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 32px;} |
8 | .header p {color: #c6c6c6; font: normal 12px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 18px;} | 8 | .header p {color: #c6c6c6; font: normal 12px Helvetica, Arial, sans-serif; margin: 0; padding: 0; line-height: 18px;} |
9 | .content h2 {color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; } | 9 | .content h2 {color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; } |
10 | .content p {color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif;} | 10 | .content p {color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif;} |
@@ -35,5 +35,5 @@ | @@ -35,5 +35,5 @@ | ||
35 | %p{style: "font-size: 11px; color:#7d7a7a; margin: 0; padding: 0; font-family: Helvetica, Arial, sans-serif;"} | 35 | %p{style: "font-size: 11px; color:#7d7a7a; margin: 0; padding: 0; font-family: Helvetica, Arial, sans-serif;"} |
36 | You're receiving this notification because you are a member of the | 36 | You're receiving this notification because you are a member of the |
37 | - if @project | 37 | - if @project |
38 | - #{@project.name} | 38 | + #{@project.name} |
39 | project team. | 39 | project team. |
app/views/projects/_form.html.haml
@@ -13,15 +13,15 @@ | @@ -13,15 +13,15 @@ | ||
13 | %legend Advanced settings: | 13 | %legend Advanced settings: |
14 | .control-group | 14 | .control-group |
15 | = f.label :path do | 15 | = f.label :path do |
16 | - Path | 16 | + Repository |
17 | .controls | 17 | .controls |
18 | - = text_field_tag :ppath, @project.path_to_repo, class: "xlarge", disabled: true | 18 | + = text_field_tag :ppath, @project.path_to_repo, class: "xxlarge", readonly: true |
19 | 19 | ||
20 | .control-group | 20 | .control-group |
21 | = f.label :namespace_id do | 21 | = f.label :namespace_id do |
22 | %span Namespace | 22 | %span Namespace |
23 | .controls | 23 | .controls |
24 | - = f.select :namespace_id, namespaces_options(@project.namespace_id), {}, {class: 'chosen'} | 24 | + = f.select :namespace_id, namespaces_options(@project.namespace_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'} |
25 | | 25 | |
26 | %span.cred Be careful. Changing project namespace can have unintended side effects | 26 | %span.cred Be careful. Changing project namespace can have unintended side effects |
27 | 27 |
db/fixtures/development/001_admin.rb
1 | -unless User.count > 0 | ||
2 | - admin = User.create( | ||
3 | - email: "admin@local.host", | 1 | +User.seed(:id, [ |
2 | + { | ||
3 | + id: 1, | ||
4 | name: "Administrator", | 4 | name: "Administrator", |
5 | + email: "admin@local.host", | ||
5 | username: 'root', | 6 | username: 'root', |
6 | password: "5iveL!fe", | 7 | password: "5iveL!fe", |
7 | - password_confirmation: "5iveL!fe" | ||
8 | - ) | ||
9 | - | ||
10 | - admin.projects_limit = 10000 | ||
11 | - admin.admin = true | ||
12 | - admin.save! | ||
13 | - | ||
14 | - if admin.valid? | ||
15 | - puts %q[ | ||
16 | - Administrator account created: | ||
17 | - | ||
18 | - login.........admin@local.host | ||
19 | - password......5iveL!fe | ||
20 | - ] | ||
21 | - end | ||
22 | -end | 8 | + password_confirmation: "5iveL!fe", |
9 | + admin: true, | ||
10 | + } | ||
11 | +]) |
db/fixtures/development/002_project.rb
1 | Project.seed(:id, [ | 1 | Project.seed(:id, [ |
2 | - { id: 1, name: "Underscore.js", path: "underscore", owner_id: 1 }, | 2 | + { id: 1, name: "Underscore.js", path: "underscore", owner_id: 1, namespace_id: 1 }, |
3 | { id: 2, name: "Diaspora", path: "diaspora", owner_id: 1 }, | 3 | { id: 2, name: "Diaspora", path: "diaspora", owner_id: 1 }, |
4 | { id: 3, name: "Ruby on Rails", path: "rails", owner_id: 1 } | 4 | { id: 3, name: "Ruby on Rails", path: "rails", owner_id: 1 } |
5 | ]) | 5 | ]) |
db/fixtures/development/009_source_code.rb
1 | root = Gitlab.config.git_base_path | 1 | root = Gitlab.config.git_base_path |
2 | 2 | ||
3 | projects = [ | 3 | projects = [ |
4 | - { path: 'underscore.git', git: 'https://github.com/documentcloud/underscore.git' }, | 4 | + { path: 'root/underscore.git', git: 'https://github.com/documentcloud/underscore.git' }, |
5 | { path: 'diaspora.git', git: 'https://github.com/diaspora/diaspora.git' }, | 5 | { path: 'diaspora.git', git: 'https://github.com/diaspora/diaspora.git' }, |
6 | { path: 'rails.git', git: 'https://github.com/rails/rails.git' }, | 6 | { path: 'rails.git', git: 'https://github.com/rails/rails.git' }, |
7 | ] | 7 | ] |
@@ -13,9 +13,10 @@ projects.each do |project| | @@ -13,9 +13,10 @@ projects.each do |project| | ||
13 | next if File.exists?(project_path) | 13 | next if File.exists?(project_path) |
14 | 14 | ||
15 | cmds = [ | 15 | cmds = [ |
16 | - "cd #{root} && sudo -u git -H git clone --bare #{project[:git]}", | 16 | + "cd #{root} && sudo -u git -H git clone --bare #{project[:git]} ./#{project[:path]}", |
17 | "sudo cp ./lib/hooks/post-receive #{project_path}/hooks/post-receive", | 17 | "sudo cp ./lib/hooks/post-receive #{project_path}/hooks/post-receive", |
18 | - "sudo chown git:git #{project_path}/hooks/post-receive" | 18 | + "sudo chown git:git -R #{project_path}", |
19 | + "sudo chmod 770 -R #{project_path}", | ||
19 | ] | 20 | ] |
20 | 21 | ||
21 | cmds.each do |cmd| | 22 | cmds.each do |cmd| |
lib/gitlab/backend/gitolite.rb
@@ -26,6 +26,13 @@ module Gitlab | @@ -26,6 +26,13 @@ module Gitlab | ||
26 | config.update_project!(project.path, project) | 26 | config.update_project!(project.path, project) |
27 | end | 27 | end |
28 | 28 | ||
29 | + def move_repository(old_repo, new_repo, project) | ||
30 | + config.apply do |config| | ||
31 | + config.clean_repo(old_repo) | ||
32 | + config.update_project(new_repo, project) | ||
33 | + end | ||
34 | + end | ||
35 | + | ||
29 | def remove_repository project | 36 | def remove_repository project |
30 | config.destroy_project!(project) | 37 | config.destroy_project!(project) |
31 | end | 38 | end |
lib/gitlab/backend/gitolite_config.rb
@@ -83,7 +83,11 @@ module Gitlab | @@ -83,7 +83,11 @@ module Gitlab | ||
83 | 83 | ||
84 | def destroy_project(project) | 84 | def destroy_project(project) |
85 | FileUtils.rm_rf(project.path_to_repo) | 85 | FileUtils.rm_rf(project.path_to_repo) |
86 | - conf.rm_repo(project.path) | 86 | + conf.rm_repo(project.path_with_namespace) |
87 | + end | ||
88 | + | ||
89 | + def clean_repo repo_name | ||
90 | + conf.rm_repo(repo_name) | ||
87 | end | 91 | end |
88 | 92 | ||
89 | def destroy_project!(project) | 93 | def destroy_project!(project) |