Compare commits

...

27 Commits

Author SHA1 Message Date
Dmitriy Zaporozhets f4fafc4631 Merge pull request #2524 from sourcerer-mike/4-0-stable
Improve usability and quit spamming
2013-03-05 05:58:32 -08:00
Riyad Preukschas c84fcb265c Fix checking the init script in check.rake
Fixes #2671
2013-01-20 15:58:41 +01:00
Riyad Preukschas 042a561baf Merge pull request #2652 from jouve/fix_#2492
fix #2492
2013-01-17 18:57:11 -08:00
Cyril 7b6cbebaad fix #2492 2013-01-18 00:11:15 +01:00
Riyad Preukschas 9cf993972a Fix gitolite config checks for old Gitolite versions
Fixes #2608
2013-01-17 00:45:24 +01:00
Dmitriy Zaporozhets f254de7337 4.0.1 2013-01-15 17:14:53 +02:00
Riyad Preukschas 147dfd1656 Replace all stat command line calls with ruby equivalents 2013-01-12 01:25:21 +01:00
Riyad Preukschas f73dd4af5e Make method names clearer in check.rake 2013-01-12 01:25:19 +01:00
Riyad Preukschas ab12419633 Move OS detection to task helpers and add detection of OS X 2013-01-12 01:25:16 +01:00
Riyad Preukschas c312a8d7d1 Move checks after init script installation in docs 2013-01-11 19:01:41 +01:00
David Southard e523327355 update grammar in check application status section 2013-01-11 17:25:21 +01:00
Dmitriy Zaporozhets c9ae412e88 Merge pull request #2532 from dvanduzer/4-0-stable
updating rails to 3.2.11 in response to CVE-2013-0156
2013-01-09 10:22:14 -08:00
David Van Duzer 6e067482dc updating rails to 3.2.11 in response to CVE-2013-0156
See also:
https://github.com/gitlabhq/gitlabhq/issues/2526
http://www.securityfocus.com/bid/57187
2013-01-09 10:57:41 -07:00
Dmitriy Zaporozhets d40215746e Update docs to use 4-0-stable recipes 2013-01-09 19:48:03 +02:00
rmp 1abc70fbf6 Comment wont be mailed to team by default.
No more magic for deciding which comment is important or not.
2013-01-09 16:44:00 +01:00
rmp 3cccbf8a43 Possibility to open a new issue form after viewing another one.
While looking at an issue you no longer need to go back to the issue list for creating the next one.
2013-01-08 23:42:09 +01:00
rmp 2e7e6e6ee1 Disable automatic mailing to the group.
Most comments are not so essential for the whole team and plenty are private notes. It's recommended to disable those and enable by hand when a comment is important.
2013-01-08 23:40:09 +01:00
Riyad Preukschas 0e2880b740 Backport fixes to the check and info tasks 2013-01-07 21:32:29 +01:00
Dmitriy Zaporozhets 10b312abad Merge pull request #2494 from dvanduzer/4-0-stable
updating rails to 3.2.10 in response to CVE-2012-5664
2013-01-06 03:16:32 -08:00
David Van Duzer 260ab8d67a updating rails to 3.2.10 in response to CVE-2012-5664
See also:
https://github.com/gitlabhq/gitlabhq/issues/2464
http://www.securityfocus.com/bid/57084
2013-01-06 00:46:40 -07:00
Dmitriy Zaporozhets 708a0d421e Fixed and improved enable_naamespace migration task 2012-12-28 06:14:05 +03:00
Dmitriy Zaporozhets 779e95b503 Merge pull request #2401 from Philzen/4-0-stable
Fix for Postgresql Migration 3.1 --> 4.0
2012-12-27 06:59:28 -08:00
Phil. Austermann 91405d1f98 - Fix PostgreSql Migration issue to 4.0 (fixes https://github.com/gitlabhq/gitlabhq/issues/2398) 2012-12-27 11:03:54 +01:00
Dmitriy Zaporozhets 2edb16612f Cleanup service tasks 2012-12-27 11:18:05 +02:00
Dmitriy Zaporozhets c68540e9c9 Fix resque for postgres 2012-12-26 19:56:56 +02:00
Dmitriy Zaporozhets 19cb29e448 Fix MR count for group scope 2012-12-26 10:56:51 +02:00
Dmitriy Zaporozhets 45b6103997 Update projects in gitolite after namespace moved. Added rake task to cleanup garbage from gitolite 2012-12-24 20:06:37 +02:00
21 changed files with 433 additions and 212 deletions

View File

@ -8,7 +8,7 @@ def linux_only(require_as)
RUBY_PLATFORM.include?('linux') && require_as
end
gem "rails", "3.2.9"
gem "rails", "3.2.11"
# Supported DBs
gem "mysql2", group: :mysql

View File

@ -81,12 +81,12 @@ GIT
GEM
remote: http://rubygems.org/
specs:
actionmailer (3.2.9)
actionpack (= 3.2.9)
actionmailer (3.2.11)
actionpack (= 3.2.11)
mail (~> 2.4.4)
actionpack (3.2.9)
activemodel (= 3.2.9)
activesupport (= 3.2.9)
actionpack (3.2.11)
activemodel (= 3.2.11)
activesupport (= 3.2.11)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.4)
@ -94,18 +94,18 @@ GEM
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.2.1)
activemodel (3.2.9)
activesupport (= 3.2.9)
activemodel (3.2.11)
activesupport (= 3.2.11)
builder (~> 3.0.0)
activerecord (3.2.9)
activemodel (= 3.2.9)
activesupport (= 3.2.9)
activerecord (3.2.11)
activemodel (= 3.2.11)
activesupport (= 3.2.11)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.9)
activemodel (= 3.2.9)
activesupport (= 3.2.9)
activesupport (3.2.9)
activeresource (3.2.11)
activemodel (= 3.2.11)
activesupport (= 3.2.11)
activesupport (3.2.11)
i18n (~> 0.6)
multi_json (~> 1.0)
acts-as-taggable-on (2.3.3)
@ -240,7 +240,7 @@ GEM
jquery-ui-rails (2.0.2)
jquery-rails
railties (>= 3.1.0)
json (1.7.5)
json (1.7.6)
jwt (0.1.5)
multi_json (>= 1.0)
kaminari (0.14.1)
@ -264,7 +264,7 @@ GEM
mime-types (1.19)
modernizr (2.6.2)
sprockets (~> 2.0)
multi_json (1.3.7)
multi_json (1.5.0)
multi_xml (0.5.1)
multipart-post (1.1.5)
mysql2 (0.3.11)
@ -306,7 +306,7 @@ GEM
pyu-ruby-sasl (0.0.3.3)
quiet_assets (1.0.1)
railties (~> 3.1)
rack (1.4.1)
rack (1.4.3)
rack-accept (0.4.5)
rack (>= 0.4)
rack-cache (1.2)
@ -321,26 +321,26 @@ GEM
rack
rack-test (0.6.2)
rack (>= 1.0)
rails (3.2.9)
actionmailer (= 3.2.9)
actionpack (= 3.2.9)
activerecord (= 3.2.9)
activeresource (= 3.2.9)
activesupport (= 3.2.9)
rails (3.2.11)
actionmailer (= 3.2.11)
actionpack (= 3.2.11)
activerecord (= 3.2.11)
activeresource (= 3.2.11)
activesupport (= 3.2.11)
bundler (~> 1.0)
railties (= 3.2.9)
railties (= 3.2.11)
rails-dev-tweaks (0.6.1)
actionpack (~> 3.1)
railties (~> 3.1)
railties (3.2.9)
actionpack (= 3.2.9)
activesupport (= 3.2.9)
railties (3.2.11)
actionpack (= 3.2.11)
activesupport (= 3.2.11)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
raindrops (0.10.0)
rake (10.0.1)
rake (10.0.3)
raphael-rails (1.5.2)
rb-fsevent (0.9.2)
rb-inotify (0.8.8)
@ -411,7 +411,7 @@ GEM
capybara (~> 1)
railties (>= 3)
spinach (>= 0.4)
sprockets (2.2.1)
sprockets (2.2.2)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
@ -506,7 +506,7 @@ DEPENDENCIES
pygments.rb!
quiet_assets (~> 1.0.1)
rack-mini-profiler
rails (= 3.2.9)
rails (= 3.2.11)
rails-dev-tweaks
raphael-rails (= 1.5.2)
rb-fsevent

