summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG2
-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
-rw-r--r--doc/api/projects.md1
-rw-r--r--features/steps/public/projects_feature.rb2
-rw-r--r--lib/api/projects.rb2
-rw-r--r--spec/models/merge_request_spec.rb4
-rw-r--r--spec/requests/api/projects_spec.rb5
12 files changed, 34 insertions, 22 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 393d69755e1..52441aad2c2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,6 +9,8 @@ v 6.3.0
- Fixed issue with 500 error when group did not exist
- Ability to leave project
- You can create file in repo using UI
+ - API: dropped default_branch attribute from project during creation
+ - Project default_branch is not stored in db any more. It takes from repo now.
v 6.2.0
- Public project pages are now visible to everyone (files, issues, wik, etc.)
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
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 3ae9af59fc3..d4d883e54ec 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -213,7 +213,6 @@ Parameters:
+ `name` (required) - new project name
+ `description` (optional) - short project description
-+ `default_branch` (optional) - 'master' by default
+ `issues_enabled` (optional)
+ `wall_enabled` (optional)
+ `merge_requests_enabled` (optional)
diff --git a/features/steps/public/projects_feature.rb b/features/steps/public/projects_feature.rb
index 8abc6ae9f23..e5292380c55 100644
--- a/features/steps/public/projects_feature.rb
+++ b/features/steps/public/projects_feature.rb
@@ -23,7 +23,7 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps
end
step 'public project "Community"' do
- create :project_with_code, name: 'Community', public: true, default_branch: 'master'
+ create :project_with_code, name: 'Community', public: true
end
step 'public empty project "Empty Public Project"' do
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index 221f1f1e23c..42560572046 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -60,7 +60,6 @@ module API
# Parameters:
# name (required) - name for new project
# description (optional) - short project description
- # default_branch (optional) - 'master' by default
# issues_enabled (optional)
# wall_enabled (optional)
# merge_requests_enabled (optional)
@@ -75,7 +74,6 @@ module API
attrs = attributes_for_keys [:name,
:path,
:description,
- :default_branch,
:issues_enabled,
:wall_enabled,
:merge_requests_enabled,
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index b17183a281c..fe65096fd1e 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -116,13 +116,13 @@ describe MergeRequest do
end
it 'accesses the set of issues that will be closed on acceptance' do
- subject.project.default_branch = subject.target_branch
+ subject.project.stub(default_branch: subject.target_branch)
subject.closes_issues.should == [issue0, issue1].sort_by(&:id)
end
it 'only lists issues as to be closed if it targets the default branch' do
- subject.project.default_branch = 'master'
+ subject.project.stub(default_branch: 'master')
subject.target_branch = 'something-else'
subject.closes_issues.should be_empty
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index bf4a1749418..2ae186b967a 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -91,7 +91,6 @@ describe API::API do
it "should assign attributes to project" do
project = attributes_for(:project, {
description: Faker::Lorem.sentence,
- default_branch: 'stable',
issues_enabled: false,
wall_enabled: false,
merge_requests_enabled: false,
@@ -110,16 +109,13 @@ describe API::API do
project = attributes_for(:project, { public: true })
post api("/projects", user), project
json_response['public'].should be_true
-
end
it "should set a project as private" do
project = attributes_for(:project, { public: false })
post api("/projects", user), project
json_response['public'].should be_false
-
end
-
end
describe "POST /projects/user/:id" do
@@ -146,7 +142,6 @@ describe API::API do
it "should assign attributes to project" do
project = attributes_for(:project, {
description: Faker::Lorem.sentence,
- default_branch: 'stable',
issues_enabled: false,
wall_enabled: false,
merge_requests_enabled: false,