Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Epic: Gitlab configuration with default values

  • Loading branch information...
commit 9b337b8328a65c5e692c90ba1f817184bd054257 1 parent b3a0ee8
Dmitriy Zaporozhets authored July 02, 2012
1  Gemfile
@@ -40,6 +40,7 @@ gem "foreman"
40 40
 gem "colored"
41 41
 gem 'resque_mailer'
42 42
 gem 'tabs_on_rails'
  43
+gem 'settingslogic'
43 44
 
44 45
 group :assets do
45 46
   gem "sass-rails",   "3.2.5"
2  Gemfile.lock
@@ -313,6 +313,7 @@ GEM
313 313
       libwebsocket (~> 0.1.3)
314 314
       multi_json (~> 1.0)
315 315
       rubyzip
  316
+    settingslogic (2.0.8)
316 317
     shoulda-matchers (1.1.0)
317 318
       activesupport (>= 3.0.0)
318 319
     simplecov (0.6.4)
@@ -416,6 +417,7 @@ DEPENDENCIES
416 417
   rspec-rails
417 418
   sass-rails (= 3.2.5)
418 419
   seed-fu
  420
+  settingslogic
419 421
   shoulda-matchers
420 422
   simplecov
421 423
   six
5  app/assets/stylesheets/gitlab_bootstrap.scss
@@ -158,6 +158,11 @@ table {
158 158
   &.small { 
159 159
     @extend .btn-small;
160 160
   }
  161
+
  162
+  &.active { 
  163
+    border-color:#aaa;
  164
+    background-color:#ccc;
  165
+  }
161 166
 }
162 167
 