View File

@ -1 +1 @@
4.0.0
4.0.1

View File

@ -27,10 +27,13 @@ class Namespace < ActiveRecord::Base
after_create :ensure_dir_exist
after_update :move_dir
after_commit :update_gitolite, on: :update, if: :require_update_gitolite
after_destroy :rm_dir
scope :root, where('type IS NULL')
attr_accessor :require_update_gitolite
def self.search query
where("name LIKE :query OR path LIKE :query", query: "%#{query}%")
end
@ -48,8 +51,17 @@ class Namespace < ActiveRecord::Base
end
def ensure_dir_exist
namespace_dir_path = File.join(Gitlab.config.gitolite.repos_path, path)
system("mkdir -m 770 #{namespace_dir_path}") unless File.exists?(namespace_dir_path)
unless dir_exists?
system("mkdir -m 770 #{namespace_full_path}")
end
end
def dir_exists?
File.exists?(namespace_full_path)
end
def namespace_full_path
@namespace_full_path ||= File.join(Gitlab.config.gitolite.repos_path, path)
end
def move_dir
@ -62,10 +74,18 @@ class Namespace < ActiveRecord::Base
if system("mv #{old_path} #{new_path}")
send_update_instructions
@require_update_gitolite = true
else
raise "Namespace move error #{old_path} #{new_path}"
end
end
end
def update_gitolite
@require_update_gitolite = false
projects.each(&:update_repository)
end
def rm_dir
dir_path = File.join(Gitlab.config.gitolite.repos_path, path)
system("rm -rf #{dir_path}")

