#!/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)
  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
      if !is_valid_subscription_file?(file)
        $stderr.puts "Désolé : #{file} n'a pas le bon format !"
        exit 1
      end
    end
  end
end

