]> nos-oignons.net Git - gestion-adh.git/blob - bin/pre-commit-hook
7d3d0e8f4c8fdbf30c3090afb9944b3191c190fd
[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 if system('git rev-parse --quiet --verify HEAD >/dev/null')
12   against = 'HEAD'
13 else
14   # Initial commit: diff against an empty tree object
15   against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'
16 end
17
18 def is_valid_subscription?(content)
19   return false if content.length == 0
20   return false unless content.start_with?("---\n")
21   begin
22     YAML.load(content)
23     true
24   rescue ArgumentError
25     # Parse error
26     false
27   end
28 end
29
30 def is_valid_subscription_file?(file)
31   IO.popen(['git', 'show', ":#{file}"]) do |f|
32     is_valid_subscription?(f.read)
33   end
34 end
35
36 modified = []
37 IO.popen(['git', 'diff-index', '--cached', '--name-status', against]) do |f|
38   f.readlines.each do |line|
39     status, file = line.strip.split("\t", 2)
40     # Has file been added or modified?
41     if ['A', 'M'].include?(status)
42       modified << file
43       if !is_valid_subscription_file?(file)
44         $stderr.puts "Désolé : #{file} n'a pas le bon format !"
45         exit 1
46       end
47     end
48   end
49 end
50