Permalink
Browse files

Epic: Gitlab configuration with default values

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

0 comments on commit 9b337b8

Please sign in to comment.