summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-11-06 18:45:39 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-11-06 18:45:39 +0200
commit9d14c5137a5a82ed8edd353ac7e6ed701fc6f49d (patch)
treed6fdbeed76d6387fa4474c8ae3160b9a80440511
parentd618a5fec361b85fafffd5cf4a53d044e82bdb5a (diff)
downloadgitlab-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.rb10
-rw-r--r--app/models/project.rb10
-rw-r--r--app/models/repository.rb2
-rw-r--r--app/observers/project_observer.rb6
-rw-r--r--db/migrate/20131106151520_remove_default_branch.rb9
-rw-r--r--db/schema.rb3
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