Scripts/hooks to store settings in a separate 'gitconfig' branch.
[git-central.git] / server / update-lock-check.rb
1 #! /usr/bin/ruby
2
3 REFNAME = ARGV[0]
4 OLDREV = ARGV[1]
5 NEWREV = ARGV[2]
6
7 DATA_DIR = '/srv/git/hooks/server/'
8
9 def reject(message)
10         $stdout.puts "---------------------------------------------------------"
11         $stdout.puts "Commit #{NEWREV} rejected:"
12         $stdout.puts "\t#{message}"
13         $stdout.puts "---------------------------------------------------------"
14         $stdout.flush()
15         Kernel::exit(1)
16 end
17
18 if(REFNAME =~ /^refs\/heads\/(.+)$/)
19         # Branch commit
20         commit_branch = $1
21         locked_branches = IO::readlines(DATA_DIR + 'locked_branches').collect!(){|element| element.strip()}
22         if(locked_branches.include?(commit_branch))
23                 reject("Branch '#{commit_branch}' is locked.")
24         end
25
26         if(NEWREV =~ /^0{40}$/)
27                 # Branch deletion
28                 preserved_branches = IO::readlines(DATA_DIR + 'preserved_branches').collect!(){|element| element.strip()}
29                 if(preserved_branches.include?(commit_branch))
30                         reject("Branch '#{commit_branch}' cannot be deleted.")
31                 end
32         end
33 end
34
35 Kernel::exit(0)
36