View File

@ -14,7 +14,7 @@ class UserObserver < ActiveRecord::Observer
if user.namespace
user.namespace.update_attributes(path: user.username)
else
user.create_namespace!(path: user.username, name: user.name)
user.create_namespace!(path: user.username, name: user.username)
end
end
end

View File

@ -24,7 +24,7 @@ module NamespacedProject
save!
end
rescue Gitlab::ProjectMover::ProjectMoveError => ex
raise TransferError.new(ex.message)
raise Project::TransferError.new(ex.message)
end
def name_with_namespace

View File

@ -6,6 +6,10 @@
= @issue.created_at.stamp("Aug 21, 2011")
%span.right
- if can? current_user, :write_issue, @project
= link_to new_project_issue_path(@project, issue: { assignee_id: params[:assignee_id], milestone_id: params[:milestone_id]}), class: "btn grouped" do
%i.icon-plus
New Issue
- if can?(current_user, :admin_project, @project) || @issue.author == current_user
- if @issue.closed
= link_to 'Reopen', project_issue_path(@project, @issue, issue: {closed: false }, status_only: true), method: :put, class: "btn grouped reopen_issue"

View File

@ -15,7 +15,7 @@
= nav_link(path: 'groups#merge_requests') do
= link_to merge_requests_group_path(@group) do
Merge Requests
%span.count= current_user.cared_merge_requests.of_group(@group).count
%span.count= current_user.cared_merge_requests.opened.of_group(@group).count
= nav_link(path: 'groups#search') do
= link_to "Search", search_group_path(@group)
= nav_link(path: 'groups#people') do

View File

@ -22,12 +22,12 @@
.span4.notify_opts
%h6.left Notify via email:
= label_tag :notify do
= check_box_tag :notify, 1, @note.noteable_type != "Commit"
= check_box_tag :notify, 1, false
%span Project team
- if @note.notify_only_author?(current_user)
= label_tag :notify_author do
= check_box_tag :notify_author, 1 , @note.noteable_type == "Commit"
= check_box_tag :notify_author, 1 , false
%span Commit author
.span5.attachments
%h6.left Attachment:

View File

@ -23,12 +23,12 @@
%h6.left Notify via email:
.labels
= label_tag :notify do
= check_box_tag :notify, 1, @note.noteable_type != "Commit"
= check_box_tag :notify, 1, false
%span Project team
- if @note.notify_only_author?(current_user)
= label_tag :notify_author do
= check_box_tag :notify_author, 1 , @note.noteable_type == "Commit"
= check_box_tag :notify_author, 1 , false
%span Commit author
:javascript

View File

@ -89,6 +89,7 @@ backup:
## Gitolite settings
gitolite:
admin_uri: git@localhost:gitolite-admin
# repos_path must not be a symlink
repos_path: /home/git/repositories/
hooks_path: /home/git/.gitolite/hooks/
admin_key: gitlab

View File

@ -324,7 +324,7 @@ Settings.gitlab['email_from'] ||= Settings.pre_40_config ? Settings.email_from :
Settings.gitlab['url'] ||= Settings.pre_40_config ? Settings.url : Settings.send(:build_gitlab_url)
Settings['gravatar'] ||= Settingslogic.new({})
Settings.gravatar['enabled'] ||= Settings.pre_40_config ? !Settings.disable_gravatar? : true
Settings.gravatar['enabled'] = Settings.pre_40_config ? !Settings.disable_gravatar? : true if Settings.gravatar['enabled'].nil?
Settings.gravatar['plain_url'] ||= Settings.pre_40_config ? Settings.gravatar_url : 'http://www.gravatar.com/avatar/%{hash}?s=%{size}&d=mm'
Settings.gravatar['ssl_url'] ||= Settings.pre_40_config ? Settings.gravatar_ssl_url : 'https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=mm'

View File

@ -27,3 +27,5 @@ Resque::Server.use Authentication
# Mailer
Resque::Mailer.excluded_environments = []
Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection }

View File

