diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-11-06 18:45:39 +0200 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-11-06 18:45:39 +0200 |
commit | 9d14c5137a5a82ed8edd353ac7e6ed701fc6f49d (patch) | |
tree | d6fdbeed76d6387fa4474c8ae3160b9a80440511 | |
parent | d618a5fec361b85fafffd5cf4a53d044e82bdb5a (diff) | |
download | gitlab-ce-9d14c5137a5a82ed8edd353ac7e6ed701fc6f49d.tar.gz |
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>
-rw-r--r-- | app/contexts/projects/update_context.rb | 10 | ||||
-rw-r--r-- | app/models/project.rb | 10 | ||||
-rw-r--r-- | app/models/repository.rb | 2 | ||||
-rw-r--r-- | app/observers/project_observer.rb | 6 | ||||
-rw-r--r-- | db/migrate/20131106151520_remove_default_branch.rb | 9 | ||||
-rw-r--r-- | db/schema.rb | 3 |
6 files changed, 29 insertions, 11 deletions
diff --git a/app/contexts/projects/update_context.rb b/app/contexts/projects/update_context.rb index 40385fa65b0..9564dd94688 100644 --- a/app/contexts/projects/update_context.rb +++ b/app/contexts/projects/update_context.rb @@ -3,6 +3,16 @@ module Projects def execute(role = :default) params[:project].delete(:namespace_id) params[:project].delete(:public) unless can?(current_user, :change_public_mode, project) + new_branch = params[:project].delete(:default_branch) + + if project.repository.exists? && new_branch != project.repository.root_ref + GitlabShellWorker.perform_async( + :update_repository_head, + project.path_with_namespace, + new_branch + ) + end + project.update_attributes(params[:project], as: role) end end diff --git a/app/models/project.rb b/app/models/project.rb index 52682ac0a9e..65d42b6b870 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -28,7 +28,7 @@ class Project < ActiveRecord::Base include Gitlab::ShellAdapter extend Enumerize - attr_accessible :name, :path, :description, :default_branch, :issues_tracker, :label_list, + attr_accessible :name, :path, :description, :issues_tracker, :label_list, :issues_enabled, :wall_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id, :wiki_enabled, :public, :import_url, :last_activity_at, as: [:default, :admin] @@ -36,6 +36,8 @@ class Project < ActiveRecord::Base acts_as_taggable_on :labels, :issues_default_labels + attr_accessor :new_default_branch + # Relations belongs_to :creator, foreign_key: "creator_id", class_name: "User" belongs_to :group, foreign_key: "namespace_id", conditions: "type = 'Group'" @@ -143,7 +145,7 @@ class Project < ActiveRecord::Base end def repository - @repository ||= Repository.new(path_with_namespace, default_branch) + @repository ||= Repository.new(path_with_namespace) end def saved? @@ -451,4 +453,8 @@ class Project < ActiveRecord::Base def project_member(user) users_projects.where(user_id: user).first end + + def default_branch + @default_branch ||= repository.root_ref if repository.exists? + end end diff --git a/app/models/repository.rb b/app/models/repository.rb index 97b4330092a..80918d6de4b 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -3,7 +3,7 @@ class Repository attr_accessor :raw_repository, :path_with_namespace - def initialize(path_with_namespace, default_branch) + def initialize(path_with_namespace, default_branch = nil) @path_with_namespace = path_with_namespace @raw_repository = Gitlab::Git::Repository.new(path_to_repo) if path_with_namespace rescue Gitlab::Git::Repository::NoRepository diff --git a/app/observers/project_observer.rb b/app/observers/project_observer.rb index f301f306458..4e3deec01bf 100644 --- a/app/observers/project_observer.rb +++ b/app/observers/project_observer.rb @@ -30,12 +30,6 @@ class ProjectObserver < BaseObserver def after_update(project) project.send_move_instructions if project.namespace_id_changed? project.rename_repo if project.path_changed? - - GitlabShellWorker.perform_async( - :update_repository_head, - project.path_with_namespace, - project.default_branch - ) if project.default_branch_changed? end def before_destroy(project) diff --git a/db/migrate/20131106151520_remove_default_branch.rb b/db/migrate/20131106151520_remove_default_branch.rb new file mode 100644 index 00000000000..88a890eb3eb --- /dev/null +++ b/db/migrate/20131106151520_remove_default_branch.rb @@ -0,0 +1,9 @@ +class RemoveDefaultBranch < ActiveRecord::Migration + def up + remove_column :projects, :default_branch + end + + def down + add_column :projects, :default_branch, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index d6acb2f90e9..88c6a545d96 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20131009115346) do +ActiveRecord::Schema.define(:version => 20131106151520) do create_table "deploy_keys_projects", :force => true do |t| t.integer "deploy_key_id", :null => false @@ -171,7 +171,6 @@ ActiveRecord::Schema.define(:version => 20131009115346) do t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.integer "creator_id" - t.string "default_branch" t.boolean "issues_enabled", :default => true, :null => false t.boolean "wall_enabled", :default => true, :null => false t.boolean "merge_requests_enabled", :default => true, :null => false |