Commit 704b08ad authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'create_hooks' into 'master'

Add bin/create-hooks command for backup restores

This solves the problem that `support/rewrite-hooks.sh` assumes that the gitlab-shell is installed in `/home/git/gitlab-shell`, which does not hold for omnibus-gitlab.
parents 56e216f3 3bd2b660
#!/usr/bin/env ruby
# Recreate GitLab hooks in the Git repositories managed by GitLab.
#
# This script is used when restoring a GitLab backup.
require_relative '../lib/gitlab_init'
require File.join(ROOT_PATH, 'lib', 'gitlab_projects')
Dir["#{GitlabConfig.new.repos_path}/*/*.git"].each do |repo|
GitlabProjects.create_hooks(repo)
end
......@@ -16,6 +16,12 @@ class GitlabProjects
# Ex /home/git/repositories/test.git
attr_reader :full_path
def self.create_hooks(path)
hook = File.join(path, 'hooks', 'update')
File.delete(hook) if File.exists?(hook)
File.symlink(File.join(ROOT_PATH, 'hooks', 'update'), hook)
end
def initialize
@command = ARGV.shift
@project_name = ARGV.shift
......@@ -74,13 +80,7 @@ class GitlabProjects
$logger.info "Adding project #{@project_name} at <#{full_path}>."
FileUtils.mkdir_p(full_path, mode: 0770)
cmd = %W(git --git-dir=#{full_path} init --bare)
system(*cmd) && create_hooks(full_path)
end
def create_hooks(path)
hook = File.join(path, 'hooks', 'update')
File.delete(hook) if File.exists?(hook)
File.symlink(File.join(ROOT_PATH, 'hooks', 'update'), hook)
system(*cmd) && self.class.create_hooks(full_path)
end
def rm_project
......@@ -94,7 +94,7 @@ class GitlabProjects
@source = ARGV.shift
$logger.info "Importing project #{@project_name} from <#{@source}> to <#{full_path}>."
cmd = %W(git clone --bare -- #{@source} #{full_path})
system(*cmd) && create_hooks(full_path)
system(*cmd) && self.class.create_hooks(full_path)
end
# Move repository from one directory to another
......@@ -156,7 +156,7 @@ class GitlabProjects
$logger.info "Forking project from <#{full_path}> to <#{full_destination_path}>."
cmd = %W(git clone --bare -- #{full_path} #{full_destination_path})
system(*cmd) && create_hooks(full_destination_path)
system(*cmd) && self.class.create_hooks(full_destination_path)
end
def update_head
......
......@@ -95,7 +95,7 @@ describe GitlabProjects do
it "should create a directory" do
gl_projects.stub(system: true)
gl_projects.stub(create_hooks: true)
GitlabProjects.stub(create_hooks: true)
gl_projects.exec
File.exists?(tmp_repo_path).should be_true
end
......@@ -103,7 +103,7 @@ describe GitlabProjects do
it "should receive valid cmd" do
valid_cmd = ['git', "--git-dir=#{tmp_repo_path}", 'init', '--bare']
gl_projects.should_receive(:system).with(*valid_cmd).and_return(true)
gl_projects.should_receive(:create_hooks).with(tmp_repo_path)
GitlabProjects.should_receive(:create_hooks).with(tmp_repo_path)
gl_projects.exec
end
......
#!/bin/bash
# This script is deprecated. Use bin/create-hooks instead.
# $1 is an optional argument specifying the location of the repositories directory.
# Defaults to /home/git/repositories if not provided
home_dir="/home/git"
src=${1:-"$home_dir/repositories"}
function create_link_in {
ln -s -f "$home_dir/gitlab-shell/hooks/update" "$1/hooks/update"
}
for dir in `ls "$src/"`
do
if [ -d "$src/$dir" ]; then
if [[ "$dir" =~ ^.*\.git$ ]]
then
create_link_in "$src/$dir"
else
for subdir in `ls "$src/$dir/"`
do
if [ -d "$src/$dir/$subdir" ] && [[ "$subdir" =~ ^.*\.git$ ]]; then
create_link_in "$src/$dir/$subdir"
fi
done
fi
fi
done
gitlab_shell_dir="$(cd $(dirname $0) && pwd)/.."
exec ${gitlab_shell_dir}/bin/create-hooks
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment