Commit 9d14c5137a5a82ed8edd353ac7e6ed701fc6f49d

Authored by Dmitriy Zaporozhets
1 parent d618a5fe

Project#default_branch use repo HEAD instead of DB value now

Drop default_branch field from projects table
Use repository.root_ref as value for defautl_branch method
Fixes issue with default_branch and HEAD getting out of sync

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/contexts/projects/update_context.rb
@@ -3,6 +3,16 @@ module Projects @@ -3,6 +3,16 @@ module Projects
3 def execute(role = :default) 3 def execute(role = :default)
4 params[:project].delete(:namespace_id) 4 params[:project].delete(:namespace_id)
5 params[:project].delete(:public) unless can?(current_user, :change_public_mode, project) 5 params[:project].delete(:public) unless can?(current_user, :change_public_mode, project)
  6 + new_branch = params[:project].delete(:default_branch)
  7 +
  8 + if project.repository.exists? && new_branch != project.repository.root_ref
  9 + GitlabShellWorker.perform_async(
  10 + :update_repository_head,
  11 + project.path_with_namespace,
  12 + new_branch
  13 + )
  14 + end
  15 +
6 project.update_attributes(params[:project], as: role) 16 project.update_attributes(params[:project], as: role)
7 end 17 end
8 end 18 end
app/models/project.rb
@@ -28,7 +28,7 @@ class Project &lt; ActiveRecord::Base @@ -28,7 +28,7 @@ class Project &lt; ActiveRecord::Base
28 include Gitlab::ShellAdapter 28 include Gitlab::ShellAdapter
29 extend Enumerize 29 extend Enumerize
30 30
31 - attr_accessible :name, :path, :description, :default_branch, :issues_tracker, :label_list, 31 + attr_accessible :name, :path, :description, :issues_tracker, :label_list,
32 :issues_enabled, :wall_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id, 32 :issues_enabled, :wall_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id,
33 :wiki_enabled, :public, :import_url, :last_activity_at, as: [:default, :admin] 33 :wiki_enabled, :public, :import_url, :last_activity_at, as: [:default, :admin]
34 34
@@ -36,6 +36,8 @@ class Project &lt; ActiveRecord::Base @@ -36,6 +36,8 @@ class Project &lt; ActiveRecord::Base
36 36
37 acts_as_taggable_on :labels, :issues_default_labels 37 acts_as_taggable_on :labels, :issues_default_labels
38 38
  39 + attr_accessor :new_default_branch
  40 +
39 # Relations 41 # Relations
40 belongs_to :creator, foreign_key: "creator_id", class_name: "User" 42 belongs_to :creator, foreign_key: "creator_id", class_name: "User"
41 belongs_to :group, foreign_key: "namespace_id", conditions: "type = 'Group'" 43 belongs_to :group, foreign_key: "namespace_id", conditions: "type = 'Group'"
@@ -143,7 +145,7 @@ class Project &lt; ActiveRecord::Base @@ -143,7 +145,7 @@ class Project &lt; ActiveRecord::Base
143 end 145 end
144 146
145 def repository 147 def repository
146 - @repository ||= Repository.new(path_with_namespace, default_branch) 148 + @repository ||= Repository.new(path_with_namespace)
147 end 149 end
148 150
149 def saved? 151 def saved?
@@ -451,4 +453,8 @@ class Project &lt; ActiveRecord::Base @@ -451,4 +453,8 @@ class Project &lt; ActiveRecord::Base
451 def project_member(user) 453 def project_member(user)
452 users_projects.where(user_id: user).first 454 users_projects.where(user_id: user).first
453 end 455 end
  456 +
  457 + def default_branch
  458 + @default_branch ||= repository.root_ref if repository.exists?
  459 + end
454 end 460 end
app/models/repository.rb
@@ -3,7 +3,7 @@ class Repository @@ -3,7 +3,7 @@ class Repository
3 3
4 attr_accessor :raw_repository, :path_with_namespace 4 attr_accessor :raw_repository, :path_with_namespace
5 5
6 - def initialize(path_with_namespace, default_branch) 6 + def initialize(path_with_namespace, default_branch = nil)
7 @path_with_namespace = path_with_namespace 7 @path_with_namespace = path_with_namespace
8 @raw_repository = Gitlab::Git::Repository.new(path_to_repo) if path_with_namespace 8 @raw_repository = Gitlab::Git::Repository.new(path_to_repo) if path_with_namespace
9 rescue Gitlab::Git::Repository::NoRepository 9 rescue Gitlab::Git::Repository::NoRepository
app/observers/project_observer.rb
@@ -30,12 +30,6 @@ class ProjectObserver &lt; BaseObserver @@ -30,12 +30,6 @@ class ProjectObserver &lt; BaseObserver
30 def after_update(project) 30 def after_update(project)
31 project.send_move_instructions if project.namespace_id_changed? 31 project.send_move_instructions if project.namespace_id_changed?
32 project.rename_repo if project.path_changed? 32 project.rename_repo if project.path_changed?
33 -  
34 - GitlabShellWorker.perform_async(  
35 - :update_repository_head,  
36 - project.path_with_namespace,  
37 - project.default_branch  
38 - ) if project.default_branch_changed?  
39 end 33 end
40 34
41 def before_destroy(project) 35 def before_destroy(project)
db/migrate/20131106151520_remove_default_branch.rb 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +class RemoveDefaultBranch < ActiveRecord::Migration
  2 + def up
  3 + remove_column :projects, :default_branch
  4 + end
  5 +
  6 + def down
  7 + add_column :projects, :default_branch, :string
  8 + end
  9 +end
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 # 11 #
12 # It's strongly recommended to check this file into your version control system. 12 # It's strongly recommended to check this file into your version control system.
13 13
14 -ActiveRecord::Schema.define(:version => 20131009115346) do 14 +ActiveRecord::Schema.define(:version => 20131106151520) do
15 15
16 create_table "deploy_keys_projects", :force => true do |t| 16 create_table "deploy_keys_projects", :force => true do |t|
17 t.integer "deploy_key_id", :null => false 17 t.integer "deploy_key_id", :null => false
@@ -171,7 +171,6 @@ ActiveRecord::Schema.define(:version =&gt; 20131009115346) do @@ -171,7 +171,6 @@ ActiveRecord::Schema.define(:version =&gt; 20131009115346) do
171 t.datetime "created_at", :null => false 171 t.datetime "created_at", :null => false
172 t.datetime "updated_at", :null => false 172 t.datetime "updated_at", :null => false
173 t.integer "creator_id" 173 t.integer "creator_id"
174 - t.string "default_branch"  
175 t.boolean "issues_enabled", :default => true, :null => false 174 t.boolean "issues_enabled", :default => true, :null => false
176 t.boolean "wall_enabled", :default => true, :null => false 175 t.boolean "wall_enabled", :default => true, :null => false
177 t.boolean "merge_requests_enabled", :default => true, :null => false 176 t.boolean "merge_requests_enabled", :default => true, :null => false