Commit 213bad4e2b5554bd26c899654706db8169480cce

Authored by Jacob Vosmaer
1 parent 633eee51

Patch gitlab-shell 1.8.0 for backup restores

config/patches/gitlab-shell/create_hooks.patch 0 → 100644
... ... @@ -0,0 +1,126 @@
  1 +diff --git a/bin/create-hooks b/bin/create-hooks
  2 +new file mode 100755
  3 +index 0000000..d6f07c7
  4 +--- /dev/null
  5 ++++ b/bin/create-hooks
  6 +@@ -0,0 +1,12 @@
  7 ++#!/usr/bin/env ruby
  8 ++
  9 ++# Recreate GitLab hooks in the Git repositories managed by GitLab.
  10 ++#
  11 ++# This script is used when restoring a GitLab backup.
  12 ++
  13 ++require_relative '../lib/gitlab_init'
  14 ++require File.join(ROOT_PATH, 'lib', 'gitlab_projects')
  15 ++
  16 ++Dir["#{GitlabConfig.new.repos_path}/*/*.git"].each do |repo|
  17 ++ GitlabProjects.create_hooks(repo)
  18 ++end
  19 +diff --git a/lib/gitlab_projects.rb b/lib/gitlab_projects.rb
  20 +index fec204c..b3ff372 100644
  21 +--- a/lib/gitlab_projects.rb
  22 ++++ b/lib/gitlab_projects.rb
  23 +@@ -42,6 +42,12 @@ class GitlabProjects
  24 + end
  25 + end
  26 +
  27 ++ def self.create_hooks(path)
  28 ++ hook = File.join(path, 'hooks', 'update')
  29 ++ File.delete(hook) if File.exists?(hook)
  30 ++ File.symlink(File.join(ROOT_PATH, 'hooks', 'update'), hook)
  31 ++ end
  32 ++
  33 + protected
  34 +
  35 + def create_branch
  36 +@@ -74,13 +80,7 @@ class GitlabProjects
  37 + $logger.info "Adding project #{@project_name} at <#{full_path}>."
  38 + FileUtils.mkdir_p(full_path, mode: 0770)
  39 + cmd = %W(git --git-dir=#{full_path} init --bare)
  40 +- system(*cmd) && create_hooks(full_path)
  41 +- end
  42 +-
  43 +- def create_hooks(path)
  44 +- hook = File.join(path, 'hooks', 'update')
  45 +- File.delete(hook) if File.exists?(hook)
  46 +- File.symlink(File.join(ROOT_PATH, 'hooks', 'update'), hook)
  47 ++ system(*cmd) && self.class.create_hooks(full_path)
  48 + end
  49 +
  50 + def rm_project
  51 +@@ -94,7 +94,7 @@ class GitlabProjects
  52 + @source = ARGV.shift
  53 + $logger.info "Importing project #{@project_name} from <#{@source}> to <#{full_path}>."
  54 + cmd = %W(git clone --bare -- #{@source} #{full_path})
  55 +- system(*cmd) && create_hooks(full_path)
  56 ++ system(*cmd) && self.class.create_hooks(full_path)
  57 + end
  58 +
  59 + # Move repository from one directory to another
  60 +@@ -156,7 +156,7 @@ class GitlabProjects
  61 +
  62 + $logger.info "Forking project from <#{full_path}> to <#{full_destination_path}>."
  63 + cmd = %W(git clone --bare -- #{full_path} #{full_destination_path})
  64 +- system(*cmd) && create_hooks(full_destination_path)
  65 ++ system(*cmd) && self.class.create_hooks(full_destination_path)
  66 + end
  67 +
  68 + def update_head
  69 +diff --git a/spec/gitlab_projects_spec.rb b/spec/gitlab_projects_spec.rb
  70 +index bbe27e2..4341ca5 100644
  71 +--- a/spec/gitlab_projects_spec.rb
  72 ++++ b/spec/gitlab_projects_spec.rb
  73 +@@ -95,7 +95,7 @@ describe GitlabProjects do
  74 +
  75 + it "should create a directory" do
  76 + gl_projects.stub(system: true)
  77 +- gl_projects.stub(create_hooks: true)
  78 ++ GitlabProjects.stub(create_hooks: true)
  79 + gl_projects.exec
  80 + File.exists?(tmp_repo_path).should be_true
  81 + end
  82 +@@ -103,7 +103,7 @@ describe GitlabProjects do
  83 + it "should receive valid cmd" do
  84 + valid_cmd = ['git', "--git-dir=#{tmp_repo_path}", 'init', '--bare']
  85 + gl_projects.should_receive(:system).with(*valid_cmd).and_return(true)
  86 +- gl_projects.should_receive(:create_hooks).with(tmp_repo_path)
  87 ++ GitlabProjects.should_receive(:create_hooks).with(tmp_repo_path)
  88 + gl_projects.exec
  89 + end
  90 +
  91 +diff --git a/support/rewrite-hooks.sh b/support/rewrite-hooks.sh
  92 +index 3c96b6f..585eaeb 100755
  93 +--- a/support/rewrite-hooks.sh
  94 ++++ b/support/rewrite-hooks.sh
  95 +@@ -1,28 +1,5 @@
  96 + #!/bin/bash
  97 ++# This script is deprecated. Use bin/create-hooks instead.
  98 +
  99 +-# $1 is an optional argument specifying the location of the repositories directory.
  100 +-# Defaults to /home/git/repositories if not provided
  101 +-
  102 +-home_dir="/home/git"
  103 +-src=${1:-"$home_dir/repositories"}
  104 +-
  105 +-function create_link_in {
  106 +- ln -s -f "$home_dir/gitlab-shell/hooks/update" "$1/hooks/update"
  107 +-}
  108 +-
  109 +-for dir in `ls "$src/"`
  110 +-do
  111 +- if [ -d "$src/$dir" ]; then
  112 +- if [[ "$dir" =~ ^.*\.git$ ]]
  113 +- then
  114 +- create_link_in "$src/$dir"
  115 +- else
  116 +- for subdir in `ls "$src/$dir/"`
  117 +- do
  118 +- if [ -d "$src/$dir/$subdir" ] && [[ "$subdir" =~ ^.*\.git$ ]]; then
  119 +- create_link_in "$src/$dir/$subdir"
  120 +- fi
  121 +- done
  122 +- fi
  123 +- fi
  124 +-done
  125 ++gitlab_shell_dir="$(cd $(dirname $0) && pwd)/.."
  126 ++exec ${gitlab_shell_dir}/bin/create-hooks
... ...
config/software/gitlab-shell.rb
... ... @@ -25,6 +25,9 @@ dependency &quot;rsync&quot;
25 25 source :git => "https://gitlab.com/gitlab-org/gitlab-shell.git"
26 26  
27 27 build do
  28 + # patch gitlab-shell 1.8.0 to correctly create hooks during backup restore
  29 + patch :source => "create_hooks.patch"
  30 +
28 31 command "mkdir -p #{install_dir}/embedded/service/gitlab-shell"
29 32 command "#{install_dir}/embedded/bin/rsync -a --delete --exclude=.git/*** --exclude=.gitignore ./ #{install_dir}/embedded/service/gitlab-shell/"
30 33 block do
... ...