X-Git-Url: https://nos-oignons.net/gitweb/gestion-adh.git/blobdiff_plain/fcfec54ac07c989195fa9036cee2d5c48eec8337..2f6f90379a51f45d52d0a31650c214b619c703db:/bin/pre-commit-hook diff --git a/bin/pre-commit-hook b/bin/pre-commit-hook index 317e5c5..9dd900b 100755 --- a/bin/pre-commit-hook +++ b/bin/pre-commit-hook @@ -1,56 +1,26 @@ -#!/usr/bin/ruby1.9.1 +#!/usr/bin/ruby #-*- coding: utf-8 -*- +# +# Système de gestion des adhésions de Nos oignons +# Copyright © 2013-2014 Nos oignons +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . require 'rubygems' require 'bundler' Bundler.setup -require 'safe_yaml' -SafeYAML::OPTIONS[:default_mode] = :safe - -SUBSCRIPTIONS_ROOT = 'Membres' - -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) - 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 - -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 - 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 - end - end -end +require 'nos_oignons' +NosOignons.pre_commit_hook!