@ -5,7 +5,7 @@ class MoveNoteableCommitToOwnField < ActiveRecord::Migration
Note.where(noteable_type: 'Commit').update_all('commit_id = noteable_id')
if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
Note.where("noteable_type != 'Commit'").update_all('new_noteable_id = CAST (noteable_id AS INTEGER)')
Note.where("noteable_type != 'Commit'").update_all('new_noteable_id = CAST (CASE noteable_id WHEN \'\' THEN NULL ELSE noteable_id END AS INTEGER)')
else
Note.where("noteable_type != 'Commit'").update_all('new_noteable_id = noteable_id')
end

View File

@ -270,6 +270,18 @@ used for the `email.from` setting in `config/gitlab.yml`)
sudo -u gitlab -H bundle exec rake gitlab:app:setup RAILS_ENV=production
## Install Init Script
Download the init script (will be /etc/init.d/gitlab):
sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/4-0-stable/init.d/gitlab -P /etc/init.d/
sudo chmod +x /etc/init.d/gitlab
Make GitLab start on boot:
sudo update-rc.d gitlab defaults 21
## Check Application Status
Check if GitLab and its environment is configured correctly:
@ -280,23 +292,11 @@ To make sure you didn't miss anything run a more thorough check with:
sudo -u gitlab -H bundle exec rake gitlab:check RAILS_ENV=production
If you are all green: congratulations, you successfully installed GitLab!
Although this is the case, there are still a few steps to go.
If all items are green, then congratulations on successfully installing GitLab!
However there are still a few steps left.
## Install Init Script
Download the init script (will be /etc/init.d/gitlab):
sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab -P /etc/init.d/
sudo chmod +x /etc/init.d/gitlab
Make GitLab start on boot:
sudo update-rc.d gitlab defaults 21
Start your GitLab instance:
## Start Your GitLab Instance
sudo service gitlab start
# or
@ -316,7 +316,7 @@ If you can't or don't want to use Nginx as your web server, have a look at the
Download an example site config:
sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab -P /etc/nginx/sites-available/
sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/4-0-stable/nginx/gitlab -P /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
Make sure to edit the config file to match your setup:

View File

