Here is a pre-commit hook that can be used with GIT to check the following things:
- swfdec_initialize.h and swfdec_as_initialize.h are in sync with the corresponding .as-files
- test/trace/Makefile.am doesn't contain any files that haven't been added
- test/trace/Makefile.am contains all files from test/trace directory
- In test/trace directory every *.swf file has a *.swf.trace directory and vica versa
To use, save as .git/hooks/pre-commit and make executable. Requires Ruby and Ming
{{{#!/usr/bin/ruby
toplevel = git-rev-parse --show-cdup toplevel.strip!() if toplevel != ""
- Dir.chdir(toplevel)
end
files = []
skip = true IO.popen("git-diff-index -z -M --cached HEAD").each("\0") { |line|
- if not skip
- files.push(line.strip())
}
$ok = true def error(msg)
- $stderr.puts "Error: " + msg $ok = false
end
def do_initialize_h(files)
if files.include?("libswfdec/swfdec_initialize.as") ||
files.include?("libswfdec/swfdec_initialize.h") || files.include?("libswfdec/swfdec_as_initialize.as") || files.include?("libswfdec/swfdec_as_initialize.h") Dir.chdir("libswfdec"); if not system("gcc -Wall -Werror pkg-config --libs --cflags libming glib-2.0 compiler.c -o compiler")
- error("Couldn't compile libswfdec/compiler") return
if files.include?("libswfdec/swfdec_initialize.as") ||
- files.include?("libswfdec/swfdec_initialize.h")
if not system("./compiler swfdec_initialize.as 2> /dev/null | diff -wq swfdec_initialize.h - > /dev/null")
- error("libswfdec/swfdec_initialize.h is not in sync with swfdec_initialize.as");
if files.include?("libswfdec/swfdec_as_initialize.as") ||
- files.include?("libswfdec/swfdec_as_initialize.h")
if not system("./compiler swfdec_as_initialize.as 2> /dev/null | diff -wq swfdec_as_initialize.h - > /dev/null")
- error("libswfdec/swfdec_as_initialize.h is not in sync with swfdec_as_initialize.as");
end
def do_test_trace_makefile_am(files)
- found = false files.each { |file|
- if file =~ /^test\/trace/
- found = true break
- "swfdec_interaction.h"]
- line.strip!() if not ignore.include?(line["test/trace/".length..-1])
- files_directory.push(line)
- if dist == false
- if line =~ /^EXTRA_DIST/
- dist = true
- if line =~ /\\\s*$/
- line.gsub!(/\\\s*$/, "")
- dist = false
- if line =~ /^EXTRA_DIST/
if files.include?("test/trace/Makefile.am") || files.include?(file)
- if not files_makefile.include?(file)
- error("File " + file + " is not mentioned in Makefile.am")
- if file =~ /\.swf$/
- if not files_directory.include?(file+".trace")
- error("File " + file + " doesn't have corresponding .trace file")
- if not files_directory.include?(file[0..-7])
- error("File " + file + " doesn't have corresponding .swf file")
- if not files_directory.include?(file+".trace")
- if not files_makefile.include?(file)
- files_makefile.each { |file|
- if not files_directory.include?(file)
- error("test/trace/Makefile.am mentions non-existing file " + file)
- if not files_directory.include?(file)
- if file =~ /^test\/trace/
end
do_initialize_h(files) do_test_trace_makefile_am(files)
if not $ok
- exit 1
else
- exit 0
end}}}

