-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
+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