@ -48,7 +48,7 @@ namespace :gitlab do
see_database_guide,
"http://guides.rubyonrails.org/getting_started.html#configuring-a-database"
)
check_failed
fix_and_rerun
end
end
@ -65,7 +65,7 @@ namespace :gitlab do
"https://github.com/gitlabhq/gitlabhq/wiki/Migrate-from-SQLite-to-MySQL",
see_database_guide
)
check_failed
fix_and_rerun
end
end
@ -85,7 +85,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "GitLab"
)
check_failed
fix_and_rerun
end
end
@ -98,7 +98,7 @@ namespace :gitlab do
end
# omniauth or ldap could have been deleted from the file
unless Gitlab.config.pre_40_config
unless Gitlab.config['git_host']
puts "no".green
else
puts "yes".red
@ -110,7 +110,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "GitLab"
)
check_failed
fix_and_rerun
end
end
@ -129,7 +129,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Install Init Script"
)
check_failed
fix_and_rerun
end
end
@ -142,7 +142,7 @@ namespace :gitlab do
return
end
recipe_content = `curl https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab 2>/dev/null`
recipe_content = `curl https://raw.github.com/gitlabhq/gitlab-recipes/4-0-stable/init.d/gitlab 2>/dev/null`
script_content = File.read(script_path)
if recipe_content == script_content
@ -155,7 +155,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Install Init Script"
)
check_failed
fix_and_rerun
end
end
@ -171,7 +171,7 @@ namespace :gitlab do
try_fixing_it(
"sudo -u gitlab -H bundle exec rake db:migrate"
)
check_failed
fix_and_rerun
end
end
@ -201,7 +201,7 @@ namespace :gitlab do
for_more_information(
"doc/raketasks/maintenance.md "
)
check_failed
fix_and_rerun
end
end
end
@ -222,7 +222,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "GitLab"
)
check_failed
fix_and_rerun
end
end
@ -242,7 +242,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "GitLab"
)
check_failed
fix_and_rerun
end
end
end
@ -256,7 +256,7 @@ namespace :gitlab do
start_checking "Environment"
check_gitlab_in_git_group
check_issue_1056_shell_profile_error
check_issue_1059_shell_profile_error
check_gitlab_git_config
check_python2_exists
check_python2_version
@ -290,7 +290,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "GitLab"
)
check_failed
fix_and_rerun
end
end
@ -308,16 +308,16 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "System Users"
)
check_failed
fix_and_rerun
end
end
# see https://github.com/gitlabhq/gitlabhq/issues/1059
def check_issue_1056_shell_profile_error
def check_issue_1059_shell_profile_error
gitolite_ssh_user = Gitlab.config.gitolite.ssh_user
print "Has no \"-e\" in ~#{gitolite_ssh_user}/.profile ... "
profile_file = File.join(gitolite_home, ".profile")
profile_file = File.join(gitolite_user_home, ".profile")
unless File.read(profile_file) =~ /^-e PATH/
puts "yes".green
@ -332,7 +332,7 @@ namespace :gitlab do
see_installation_guide_section("Gitolite"),
"https://github.com/gitlabhq/gitlabhq/issues/1059"
)
check_failed
fix_and_rerun
end
end
@ -352,7 +352,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Packages / Dependencies"
)
check_failed
fix_and_rerun
end
end
@ -378,7 +378,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Packages / Dependencies"
)
check_failed
fix_and_rerun
end
end
end
@ -398,6 +398,7 @@ namespace :gitlab do
check_dot_gitolite_user_and_group
check_dot_gitolite_permissions
check_repo_base_exists
check_repo_base_is_not_symlink
check_repo_base_user_and_group
check_repo_base_permissions
check_can_clone_gitolite_admin
@ -434,7 +435,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
end
# assumes #check_can_clone_gitolite_admin has been run before
@ -466,7 +467,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
ensure
FileUtils.rm_rf("/tmp/gitolite_gitlab_test")
end
@ -474,7 +475,7 @@ namespace :gitlab do
def check_dot_gitolite_exists
print "Config directory exists? ... "
gitolite_config_path = File.join(gitolite_home, ".gitolite")
gitolite_config_path = File.join(gitolite_user_home, ".gitolite")
if File.directory?(gitolite_config_path)
puts "yes".green
@ -488,20 +489,20 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
end
end
def check_dot_gitolite_permissions
print "Config directory access is drwxr-x---? ... "
gitolite_config_path = File.join(gitolite_home, ".gitolite")
gitolite_config_path = File.join(gitolite_user_home, ".gitolite")
unless File.exists?(gitolite_config_path)
puts "can't check because of previous errors".magenta
return
end
if `stat --printf %a #{gitolite_config_path}` == "750"
if File.stat(gitolite_config_path).mode.to_s(8).ends_with?("750")
puts "yes".green
else
puts "no".red
@ -511,7 +512,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
end
end
@ -519,31 +520,30 @@ namespace :gitlab do
gitolite_ssh_user = Gitlab.config.gitolite.ssh_user
print "Config directory owned by #{gitolite_ssh_user}:#{gitolite_ssh_user} ... "
gitolite_config_path = File.join(gitolite_home, ".gitolite")
gitolite_config_path = File.join(gitolite_user_home, ".gitolite")
unless File.exists?(gitolite_config_path)
puts "can't check because of previous errors".magenta
return
end
if `stat --printf %U #{gitolite_config_path}` == gitolite_ssh_user && # user
`stat --printf %G #{gitolite_config_path}` == gitolite_ssh_user #group
if File.stat(gitolite_config_path).uid == uid_for(gitolite_ssh_user) &&
File.stat(gitolite_config_path).gid == gid_for(gitolite_ssh_user)
puts "yes".green
else
puts "no".red
puts "#{gitolite_config_path} is not owned by #{gitolite_ssh_user}".red
try_fixing_it(
"sudo chown -R #{gitolite_ssh_user}:#{gitolite_ssh_user} #{gitolite_config_path}"
)
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
end
end
def check_gitolite_is_up_to_date
print "Using recommended version ... "
if gitolite_version.try(:start_with?, "v3.04")
if gitolite_version.try(:start_with?, "v3.2")
puts "yes".green
else
puts "no".red
@ -558,7 +558,7 @@ namespace :gitlab do
end
def check_gitoliterc_git_config_keys
gitoliterc_path = File.join(gitolite_home, ".gitolite.rc")
gitoliterc_path = File.join(gitolite_user_home, ".gitolite.rc")
print "Allow all Git config keys in .gitolite.rc ... "
option_name = if has_gitolite3?
@ -567,7 +567,7 @@ namespace :gitlab do
else
# assume older version
# see https://github.com/sitaramc/gitolite/blob/v2.3/conf/example.gitolite.rc#L49
"$GL_GITCONFIG_KEYS"
"\\$GL_GITCONFIG_KEYS"
end
option_value = ".*"
if open(gitoliterc_path).grep(/#{option_name}\s*=[>]?\s*["']#{option_value}["']/).any?
@ -582,12 +582,12 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
end
end
def check_gitoliterc_repo_umask
gitoliterc_path = File.join(gitolite_home, ".gitolite.rc")
gitoliterc_path = File.join(gitolite_user_home, ".gitolite.rc")
print "Repo umask is 0007 in .gitolite.rc? ... "
option_name = if has_gitolite3?
@ -596,7 +596,7 @@ namespace :gitlab do
else
# assume older version
# see https://github.com/sitaramc/gitolite/blob/v2.3/conf/example.gitolite.rc#L32
"$REPO_UMASK"
"\\$REPO_UMASK"
end
option_value = "0007"
if open(gitoliterc_path).grep(/#{option_name}\s*=[>]?\s*#{option_value}/).any?
@ -611,7 +611,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
end
end
@ -635,7 +635,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Setup GitLab Hooks"
)
check_failed
fix_and_rerun
end
end
@ -666,7 +666,7 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Setup GitLab Hooks"
)
check_failed
fix_and_rerun
end
end
@ -688,7 +688,27 @@ namespace :gitlab do
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
end
end
def check_repo_base_is_not_symlink
print "Repo base directory is a symlink? ... "
repo_base_path = Gitlab.config.gitolite.repos_path
unless File.exists?(repo_base_path)
puts "can't check because of previous errors".magenta
return
end
unless File.symlink?(repo_base_path)
puts "no".green
else
puts "yes".red
try_fixing_it(
"Make sure it's set to the real directory in config/gitlab.yml"
)
fix_and_rerun
end
end
@ -701,18 +721,17 @@ namespace :gitlab do
return
end
if `stat --printf %a #{repo_base_path}` == "6770"
if File.stat(repo_base_path).mode.to_s(8).ends_with?("6770")
puts "yes".green
else
puts "no".red
puts "#{repo_base_path} is not writable".red
try_fixing_it(
"sudo chmod -R ug+rwXs,o-rwx #{repo_base_path}"
)
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
end
end
@ -726,19 +745,18 @@ namespace :gitlab do
return
end
if `stat --printf %U #{repo_base_path}` == gitolite_ssh_user && # user
`stat --printf %G #{repo_base_path}` == gitolite_ssh_user #group
if File.stat(repo_base_path).uid == uid_for(gitolite_ssh_user) &&
File.stat(repo_base_path).gid == gid_for(gitolite_ssh_user)
puts "yes".green
else
puts "no".red
puts "#{repo_base_path} is not owned by #{gitolite_ssh_user}".red
try_fixing_it(
"sudo chown -R #{gitolite_ssh_user}:#{gitolite_ssh_user} #{repo_base_path}"
)
for_more_information(
see_installation_guide_section "Gitolite"
)
check_failed
fix_and_rerun
end
end
@ -772,7 +790,7 @@ namespace :gitlab do
for_more_information(
"doc/raketasks/maintenance.md"
)
check_failed
fix_and_rerun
end
end
end
@ -808,11 +826,12 @@ namespace :gitlab do
for_more_information(
"lib/support/rewrite-hooks.sh"
)
check_failed
fix_and_rerun
next
end
if run_and_match("stat --format %N #{project_hook_file}", /#{hook_file}.+->.+#{gitolite_hook_file}/)
if File.lstat(project_hook_file).symlink? &&
File.realpath(project_hook_file) == File.realpath(gitolite_hook_file)
puts "ok".green
else
puts "not a link to Gitolite's hook".red
@ -822,7 +841,7 @@ namespace :gitlab do
for_more_information(
"lib/support/rewrite-hooks.sh"
)
check_failed
fix_and_rerun
end
end
end
@ -831,12 +850,12 @@ namespace :gitlab do
# Helper methods
########################
def gitolite_home
def gitolite_user_home
File.expand_path("~#{Gitlab.config.gitolite.ssh_user}")
end
def gitolite_version
gitolite_version_file = "#{gitolite_home}/gitolite/src/VERSION"
gitolite_version_file = "#{gitolite_user_home}/gitolite/src/VERSION"
if File.readable?(gitolite_version_file)
File.read(gitolite_version_file)
end
@ -880,7 +899,7 @@ namespace :gitlab do
see_installation_guide_section("Install Init Script"),
"see log/resque.log for possible errors"
)
check_failed
fix_and_rerun
end
end
end
@ -889,7 +908,7 @@ namespace :gitlab do
# Helper methods
##########################
def check_failed
def fix_and_rerun
puts " Please #{"fix the error above"} and rerun the checks.".red
end
@ -908,29 +927,6 @@ namespace :gitlab do
puts ""
end
# Runs the given command
#
# Returns nil if the command was not found
# Returns the output of the command otherwise
#
# see also #run_and_match
def run(command)
unless `#{command} 2>/dev/null`.blank?
`#{command}`
end
end
# Runs the given command and matches the output agains the given pattern
#
# Returns nil if nothing matched
# Retunrs the MatchData if the pattern matched
#
# see also #run
# see also String#match
def run_and_match(command, pattern)
run(command).try(:match, pattern)
end
def see_database_guide
"doc/install/databases.md"
end
@ -952,18 +948,4 @@ namespace :gitlab do
puts " #{step}"
end
end
def warn_user_is_not_gitlab
unless @warned_user_not_gitlab
current_user = run("whoami").chomp
unless current_user == "gitlab"
puts "#{Colored.color(:black)+Colored.color(:on_yellow)} Warning #{Colored.extra(:clear)}"
puts " You are running as user #{current_user.magenta}, we hope you know what you are doing."
puts " Some tests may pass\/fail for the wrong reason."
puts " For meaningful results you should run this as user #{"gitlab".magenta}."
puts ""
end
@warned_user_not_gitlab = true
end
end
end

