]> nos-oignons.net Git - gestion-adh.git/blobdiff - bin/pre-commit-hook
Next step in pre-commit hook implementation
[gestion-adh.git] / bin / pre-commit-hook
diff --git a/bin/pre-commit-hook b/bin/pre-commit-hook
new file mode 100755 (executable)
index 0000000..aa60ccb
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/ruby1.9.1
+#-*- coding: utf-8 -*-
+
+require 'rubygems'
+require 'bundler'
+Bundler.setup
+
+require 'safe_yaml'
+SafeYAML::OPTIONS[:default_mode] = :safe
+
+if system('git rev-parse --quiet --verify HEAD >/dev/null')
+  against = 'HEAD'
+else
+  # Initial commit: diff against an empty tree object
+  against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'
+end
+
+def is_valid_subscription?(content)
+  content.length != 0 && YAML.load(content)
+end
+
+def is_valid_subscription_file?(file)
+  IO.popen(['git', 'show', ":#{file}"]) do |f|
+    is_valid_subscription?(f.read)
+  end
+end
+
+modified = []
+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)
+      modified << file
+      if !is_valid_subscription_file?(file)
+        $stderr.puts "Désolé : #{file} n'a pas le bon format !"
+        exit 1
+      end
+    end
+  end
+end
+