From d68ec5e0fb156e56c2e057eefe2e473d72d44c1f Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Wed, 7 Dec 2011 23:56:57 +0200
Subject: [PATCH] default_branch for project & fixed project destroy

---
 app/controllers/application_controller.rb                  | 2 +-
 app/models/project.rb                                      | 2 +-
 app/views/layouts/project.html.haml                        | 2 +-
 app/views/projects/_form.html.haml                         | 6 ++++++
 db/migrate/20111207211728_add_default_branch_to_project.rb | 5 +++++
 db/schema.rb                                               | 5 +++--
 lib/gitlabhq/gitolite.rb                                   | 2 +-
 7 files changed, 18 insertions(+), 6 deletions(-)
 create mode 100644 db/migrate/20111207211728_add_default_branch_to_project.rb

diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index dd0c3c3ec55..6f7ed9a3ce4 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -61,7 +61,7 @@ class ApplicationController < ActionController::Base
     else
       @branch = params[:branch].blank? ? nil : params[:branch]
       @tag = params[:tag].blank? ? nil : params[:tag]
-      @ref = @branch || @tag || Repository.default_ref
+      @ref = @branch || @tag || @project.try(:default_branch) || Repository.default_ref
     end
   end
 
diff --git a/app/models/project.rb b/app/models/project.rb
index d881b4d7920..a5361313911 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -158,7 +158,7 @@ class Project < ActiveRecord::Base
   end
 
   def root_ref 
-    "master"
+    default_branch || "master"
   end
 
   def public?
diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml
index 90d8a54a4d5..8a39dece6cd 100644
--- a/app/views/layouts/project.html.haml
+++ b/app/views/layouts/project.html.haml
@@ -49,7 +49,7 @@
                   %span{ :class => "number" }= @project.snippets.non_expired.count
 
               - if can? current_user, :admin_project, @project
-                = link_to "Project", edit_project_path(@project), :class => (current_page?(edit_project_path(@project))) ? "current" : nil
+                = link_to "Admin", edit_project_path(@project), :class => (current_page?(edit_project_path(@project))) ? "current" : nil
 
             .medium-tags{:style => 'padding: 10px 0 0 10px; width: 210px;'}= tag_list @project
 
diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml
index ce2fd069b55..5901801b4f7 100644
--- a/app/views/projects/_form.html.haml
+++ b/app/views/projects/_form.html.haml
@@ -29,6 +29,11 @@
           %cite.right= "http://#{GIT_HOST["host"]}/"
         %td= f.text_field :code, :placeholder => "example"
 
+      - unless @project.heads.empty?  
+        %tr
+          %td= f.label :default_branch, "Default Branch"
+          %td= f.select(:default_branch, @project.heads.map(&:name), {}, :style => "width:300px;")
+
       %tr
         %td= f.label :tag_list
         %td= f.text_area :tag_list, :placeholder => "project tags", :style => "height:50px", :id => :tag_field
@@ -57,4 +62,5 @@
 :javascript
   $(function(){
     taggifyForm();
+    $('form #project_default_branch').chosen();
   })
diff --git a/db/migrate/20111207211728_add_default_branch_to_project.rb b/db/migrate/20111207211728_add_default_branch_to_project.rb
new file mode 100644
index 00000000000..5c2107f7aa5
--- /dev/null
+++ b/db/migrate/20111207211728_add_default_branch_to_project.rb
@@ -0,0 +1,5 @@
+class AddDefaultBranchToProject < ActiveRecord::Migration
+  def change
+    add_column :projects, :default_branch, :string, :null => false, :default => "master"
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index fd50bf32c52..17246a614f8 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 => 20111206222316) do
+ActiveRecord::Schema.define(:version => 20111207211728) do
 
   create_table "features", :force => true do |t|
     t.string   "name"
@@ -76,9 +76,10 @@ ActiveRecord::Schema.define(:version => 20111206222316) do
     t.text     "description"
     t.datetime "created_at"
     t.datetime "updated_at"
-    t.boolean  "private_flag", :default => true, :null => false
+    t.boolean  "private_flag",   :default => true,     :null => false
     t.string   "code"
     t.integer  "owner_id"
+    t.string   "default_branch", :default => "master", :null => false
   end
 
   create_table "snippets", :force => true do |t|
diff --git a/lib/gitlabhq/gitolite.rb b/lib/gitlabhq/gitolite.rb
index 10ab87bdaf8..e79afb55577 100644
--- a/lib/gitlabhq/gitolite.rb
+++ b/lib/gitlabhq/gitolite.rb
@@ -42,7 +42,7 @@ module Gitlabhq
     end
 
     def destroy_project(project)
-      `sudo -u git rm -rf #{project.path_to_repo}`
+      FileUtils.rm_rf(project.path_to_repo)
       
       ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))
       conf = ga_repo.config
-- 
GitLab