]> nos-oignons.net Git - gestion-adh.git/blob - bin/pre-commit-hook
Remove useless code in pre-commit hook
[gestion-adh.git] / bin / pre-commit-hook
1 #!/usr/bin/ruby1.9.1
2 #-*- coding: utf-8 -*-
3
4 require 'rubygems'
5 require 'bundler'
6 Bundler.setup
7
8 require 'safe_yaml'
9 SafeYAML::OPTIONS[:default_mode] = :safe
10
11 SUBSCRIPTIONS_ROOT = 'Membres'
12
13 if system('git rev-parse --quiet --verify HEAD >/dev/null')
14   against = 'HEAD'
15 else
16   # Initial commit: diff against an empty tree object
17   against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'
18 end
19
20 def is_valid_subscription?(content)
21   return false if content.length == 0
22   return false unless content.start_with?("---\n")
23   begin
24     data = YAML.load(content)
25   rescue ArgumentError
26     # Parse error
27     return false
28   end
29   ['name', 'email'].each do |key|
30     return false unless data.include?(key)
31   end
32   true
33 end
34
35 def is_valid_subscription_file?(file)
36   IO.popen(['git', 'show', ":#{file}"]) do |f|
37     is_valid_subscription?(f.read)
38   end
39 end
40
41 IO.popen(['git', 'diff-index', '--cached', '--name-status', against]) do |f|
42   f.readlines.each do |line|
43     status, file = line.strip.split("\t", 2)
44     # Has file been added or modified?
45     if ['A', 'M'].include?(status)
46       next unless file.start_with?("#{SUBSCRIPTIONS_ROOT}/")
47       if !is_valid_subscription_file?(file)
48         $stderr.puts "Désolé : #{file} n'a pas le bon format !"
49         exit 1
50       end
51     end
52   end
53 end
54