diff --git a/CHANGELOG b/CHANGELOG index 393d69755e168535f43521950205c74c693fbf4f..52441aad2c2ac14f929e04ba900097de41fbc6c3 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 40385fa65b09caf3fde9a6a9b9080d5ce39526e7..9564dd94688bec9f44f273191071b7c394655e8e 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 52682ac0a9e14e293522c6079a70722a17a109d2..65d42b6b870ed16631aec2cf2276f49db4995ae7 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 97b4330092a4cde7cbef289640c6682ccb97b569..80918d6de4b761710a36bf3b68b9249f86c14bbe 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 f301f30645858abde79b800c72c5cc66c44c5517..4e3deec01bf38943c33f45fd12e59734ed8381c7 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 0000000000000000000000000000000000000000..88a890eb3eb7e759ced674d594f3218d57a91efe --- /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 d6acb2f90e935c2e1eab4bb513294e848f19b7fb..88c6a545d9673b6e582084a7170b4f0105b9901e 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 3ae9af59fc3ec089260e1c4f4ae70210d9648551..d4d883e54ec08d4e94747570377f1199bbf5690b 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 8abc6ae9f236082dba504167b79cc61cc3b4c83e..e5292380c554e652321467b520853ae056de2644 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 221f1f1e23ccac9696ff842f50db97a94bafb9e6..425605720467d953b06aca2e417cf06ebf080ca5 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 b17183a281c221e797a5146374eb341a06d9193a..fe65096fd1ec5888fb1887568d7cb57e39b1bdc1 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 bf4a1749418072a365d34143e690a4f67d700202..2ae186b967ab29d2c5f459ef516987d9fc1b46c0 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,