]> nos-oignons.net Git - gestion-adh.git/blobdiff - bin/pre-commit-hook
Implement pre-receive hook
[gestion-adh.git] / bin / pre-commit-hook
index 0b46db8bf5dca0b4ec7d3f894d1a0f160f799cf8..4571599b499014fa351c2c32c044dddee9b323f3 100755 (executable)
@@ -5,10 +5,8 @@ require 'rubygems'
 require 'bundler'
 Bundler.setup
 
-require 'safe_yaml'
-SafeYAML::OPTIONS[:default_mode] = :safe
-
-SUBSCRIPTIONS_ROOT = 'Membres'
+require 'nos_oignons/git'
+require 'nos_oignons/subscriptions'
 
 if system('git rev-parse --quiet --verify HEAD >/dev/null')
   against = 'HEAD'
@@ -17,38 +15,13 @@ else
   against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'
 end
 
-def is_valid_subscription?(content)
-  return false if content.length == 0
-  return false unless content.start_with?("---\n")
-  begin
-    data = YAML.load(content)
-  rescue ArgumentError
-    # Parse error
-    return false
-  end
-  ['name', 'email'].each do |key|
-    return false unless data.include?(key)
-  end
-  true
-end
-
-def is_valid_subscription_file?(file)
-  IO.popen(['git', 'show', ":#{file}"]) do |f|
-    is_valid_subscription?(f.read)
-  end
-end
-
-IO.popen(['git', 'diff-index', '--cached', '--name-status', against]) do |f|
-  f.readlines.each do |line|
-    status, file = line.strip.split("\t", 2)
-    # Has file been added or modified?
-    if ['A', 'M'].include?(status)
-      next unless file.start_with?("#{SUBSCRIPTIONS_ROOT}/")
-      if !is_valid_subscription_file?(file)
-        $stderr.puts "Désolé : #{file} n'a pas le bon format !"
-        exit 1
-      end
+IO.popen(['git', 'diff-index', '--cached', '--name-status', against]) do |io|
+  handle_modified_files(io) do |file|
+    next unless file.start_with?("#{SUBSCRIPTIONS_ROOT}/")
+    # Use empty ref to get the index
+    if !is_valid_subscription_file?('', file)
+      $stderr.puts "Désolé : #{file} n'a pas le bon format !"
+      exit 1
     end
   end
 end
-