163 168
 a:focus { 
2  app/helpers/application_helper.rb
@@ -13,7 +13,7 @@ def request_protocol
13 13
   end
14 14
 
15 15
   def web_app_url
16  
-    "#{request_protocol}://#{GIT_HOST["host"]}/"
  16
+    "#{request_protocol}://#{Gitlab.config.web_host}/"
17 17
   end
18 18
 
19 19
   def last_commit(project)
6  app/mailers/notify.rb
@@ -2,10 +2,10 @@ class Notify < ActionMailer::Base
2 2
   include Resque::Mailer
3 3
   add_template_helper ApplicationHelper
4 4
 
5  
-  default_url_options[:host] = EMAIL_OPTS["host"]
6  
-  default_url_options[:protocol] = -> { EMAIL_OPTS["protocol"] ? EMAIL_OPTS["protocol"] : "http" }.call
  5
+  default_url_options[:host] = Gitlab.config.web_host
  6
+  default_url_options[:protocol] = Gitlab.config.web_protocol
7 7
 
8  
-  default from: EMAIL_OPTS["from"]
  8
+  default from: Gitlab.config.email_from
9 9
 
10 10
   def new_user_email(user_id, password)
11 11
     @user = User.find(user_id)
2  app/models/project.rb
@@ -113,7 +113,7 @@ def to_param
113 113
   end
114 114
 
115 115
   def web_url
116  
-    [GIT_HOST['host'], code].join("/")
  116
+    [Gitlab.config.url, code].join("/")
117 117
   end
118 118
 
119 119
   def common_notes
2  app/roles/git_push.rb
@@ -73,7 +73,7 @@ def post_receive_data(oldrev, newrev, ref, user)
73 73
         id: commit.id,
74 74
         message: commit.safe_message,
75 75
         timestamp: commit.date.xmlschema,
76  
-        url: "http://#{GIT_HOST['host']}/#{code}/commits/#{commit.id}",
  76
+        url: "#{Gitlab.config.url}/#{code}/commits/#{commit.id}",
77 77
         author: {
78 78
           name: commit.author_name,
79 79
           email: commit.author_email
10  app/roles/repository.rb
@@ -68,7 +68,7 @@ def url_to_repo
68 68
   end
69 69
 
70 70
   def path_to_repo
71  
-    File.join(GIT_HOST["base_path"], "#{path}.git")
  71
+    File.join(Gitlab.config.git_base_path, "#{path}.git")
72 72
   end
73 73
 
74 74
   def update_repository
@@ -141,4 +141,12 @@ def archive_repo ref
141 141
 
142 142
     file_path
143 143
   end
  144
+
  145
+  def ssh_url_to_repo
  146
+    url_to_repo
  147
+  end
  148
+
  149
+  def http_url_to_repo
  150
+    http_url = [Gitlab.config.url, "/", path, ".git"].join()
  151
+  end
144 152
 end
2  app/views/admin/projects/_form.html.haml
@@ -13,7 +13,7 @@
13 13
       Path
14 14
     .input
15 15
       .input-prepend
16  
-        %span.add-on= "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:"
  16
+        %span.add-on= Gitlab.config.ssh_path
17 17
         = f.text_field :path, :placeholder => "example_project", :disabled => !@admin_project.new_record?
18 18
   .clearfix
19 19
     = f.label :code do
2  app/views/projects/_form.html.haml
@@ -18,7 +18,7 @@
18 18
         Git Clone
19 19
       .input
20 20
         .input-prepend
21  
-          %span.add-on= "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:"
  21
+          %span.add-on= Gitlab.config.ssh_path
22 22
           = f.text_field :path, :placeholder => "example_project", :disabled => !@project.new_record?
23 23
           %span.add-on= ".git"
24 24
     .clearfix
2  app/views/projects/_new_form.html.haml
@@ -17,7 +17,7 @@
17 17
         Git Clone
18 18
       .input
19 19
         .input-prepend
20  
-          %span.add-on= "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:"
  20
+          %span.add-on= Gitlab.config.ssh_path
21 21
           = f.text_field :path, :placeholder => "example_project", :disabled => !@project.new_record?
22 22
           %span.add-on= ".git"
23 23
     .clearfix
15  app/views/projects/show.html.haml
@@ -4,8 +4,11 @@
4 4
   .row
5 5
     .span7
6 6
       .form-horizontal
7  
-        .input-prepend
  7
+        .input-prepend.project_clone_holder
  8
+
8 9
           %span.add-on git clone
  10
+          = link_to "SSH", "#", :class => "btn small active", :"data-clone" => @project.ssh_url_to_repo
  11
+          = link_to "HTTP", "#", :class => "btn small", :"data-clone" => @project.http_url_to_repo
9 12
           = text_field_tag :project_clone, @project.url_to_repo, :class => "one_click_select span5"
10 13
     .span4.right
11 14
       .right
@@ -23,4 +26,12 @@
23 26
 = render "events/event_last_push", :event => @last_push
24 27
 .content_list= render @events
25 28
 
26  
-
  29
+:javascript 
  30
+  $(function(){
  31
+    var link_sel = ".project_clone_holder a";
  32
+    $(link_sel).bind("click", function() { 
  33
+      $(link_sel).removeClass("active");
  34
+      $(this).addClass("active");
  35
+      $("#project_clone").val($(this).attr("data-clone"));
  36
+    })
  37
+  })
18  config/gitlab.yml.example
... ...
@@ -1,18 +1,20 @@
1  
-# Gitlab application config file
  1
+# # # # # # # # # # # # # # # # # # 
  2
+# Gitlab application config file  #
  3
+# # # # # # # # # # # # # # # # # #
  4
+
  5
+# Web application specific settings
  6
+web:
  7
+  host: localhost
  8
+  port: 80
  9
+  https: false
2 10
 
3 11
 # Email used for notification
4 12
 # about new issues, comments
5 13
 email:
6  
-  from: notify@gitlabhq.com
7  
-  host: gitlabhq.com
8  
-
9  
-  # Protocol used for links in email letters
10  
-  # Value can be http or https
11  
-  protocol: http # or https
  14
+  from: notify@localhost
12 15
 
13 16
 # Git Hosting configuration
14 17
 git_host:
15  
-  system: gitolite
16 18
   admin_uri: git@localhost:gitolite-admin
17 19
   base_path: /home/git/repositories/
18 20
   host: localhost
4  config/initializers/00_before_all.rb
... ...
@@ -1,4 +0,0 @@
1  
-GIT_HOST = YAML.load_file("#{Rails.root}/config/gitlab.yml")["git_host"]
2  
-EMAIL_OPTS = YAML.load_file("#{Rails.root}/config/gitlab.yml")["email"]
3  
-GIT_OPTS = YAML.load_file("#{Rails.root}/config/gitlab.yml")["git"]
4  
-GITLAB_OPTS = YAML.load_file("#{Rails.root}/config/gitlab.yml")["gitlab"]
1  config/initializers/0_before_all.rb
... ...
@@ -0,0 +1 @@
  1
+GITLAB_OPTS = YAML.load_file("#{Rails.root}/config/gitlab.yml")["gitlab"]
75  config/initializers/1_settings.rb
... ...
@@ -0,0 +1,75 @@
  1
+class Settings < Settingslogic
  2
+  source "#{Rails.root}/config/gitlab.yml"
  3
+
  4
+  class << self
  5
+    def web_protocol
  6
+      self.web['protocol'] ||= web.https ? "https://" : "http://"
  7
+    end
  8
+
  9
+    def web_host 
  10
+      self.web['host'] ||= 'localhost'
  11
+    end
  12
+
  13
+    def email_from
  14
+      self.email['from'] ||= "notify@" + web_host
  15
+    end
  16
+
  17
+    def url 
  18
+      self['url'] ||= build_url
  19
+    end 
  20
+
  21
+    def build_url
  22
+      raw_url = self.web_protocol
  23
+      raw_url << web.host
  24
+      raw_url << ":#{web.port}" if web.port.to_i != 80
  25
+    end
  26
+
  27
+    def ssh_port
  28
+      git_host['port'] || 22
  29
+    end
  30
+
  31
+    def ssh_user
  32
+      git_host['git_user'] || 'git'
  33
+    end
  34
+
  35
+    def ssh_host
  36
+      git_host['host'] || 'localhost'
  37
+    end
  38
+
  39
+    def ssh_path
  40
+      if ssh_port != 22
  41
+        "ssh://#{ssh_user}@#{ssh_host}:#{ssh_port}/"
  42
+      else
  43
+        "#{ssh_user}@#{ssh_host}:"
  44
+      end
  45
+    end
  46
+
  47
+    def git_base_path
  48
+      git_host['base_path'] || '/home/git/repositories/'
  49
+    end
  50
+
  51
+    def git_upload_pack
  52
+      git_host['upload_pack'] || true
  53
+    end
  54
+
  55
+    def git_receive_pack
  56
+      git_host['receive_pack'] || true
  57
+    end
  58
+
  59
+    def git_bin_path
  60
+      git['path'] || '/usr/bin/git'
  61
+    end
  62
+
  63
+    def git_max_size
  64
+      git['git_max_size'] || 5242880 # 5.megabytes
  65
+    end
  66
+
  67
+    def git_timeout
  68
+      git['git_timeout'] || 10
  69
+    end
  70
+
  71
+    def gitolite_admin_uri
  72
+      git['admin_uri'] || 'git@localhost:gitolite-admin'
  73
+    end
  74
+  end
  75
+end
4  config/initializers/gitlab/10_app.rb → config/initializers/2_app.rb
... ...
@@ -1,4 +1,8 @@
1 1
 module Gitlab
2 2
   Version = File.read(Rails.root.join("VERSION"))
3 3
   Revision = `git log --pretty=format:'%h' -n 1`
  4
+
  5
+  def self.config
  6
+    Settings 
  7
+  end
4 8
 end
4  config/initializers/gitlab/20_grit_ext.rb → config/initializers/3_grit_ext.rb
... ...
@@ -1,8 +1,8 @@
1 1
 require 'grit'
2 2
 require 'pygments'
3 3
 
4  
-Grit::Git.git_timeout = GIT_OPTS["git_timeout"]
5  
-Grit::Git.git_max_size = GIT_OPTS["git_max_size"]
  4
+Grit::Git.git_timeout = Gitlab.config.git_timeout
  5
+Grit::Git.git_max_size = Gitlab.config.git_max_size
6 6
 
7 7
 Grit::Blob.class_eval do
8 8
   include Linguist::BlobHelper
0  config/initializers/gitlab/30_resque_queues.rb → config/initializers/4_resque_queues.rb
File renamed without changes
2  config/initializers/devise.rb
@@ -4,7 +4,7 @@
4 4
   # ==> Mailer Configuration
5 5
   # Configure the e-mail address which will be shown in Devise::Mailer,
6 6
   # note that it will be overwritten if you use your own mailer class with default "from" parameter.
7  
-  config.mailer_sender = EMAIL_OPTS["from"]
  7
+  config.mailer_sender = Gitlab.config.email_from
8 8
 
9 9
   # Configure the class responsible to send e-mails.
10 10
   # config.mailer = "Devise::Mailer"
8  config/routes.rb
@@ -14,10 +14,10 @@
14 14
 
15 15
   # Enable Grack support
16 16
   mount Grack::Bundle.new({
17  
-    git_path: GIT_OPTS['path'],
18  
-    project_root: GIT_HOST['base_path'],
19  
-    upload_pack: GIT_HOST['upload_pack'],
20  
-    receive_pack: GIT_HOST['receive_pack']
  17
+    git_path:     Gitlab.config.git_bin_path,
  18
+    project_root: Gitlab.config.git_base_path,
  19
+    upload_pack:  Gitlab.config.git_upload_pack,
  20
+    receive_pack: Gitlab.config.git_receive_pack
21 21
   }), at: '/:path', constraints: { path: /[\w-]+\.git/ }
22 22
 
23 23
   #
8  lib/gitlab/git_host.rb
@@ -7,15 +7,11 @@ def self.system
7 7
     end
8 8
 
9 9
     def self.admin_uri
10  
-      GIT_HOST["admin_uri"]
  10
+      Gitlab.config.git_host.admin_uri
11 11
     end
12 12
 
13 13
     def self.url_to_repo(path)
14  
-      if !GIT_HOST["port"] or GIT_HOST["port"] == 22
15  
-        "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{path}.git"
16  
-      else
17  
-        "ssh://#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:#{GIT_HOST["port"]}/#{path}.git"
18  
-      end
  14
+      Gitlab.config.ssh_path + "#{path}.git"
19 15
     end
20 16
   end
21 17
 end
13  lib/tasks/gitlab/status.rake
@@ -3,6 +3,7 @@ namespace :gitlab do
3 3
     desc "GITLAB | Check gitlab installation status"
4 4
     task :status => :environment  do
5 5
       puts "Starting diagnostic"
  6
+      git_base_path = Gitlab.config.git_base_path
6 7
 
7 8
       print "config/database.yml............"
8 9
       if File.exists?(File.join Rails.root, "config", "database.yml") 
@@ -21,16 +22,16 @@ namespace :gitlab do
21 22
       end
22 23
 
23 24
       GIT_HOST = YAML.load_file("#{Rails.root}/config/gitlab.yml")["git_host"]
24  
-      print "#{GIT_HOST['base_path']}............"
25  
-      if File.exists?(GIT_HOST['base_path'])  
  25
+      print "#{git_base_path}............"
  26
+      if File.exists?(git_base_path)  
26 27
         puts "exists".green 
27 28
       else 
28 29
         puts "missing".red
29 30
         return
30 31
       end
31 32
 
32  
-      print "#{GIT_HOST['base_path']} is writable?............"
33  
-      if File.stat(GIT_HOST['base_path']).writable?
  33
+      print "#{git_base_path} is writable?............"
  34
+      if File.stat(git_base_path).writable?
34 35
         puts "YES".green 
35 36
       else
36 37
         puts "NO".red
@@ -38,7 +39,7 @@ namespace :gitlab do
38 39
       end
39 40
 
40 41
       begin
41  
-        `git clone #{GIT_HOST["admin_uri"]} /tmp/gitolite_gitlab_test`
  42
+        `git clone #{Gitlab.config.gitolite_admin_uri} /tmp/gitolite_gitlab_test`
42 43
         FileUtils.rm_rf("/tmp/gitolite_gitlab_test")
43 44
         print "Can clone gitolite-admin?............"
44 45
         puts "YES".green 
@@ -49,7 +50,7 @@ namespace :gitlab do
49 50
       end
50 51
 
51 52
       print "UMASK for .gitolite.rc is 0007? ............"
52  
-      unless open("#{GIT_HOST['base_path']}/../.gitolite.rc").grep(/REPO_UMASK = 0007/).empty?
  53
+      unless open("#{git_base_path}/../.gitolite.rc").grep(/REPO_UMASK = 0007/).empty?
53 54
         puts "YES".green 
54 55
       else
55 56
         puts "NO".red
2  spec/mailers/notify_spec.rb
@@ -5,7 +5,7 @@
5 5
   include EmailSpec::Matchers
6 6
 
7 7
   before :all do
8  
-    default_url_options[:host] = EMAIL_OPTS['host']
  8
+    default_url_options[:host] = Gitlab.config.web_host
9 9
   end
10 10
 
11 11
   let(:recipient) { Factory.create(:user, :email => 'recipient@example.com') }
2  spec/models/project_spec.rb
@@ -56,7 +56,7 @@
56 56
 
57 57
   it "returns the full web URL for this repo" do
58 58
     project = Project.new(:code => "somewhere")
59  
-    project.web_url.should == "#{GIT_HOST['host']}/somewhere"
  59
+    project.web_url.should == "#{Gitlab.config.url}/somewhere"
60 60
   end
61 61
 
62 62
   describe :valid_repo? do

0 notes on commit 9b337b8

Please sign in to comment.
Something went wrong with that request. Please try again.