Commit bc0155fbaa1261f348324c1ddf5d1eaba5907f77

Authored by Ariejan de Vroom
1 parent 1c9b9b7a

First attempt at a post-receive hook that posts directly to Resque

app/models/repository.rb
@@ -31,6 +31,17 @@ class Repository @@ -31,6 +31,17 @@ class Repository
31 project.id 31 project.id
32 end 32 end
33 33
  34 + # repo.update_hook('post-receive', File.read('some-hook'))
  35 + def update_hook(name, content)
  36 + hook_file = File.join(project.path_to_repo, 'hooks', name)
  37 +
  38 + File.open(hook_file, 'w') do |f|
  39 + f.write(content)
  40 + end
  41 +
  42 + File.chmod(0775, hook_file)
  43 + end
  44 +
34 def repo 45 def repo
35 @repo ||= Grit::Repo.new(project.path_to_repo) 46 @repo ||= Grit::Repo.new(project.path_to_repo)
36 end 47 end
app/workers/post_receive.rb 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +class PostReceive
  2 + def self.perform(reponame, oldrev, newrev, ref)
  3 + puts "[#{reponame}] #{oldrev} => #{newrev} (#{ref})"
  4 + end
  5 +end
@@ -13,18 +13,6 @@ @@ -13,18 +13,6 @@
13 13
14 ActiveRecord::Schema.define(:version => 20111207211728) do 14 ActiveRecord::Schema.define(:version => 20111207211728) do
15 15
16 - create_table "features", :force => true do |t|  
17 - t.string "name"  
18 - t.string "branch_name"  
19 - t.integer "assignee_id"  
20 - t.integer "author_id"  
21 - t.integer "project_id"  
22 - t.datetime "created_at"  
23 - t.datetime "updated_at"  
24 - t.string "version"  
25 - t.integer "status", :default => 0, :null => false  
26 - end  
27 -  
28 create_table "issues", :force => true do |t| 16 create_table "issues", :force => true do |t|
29 t.string "title" 17 t.string "title"
30 t.integer "assignee_id" 18 t.integer "assignee_id"
lib/gitlabhq/gitolite.rb
@@ -43,14 +43,14 @@ module Gitlabhq @@ -43,14 +43,14 @@ module Gitlabhq
43 43
44 def destroy_project(project) 44 def destroy_project(project)
45 FileUtils.rm_rf(project.path_to_repo) 45 FileUtils.rm_rf(project.path_to_repo)
46 - 46 +
47 ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) 47 ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite'))
48 conf = ga_repo.config 48 conf = ga_repo.config
49 conf.rm_repo(project.path) 49 conf.rm_repo(project.path)
50 ga_repo.save 50 ga_repo.save
51 end 51 end
52 52
53 - #update or create 53 + #update or create
54 def update_keys(user, key) 54 def update_keys(user, key)
55 File.open(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub"), 'w') {|f| f.write(key.gsub(/\n/,'')) } 55 File.open(File.join(@local_dir, 'gitolite/keydir',"#{user}.pub"), 'w') {|f| f.write(key.gsub(/\n/,'')) }
56 end 56 end
lib/post-receive-hook 0 → 100755
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +#!/bin/bash
  2 +
  3 +# This file was placed here by Gitlab. It makes sure that your pushed commits
  4 +# will be processed properly.
  5 +
  6 +while read oldrev newrev ref
  7 +do
  8 + # For every branch or tag that was pushed, create a Resque job in redis.
  9 + pwd=`pwd`
  10 + reponame=`basename "$pwd" | cut -d. -f1`
  11 + env -i redis-cli rpush "resque:queue:post-receive" "{\"class\":\"PostReceive\",\"args\":[\"$reponame\",\"$oldrev\",\"$newrev\",\"$ref\"]}" > /dev/null 2>&1
  12 +done