X-Git-Url: https://nos-oignons.fr/gitweb/gestion-adh.git/blobdiff_plain/5609c60f9b3b2d82d629c8d13f676ff167920df6..8bbb07a1bc5db944ba95fa5951ed40c3c1b968aa:/bin/pre-commit-hook?ds=sidebyside diff --git a/bin/pre-commit-hook b/bin/pre-commit-hook new file mode 100755 index 0000000..aa60ccb --- /dev/null +++ b/bin/pre-commit-hook @@ -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 +