View File

@ -0,0 +1,128 @@
namespace :gitlab do
namespace :cleanup do
desc "GITLAB | Cleanup | Clean gitolite config"
task :config => :environment do
warn_user_is_not_gitlab
real_repos = Project.all.map(&:path_with_namespace)
real_repos << "gitolite-admin"
real_repos << "@all"
remove_flag = ENV['REMOVE']
puts "Looking for repositories to remove... "
Gitlab::GitoliteConfig.new.apply do |config|
all_repos = []
garbage_repos = []
all_repos = config.conf.repos.keys
garbage_repos = all_repos - real_repos
garbage_repos.each do |repo_name|
if remove_flag
config.conf.rm_repo(repo_name)
print "to remove...".red
end
puts repo_name.red
end
end
unless remove_flag
puts "To cleanup repositories run this command with REMOVE=true".yellow
end
end
desc "GITLAB | Cleanup | Clean namespaces"
task :dirs => :environment do
warn_user_is_not_gitlab
remove_flag = ENV['REMOVE']
namespaces = Namespace.pluck(:path)
git_base_path = Gitlab.config.gitolite.repos_path
all_dirs = Dir.glob(git_base_path + '/*')
puts git_base_path.yellow
puts "Looking for directories to remove... "
all_dirs.reject! do |dir|
# skip if git repo
dir =~ /.git$/
end
all_dirs.reject! do |dir|
dir_name = File.basename dir
# skip if namespace present
namespaces.include?(dir_name)
end
all_dirs.each do |dir_path|
if remove_flag
if FileUtils.rm_rf dir_path
puts "Removed...#{dir_path}".red
else
puts "Cannot remove #{dir_path}".red
end
else
puts "Can be removed: #{dir_path}".red
end
end
unless remove_flag
puts "To cleanup this directories run this command with REMOVE=true".yellow
end
end
desc "GITLAB | Cleanup | Clean respositories"
task :repos => :environment do
warn_user_is_not_gitlab
remove_flag = ENV['REMOVE']
git_base_path = Gitlab.config.gitolite.repos_path
all_dirs = Dir.glob(git_base_path + '/*')
global_projects = Project.where(namespace_id: nil).pluck(:path)
puts git_base_path.yellow
puts "Looking for global repos to remove... "
# skip non git repo
all_dirs.select! do |dir|
dir =~ /.git$/
end
# skip existing repos
all_dirs.reject! do |dir|
repo_name = File.basename dir
path = repo_name.gsub(/\.git$/, "")
global_projects.include?(path)
end
# skip gitolite admin
all_dirs.reject! do |dir|
repo_name = File.basename dir
repo_name == 'gitolite-admin.git'
end
all_dirs.each do |dir_path|
if remove_flag
if FileUtils.rm_rf dir_path
puts "Removed...#{dir_path}".red
else
puts "Cannot remove #{dir_path}".red
end
else
puts "Can be removed: #{dir_path}".red
end
end
unless remove_flag
puts "To cleanup this directories run this command with REMOVE=true".yellow
end
end
end
end

View File

@ -1,34 +1,87 @@
namespace :gitlab do
desc "GITLAB | Enable usernames and namespaces for user projects"
task enable_namespaces: :environment do
print "\nUsernames for users:".yellow
warn_user_is_not_gitlab
migrate_user_namespaces
migrate_groups
migrate_projects
puts "Rebuild Gitolite ... "
gitolite = Gitlab::Gitolite.new
gitolite.update_repositories(Project.where('namespace_id IS NOT NULL'))
puts "... #{"done".green}"
end
def migrate_user_namespaces
puts "\nGenerate usernames for users without one: ".blue
User.find_each(batch_size: 500) do |user|
next if user.namespace
User.transaction do
username = user.email.match(/^[^@]*/)[0]
if user.update_attributes!(username: username)
print '.'.green
else
print 'F'.red
end
if user.namespace
print '-'.cyan
next
end
end
print "\n\nDirs for groups:".yellow
username = if user.username.present?
# if user already has username filled
user.username
else
build_username(user)
end
Group.find_each(batch_size: 500) do |group|
if group.ensure_dir_exist
print '.'.green
else
begin
User.transaction do
user.update_attributes!(username: username)
print '.'.green
end
rescue
print 'F'.red
end
end
puts "\nDone"
end
print "\n\nMove projects from groups under groups dirs:".yellow
def build_username(user)
username = nil
# generate username
username = user.email.match(/^[^@]*/)[0]
username.gsub!("+", ".")
# return username if no mathes
return username unless User.find_by_username(username)
# look for same username
(1..10).each do |i|
suffixed_username = "#{username}#{i}"
return suffixed_username unless User.find_by_username(suffixed_username)
end
end
def migrate_groups
puts "\nCreate directories for groups: ".blue
Group.find_each(batch_size: 500) do |group|
begin
if group.dir_exists?
print '-'.cyan
else
if group.ensure_dir_exist
print '.'.green
else
print 'F'.red
end
end
rescue
print 'F'.red
end
end
puts "\nDone"
end
def migrate_projects
git_path = Gitlab.config.gitolite.repos_path
puts "\nMove projects in groups into respective directories ... ".blue
Project.where('namespace_id IS NOT NULL').find_each(batch_size: 500) do |project|
next unless project.group
@ -59,9 +112,6 @@ namespace :gitlab do
end
end
print "\n\nRebuild gitolite:".yellow
gitolite = Gitlab::Gitolite.new
gitolite.update_repositories(Project.where('namespace_id IS NOT NULL'))
puts "\n"
puts "\nDone"
end
end

View File

@ -3,17 +3,6 @@ namespace :gitlab do
desc "GITLAB | Show information about GitLab and its environment"
task info: :environment do
# check which OS is running
os_name = run("lsb_release -irs")
os_name ||= if File.readable?('/etc/system-release')
File.read('/etc/system-release')
end
os_name ||= if File.readable?('/etc/debian_version')
debian_version = File.read('/etc/debian_version')
"Debian #{debian_version}"
end
os_name.squish!
# check if there is an RVM environment
rvm_version = run_and_match("rvm --version", /[\d\.]+/).try(:to_s)
# check Ruby version
@ -80,31 +69,5 @@ namespace :gitlab do
puts "Git:\t\t#{Gitlab.config.git.bin_path}"
end
# Helper methods
# Runs the given command and matches the output agains the given pattern
#
# Returns nil if nothing matched
# Retunrs the MatchData if the pattern matched
#
# see also #run
# see also String#match
def run_and_match(command, regexp)
run(command).try(:match, regexp)
end
# Runs the given command
#
# Returns nil if the command was not found
# Returns the output of the command otherwise
#
# see also #run_and_match
def run(command)
unless `#{command} 2>/dev/null`.blank?
`#{command}`
end
end
end
end

View File

@ -0,0 +1,70 @@
namespace :gitlab do
# Check which OS is running
#
# It will primarily use lsb_relase to determine the OS.
# It has fallbacks to Debian, SuSE and OS X.
def os_name
os_name = run("lsb_release -irs")
os_name ||= if File.readable?('/etc/system-release')
File.read('/etc/system-release')
end
os_name ||= if File.readable?('/etc/debian_version')
debian_version = File.read('/etc/debian_version')
"Debian #{debian_version}"
end
os_name ||= if File.readable?('/etc/SuSE-release')
File.read('/etc/SuSE-release')
end
os_name ||= if os_x_version = run("sw_vers -productVersion")
"Mac OS X #{os_x_version}"
end
os_name.try(:squish!)
end
# Runs the given command and matches the output agains the given pattern
#
# Returns nil if nothing matched
# Retunrs the MatchData if the pattern matched
#
# see also #run
# see also String#match
def run_and_match(command, regexp)
run(command).try(:match, regexp)
end
# Runs the given command
#
# Returns nil if the command was not found
# Returns the output of the command otherwise
#
# see also #run_and_match
def run(command)
unless `#{command} 2>/dev/null`.blank?
`#{command}`
end
end
def uid_for(user_name)
run("id -u #{user_name}").chomp.to_i
end
def gid_for(group_name)
group_line = File.read("/etc/group").lines.select{|l| l.start_with?("#{group_name}:")}.first
group_line.split(":")[2].to_i
end
def warn_user_is_not_gitlab
unless @warned_user_not_gitlab
current_user = run("whoami").chomp
unless current_user == "gitlab"
puts "#{Colored.color(:black)+Colored.color(:on_yellow)} Warning #{Colored.extra(:clear)}"
puts " You are running as user #{current_user.magenta}, we hope you know what you are doing."
puts " Things may work\/fail for the wrong reasons."
puts " For correct results you should run this as user #{"gitlab".magenta}."
puts ""
end
@warned_user_not_gitlab = true
end
end
end

View File

@ -4,6 +4,7 @@ task "resque:setup" => :environment do
Resque.after_fork do
Resque.redis.client.reconnect
end
Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection }
end
desc "Alias for resque:work (To run workers on Heroku)"