Build with Buck
Implement a new build system using Buck[1], Facebook's
open source clone of Google's internal build system.
Pros:
- Concise build language
- Test and build output is concise
- Test failures and stack traces show on terminal
- Reliable incrementals; clean is unnecessary
- Extensible with simple blocks of Python
- Fast
buck: clean: 0.452s, full 1m21.083s [*], no-op: 7.145s,
mvn: clean: 4.596s, full 2m53.776s, no-op: 59.108s,
[*] full build includes downloading all dependencies,
time can vary due to remote server performance.
Cons:
- No Windows support
- No native Maven Central support (added by macros)
- No native GWT, Prolog, or WAR support (added by macros)
- Bootstrap of buck requires Ant
Getting started:
git clone https://gerrit.googlesource.com/buck
cd buck
ant
Mac OS X:
PATH="`pwd`/bin:/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands:$PATH"
Linux:
PATH="`pwd`/bin:$PATH"
Importing into Eclipse:
$ time buck build :eclipse
0m48.949s
Import existing project from `pwd`
Import 'gerrit' (do not import other Maven based projects)
Expand 'gerrit'
Right click 'buck-out' > Properties
Under Attributes check 'Derived'
If the code doesn't currently compile but an updated classpath
is needed, refresh the configs and obtain missing JARs:
$ buck build :eclipse_project :download
Running JUnit tests:
$ time buck test --all -e slow # skip slow tests
0m19.320s
$ time buck test --all # includes acceptance tests
5m17.517s
Building WAR:
$ buck build :gerrit
$ java -jar buck-out/gen/gerrit.war
Building release:
$ buck test --all && buck build :api :release
$ java -jar buck-out/gen/release.war
$ ls -lh buck-out/gen/{extension,plugin}-api.jar
Downloading dependencies:
Dependencies are normally downloaded automatically, but Buck can
inspect its graph and download missing dependencies so future
compiles can run without the network:
$ buck build :download
[1] http://facebook.github.io/buck/
Change-Id: I40853b108bd8e153cefa0896a5280a9a5ff81655
diff --git a/.buckconfig b/.buckconfig
new file mode 100644
index 0000000..164b9d4
--- /dev/null
+++ b/.buckconfig
@@ -0,0 +1,5 @@
+[buildfile]
+ includes = //lib/DEFS
+
+[java]
+ src_roots = java, resources
diff --git a/.gitignore b/.gitignore
index c87c26f..26c4a22 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,10 @@
/.classpath
/.project
-/.settings
-/.settings/org.eclipse.jdt.core.prefs
/.settings/org.maven.ide.eclipse.prefs
/test_site
/.idea
/gerrit-parent.iml
*.sublime-*
+/buck-cache
+/buck-out
+/local.properties
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..29abf99
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.core.runtime.prefs b/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..8667cfd
--- /dev/null
+++ b/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,3 @@
+#Tue Sep 02 16:59:24 PDT 2008
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2f45466
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,264 @@
+#Fri Jul 16 23:39:13 PDT 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=16
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=0
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=0
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=2
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=true
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=80
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=3
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..d4218a5
--- /dev/null
+++ b/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,61 @@
+#Wed Jul 29 11:31:38 PDT 2009
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Google Format
+formatter_settings_version=11
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=com.google;com;junit;net;org;java;javax;
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=true
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/BUCK b/BUCK
new file mode 100644
index 0000000..ba42d3e
--- /dev/null
+++ b/BUCK
@@ -0,0 +1,114 @@
+include_defs('//tools/build.defs')
+
+gerrit_war(name = 'gerrit')
+gerrit_war(name = 'chrome', ui = 'draft_safari')
+gerrit_war(name = 'firefox', ui = 'draft_gecko1_8')
+gerrit_war(name = 'withdocs', context = DOCS)
+gerrit_war(name = 'release', context = DOCS + ['//plugins:core.zip'])
+
+genrule(
+ name = 'api',
+ cmd = 'echo',
+ srcs = [],
+ deps = [
+ ':extension-api',
+ ':plugin-api',
+ ],
+ out = '__api__',
+)
+
+java_binary(name = 'extension-api', deps = [':extension-lib'])
+java_library(
+ name = 'extension-lib',
+ deps = [
+ '//gerrit-extension-api:api',
+ '//lib/guice:guice',
+ '//lib/guice:guice-servlet',
+ '//lib:servlet-api-3_0',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+java_binary(name = 'plugin-api', deps = [':plugin-lib'])
+java_library(
+ name = 'plugin-lib',
+ deps = [
+ '//gerrit-server:server',
+ '//gerrit-sshd:sshd',
+ '//gerrit-httpd:httpd',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+genrule(
+ name = 'download',
+ cmd = 'buck build $(buck audit classpath --dot :eclipse_classpath' +
+ '| egrep \'^ "//lib/\''+
+ '| cut -d\\" -f2' +
+ '| sort | uniq)',
+ srcs = [],
+ deps = [],
+ out = '__fake.download__',
+)
+
+genrule(
+ name = 'eclipse',
+ cmd = '',
+ srcs = [],
+ deps = [
+ ':_eclipse_project',
+ ':_eclipse_classpath',
+ ],
+ out = 'eclipse',
+)
+
+genrule(
+ name = 'eclipse_project',
+ cmd = '',
+ srcs = [],
+ deps = [
+ ':_eclipse_project',
+ ':_eclipse_classpath_nocompile',
+ ],
+ out = 'eclipse',
+)
+
+java_library(
+ name = 'eclipse_classpath',
+ deps = LIBS + PGMLIBS + [
+ '//gerrit-acceptance-tests:acceptance_tests',
+ '//gerrit-gwtdebug:gwtdebug',
+ '//gerrit-gwtui:ui_module',
+ '//gerrit-httpd:httpd_tests',
+ '//gerrit-main:main_lib',
+ '//gerrit-server:server__compile',
+ '//lib/prolog:compiler_lib',
+ ] + scan_plugins(),
+)
+
+genrule(
+ name = '_eclipse_project',
+ cmd = '${//tools:eclipse_project} $OUT',
+ srcs = [],
+ deps = ['//tools:eclipse_project'],
+ out = 'eclipse_project',
+)
+
+genrule(
+ name = '_eclipse_classpath',
+ cmd = '${//tools:eclipse_classpath} $OUT $DEPS',
+ srcs = [],
+ deps = [
+ ':eclipse_classpath',
+ '//tools:eclipse_classpath',
+ ],
+ out = 'eclipse_classpath',
+)
+
+genrule(
+ name = '_eclipse_classpath_nocompile',
+ cmd = '${//tools:eclipse_classpath}',
+ srcs = [],
+ deps = ['//tools:eclipse_classpath'],
+ out = '_eclipse_classpath_nocompile',
+)
diff --git a/Documentation/BUCK b/Documentation/BUCK
new file mode 100644
index 0000000..a1f5384
--- /dev/null
+++ b/Documentation/BUCK
@@ -0,0 +1,55 @@
+include_defs('//Documentation/asciidoc.defs')
+
+MAIN = ['//gerrit-pgm:pgm', '//gerrit-gwtui:ui_module']
+SRCS = glob(['*.txt'], excludes = ['licenses.txt'])
+HTML = [txt[0:-4] + '.html' for txt in SRCS]
+
+genrule(
+ name = 'html',
+ cmd = 'cd $TMP;' +
+ 'mkdir -p Documentation/images;' +
+ 'for s in $SRCS;do ln -s $s Documentation;done;' +
+ 'mv Documentation/*.{jpg,png} Documentation/images;' +
+ 'zip -qr $OUT *',
+ srcs = [genfile(d) for d in HTML] +
+ [genfile('licenses.html')] +
+ glob([
+ 'images/*.jpg',
+ 'images/*.png',
+ ]),
+ deps = [':' + d for d in HTML] + [':licenses.html'],
+ out = 'html.zip',
+ visibility = ['PUBLIC'],
+)
+
+genasciidoc(
+ name = 'generate_html',
+ srcs = SRCS + [genfile('licenses.txt')],
+ outs = HTML + ['licenses.html'],
+ deps = [':config', ':licenses.txt'],
+ attributes = ['toc', 'newline="\\n"'],
+ backend = 'xhtml11',
+ conf_file = genfile('asciidoc.conf'),
+)
+
+genrule(
+ name = 'licenses.txt',
+ cmd = '${:licenses} >$OUT',
+ srcs = [],
+ deps = [':licenses'] + MAIN,
+ out = 'licenses.txt',
+)
+
+genrule(
+ name = 'config',
+ cmd = 'cp $SRCS $OUT &&' +
+ 'echo "[attributes]" >>$OUT &&' +
+ 'echo "revision=`git describe HEAD`" >>$OUT',
+ srcs = ['asciidoc.conf'],
+ out = 'asciidoc.conf',
+)
+
+python_binary(
+ name = 'licenses',
+ main = 'licenses.py',
+)
diff --git a/Documentation/asciidoc.defs b/Documentation/asciidoc.defs
new file mode 100644
index 0000000..c6df544
--- /dev/null
+++ b/Documentation/asciidoc.defs
@@ -0,0 +1,54 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+def genasciidoc(
+ name,
+ srcs = [],
+ outs = [],
+ deps = [],
+ attributes = [],
+ backend = None,
+ conf_file = None,
+ visibility = []):
+ cmd = ['asciidoc', '-o', '$OUT']
+ if backend:
+ cmd.extend(['-b', backend])
+ for attribute in attributes:
+ cmd.extend(['-a', attribute])
+ if conf_file:
+ cmd.append('-f')
+ cmd.append('$SRCS')
+
+ for p in zip(srcs, outs):
+ s, o = p
+ if conf_file:
+ src_list = [conf_file, s]
+ else:
+ src_list = [s]
+ genrule(
+ name = o,
+ cmd = ' '.join(cmd),
+ srcs = src_list,
+ deps = deps,
+ out = o,
+ visibility = visibility,
+ )
+ genrule(
+ name = name,
+ cmd = '',
+ srcs = [],
+ deps = [':' + o for o in outs],
+ out = name + '__done',
+ visibility = visibility,
+ )
diff --git a/Documentation/licenses.py b/Documentation/licenses.py
new file mode 100755
index 0000000..b05f0f8
--- /dev/null
+++ b/Documentation/licenses.py
@@ -0,0 +1,129 @@
+#!/usr/bin/python
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# TODO(sop): Be more detailed: version, link to Maven Central
+
+from collections import defaultdict, deque
+import re
+from shutil import copyfileobj
+from subprocess import Popen, PIPE
+from sys import stdout
+
+MAIN = ['//gerrit-pgm:pgm', '//gerrit-gwtui:ui_module']
+
+def parse_graph():
+ graph = defaultdict(list)
+ p = Popen(
+ ['buck', 'audit', 'classpath', '--dot'] + MAIN,
+ stdout = PIPE)
+ for line in p.stdout:
+ m = re.search(r'"(//.*?)" -> "(//.*?)";', line)
+ if not m:
+ continue
+ target, dep = m.group(1), m.group(2)
+ if not target.endswith('__compile'):
+ graph[target].append(dep)
+ r = p.wait()
+ if r != 0:
+ exit(r)
+ return graph
+
+graph = parse_graph()
+licenses = defaultdict(set)
+
+queue = deque(MAIN)
+while queue:
+ target = queue.popleft()
+ for dep in graph[target]:
+ if not dep.startswith('//lib:LICENSE-'):
+ continue
+ licenses[dep].add(target)
+ queue.extend(graph[target])
+used = sorted(licenses.iterkeys())
+
+print """\
+Gerrit Code Review - Licenses
+=============================
+
+Gerrit open source software licensed under the <<Apache2.0,Apache
+License 2.0>>. Executable distributions also include other software
+components that are provided under additional licenses.
+
+[[cryptography]]
+Cryptography Notice
+-------------------
+
+This distribution includes cryptographic software. The country
+in which you currently reside may have restrictions on the import,
+possession, use, and/or re-export to another country, of encryption
+software. BEFORE using any encryption software, please check
+your country's laws, regulations and policies concerning the
+import, possession, or use, and re-export of encryption software,
+to see if this is permitted. See the
+link:http://www.wassenaar.org/[Wassenaar Arrangement]
+for more information.
+
+The U.S. Government Department of Commerce, Bureau of Industry
+and Security (BIS), has classified this software as Export
+Commodity Control Number (ECCN) 5D002.C.1, which includes
+information security software using or performing cryptographic
+functions with asymmetric algorithms. The form and manner of
+this distribution makes it eligible for export under the License
+Exception ENC Technology Software Unrestricted (TSU) exception
+(see the BIS Export Administration Regulations, Section 740.13)
+for both object code and source code.
+
+Gerrit includes an SSH daemon (Apache SSHD), to support authenticated
+uploads of changes directly from `git push` command line clients.
+
+Gerrit includes an SSH client (JSch), to support authenticated
+replication of changes to remote systems, such as for automatic
+updates of mirror servers, or realtime backups.
+
+For either feature to function, Gerrit requires the
+link:http://java.sun.com/javase/technologies/security/[Java Cryptography extensions]
+and/or the
+link:http://www.bouncycastle.org/java.html[Bouncy Castle Crypto API]
+to be installed by the end-user.
+
+Licenses
+--------
+"""
+
+for n in used:
+ libs = sorted(licenses[n])
+ name = n[len('//lib:LICENSE-'):]
+ print
+ print '[[%s]]' % name
+ print name
+ print '~' * len(name)
+ print
+ for d in libs:
+ if d.startswith('//lib:') or d.startswith('//lib/'):
+ p = d[len('//lib:'):]
+ else:
+ p = d[d.index(':')+1:].lower()
+ print '* ' + p
+ print
+ print '----'
+ with open(n[2:].replace(':', '/')) as fd:
+ copyfileobj(fd, stdout)
+ print '----'
+
+print """
+GERRIT
+------
+Part of link:index.html[Gerrit Code Review]
+"""
diff --git a/gerrit-acceptance-tests/BUCK b/gerrit-acceptance-tests/BUCK
new file mode 100644
index 0000000..7f69e48
--- /dev/null
+++ b/gerrit-acceptance-tests/BUCK
@@ -0,0 +1,22 @@
+TEST = [
+ '//gerrit-httpd:httpd',
+ '//gerrit-sshd:sshd',
+ '//gerrit-server:server',
+]
+
+java_test(
+ name = 'acceptance_tests',
+ srcs = glob(['src/test/java/**/*.java']),
+ deps = TEST + [
+ '//gerrit-launcher:launcher',
+ '//gerrit-pgm:pgm',
+ '//lib:servlet-api-3_0',
+ '//lib:h2',
+ '//lib:junit',
+ '//lib/jgit:junit',
+ '//lib/openid:http-client',
+ ],
+ source_under_test = TEST,
+ labels = ['slow'],
+ visibility = ['//:eclipse_classpath'],
+)
diff --git a/gerrit-antlr/BUCK b/gerrit-antlr/BUCK
new file mode 100644
index 0000000..a37da60
--- /dev/null
+++ b/gerrit-antlr/BUCK
@@ -0,0 +1,49 @@
+ANTLR_OUTS = [
+ 'QueryLexer.java',
+ 'QueryParser.java',
+]
+
+java_library(
+ name = 'antlr',
+ deps = [':query'],
+ visibility = ['PUBLIC'],
+)
+
+java_library(
+ name = 'query_exception',
+ srcs = ['src/main/java/com/google/gerrit/server/query/QueryParseException.java'],
+)
+
+genantlr(
+ name = 'query_antlr',
+ srcs = ['src/main/antlr3/com/google/gerrit/server/query/Query.g'],
+ outs = ANTLR_OUTS,
+)
+
+java_library(
+ name = 'lib',
+ srcs = [genfile(f) for f in ANTLR_OUTS],
+ deps = [
+ ':query_antlr',
+ ':query_exception',
+ '//lib/antlr:java_runtime',
+ ],
+)
+
+genrule(
+ name = 'query_link',
+ cmd = 'ln -s $SRCS $OUT',
+ srcs = [genfile('lib__lib__output/lib.jar')],
+ deps = [':lib'],
+ out = 'query.jar',
+)
+
+prebuilt_jar(
+ name = 'query',
+ binary_jar = genfile('query.jar'),
+ deps = [
+ ':query_link',
+ ':query_exception',
+ '//lib/antlr:java_runtime',
+ ],
+)
diff --git a/gerrit-cache-h2/BUCK b/gerrit-cache-h2/BUCK
new file mode 100644
index 0000000..638f3dc
--- /dev/null
+++ b/gerrit-cache-h2/BUCK
@@ -0,0 +1,10 @@
+java_library(
+ name = 'cache-h2',
+ srcs = glob(['src/main/java/**/*.java']),
+ deps = [
+ '//gerrit-server:server',
+ '//lib:guava',
+ '//lib:h2',
+ ],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-common/BUCK b/gerrit-common/BUCK
new file mode 100644
index 0000000..3e7b73c
--- /dev/null
+++ b/gerrit-common/BUCK
@@ -0,0 +1,54 @@
+SRC = 'src/main/java/com/google/gerrit/'
+VER = 'resources/com/google/gerrit/common/Version'
+
+gwt_module(
+ name = 'client',
+ srcs = glob([SRC + 'common/**/*.java']),
+ gwtxml = SRC + 'Common.gwt.xml',
+ deps = [
+ '//gerrit-patch-jgit:client',
+ '//gerrit-prettify:client',
+ '//gerrit-reviewdb:client',
+ '//lib:jsr305',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+java_library(
+ name = 'server',
+ srcs = glob(
+ [SRC + 'common/**/*.java'],
+ excludes = [SRC + 'common/ClientVersion.java'],
+ ),
+ deps = [
+ '//gerrit-patch-jgit:server',
+ '//gerrit-prettify:server',
+ '//gerrit-reviewdb:server',
+ '//lib:jsr305',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+java_library(
+ name = 'version',
+ resources = [genfile(VER)],
+ deps = [':git_describe'],
+ visibility = ['PUBLIC'],
+)
+
+genrule(
+ name = 'git_describe',
+ cmd = 'mkdir -p $(dirname $OUT); git describe HEAD >$OUT',
+ srcs = [],
+ out = VER,
+)
+
+java_test(
+ name = 'client_tests',
+ srcs = glob(['src/test/java/**/*.java']),
+ deps = [
+ ':client',
+ '//lib:junit',
+ ],
+ source_under_test = [':client'],
+)
diff --git a/gerrit-extension-api/BUCK b/gerrit-extension-api/BUCK
new file mode 100644
index 0000000..25aba72
--- /dev/null
+++ b/gerrit-extension-api/BUCK
@@ -0,0 +1,10 @@
+java_library2(
+ name = 'api',
+ srcs = glob(['src/main/java/com/google/gerrit/extensions/**/*.java']),
+ compile_deps = [
+ '//lib/guice:guice',
+ '//lib/guice:guice-servlet',
+ '//lib:servlet-api-3_0',
+ ],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-gwtdebug/BUCK b/gerrit-gwtdebug/BUCK
new file mode 100644
index 0000000..605e5b1
--- /dev/null
+++ b/gerrit-gwtdebug/BUCK
@@ -0,0 +1,6 @@
+java_library(
+ name = 'gwtdebug',
+ srcs = ['src/main/java/com/google/gerrit/gwtdebug/GerritDebugLauncher.java'],
+ deps = ['//lib/gwt:dev'],
+ visibility = ['//:eclipse_classpath'],
+)
diff --git a/gerrit-gwtdebug/src/main/java/com/google/gerrit/gwtdebug/GerritDebugLauncher.java b/gerrit-gwtdebug/src/main/java/com/google/gerrit/gwtdebug/GerritDebugLauncher.java
index d23aa35..a2a770e 100644
--- a/gerrit-gwtdebug/src/main/java/com/google/gerrit/gwtdebug/GerritDebugLauncher.java
+++ b/gerrit-gwtdebug/src/main/java/com/google/gerrit/gwtdebug/GerritDebugLauncher.java
@@ -381,9 +381,15 @@
Server server = new Server();
server.addConnector(connector);
- // warDir is "$top/gerrit-gwtui/target/gwt-hosted-mode"
- //
- File top = warDir.getParentFile().getParentFile().getParentFile();
+ File top;
+ String root = System.getProperty("gerrit.source_root");
+ if (root != null) {
+ top = new File(root);
+ } else {
+ // Under Maven warDir is "$top/gerrit-gwtui/target/gwt-hosted-mode"
+ top = warDir.getParentFile().getParentFile().getParentFile();
+ }
+
File app = new File(top, "gerrit-war/src/main/webapp");
File webxml = new File(app, "WEB-INF/web.xml");
diff --git a/gerrit-gwtexpui/BUCK b/gerrit-gwtexpui/BUCK
new file mode 100644
index 0000000..199e216
--- /dev/null
+++ b/gerrit-gwtexpui/BUCK
@@ -0,0 +1,111 @@
+SRC = 'src/main/java/com/google/gwtexpui/'
+
+gwt_module(
+ name = 'Clippy',
+ srcs = glob([SRC + 'clippy/client/*.java']),
+ gwtxml = SRC + 'clippy/Clippy.gwt.xml',
+ resources = [SRC + 'clippy/client/clippy.css'],
+ deps = [
+ ':SafeHtml',
+ ':UserAgent',
+ '//lib/gwt:user',
+ '//lib:LICENSE-clippy',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+genrule(
+ name = 'clippy_swf',
+ cmd = 'mkdir $TMP/gerrit_ui ;' +
+ 'cp $SRCS $TMP/gerrit_ui;' +
+ 'cd $TMP;' +
+ 'zip -qr $OUT gerrit_ui',
+ srcs = [SRC + 'clippy/public/gwtexpui_clippy1.cache.swf'],
+ out = 'clippy_swf.zip',
+ visibility = ['PUBLIC'],
+)
+
+gwt_module(
+ name = 'CSS',
+ srcs = glob([SRC + 'css/rebind/*.java']),
+ gwtxml = SRC + 'css/CSS.gwt.xml',
+ deps = ['//lib/gwt:dev'],
+ visibility = ['PUBLIC'],
+)
+
+gwt_module(
+ name = 'GlobalKey',
+ srcs = glob([SRC + 'globalkey/client/*.java']),
+ gwtxml = SRC + 'globalkey/GlobalKey.gwt.xml',
+ resources = [
+ SRC + 'globalkey/client/KeyConstants.properties',
+ SRC + 'globalkey/client/key.css',
+ ],
+ deps = [
+ ':SafeHtml',
+ ':UserAgent',
+ '//lib/gwt:user',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+gwt_module(
+ name = 'Linker',
+ srcs = glob([SRC + 'linker/rebind/*.java']),
+ gwtxml = SRC + 'linker/ServerPlannedIFrameLinker.gwt.xml',
+ deps = ['//lib/gwt:dev'],
+ visibility = ['PUBLIC'],
+)
+
+java_library2(
+ name = 'linker_server',
+ srcs = glob([SRC + 'linker/server/*.java']),
+ compile_deps = ['//lib:servlet-api-3_0'],
+ visibility = ['PUBLIC'],
+)
+
+gwt_module(
+ name = 'Progress',
+ srcs = glob([SRC + 'progress/client/*.java']),
+ gwtxml = SRC + 'progress/Progress.gwt.xml',
+ resources = [SRC + 'progress/client/progress.css'],
+ deps = ['//lib/gwt:user'],
+ visibility = ['PUBLIC'],
+)
+
+gwt_module(
+ name = 'SafeHtml',
+ srcs = glob([SRC + 'safehtml/client/*.java']),
+ gwtxml = SRC + 'safehtml/SafeHtml.gwt.xml',
+ resources = [SRC + 'safehtml/client/safehtml.css'],
+ deps = ['//lib/gwt:user'],
+ visibility = ['PUBLIC'],
+)
+
+java_test(
+ name = 'SafeHtml_tests',
+ srcs = glob([
+ 'src/test/java/com/google/gwtexpui/safehtml/client/**/*.java',
+ ]),
+ deps = [
+ ':SafeHtml',
+ '//lib:junit',
+ '//lib/gwt:dev',
+ ],
+ source_under_test = [':SafeHtml'],
+)
+
+gwt_module(
+ name = 'UserAgent',
+ srcs = glob([SRC + 'user/client/*.java']),
+ gwtxml = SRC + 'user/User.gwt.xml',
+ deps = ['//lib/gwt:user'],
+ visibility = ['PUBLIC'],
+)
+
+java_library2(
+ name = 'server',
+ srcs = glob([SRC + 'server/*.java']),
+ compile_deps = ['//lib:servlet-api-3_0'],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-gwtui/BUCK b/gerrit-gwtui/BUCK
new file mode 100644
index 0000000..3591eba
--- /dev/null
+++ b/gerrit-gwtui/BUCK
@@ -0,0 +1,92 @@
+include_defs('//gerrit-gwtui/DEFS')
+
+genrule(
+ name = 'ui_optdbg',
+ cmd = 'cd $TMP;' +
+ 'unzip -q $SRCDIR/ui_dbg.zip;' +
+ 'mv' +
+ ' gerrit_ui/gerrit_ui.nocache.js' +
+ ' gerrit_ui/gerrit_dbg.nocache.js;' +
+ 'unzip -qo $SRCDIR/ui_opt.zip;' +
+ 'mkdir -p $(dirname $OUT);' +
+ 'zip -qr $OUT .',
+ srcs = [
+ genfile('ui_dbg.zip'),
+ genfile('ui_opt.zip'),
+ ],
+ deps = [
+ ':ui_dbg',
+ ':ui_opt',
+ ],
+ out = 'ui_optdbg.zip',
+ visibility = ['PUBLIC'],
+)
+
+gwt_application(
+ name = 'ui_opt',
+ module_target = MODULE,
+ compiler_opts = [
+ '-strict',
+ '-style', 'OBF',
+ '-optimize', '9',
+ '-XdisableClassMetadata',
+ '-XdisableCastChecking',
+ ],
+ deps = APP_DEPS,
+)
+
+gwt_application(
+ name = 'ui_dbg',
+ module_target = MODULE,
+ compiler_opts = DEBUG_OPTS + ['-strict'],
+ deps = APP_DEPS,
+ visibility = ['//:eclipse'],
+)
+
+gwt_user_agent_permutations(
+ name = 'ui',
+ module_name = 'gerrit_ui',
+ module_target = MODULE,
+ compiler_opts = DEBUG_OPTS + ['-draftCompile'],
+ browsers = BROWSERS,
+ deps = APP_DEPS,
+ visibility = ['//:'],
+)
+
+gwt_module(
+ name = 'ui_module',
+ srcs = glob(['src/main/java/**/*.java']),
+ gwtxml = 'src/main/java/%s.gwt.xml' % MODULE.replace('.', '/'),
+ resources = glob(['src/main/java/**/*']),
+ deps = [
+ '//gerrit-gwtexpui:Clippy',
+ '//gerrit-gwtexpui:CSS',
+ '//gerrit-gwtexpui:GlobalKey',
+ '//gerrit-gwtexpui:Linker',
+ '//gerrit-gwtexpui:Progress',
+ '//gerrit-gwtexpui:SafeHtml',
+ '//gerrit-gwtexpui:UserAgent',
+ '//gerrit-common:client',
+ '//gerrit-patch-jgit:client',
+ '//gerrit-prettify:client',
+ '//gerrit-reviewdb:client',
+ '//lib:gwtjsonrpc',
+ '//lib:gwtjsonrpc_src',
+ '//lib/gwt:user',
+ ],
+ visibility = [
+ '//:eclipse_classpath',
+ '//Documentation:licenses.txt',
+ ],
+)
+
+java_test(
+ name = 'ui_tests',
+ srcs = glob(['src/test/java/**/*.java']),
+ deps = [
+ ':ui_module',
+ '//lib:junit',
+ '//lib/gwt:dev',
+ ],
+ source_under_test = [':ui_module'],
+)
diff --git a/gerrit-gwtui/DEFS b/gerrit-gwtui/DEFS
new file mode 100644
index 0000000..baffdbb
--- /dev/null
+++ b/gerrit-gwtui/DEFS
@@ -0,0 +1,78 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+BROWSERS = [
+ 'chrome',
+ 'firefox',
+ 'gecko1_8',
+ 'safari',
+ 'msie', 'ie6', 'ie8', 'ie9',
+]
+ALIASES = {
+ 'chrome': 'safari',
+ 'firefox': 'gecko1_8',
+ 'msie': 'ie9',
+}
+MODULE = 'com.google.gerrit.GerritGwtUI'
+
+DEBUG_OPTS = [
+ '-style', 'PRETTY',
+ '-optimize', '0',
+]
+
+APP_DEPS = [
+ ':ui_module',
+ '//gerrit-common:version',
+]
+
+def gwt_user_agent_permutations(
+ name,
+ module_name,
+ module_target,
+ compiler_opts = [],
+ deps = [],
+ browsers = [],
+ visibility = []):
+ for ua in browsers:
+ impl = ua
+ if ua in ALIASES:
+ impl = ALIASES[ua]
+ xml = ''.join([
+ "<module rename-to='%s'>" % module_name,
+ "<inherits name='%s'/>" % module_target,
+ "<set-property name='user.agent' value='%s'/>" % impl,
+ "<set-property name='locale' value='default'/>",
+ "</module>",
+ ])
+ gwt = 'resources/%s_%s.gwt.xml' % (module_target.replace('.', '/'), ua)
+ genrule(
+ name = '%s_%s_gwtxml_gen' % (name, ua),
+ cmd = 'mkdir -p $(dirname $OUT);echo "%s">$OUT' % xml,
+ srcs = [],
+ deps = [],
+ out = gwt,
+ )
+ java_library(
+ name = '%s_%s_gwtxml_lib' % (name, ua),
+ resources = [genfile(gwt)],
+ deps = [':%s_%s_gwtxml_gen' % (name, ua)],
+ )
+ gwt_application(
+ name = '%s_%s' % (name, ua),
+ module_target = module_target + '_' + ua,
+ compiler_opts = compiler_opts,
+ deps = deps + [':%s_%s_gwtxml_lib' % (name, ua)],
+ visibility = visibility,
+ )
+
diff --git a/gerrit-httpd/BUCK b/gerrit-httpd/BUCK
new file mode 100644
index 0000000..6bb3ab5
--- /dev/null
+++ b/gerrit-httpd/BUCK
@@ -0,0 +1,32 @@
+java_library2(
+ name = 'httpd',
+ srcs = glob(['src/main/java/**/*.java']),
+ resources = glob(['src/main/resources/**/*']),
+ deps = [
+ '//gerrit-gwtexpui:linker_server',
+ '//gerrit-gwtexpui:server',
+ '//gerrit-prettify:server',
+ '//gerrit-server:server',
+ '//lib:gwtjsonrpc',
+ '//lib:jsr305',
+ '//lib:mime-util',
+ '//lib:servlet-api-3_0',
+ '//lib/jgit:jgit-servlet',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+java_test(
+ name = 'httpd_tests',
+ srcs = glob(['src/test/java/**/*.java']),
+ deps = [
+ ':httpd',
+ '//lib:easymock',
+ '//lib:junit',
+ '//lib:servlet-api-3_0',
+ '//lib/jgit:junit',
+ ],
+ source_under_test = [':httpd'],
+ # TODO(sop) Remove after Buck supports Eclipse
+ visibility = ['//:eclipse_classpath'],
+)
diff --git a/gerrit-launcher/BUCK b/gerrit-launcher/BUCK
new file mode 100644
index 0000000..8e6cb4c
--- /dev/null
+++ b/gerrit-launcher/BUCK
@@ -0,0 +1,9 @@
+java_library(
+ name = 'launcher',
+ srcs = glob(['src/main/java/**/*.java']),
+ visibility = [
+ '//gerrit-acceptance-tests:',
+ '//gerrit-main:main_lib',
+ '//gerrit-pgm:',
+ ],
+)
diff --git a/gerrit-main/BUCK b/gerrit-main/BUCK
new file mode 100644
index 0000000..b695862
--- /dev/null
+++ b/gerrit-main/BUCK
@@ -0,0 +1,13 @@
+java_binary(
+ name = 'main_bin',
+ main_class = 'Main',
+ deps = [':main_lib'],
+ visibility = ['PUBLIC'],
+)
+
+java_library(
+ name = 'main_lib',
+ srcs = ['src/main/java/Main.java'],
+ deps = ['//gerrit-launcher:launcher'],
+ visibility = ['//:eclipse_classpath'],
+)
diff --git a/gerrit-openid/BUCK b/gerrit-openid/BUCK
new file mode 100644
index 0000000..582a7de
--- /dev/null
+++ b/gerrit-openid/BUCK
@@ -0,0 +1,17 @@
+java_library(
+ name = 'openid',
+ srcs = glob(['src/main/java/**/*.java']),
+ resources = glob(['src/main/resources/**/*']),
+ deps = [
+ '//gerrit-common:server',
+ '//gerrit-extension-api:api',
+ '//gerrit-httpd:httpd',
+ '//lib:guava',
+ '//lib:jsr305',
+ '//lib:servlet-api-3_0',
+ '//lib/guice:guice',
+ '//lib/log:api',
+ '//lib/openid:consumer',
+ ],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-patch-commonsnet/BUCK b/gerrit-patch-commonsnet/BUCK
new file mode 100644
index 0000000..53b382f
--- /dev/null
+++ b/gerrit-patch-commonsnet/BUCK
@@ -0,0 +1,11 @@
+java_library(
+ name = 'commons-net',
+ srcs = glob(['src/main/java/org/apache/commons/net/**/*.java']),
+ deps = [
+ '//gerrit-util-ssl:ssl',
+ '//lib/commons:codec',
+ '//lib/commons:net',
+ '//lib/log:api',
+ ],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-patch-jgit/BUCK b/gerrit-patch-jgit/BUCK
new file mode 100644
index 0000000..18890ac
--- /dev/null
+++ b/gerrit-patch-jgit/BUCK
@@ -0,0 +1,32 @@
+SRC = 'src/main/java/org/eclipse/jgit/'
+
+gwt_module(
+ name = 'client',
+ srcs = [
+ SRC + 'diff/Edit_JsonSerializer.java',
+ SRC + 'diff/ReplaceEdit.java',
+ ],
+ gwtxml = SRC + 'JGit.gwt.xml',
+ deps = [
+ '//lib:gwtjsonrpc',
+ '//lib/gwt:user',
+ '//lib/jgit:jgit',
+ '//lib/jgit:Edit',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+java_library(
+ name = 'server',
+ srcs = [
+ SRC + 'diff/EditDeserializer.java',
+ SRC + 'diff/ReplaceEdit.java',
+ SRC + 'internal/storage/file/WindowCacheStatAccessor.java',
+ SRC + 'lib/ObjectIdSerialization.java',
+ ],
+ deps = [
+ '//lib:gson',
+ '//lib/jgit:jgit',
+ ],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-pgm/BUCK b/gerrit-pgm/BUCK
new file mode 100644
index 0000000..77a66b3
--- /dev/null
+++ b/gerrit-pgm/BUCK
@@ -0,0 +1,38 @@
+java_library2(
+ name = 'pgm',
+ srcs = glob(['src/main/java/**/*.java']),
+ resources = glob(['src/main/resources/**/*']),
+ deps = [
+ '//gerrit-server:common_rules',
+ '//gerrit-server:server',
+ '//gerrit-httpd:httpd',
+ '//gerrit-sshd:sshd',
+
+ '//gerrit-cache-h2:cache-h2',
+ '//gerrit-openid:openid',
+
+ '//gerrit-util-cli:cli',
+ '//lib/jetty:servlet',
+ '//lib/log:log4j',
+ ],
+ compile_deps = [
+ '//gerrit-launcher:launcher',
+ ],
+ visibility = [
+ '//:',
+ '//gerrit-acceptance-tests:',
+ '//Documentation:licenses.txt',
+ ],
+)
+
+java_test(
+ name = 'pgm_tests',
+ srcs = glob(['src/test/java/**/*.java']),
+ deps = [
+ ':pgm',
+ '//lib:junit',
+ '//lib:easymock',
+ '//lib/jgit:junit',
+ ],
+ source_under_test = [':pgm'],
+)
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java
index 3a7a874..d99326e 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java
@@ -17,6 +17,7 @@
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
+import com.google.common.io.ByteStreams;
import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.gerrit.launcher.GerritLauncher;
import com.google.gerrit.reviewdb.client.AuthType;
@@ -49,12 +50,15 @@
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.util.thread.ThreadPool;
import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InterruptedIOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -72,6 +76,8 @@
@Singleton
public class JettyServer {
+ private static final Logger log = LoggerFactory.getLogger(JettyServer.class);
+
static class Lifecycle implements LifecycleListener {
private final JettyServer server;
@@ -368,7 +374,7 @@
private Resource getBaseResource() throws IOException {
if (baseResource == null) {
try {
- baseResource = unpackWar();
+ baseResource = unpackWar(GerritLauncher.getDistributionArchive());
} catch (FileNotFoundException err) {
if (err.getMessage() == GerritLauncher.NOT_ARCHIVED) {
baseResource = useDeveloperBuild();
@@ -380,9 +386,7 @@
return baseResource;
}
- private Resource unpackWar() throws IOException {
- final File srcwar = GerritLauncher.getDistributionArchive();
-
+ private Resource unpackWar(File srcwar) throws IOException {
// Obtain our local temporary directory, but it comes back as a file
// so we have to switch it to be a directory post creation.
//
@@ -474,15 +478,70 @@
dir = dir.getParentFile();
}
- // We should be in a Maven style output, that is $jar/target/classes.
- //
if (!dir.getName().equals("classes")) {
throw new FileNotFoundException("Cannot find web root from " + u);
}
dir = dir.getParentFile(); // pop classes
- if (!dir.getName().equals("target")) {
+
+ if ("buck-out".equals(dir.getName())) {
+ String pkg = "gerrit-gwtui";
+ String target = targetForBrowser(System.getProperty("gerrit.browser"));
+ File gen = new File(dir, "gen");
+ String out = new File(new File(gen, pkg), target).getAbsolutePath();
+ build(dir.getParentFile(), out + ".rebuild", "//" + pkg + ":" + target);
+ return unpackWar(new File(out + ".zip"));
+ } else if ("target".equals(dir.getName())) {
+ return useMavenDeveloperBuild(dir);
+ } else {
throw new FileNotFoundException("Cannot find web root from " + u);
}
+ }
+
+ private static String targetForBrowser(String browser) {
+ if (browser == null || browser.isEmpty()) {
+ return "ui_dbg";
+ } else if (browser.startsWith("ui_")) {
+ return browser;
+ } else {
+ return "ui_" + browser;
+ }
+ }
+
+ private static void build(File root, String cmd, String target)
+ throws IOException {
+ long start = System.currentTimeMillis();
+ log.info("buck build " + target);
+ Process rebuild = new ProcessBuilder(cmd, target)
+ .directory(root)
+ .redirectErrorStream(true)
+ .start();
+
+ byte[] out;
+ InputStream in = rebuild.getInputStream();
+ try {
+ out = ByteStreams.toByteArray(in);
+ } finally {
+ rebuild.getOutputStream().close();
+ in.close();
+ }
+
+ int status;
+ try {
+ status = rebuild.waitFor();
+ } catch (InterruptedException e) {
+ throw new InterruptedIOException("interrupted waiting for " + cmd);
+ }
+ if (status != 0) {
+ System.err.write(out);
+ System.err.println();
+ System.exit(status);
+ }
+
+ long time = System.currentTimeMillis() - start;
+ log.info(String.format("UPDATED %s in %.3fs", target, time / 1000.0));
+ }
+
+ private Resource useMavenDeveloperBuild(File dir) throws IOException {
dir = dir.getParentFile(); // pop target
dir = dir.getParentFile(); // pop the module we are in
diff --git a/gerrit-pgm/src/main/resources/com/google/gerrit/pgm/libraries.config b/gerrit-pgm/src/main/resources/com/google/gerrit/pgm/libraries.config
index f1ecadd..a5150e6 100644
--- a/gerrit-pgm/src/main/resources/com/google/gerrit/pgm/libraries.config
+++ b/gerrit-pgm/src/main/resources/com/google/gerrit/pgm/libraries.config
@@ -13,6 +13,7 @@
# limitations under the License.
+# Version should match lib/bouncycastle/BUCK
[library "bouncyCastle"]
name = Bouncy Castle Crypto v144
url = http://www.bouncycastle.org/download/bcprov-jdk16-144.jar
diff --git a/gerrit-prettify/BUCK b/gerrit-prettify/BUCK
new file mode 100644
index 0000000..79dc760
--- /dev/null
+++ b/gerrit-prettify/BUCK
@@ -0,0 +1,47 @@
+SRC = 'src/main/java/com/google/gerrit/prettify/'
+
+gwt_module(
+ name = 'client',
+ srcs = glob([
+ SRC + 'client/**/*.java',
+ SRC + 'common/**/*.java',
+ ]),
+ gwtxml = SRC + 'PrettyFormatter.gwt.xml',
+ resources = glob([
+ 'src/main/java/com/google/gerrit/prettify/client/*.properties',
+ ]),
+ deps = [
+ ':google-code-prettify',
+ '//gerrit-patch-jgit:client',
+ '//gerrit-reviewdb:client',
+ '//gerrit-gwtexpui:SafeHtml',
+ '//lib:guava',
+ '//lib:gwtjsonrpc',
+ '//lib/gwt:user',
+ '//lib/jgit:jgit',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+java_library(
+ name = 'google-code-prettify',
+ resources = glob([
+ 'src/main/resources/com/google/gerrit/prettify/client/**/*',
+ ]),
+ deps = [
+ '//lib:LICENSE-Apache2.0',
+ ],
+)
+
+java_library(
+ name = 'server',
+ srcs = glob([SRC + 'common/**/*.java']),
+ deps = [
+ '//gerrit-patch-jgit:server',
+ '//gerrit-reviewdb:server',
+ '//lib:guava',
+ '//lib:gwtjsonrpc',
+ '//lib/jgit:jgit',
+ ],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-reviewdb/BUCK b/gerrit-reviewdb/BUCK
new file mode 100644
index 0000000..05674cf
--- /dev/null
+++ b/gerrit-reviewdb/BUCK
@@ -0,0 +1,20 @@
+SRC = 'src/main/java/com/google/gerrit/reviewdb/'
+
+gwt_module(
+ name = 'client',
+ srcs = glob([SRC + 'client/**/*.java']),
+ gwtxml = SRC + 'ReviewDB.gwt.xml',
+ deps = [
+ '//lib:gwtorm',
+ '//lib:gwtorm_src'
+ ],
+ visibility = ['PUBLIC'],
+)
+
+java_library(
+ name = 'server',
+ srcs = glob([SRC + '**/*.java']),
+ resources = glob(['src/main/resources/**/*']),
+ deps = ['//lib:gwtorm'],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-server/BUCK b/gerrit-server/BUCK
new file mode 100644
index 0000000..86cad4e
--- /dev/null
+++ b/gerrit-server/BUCK
@@ -0,0 +1,61 @@
+include_defs('//lib/prolog/DEFS')
+
+java_library2(
+ name = 'server',
+ srcs = glob(['src/main/java/**/*.java']),
+ resources = glob(['src/main/resources/**/*']),
+ deps = [
+ '//gerrit-antlr:antlr',
+ '//gerrit-common:server',
+ '//gerrit-extension-api:api',
+ '//gerrit-util-cli:cli',
+ '//gerrit-util-ssl:ssl',
+ '//gerrit-patch-commonsnet:commons-net',
+ '//lib:automaton',
+ '//lib:guava',
+ '//lib:jsch',
+ '//lib:jsr305',
+ '//lib:juniversalchardet',
+ '//lib:mime-util',
+ '//lib:ow2-asm',
+ '//lib:ow2-asm-tree',
+ '//lib:ow2-asm-util',
+ '//lib:pegdown',
+ '//lib:velocity',
+ '//lib/commons:dbcp',
+ '//lib/commons:lang',
+ '//lib/commons:net',
+ '//lib/guice:guice',
+ '//lib/guice:guice-assistedinject',
+ '//lib/guice:guice-servlet',
+ '//lib/jgit:jgit',
+ '//lib/log:api',
+ '//lib/prolog:prolog-cafe',
+ ],
+ compile_deps = [
+ '//lib/bouncycastle:bcpg',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+prolog_cafe_library(
+ name = 'common_rules',
+ srcs = ['src/main/prolog/gerrit_common.pl'],
+ deps = [':server'],
+ visibility = ['PUBLIC'],
+)
+
+java_test(
+ name = 'server_tests',
+ srcs = glob(['src/test/java/**/*.java']),
+ resources = glob(['src/test/resources/**/*']),
+ deps = [
+ ':server',
+ ':common_rules',
+ '//lib:h2',
+ '//lib:junit',
+ '//lib:easymock',
+ '//lib/jgit:junit',
+ ],
+ source_under_test = [':server'],
+)
diff --git a/gerrit-sshd/BUCK b/gerrit-sshd/BUCK
new file mode 100644
index 0000000..72e63cb
--- /dev/null
+++ b/gerrit-sshd/BUCK
@@ -0,0 +1,17 @@
+java_library2(
+ name = 'sshd',
+ srcs = glob(['src/main/java/**/*.java']),
+ deps = [
+ '//gerrit-cache-h2:cache-h2',
+ '//gerrit-server:server',
+ '//gerrit-util-cli:cli',
+ '//lib/log:api',
+ '//lib/log:log4j',
+ '//lib/mina:core',
+ '//lib/mina:sshd',
+ ],
+ compile_deps = [
+ '//lib/bouncycastle:bcprov',
+ ],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-util-cli/BUCK b/gerrit-util-cli/BUCK
new file mode 100644
index 0000000..c281e86
--- /dev/null
+++ b/gerrit-util-cli/BUCK
@@ -0,0 +1,11 @@
+java_library(
+ name = 'cli',
+ srcs = glob(['src/main/java/**/*.java']),
+ deps = [
+ '//lib:args4j',
+ '//lib:guava',
+ '//lib/guice:guice',
+ '//lib/guice:guice-assistedinject',
+ ],
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-util-ssl/BUCK b/gerrit-util-ssl/BUCK
new file mode 100644
index 0000000..068f34c
--- /dev/null
+++ b/gerrit-util-ssl/BUCK
@@ -0,0 +1,5 @@
+java_library(
+ name = 'ssl',
+ srcs = glob(['src/main/java/**/*.java']),
+ visibility = ['PUBLIC'],
+)
diff --git a/gerrit-war/BUCK b/gerrit-war/BUCK
new file mode 100644
index 0000000..5c1f9f8
--- /dev/null
+++ b/gerrit-war/BUCK
@@ -0,0 +1,40 @@
+java_library(
+ name = 'init',
+ srcs = glob(['src/main/java/**/*.java']),
+ deps = [
+ '//gerrit-server:common_rules',
+ '//gerrit-server:server',
+ '//gerrit-httpd:httpd',
+ '//gerrit-sshd:sshd',
+ '//gerrit-cache-h2:cache-h2',
+ '//gerrit-openid:openid',
+ ],
+ visibility = [
+ '//:',
+ '//gerrit-gwtdebug:gwtdebug',
+ ],
+)
+
+genrule(
+ name = 'webapp_assets',
+ cmd = 'cd $(dirname $OUT)/webapp_assets__srcs/src/main/webapp && ' +
+ 'zip -qr $OUT .',
+ srcs = glob(['src/main/webapp/**/*']),
+ deps = [],
+ out = 'webapp_assets.zip',
+ visibility = ['//:'],
+)
+
+genrule(
+ name = 'log4j-config__jar',
+ cmd = 'jar cf $OUT -C $(dirname $SRCS) .',
+ srcs = ['src/main/resources/log4j.properties'],
+ out = 'log4j-config.jar',
+)
+
+prebuilt_jar(
+ name = 'log4j-config',
+ binary_jar = genfile('log4j-config.jar'),
+ deps = [':log4j-config__jar'],
+ visibility = ['//:'],
+)
diff --git a/lib/BUCK b/lib/BUCK
new file mode 100644
index 0000000..5b44932
--- /dev/null
+++ b/lib/BUCK
@@ -0,0 +1,249 @@
+include_defs('//lib/maven.defs')
+
+define_license(name = 'Apache1.1')
+define_license(name = 'Apache2.0')
+define_license(name = 'MPL1.1')
+define_license(name = 'PublicDomain')
+define_license(name = 'antlr')
+define_license(name = 'args4j')
+define_license(name = 'automaton')
+define_license(name = 'bouncycastle')
+define_license(name = 'clippy')
+define_license(name = 'h2')
+define_license(name = 'jgit')
+define_license(name = 'jsch')
+define_license(name = 'jsr305')
+define_license(name = 'ow2')
+define_license(name = 'postgresql')
+define_license(name = 'prologcafe')
+define_license(name = 'slf4j')
+define_license(name = 'DO_NOT_DISTRIBUTE')
+
+maven_jar(
+ name = 'gwtorm',
+ id = 'gwtorm:gwtorm:1.6',
+ bin_sha1 = '61bcb92f438524260429149910b5261d48812419',
+ src_sha1 = '2624f9d6a750a8aa8f9a5d4b5062b70cd12d1ae7',
+ license = 'Apache2.0',
+ repository = GERRIT,
+)
+
+maven_jar(
+ name = 'gwtjsonrpc',
+ id = 'gwtjsonrpc:gwtjsonrpc:1.3',
+ bin_sha1 = '1717ba11ab0c5160798c80085220a63f864691d3',
+ src_sha1 = '9e01c5d7bd54f8e70066450b372a43c16404789e',
+ license = 'Apache2.0',
+ repository = GERRIT,
+)
+
+maven_jar(
+ name = 'gson',
+ id = 'com.google.code.gson:gson:2.1',
+ sha1 = '2e66da15851f9f5b5079228f856c2f090ba98c38',
+ license = 'Apache2.0',
+)
+
+maven_jar(
+ name = 'guava',
+ id = 'com.google.guava:guava:14.0',
+ sha1 = '67b7be4ee7ba48e4828a42d6d5069761186d4a53',
+ license = 'Apache2.0',
+)
+
+maven_jar(
+ name = 'asm3',
+ id = 'asm:asm:3.2',
+ sha1 = '9bc1511dec6adf302991ced13303e4140fdf9ab7',
+ license = 'ow2',
+ attach_source = False,
+)
+
+maven_jar(
+ name = 'ow2-asm',
+ id = 'org.ow2.asm:asm:4.0',
+ sha1 = '659add6efc75a4715d738e73f07505246edf4d66',
+ license = 'ow2',
+)
+
+maven_jar(
+ name = 'ow2-asm-analysis',
+ id = 'org.ow2.asm:asm-analysis:4.0',
+ sha1 = '1c45d52b6f6c638db13cf3ac12adeb56b254cdd7',
+ license = 'ow2',
+)
+
+maven_jar(
+ name = 'ow2-asm-tree',
+ id = 'org.ow2.asm:asm-tree:4.0',
+ sha1 = '67bd266cd17adcee486b76952ece4cc85fe248b8',
+ license = 'ow2',
+)
+
+maven_jar(
+ name = 'ow2-asm-util',
+ id = 'org.ow2.asm:asm-util:4.0',
+ sha1 = 'd7a65f54cda284f9706a750c23d64830bb740c39',
+ license = 'ow2',
+)
+
+maven_jar(
+ name = 'velocity',
+ id = 'org.apache.velocity:velocity:1.6.4',
+ sha1 = 'fcc58693dd8fc83d714fba149789be37cc19b66d',
+ license = 'Apache2.0',
+ deps = [
+ '//lib/commons:collections',
+ '//lib/commons:lang',
+ '//lib/commons:oro',
+ ],
+ exclude = ['META-INF/LICENSE', 'META-INF/NOTICE'],
+)
+
+maven_jar(
+ name = 'jsch',
+ id = 'com.jcraft:jsch:0.1.44-1',
+ sha1 = '2e9ae08de5a71bd0e0d3ba2558598181bfa71d4e',
+ license = 'jsch',
+)
+
+maven_jar(
+ name = 'servlet-api-3_0',
+ id = 'org.apache.tomcat:tomcat-servlet-api:7.0.32',
+ sha1 = 'e2f21e9868414122e6dd23ac66cf304d4290642c',
+ license = 'Apache2.0',
+ exclude = ['META-INF/NOTICE', 'META-INF/LICENSE'],
+)
+
+maven_jar(
+ name = 'jsr305',
+ id = 'com.google.code.findbugs:jsr305:1.3.9',
+ sha1 = '40719ea6961c0cb6afaeb6a921eaa1f6afd4cfdf',
+ license = 'jsr305',
+ attach_source = False,
+ exclude_java_sources = True,
+)
+
+maven_jar(
+ name = 'args4j',
+ id = 'args4j:args4j:2.0.16',
+ sha1 = '9f00fb12820743b9e05c686eba543d64dd43f2b1',
+ license = 'args4j',
+)
+
+maven_jar(
+ name = 'mime-util',
+ id = 'eu.medsea.mimeutil:mime-util:2.1.3',
+ sha1 = '0c9cfae15c74f62491d4f28def0dff1dabe52a47',
+ license = 'Apache2.0',
+ exclude = ['LICENSE.txt', 'README.txt'],
+ attach_source = False,
+)
+
+maven_jar(
+ name = 'juniversalchardet',
+ id = 'com.googlecode.juniversalchardet:juniversalchardet:1.0.3',
+ sha1 = 'cd49678784c46aa8789c060538e0154013bb421b',
+ license = 'MPL1.1',
+)
+
+maven_jar(
+ name = 'automaton',
+ id = 'dk.brics.automaton:automaton:1.11-8',
+ sha1 = '6ebfa65eb431ff4b715a23be7a750cbc4cc96d0f',
+ license = 'automaton',
+)
+
+maven_jar(
+ name = 'pegdown',
+ id = 'org.pegdown:pegdown:1.1.0',
+ sha1 = '00bcc0c5b025b09ab85bb80a8311ce5c015d005b',
+ license = 'Apache2.0',
+ deps = [':parboiled-java'],
+ exclude = ['META-INF/LICENSE', 'META-INF/NOTICE'],
+)
+
+maven_jar(
+ name = 'parboiled-core',
+ id = 'org.parboiled:parboiled-core:1.1.3',
+ sha1 = '3fc3013adf98701efcc594a1ea99a3f841dc81bb',
+ license = 'Apache2.0',
+ attach_source = False,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'parboiled-java',
+ id = 'org.parboiled:parboiled-java:1.1.3',
+ sha1 = 'c2bf2935a8b3eca5f998557190cd6eb34f5536d0',
+ license = 'Apache2.0',
+ deps = [
+ ':parboiled-core',
+ ':ow2-asm-tree',
+ ':ow2-asm-analysis',
+ ':ow2-asm-util',
+ ],
+ attach_source = False,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'h2',
+ id = 'com.h2database:h2:1.3.168',
+ sha1 = 'eb32936a239d95220f5b2d2973a7b17372f98b54',
+ license = 'h2',
+ attach_source = False,
+)
+
+maven_jar(
+ name = 'postgresql',
+ id = 'postgresql:postgresql:9.1-901-1.jdbc4',
+ sha1 = '9bfabe48876ec38f6cbaa6931bad05c64a9ea942',
+ license = 'postgresql',
+ attach_source = False,
+)
+
+maven_jar(
+ name = 'junit',
+ id = 'junit:junit:4.11',
+ sha1 = '4e031bb61df09069aeb2bffb4019e7a5034a4ee0',
+ license = 'DO_NOT_DISTRIBUTE',
+ deps = [':hamcrest-core'],
+)
+
+maven_jar(
+ name = 'hamcrest-core',
+ id = 'org.hamcrest:hamcrest-core:1.3',
+ sha1 = '42a25dc3219429f0e5d060061f71acb49bf010a0',
+ license = 'DO_NOT_DISTRIBUTE',
+ visibility = ['//lib:junit'],
+)
+
+maven_jar(
+ name = 'easymock',
+ id = 'org.easymock:easymock:3.1',
+ sha1 = '3e127311a86fc2e8f550ef8ee4abe094bbcf7e7e',
+ license = 'DO_NOT_DISTRIBUTE',
+ deps = [
+ ':cglib-2_2',
+ ':objenesis',
+ ],
+)
+
+maven_jar(
+ name = 'cglib-2_2',
+ id = 'cglib:cglib-nodep:2.2.2',
+ sha1 = '00d456bb230c70c0b95c76fb28e429d42f275941',
+ license = 'DO_NOT_DISTRIBUTE',
+ visibility = ['//lib:easymock'],
+ attach_source = False,
+)
+
+maven_jar(
+ name = 'objenesis',
+ id = 'org.objenesis:objenesis:1.2',
+ sha1 = 'bfcb0539a071a4c5a30690388903ac48c0667f2a',
+ license = 'DO_NOT_DISTRIBUTE',
+ visibility = ['//lib:easymock'],
+ attach_source = False,
+)
diff --git a/lib/DEFS b/lib/DEFS
new file mode 100644
index 0000000..c7f975c
--- /dev/null
+++ b/lib/DEFS
@@ -0,0 +1,158 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+def genantlr(
+ name,
+ srcs,
+ outs):
+ genrule(
+ name = name,
+ srcs = srcs,
+ cmd = '${//lib/antlr:antlr-tool} -o $(dirname $OUT) $SRCS',
+ deps = ['//lib/antlr:antlr-tool'],
+ out = outs[0],
+ )
+
+def gwt_module(
+ name,
+ srcs,
+ gwtxml = None,
+ resources = [],
+ deps = [],
+ visibility = []):
+ if gwtxml:
+ resources = resources + [gwtxml]
+ resources = resources + srcs
+ java_library(
+ name = name,
+ srcs = srcs,
+ deps = deps,
+ resources = resources,
+ visibility = visibility,
+ )
+
+def gwt_application(
+ name,
+ module_target,
+ compiler_opts = [],
+ compiler_jvm_flags = [],
+ deps = [],
+ visibility = []):
+ cmd = ['${//lib/gwt:compiler}', module_target, '$OUT']
+ cmd += compiler_opts + ['--', '$DEPS']
+ genrule(
+ name = name,
+ srcs = [],
+ cmd = ' '.join(cmd),
+ deps = [
+ '//lib/gwt:compiler',
+ '//lib/gwt:dev',
+ ] + deps,
+ out = '%s.zip' % name,
+ visibility = visibility,
+ )
+
+# Compiles a Java library with additional compile-time dependencies
+# that do not show up as transitive dependencies to java_library()
+# or java_binary() rule that depends on this library.
+def java_library2(
+ name,
+ srcs = [],
+ resources = [],
+ deps = [],
+ compile_deps = [],
+ visibility = []):
+ c = name + '__compile'
+ t = name + '__link'
+ j = 'lib__%s__output/%s.jar' % (c, c)
+ o = 'lib__%s__output/%s.jar' % (name, name)
+ java_library(
+ name = c,
+ srcs = srcs,
+ resources = resources,
+ deps = deps + compile_deps,
+ visibility = ['//:eclipse_classpath'],
+ )
+ # Break the dependency chain by passing the newly built
+ # JAR to consumers through a prebuilt_jar().
+ genrule(
+ name = t,
+ cmd = 'mkdir -p $(dirname $OUT);ln -s $SRCS $OUT',
+ srcs = [genfile(j)],
+ deps = [':' + c],
+ out = o,
+ )
+ prebuilt_jar(
+ name = name,
+ binary_jar = genfile(o),
+ deps = deps + [':' + t],
+ visibility = visibility,
+ )
+
+def gerrit_extension(
+ name,
+ deps = [],
+ srcs = [],
+ resources = [],
+ manifest_file = None,
+ visibility = ['PUBLIC']):
+ gerrit_plugin(
+ name = name,
+ deps = deps,
+ srcs = srcs,
+ resources = resources,
+ manifest_file = manifest_file,
+ type = 'extension',
+ visibility = visibility,
+ )
+
+def gerrit_plugin(
+ name,
+ deps = [],
+ srcs = [],
+ resources = [],
+ manifest_file = None,
+ type = 'plugin',
+ visibility = ['PUBLIC']):
+ mf_cmd = 'v=$(git describe HEAD);'
+ if manifest_file:
+ mf_src = [manifest_file]
+ mf_cmd += 'sed "s:@VERSION@:$v:g" $SRCS >$OUT'
+ else:
+ mf_src = []
+ mf_cmd += 'echo "Manifest-Version: 1.0" >$OUT;'
+ mf_cmd += 'echo "Gerrit-ApiType: %s" >>$OUT;' % type
+ mf_cmd += 'echo "Implementation-Version: $v" >>$OUT'
+ genrule(
+ name = name + '__manifest',
+ cmd = mf_cmd,
+ srcs = mf_src,
+ out = 'MANIFEST.MF',
+ )
+ java_library2(
+ name = name + '__plugin',
+ srcs = srcs,
+ resources = resources,
+ deps = deps,
+ compile_deps = ['//:%s-lib' % type],
+ )
+ java_binary(
+ name = name,
+ manifest_file = genfile('MANIFEST.MF'),
+ deps = [
+ ':%s__plugin' % name,
+ ':%s__manifest' % name,
+ ],
+ visibility = visibility,
+ )
diff --git a/lib/LICENSE-Apache1.1 b/lib/LICENSE-Apache1.1
new file mode 100644
index 0000000..8eda4fc
--- /dev/null
+++ b/lib/LICENSE-Apache1.1
@@ -0,0 +1,51 @@
+The Apache Software License, Version 1.1
+
+Copyright (c) 2000-2002 The Apache Software Foundation. All rights
+reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+3. The end-user documentation included with the redistribution,
+ if any, must include the following acknowledgment:
+ "This product includes software developed by the
+ Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself,
+ if and wherever such third-party acknowledgments normally appear.
+
+4. The names "Apache" and "Apache Software Foundation", "Jakarta-Oro"
+ must not be used to endorse or promote products derived from this
+ software without prior written permission. For written
+ permission, please contact apache@apache.org.
+
+5. Products derived from this software may not be called "Apache"
+ or "Jakarta-Oro", nor may "Apache" or "Jakarta-Oro" appear in their
+ name, without prior written permission of the Apache Software Foundation.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+====================================================================
+
+This software consists of voluntary contributions made by many
+individuals on behalf of the Apache Software Foundation. For more
+information on the Apache Software Foundation, please see
+<http://www.apache.org/>.
diff --git a/lib/LICENSE-Apache2.0 b/lib/LICENSE-Apache2.0
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/lib/LICENSE-Apache2.0
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/lib/LICENSE-DO_NOT_DISTRIBUTE b/lib/LICENSE-DO_NOT_DISTRIBUTE
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/LICENSE-DO_NOT_DISTRIBUTE
diff --git a/lib/LICENSE-MPL1.1 b/lib/LICENSE-MPL1.1
new file mode 100644
index 0000000..06f9651
--- /dev/null
+++ b/lib/LICENSE-MPL1.1
@@ -0,0 +1,469 @@
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ---------------
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
diff --git a/lib/LICENSE-PublicDomain b/lib/LICENSE-PublicDomain
new file mode 100644
index 0000000..8a71ce0
--- /dev/null
+++ b/lib/LICENSE-PublicDomain
@@ -0,0 +1 @@
+This software has been placed in the public domain by its author(s).
diff --git a/lib/LICENSE-antlr b/lib/LICENSE-antlr
new file mode 100644
index 0000000..6041290
--- /dev/null
+++ b/lib/LICENSE-antlr
@@ -0,0 +1,29 @@
+Copyright (c) 2003-2008, Terence Parr
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of the author nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/LICENSE-args4j b/lib/LICENSE-args4j
new file mode 100644
index 0000000..36cd75f
--- /dev/null
+++ b/lib/LICENSE-args4j
@@ -0,0 +1,32 @@
+Copyright (c) 2003, Kohsuke Kawaguchi
+All rights reserved.
+
+Redistribution and use in source and binary forms,
+with or without modification, are permitted provided
+that the following conditions are met:
+
+ * Redistributions of source code must retain
+ the above copyright notice, this list of
+ conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce
+ the above copyright notice, this list of
+ conditions and the following disclaimer in
+ the documentation and/or other materials
+ provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/LICENSE-automaton b/lib/LICENSE-automaton
new file mode 100644
index 0000000..72dcb1c
--- /dev/null
+++ b/lib/LICENSE-automaton
@@ -0,0 +1,28 @@
+Copyright (c) 2007-2009, dk.brics.automaton
+All rights reserved.
+
+http://www.opensource.org/licenses/bsd-license.php
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the JSR305 expert group nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/LICENSE-bouncycastle b/lib/LICENSE-bouncycastle
new file mode 100644
index 0000000..d17a4bc
--- /dev/null
+++ b/lib/LICENSE-bouncycastle
@@ -0,0 +1,21 @@
+Copyright (c) 2000 - 2012 The Legion Of The Bouncy Castle
+(http://www.bouncycastle.org)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/lib/LICENSE-clippy b/lib/LICENSE-clippy
new file mode 100644
index 0000000..b0feeae
--- /dev/null
+++ b/lib/LICENSE-clippy
@@ -0,0 +1,20 @@
+Copyright (c) 2008 Tom Preston-Werner
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/lib/LICENSE-h2 b/lib/LICENSE-h2
new file mode 100644
index 0000000..1be4fba8
--- /dev/null
+++ b/lib/LICENSE-h2
@@ -0,0 +1,710 @@
+H2 is dual licensed and available under a modified version of the
+MPL 1.1 (Mozilla Public License) or under the (unmodified) EPL 1.0.
+----
+
+link:http://www.h2database.com/html/license.html[H2 License]
+
+----
+H2 License - Version 1.0
+1. Definitions
+
+1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+1.1. "Contributor" means each entity that creates or contributes
+ to the creation of Modifications.
+
+1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the
+ Modifications made by that particular Contributor.
+
+1.3. "Covered Code" means the Original Code or Modifications or
+ the combination of the Original Code and Modifications, in each
+ case including portions thereof.
+
+1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+1.5. "Executable" means Covered Code in any form other than Source Code.
+
+1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required
+ by Exhibit A.
+
+1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this
+ License.
+
+1.8. "License" means this document.
+
+1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant
+ or subsequently acquired, any and all of the rights conveyed
+ herein.
+
+1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any
+ previous Modifications. When Covered Code is released as a
+ series of files, a Modification is:
+
+1.9.a. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+1.9.b. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+1.10. "Original Code" means Source Code of computer software
+ code which is described in the Source Code notice required
+ by Exhibit A as Original Code, and which, at the time of
+ its release under this License is not already Covered Code
+ governed by this License.
+
+1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method,
+ process, and apparatus claims, in any patent Licensable
+ by grantor.
+
+1.11. "Source Code" means the preferred form of the Covered Code
+ for making modifications to it, including all modules it
+ contains, plus any associated interface definition files,
+ scripts used to control compilation and installation of an
+ Executable, or source code differential comparisons against
+ either the Original Code or another well known, available
+ Covered Code of the Contributor's choice. The Source Code can
+ be in a compressed or archival form, provided the appropriate
+ decompression or de-archiving software is widely available
+ for no charge.
+
+1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms
+ of, this License or a future version of this License issued
+ under Section 6.1. For legal entities, "You" includes any
+ entity which controls, is controlled by, or is under common
+ control with You. For purposes of this definition, "control"
+ means (a) the power, direct or indirect, to cause the direction
+ or management of such entity, whether by contract or otherwise,
+ or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.
+
+2. Source Code License
+
+2.1. The Initial Developer Grant
+
+The Initial Developer hereby grants You a world-wide, royalty-free,
+non-exclusive license, subject to third party intellectual property
+claims:
+
+2.1.a. under intellectual property rights (other than patent
+ or trademark) Licensable by Initial Developer to use,
+ reproduce, modify, display, perform, sublicense and distribute
+ the Original Code (or portions thereof) with or without
+ Modifications, and/or as part of a Larger Work; and
+
+2.1.b. under Patents Claims infringed by the making, using or selling
+ of Original Code, to make, have made, use, practice, sell,
+ and offer for sale, and/or otherwise dispose of the Original
+ Code (or portions thereof).
+
+2.1.c. the licenses granted in this Section 2.1 (a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+2.1.d. Notwithstanding Section 2.1 (b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code;
+ 2) separate from the Original Code; or 3) for infringements
+ caused by: i) the modification of the Original Code or ii)
+ the combination of the Original Code with other software
+ or devices.
+
+2.2. Contributor Grant
+
+Subject to third party intellectual property claims, each Contributor
+hereby grants You a world-wide, royalty-free, non-exclusive license
+
+2.2.a. under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce,
+ modify, display, perform, sublicense and distribute the
+ Modifications created by such Contributor (or portions
+ thereof) either on an unmodified basis, with other
+ Modifications, as Covered Code and/or as part of a Larger
+ Work; and
+
+2.2.b. under Patent Claims infringed by the making, using, or selling
+ of Modifications made by that Contributor either alone and/or
+ in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale,
+ have made, and/or otherwise dispose of: 1) Modifications
+ made by that Contributor (or portions thereof); and 2) the
+ combination of Modifications made by that Contributor with
+ its Contributor Version (or portions of such combination).
+
+2.2.c. the licenses granted in Sections 2.2 (a) and 2.2 (b) are
+ effective on the date Contributor first makes Commercial
+ Use of the Covered Code.
+
+2.2.c. Notwithstanding Section 2.2 (b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from
+ the Contributor Version; 2) separate from the Contributor
+ Version; 3) for infringements caused by: i) third party
+ modifications of Contributor Version or ii) the combination
+ of Modifications made by that Contributor with other software
+ (except as part of the Contributor Version) or other devices;
+ or 4) under Patent Claims infringed by Covered Code in the
+ absence of Modifications made by that Contributor.
+
+3. Distribution Obligations
+
+3.1. Application of License
+
+The Modifications which You create or to which You contribute
+are governed by the terms of this License, including without
+limitation Section 2.2. The Source Code version of Covered Code may
+be distributed only under the terms of this License or a future
+version of this License released under Section 6.1, and You must
+include a copy of this License with every copy of the Source Code
+You distribute. You may not offer or impose any terms on any Source
+Code version that alters or restricts the applicable version of
+this License or the recipients' rights hereunder. However, You
+may include an additional document offering the additional rights
+described in Section 3.5.
+
+3.2. Availability of Source Code
+
+Any Modification which You create or to which You contribute must
+be made available in Source Code form under the terms of this
+License either on the same media as an Executable version or via
+an accepted Electronic Distribution Mechanism to anyone to whom
+you made an Executable version available; and if made available
+via Electronic Distribution Mechanism, must remain available for
+at least twelve (12) months after the date it initially became
+available, or at least six (6) months after a subsequent version
+of that particular Modification has been made available to such
+recipients. You are responsible for ensuring that the Source Code
+version remains available even if the Electronic Distribution
+Mechanism is maintained by a third party.
+
+3.3. Description of Modifications
+
+You must cause all Covered Code to which You contribute to contain
+a file documenting the changes You made to create that Covered
+Code and the date of any change. You must include a prominent
+statement that the Modification is derived, directly or indirectly,
+from Original Code provided by the Initial Developer and including
+the name of the Initial Developer in (a) the Source Code, and (b)
+in any notice in an Executable version or related documentation in
+which You describe the origin or ownership of the Covered Code.
+
+3.4. Intellectual Property Matters
+
+3.4.a. Third Party Claims: If Contributor has knowledge that
+ a license under a third party's intellectual property
+ rights is required to exercise the rights granted by such
+ Contributor under Sections 2.1 or 2.2, Contributor must
+ include a text file with the Source Code distribution titled
+ "LEGAL" which describes the claim and the party making the
+ claim in sufficient detail that a recipient will know whom
+ to contact. If Contributor obtains such knowledge after the
+ Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all
+ copies Contributor makes available thereafter and shall take
+ other steps (such as notifying appropriate mailing lists or
+ newsgroups) reasonably calculated to inform those who received
+ the Covered Code that new knowledge has been obtained.
+
+3.4.b. Contributor APIs: If Contributor's Modifications include
+ an application programming interface and Contributor has
+ knowledge of patent licenses which are reasonably necessary
+ to implement that API, Contributor must also include this
+ information in the legal file.
+
+3.4.c. Representations: Contributor represents that, except as
+ disclosed pursuant to Section 3.4 (a) above, Contributor
+ believes that Contributor's Modifications are Contributor's
+ original creation(s) and/or Contributor has sufficient rights
+ to grant the rights conveyed by this License.
+
+3.5. Required Notices
+
+You must duplicate the notice in Exhibit A in each file of
+the Source Code. If it is not possible to put such notice in a
+particular Source Code file due to its structure, then You must
+include such notice in a location (such as a relevant directory)
+where a user would be likely to look for such a notice. If You
+created one or more Modification(s) You may add your name as a
+Contributor to the notice described in Exhibit A. You must also
+duplicate this License in any documentation for the Source Code
+where You describe recipients' rights or ownership rights relating
+to Covered Code. You may choose to offer, and to charge a fee for,
+warranty, support, indemnity or liability obligations to one or
+more recipients of Covered Code. However, You may do so only on
+Your own behalf, and not on behalf of the Initial Developer or
+any Contributor. You must make it absolutely clear than any such
+warranty, support, indemnity or liability obligation is offered by
+You alone, and You hereby agree to indemnify the Initial Developer
+and every Contributor for any liability incurred by the Initial
+Developer or such Contributor as a result of warranty, support,
+indemnity or liability terms You offer.
+
+3.6. Distribution of Executable Versions
+
+You may distribute Covered Code in Executable form only if the
+requirements of Sections 3.1, 3.2, 3.3, 3.4 and 3.5 have been met
+for that Covered Code, and if You include a notice stating that
+the Source Code version of the Covered Code is available under the
+terms of this License, including a description of how and where
+You have fulfilled the obligations of Section 3.2. The notice
+must be conspicuously included in any notice in an Executable
+version, related documentation or collateral in which You describe
+recipients' rights relating to the Covered Code. You may distribute
+the Executable version of Covered Code or ownership rights under
+a license of Your choice, which may contain terms different from
+this License, provided that You are in compliance with the terms
+of this License and that the license for the Executable version
+does not attempt to limit or alter the recipient's rights in the
+Source Code version from the rights set forth in this License. If
+You distribute the Executable version under a different license You
+must make it absolutely clear that any terms which differ from this
+License are offered by You alone, not by the Initial Developer or any
+Contributor. You hereby agree to indemnify the Initial Developer and
+every Contributor for any liability incurred by the Initial Developer
+or such Contributor as a result of any such terms You offer.
+
+3.7. Larger Works
+
+You may create a Larger Work by combining Covered Code with other
+code not governed by the terms of this License and distribute the
+Larger Work as a single product. In such a case, You must make sure
+the requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+If it is impossible for You to comply with any of the terms of
+this License with respect to some or all of the Covered Code due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description
+must be included in the legal file described in Section 3.4 and
+must be included with all distributions of the Source Code. Except
+to the extent prohibited by statute or regulation, such description
+must be sufficiently detailed for a recipient of ordinary skill to
+be able to understand it.
+
+5. Application of this License.
+
+This License applies to code to which the Initial Developer has
+attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+6.1. New Versions
+
+The H2 Group may publish revised and/or new versions of the License
+from time to time. Each version will be given a distinguishing
+version number.
+
+6.2. Effect of New Versions
+
+Once Covered Code has been published under a particular version of
+the License, You may always continue to use it under the terms of
+that version. You may also choose to use such Covered Code under the
+terms of any subsequent version of the License published by the H2
+Group. No one other than the H2 Group has the right to modify the
+terms applicable to Covered Code created under this License.
+
+6.3. Derivative Works
+
+If You create or use a modified version of this License (which you
+may only do in order to apply it to code which is not already Covered
+Code governed by this License), You must (a) rename Your license so
+that the phrases "H2 Group", "H2" or any confusingly similar phrase
+do not appear in your license (except to note that your license
+differs from this License) and (b) otherwise make it clear that
+Your version of the license contains terms which differ from the
+H2 License. (Filling in the name of the Initial Developer, Original
+Code or Contributor in the notice described in Exhibit A shall not
+of themselves be deemed to be modifications of this License.)
+
+7. Disclaimer of Warranty
+
+Covered code is provided under this license on an "as is" basis,
+without warranty of any kind, either expressed or implied,
+including, without limitation, warranties that the covered code
+is free of defects, merchantable, fit for a particular purpose or
+non-infringing. The entire risk as to the quality and performance
+of the covered code is with you. Should any covered code prove
+defective in any respect, you (not the initial developer or any
+other contributor) assume the cost of any necessary servicing,
+repair or correction. This disclaimer of warranty constitutes
+an essential part of this license. No use of any covered code is
+authorized hereunder except under this disclaimer.
+
+8. Termination
+
+8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and
+ fail to cure such breach within 30 days of becoming aware
+ of the breach. All sublicenses to the Covered Code which
+ are properly granted shall survive any termination of this
+ License. Provisions which, by their nature, must remain in
+ effect beyond the termination of this License shall survive.
+
+8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declaratory judgment actions) against
+ Initial Developer or a Contributor (the Initial Developer or
+ Contributor against whom You file such action is referred to as
+ "Participant") alleging that:
+
+8.2.a. such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by
+ such Participant to You under Sections 2.1 and/or 2.2 of this
+ License shall, upon 60 days notice from Participant terminate
+ prospectively, unless if within 60 days after receipt of
+ notice You either: (i) agree in writing to pay Participant
+ a mutually agreeable reasonable royalty for Your past and
+ future use of Modifications made by such Participant, or (ii)
+ withdraw Your litigation claim with respect to the Contributor
+ Version against such Participant. If within 60 days of notice,
+ a reasonable royalty and payment arrangement are not mutually
+ agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You
+ under Sections 2.1 and/or 2.2 automatically terminate at
+ the expiration of the 60 day notice period specified above.
+
+8.2.b. any software, hardware, or device, other than such
+ Participant's Contributor Version, directly or indirectly
+ infringes any patent, then any rights granted to You by
+ such Participant under Sections 2.1(b) and 2.2(b) are
+ revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly
+ or indirectly infringes any patent where such claim is resolved
+ (such as by license or settlement) prior to the initiation of
+ patent infringement litigation, then the reasonable value of
+ the licenses granted by such Participant under Sections 2.1
+ or 2.2 shall be taken into account in determining the amount
+ or value of any payment or license.
+
+8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and
+ resellers) which have been validly granted by You or any
+ distributor hereunder prior to termination shall survive
+ termination.
+
+9. Limitation of Liability
+
+Under no circumstances and under no legal theory, whether tort
+(including negligence), contract, or otherwise, shall you, the
+initial developer, any other contributor, or any distributor of
+covered code, or any supplier of any of such parties, be liable to
+any person for any indirect, special, incidental, or consequential
+damages of any character including, without limitation, damages for
+loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses, even if such party
+shall have been informed of the possibility of such damages. This
+limitation of liability shall not apply to liability for death or
+personal injury resulting from such party's negligence to the extent
+applicable law prohibits such limitation. Some jurisdictions do not
+allow the exclusion or limitation of incidental or consequential
+damages, so this exclusion and limitation may not apply to you.
+
+10. United States Government End Users
+
+The Covered Code is a "commercial item", as that term is defined in
+48 C.F.R. 2.101 (October 1995), consisting of "commercial computer
+software" and "commercial computer software documentation", as such
+terms are used in 48 C.F.R. 12.212 (September 1995). Consistent
+with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4
+(June 1995), all U.S. Government End Users acquire Covered Code
+with only those rights set forth herein.
+
+11. Miscellaneous
+
+This License represents the complete agreement concerning subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. This License shall be governed
+by California law provisions (except to the extent applicable
+law, if any, provides otherwise), excluding its conflict-of-law
+provisions. With respect to disputes in which at least one party is
+a citizen of, or an entity chartered or registered to do business in
+United States of America, any litigation relating to this License
+shall be subject to the jurisdiction of the Federal Courts of the
+Northern District of California, with venue lying in Santa Clara
+County, California, with the losing party responsible for costs,
+including without limitation, court costs and reasonable attorneys'
+fees and expenses. The application of the United Nations Convention
+on Contracts for the International Sale of Goods is expressly
+excluded. Any law or regulation which provides that the language of
+a contract shall be construed against the drafter shall not apply
+to this License.
+
+12. Responsibility for Claims
+
+As between Initial Developer and the Contributors, each party is
+responsible for claims and damages arising, directly or indirectly,
+out of its utilization of rights under this License and You agree
+to work with Initial Developer and Contributors to distribute such
+responsibility on an equitable basis. Nothing herein is intended
+or shall be deemed to constitute any admission of liability.
+
+13. Multiple-Licensed Code
+
+Initial Developer may designate portions of the Covered Code as
+"Multiple-Licensed". "Multiple-Licensed" means that the Initial
+Developer permits you to utilize portions of the Covered Code under
+Your choice of this or the alternative licenses, if any, specified
+by the Initial Developer in the file described in Exhibit A.
+
+Exhibit A
+
+Multiple-Licensed under the H2 License, Version 1.0,
+and under the Eclipse Public License, Version 1.0
+(http://h2database.com/html/license.html).
+Initial Developer: H2 Group
+----
+
+----
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and
+ documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from
+and are distributed by that particular Contributor. A Contribution
+'originates' from a Contributor if it was added to the Program
+by such Contributor itself or anyone acting on such Contributor's
+behalf. Contributions do not include additions to the Program which:
+(i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are
+not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor
+which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with
+this Agreement.
+
+"Recipient" means anyone who receives the Program under this
+Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare derivative works of, publicly display,
+ publicly perform, distribute and sublicense the Contribution of such
+ Contributor, if any, and such derivative works, in source code and
+ object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in source code and object code form. This patent license
+ shall apply to the combination of the Contribution and the Program
+ if, at the time the Contribution is added by the Contributor, such
+ addition of the Contribution causes such combination to be covered
+ by the Licensed Patents. The patent license shall not apply to any
+ other combinations which include the Contribution. No hardware per
+ se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe
+ the patent or other intellectual property rights of any other
+ entity. Each Contributor disclaims any liability to Recipient
+ for claims brought by any other entity based on infringement
+ of intellectual property rights or otherwise. As a condition to
+ exercising the rights and licenses granted hereunder, each Recipient
+ hereby assumes sole responsibility to secure any other intellectual
+ property rights needed, if any. For example, if a third party patent
+ license is required to allow Recipient to distribute the Program,
+ it is Recipient's responsibility to acquire that license before
+ distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has
+ sufficient copyright rights in its Contribution, if any, to grant
+ the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code
+ form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties
+ and conditions, express and implied, including warranties or
+ conditions of title and non-infringement, and implied warranties or
+ conditions of merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability
+ for damages, including direct, indirect, special, incidental and
+ consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement
+ are offered by that Contributor alone and not by any other
+ party; and
+
+iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable
+ manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained
+within the Program.
+
+Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial
+use of the Program, the Contributor who includes the Program in a
+commercial product offering should do so in a manner which does not
+create potential liability for other Contributors. Therefore, if a
+Contributor includes the Program in a commercial product offering,
+such Contributor ("Commercial Contributor") hereby agrees to defend
+and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising
+from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by
+the acts or omissions of such Commercial Contributor in connection
+with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims
+or Losses relating to any actual or alleged intellectual property
+infringement. In order to qualify, an Indemnified Contributor must:
+a) promptly notify the Commercial Contributor in writing of such
+claim, and b) allow the Commercial Contributor to control, and
+cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a
+commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes
+performance claims, or offers warranties related to Product X, those
+performance claims and warranties are such Commercial Contributor's
+responsibility alone. Under this section, the Commercial Contributor
+would have to defend claims against the other Contributors related
+to those performance claims and warranties, and if a court requires
+any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
+WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with
+its exercise of rights under this Agreement , including but not
+limited to the risks and costs of program errors, compliance with
+applicable laws, damage to or loss of data, programs or equipment,
+and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY
+RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed
+to the minimum extent necessary to make such provision valid and
+enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging
+that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s),
+then such Recipient's rights granted under Section 2(b) shall
+terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if
+it fails to comply with any of the material terms or conditions
+of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all
+Recipient's rights under this Agreement terminate, Recipient agrees
+to cease use and distribution of the Program as soon as reasonably
+practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall
+continue and survive.
+
+Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions
+(including revisions) of this Agreement from time to time. No
+one other than the Agreement Steward has the right to modify
+this Agreement. The Eclipse Foundation is the initial Agreement
+Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each
+new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it
+was received. In addition, after a new version of the Agreement is
+published, Contributor may elect to distribute the Program (including
+its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or
+licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under
+this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No
+party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each
+party waives its rights to a jury trial in any resulting litigation.
+----
+
+----
+Export Control Classification Number (ECCN)
+
+As far as we know, the U.S. Export Control Classification Number
+(ECCN) for this software is 5D002. However, for legal reasons, we
+can make no warranty that this information is correct. For details,
+see also the Apache Software Foundation Export Classifications page.
diff --git a/lib/LICENSE-jgit b/lib/LICENSE-jgit
new file mode 100644
index 0000000..1b85c64
--- /dev/null
+++ b/lib/LICENSE-jgit
@@ -0,0 +1,37 @@
+This program and the accompanying materials are made available
+under the terms of the Eclipse Distribution License v1.0 which
+accompanies this distribution, is reproduced below, and is
+available at http://www.eclipse.org/org/documents/edl-v10.php
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+
+- Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+- Neither the name of the Eclipse Foundation, Inc. nor the
+ names of its contributors may be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/LICENSE-jsch b/lib/LICENSE-jsch
new file mode 100644
index 0000000..2cb0ddd
--- /dev/null
+++ b/lib/LICENSE-jsch
@@ -0,0 +1,26 @@
+Copyright (c) 2002-2012 Atsuhiko Yamanaka, JCraft,Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the distribution.
+
+ 3. The names of the authors may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
+INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/LICENSE-jsr305 b/lib/LICENSE-jsr305
new file mode 100644
index 0000000..cf30ea2
--- /dev/null
+++ b/lib/LICENSE-jsr305
@@ -0,0 +1,28 @@
+Copyright (c) 2007-2009, JSR305 expert group
+All rights reserved.
+
+http://www.opensource.org/licenses/bsd-license.php
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the JSR305 expert group nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/LICENSE-ow2 b/lib/LICENSE-ow2
new file mode 100644
index 0000000..c5aba7b
--- /dev/null
+++ b/lib/LICENSE-ow2
@@ -0,0 +1,29 @@
+Copyright (c) 2000-2011 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/LICENSE-postgresql b/lib/LICENSE-postgresql
new file mode 100644
index 0000000..fd416d2
--- /dev/null
+++ b/lib/LICENSE-postgresql
@@ -0,0 +1,26 @@
+Copyright (c) 1997-2011, PostgreSQL Global Development Group
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+3. Neither the name of the PostgreSQL Global Development Group nor the names
+ of its contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/LICENSE-prologcafe b/lib/LICENSE-prologcafe
new file mode 100644
index 0000000..c0964a8
--- /dev/null
+++ b/lib/LICENSE-prologcafe
@@ -0,0 +1,587 @@
+Prolog Cafe (A Prolog to Java Translator System)
+Copyright (C) 1997-2009 by Mutsunori Banbara and Naoyuki Tamura
+
+Prolog Cafe is free software; you can redistribute it and/or modify
+it under the terms of either:
+
+ * the GNU General Public License as published by the Free Software
+ Foundation; either version 2 of the License, or (at your option)
+ any later version, or
+
+ * the Eclipse Public License
+----
+
+----
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+----
+
+----
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and
+ documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from
+and are distributed by that particular Contributor. A Contribution
+'originates' from a Contributor if it was added to the Program
+by such Contributor itself or anyone acting on such Contributor's
+behalf. Contributions do not include additions to the Program which:
+(i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are
+not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor
+which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with
+this Agreement.
+
+"Recipient" means anyone who receives the Program under this
+Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare derivative works of, publicly display,
+ publicly perform, distribute and sublicense the Contribution of such
+ Contributor, if any, and such derivative works, in source code and
+ object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in source code and object code form. This patent license
+ shall apply to the combination of the Contribution and the Program
+ if, at the time the Contribution is added by the Contributor, such
+ addition of the Contribution causes such combination to be covered
+ by the Licensed Patents. The patent license shall not apply to any
+ other combinations which include the Contribution. No hardware per
+ se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe
+ the patent or other intellectual property rights of any other
+ entity. Each Contributor disclaims any liability to Recipient
+ for claims brought by any other entity based on infringement
+ of intellectual property rights or otherwise. As a condition to
+ exercising the rights and licenses granted hereunder, each Recipient
+ hereby assumes sole responsibility to secure any other intellectual
+ property rights needed, if any. For example, if a third party patent
+ license is required to allow Recipient to distribute the Program,
+ it is Recipient's responsibility to acquire that license before
+ distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has
+ sufficient copyright rights in its Contribution, if any, to grant
+ the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code
+ form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties
+ and conditions, express and implied, including warranties or
+ conditions of title and non-infringement, and implied warranties or
+ conditions of merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability
+ for damages, including direct, indirect, special, incidental and
+ consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement
+ are offered by that Contributor alone and not by any other
+ party; and
+
+iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable
+ manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained
+within the Program.
+
+Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial
+use of the Program, the Contributor who includes the Program in a
+commercial product offering should do so in a manner which does not
+create potential liability for other Contributors. Therefore, if a
+Contributor includes the Program in a commercial product offering,
+such Contributor ("Commercial Contributor") hereby agrees to defend
+and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising
+from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by
+the acts or omissions of such Commercial Contributor in connection
+with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims
+or Losses relating to any actual or alleged intellectual property
+infringement. In order to qualify, an Indemnified Contributor must:
+a) promptly notify the Commercial Contributor in writing of such
+claim, and b) allow the Commercial Contributor to control, and
+cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a
+commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes
+performance claims, or offers warranties related to Product X, those
+performance claims and warranties are such Commercial Contributor's
+responsibility alone. Under this section, the Commercial Contributor
+would have to defend claims against the other Contributors related
+to those performance claims and warranties, and if a court requires
+any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
+WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with
+its exercise of rights under this Agreement , including but not
+limited to the risks and costs of program errors, compliance with
+applicable laws, damage to or loss of data, programs or equipment,
+and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY
+RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed
+to the minimum extent necessary to make such provision valid and
+enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging
+that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s),
+then such Recipient's rights granted under Section 2(b) shall
+terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if
+it fails to comply with any of the material terms or conditions
+of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all
+Recipient's rights under this Agreement terminate, Recipient agrees
+to cease use and distribution of the Program as soon as reasonably
+practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall
+continue and survive.
+
+Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions
+(including revisions) of this Agreement from time to time. No
+one other than the Agreement Steward has the right to modify
+this Agreement. The Eclipse Foundation is the initial Agreement
+Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each
+new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it
+was received. In addition, after a new version of the Agreement is
+published, Contributor may elect to distribute the Program (including
+its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or
+licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under
+this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No
+party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each
+party waives its rights to a jury trial in any resulting litigation.
diff --git a/lib/LICENSE-slf4j b/lib/LICENSE-slf4j
new file mode 100644
index 0000000..f5ecafa
--- /dev/null
+++ b/lib/LICENSE-slf4j
@@ -0,0 +1,21 @@
+Copyright (c) 2004-2008 QOS.ch
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/lib/antlr/BUCK b/lib/antlr/BUCK
new file mode 100644
index 0000000..732b459
--- /dev/null
+++ b/lib/antlr/BUCK
@@ -0,0 +1,48 @@
+include_defs('//lib/maven.defs')
+
+VERSION = '3.2'
+
+maven_jar(
+ name = 'java_runtime',
+ id = 'org.antlr:antlr-runtime:' + VERSION,
+ sha1 = '31c746001016c6226bd7356c9f87a6a084ce3715',
+ license = 'antlr',
+)
+
+java_binary(
+ name = 'antlr-tool',
+ main_class = 'org.antlr.Tool',
+ deps = [':tool'],
+ visibility = ['PUBLIC'],
+)
+
+maven_jar(
+ name = 'stringtemplate',
+ id = 'org.antlr:stringtemplate:' + VERSION,
+ sha1 = '6fe2e3bb57daebd1555494818909f9664376dd6c',
+ license = 'antlr',
+ attach_source = False,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'tool',
+ id = 'org.antlr:antlr:' + VERSION,
+ sha1 = '6b0acabea7bb3da058200a77178057e47e25cb69',
+ license = 'antlr',
+ deps = [
+ ':java_runtime',
+ ':stringtemplate',
+ ':antlr27',
+ ],
+ visibility = [],
+)
+
+maven_jar(
+ name = 'antlr27',
+ id = 'antlr:antlr:2.7.7',
+ sha1 = '83cd2cd674a217ade95a4bb83a8a14f351f48bd0',
+ license = 'antlr',
+ attach_source = False,
+ visibility = [],
+)
diff --git a/lib/bouncycastle/BUCK b/lib/bouncycastle/BUCK
new file mode 100644
index 0000000..3d76ea6
--- /dev/null
+++ b/lib/bouncycastle/BUCK
@@ -0,0 +1,20 @@
+include_defs('//lib/maven.defs')
+
+# This version must match the version that also appears in
+# gerrit-pgm/src/main/resources/com/google/gerrit/pgm/libraries.config
+VERSION = '1.44'
+
+maven_jar(
+ name = 'bcprov',
+ id = 'org.bouncycastle:bcprov-jdk16:' + VERSION,
+ sha1 = '6327a5f7a3dc45e0fd735adb5d08c5a74c05c20c',
+ license = 'DO_NOT_DISTRIBUTE', #'bouncycastle'
+)
+
+maven_jar(
+ name = 'bcpg',
+ id = 'org.bouncycastle:bcpg-jdk16:' + VERSION,
+ sha1 = 'ee14f5a29cb3cf9c1edec034ab16e1bbd26e9647',
+ license = 'DO_NOT_DISTRIBUTE', #'bouncycastle'
+ deps = [':bcprov'],
+)
diff --git a/lib/commons/BUCK b/lib/commons/BUCK
new file mode 100644
index 0000000..e5c78ab
--- /dev/null
+++ b/lib/commons/BUCK
@@ -0,0 +1,79 @@
+include_defs('//lib/maven.defs')
+
+maven_jar(
+ name = 'codec',
+ id = 'commons-codec:commons-codec:1.4',
+ sha1 = '4216af16d38465bbab0f3dff8efa14204f7a399a',
+ license = 'Apache2.0',
+ exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
+)
+
+maven_jar(
+ name = 'collections',
+ id = 'commons-collections:commons-collections:3.2.1',
+ sha1 = '761ea405b9b37ced573d2df0d1e3a4e0f9edc668',
+ license = 'Apache2.0',
+ exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
+ attach_source = False,
+ visibility = ['//lib:velocity'],
+)
+
+maven_jar(
+ name = 'dbcp',
+ id = 'commons-dbcp:commons-dbcp:1.4',
+ sha1 = '30be73c965cc990b153a100aaaaafcf239f82d39',
+ license = 'Apache2.0',
+ deps = [':pool'],
+ exclude = [
+ 'META-INF/LICENSE.txt',
+ 'META-INF/NOTICE.txt',
+ 'testpool.jocl'
+ ],
+)
+
+maven_jar(
+ name = 'lang',
+ id = 'commons-lang:commons-lang:2.5',
+ sha1 = 'b0236b252e86419eef20c31a44579d2aee2f0a69',
+ license = 'Apache2.0',
+ exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
+)
+
+maven_jar(
+ name = 'logging',
+ id = 'commons-logging:commons-logging:1.1.1',
+ sha1 = '5043bfebc3db072ed80fbd362e7caf00e885d8ae',
+ license = 'Apache2.0',
+ exclude = [
+ 'META-INF/LICENSE',
+ 'META-INF/NOTICE',
+ ],
+ attach_source = False,
+ visibility = ['//lib/openid:'],
+)
+
+maven_jar(
+ name = 'net',
+ id = 'commons-net:commons-net:2.2',
+ sha1 = '07993c12f63c78378f8c90de4bc2ee62daa7ca3a',
+ license = 'Apache2.0',
+ exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
+)
+
+maven_jar(
+ name = 'pool',
+ id = 'commons-pool:commons-pool:1.5.5',
+ sha1 = '7d8ffbdc47aa0c5a8afe5dc2aaf512f369f1d19b',
+ license = 'Apache2.0',
+ attach_source = False,
+ exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
+)
+
+maven_jar(
+ name = 'oro',
+ id = 'oro:oro:2.0.8',
+ sha1 = '5592374f834645c4ae250f4c9fbb314c9369d698',
+ license = 'Apache1.1',
+ attach_source = False,
+ exclude = ['META-INF/LICENSE'],
+)
diff --git a/lib/guice/BUCK b/lib/guice/BUCK
new file mode 100644
index 0000000..0cfe5f5
--- /dev/null
+++ b/lib/guice/BUCK
@@ -0,0 +1,55 @@
+include_defs('//lib/maven.defs')
+
+VERSION = '3.0'
+EXCLUDE = [
+ 'META-INF/DEPENDENCIES',
+ 'META-INF/LICENSE',
+ 'META-INF/NOTICE',
+]
+
+maven_jar(
+ name = 'guice',
+ id = 'com.google.inject:guice:' + VERSION,
+ sha1 = '9d84f15fe35e2c716a02979fb62f50a29f38aefa',
+ license = 'Apache2.0',
+ deps = [
+ ':javax-inject',
+ ':aopalliance',
+ ],
+ exclude = EXCLUDE,
+)
+
+maven_jar(
+ name = 'guice-assistedinject',
+ id = 'com.google.inject.extensions:guice-assistedinject:' + VERSION,
+ sha1 = '544449ddb19f088dcde44f055d30a08835a954a7',
+ license = 'Apache2.0',
+ deps = [':guice'],
+ exclude = EXCLUDE,
+)
+
+maven_jar(
+ name = 'guice-servlet',
+ id = 'com.google.inject.extensions:guice-servlet:' + VERSION,
+ sha1 = '610cde0e8da5a8b7d8efb8f0b8987466ffebaaf9',
+ license = 'Apache2.0',
+ deps = [':guice'],
+ exclude = EXCLUDE,
+)
+
+
+maven_jar(
+ name = 'aopalliance',
+ id = 'aopalliance:aopalliance:1.0',
+ sha1 = '0235ba8b489512805ac13a8f9ea77a1ca5ebe3e8',
+ license = 'PublicDomain',
+ visibility = ['//lib/guice:guice'],
+)
+
+maven_jar(
+ name = 'javax-inject',
+ id = 'javax.inject:javax.inject:1',
+ sha1 = '6975da39a7040257bd51d21a231b76c915872d38',
+ license = 'Apache2.0',
+ visibility = ['//lib/guice:guice'],
+)
diff --git a/lib/gwt/BUCK b/lib/gwt/BUCK
new file mode 100644
index 0000000..2204422
--- /dev/null
+++ b/lib/gwt/BUCK
@@ -0,0 +1,38 @@
+include_defs('//lib/maven.defs')
+
+VERSION = '2.5.0'
+
+maven_jar(
+ name = 'user',
+ id = 'com.google.gwt:gwt-user:' + VERSION,
+ sha1 = 'bbec0cc2ba81a2601aac55e3783ad0d0ff7d45ac',
+ license = 'Apache2.0',
+ attach_source = False,
+)
+
+maven_jar(
+ name = 'dev',
+ id = 'com.google.gwt:gwt-dev:' + VERSION,
+ sha1 = '3c227524e0978036e76e73e125ac8535a9e8fd7c',
+ license = 'Apache2.0',
+ deps = [
+ ':javax-validation',
+ ':javax-validation_src',
+ ],
+ attach_source = False,
+)
+
+maven_jar(
+ name = 'javax-validation',
+ id = 'javax.validation:validation-api:1.0.0.GA',
+ bin_sha1 = 'b6bd7f9d78f6fdaa3c37dae18a4bd298915f328e',
+ src_sha1 = '7a561191db2203550fbfa40d534d4997624cd369',
+ license = 'Apache2.0',
+ visibility = [],
+)
+
+python_binary(
+ name = 'compiler',
+ main = 'compiler.py',
+ visibility = ['PUBLIC'],
+)
diff --git a/lib/gwt/compiler.py b/lib/gwt/compiler.py
new file mode 100755
index 0000000..4fa3b11
--- /dev/null
+++ b/lib/gwt/compiler.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from multiprocessing import cpu_count
+from os import environ, fchmod, makedirs, mkdir, path
+from subprocess import Popen, PIPE
+from sys import argv, stderr
+
+cp, opt, end, TMP = [], [], False, environ['TMP']
+module, outzip = argv[1], argv[2]
+
+for a in argv[3:]:
+ if end:
+ if a.endswith('.jar'):
+ cp.append(a)
+ elif a == '--':
+ end = True
+ else:
+ opt.append(a)
+
+if not outzip.endswith('.zip'):
+ print >>stderr, "%s must end with .zip" % outzip
+ exit(1)
+
+rebuild = outzip[:-4] + '.rebuild'
+for d in ['deploy', 'unit_cache', 'work']:
+ mkdir(path.join(TMP, d))
+if not path.exists(path.dirname(outzip)):
+ makedirs(path.dirname(outzip))
+
+cmd = [
+ 'java', '-Xmx512m',
+ '-Djava.io.tmpdir=' + TMP,
+ '-Dgwt.normalizeTimestamps=true',
+ '-Dgwt.persistentunitcachedir=' + path.join(TMP, 'unit_cache'),
+ '-classpath', ':'.join(cp),
+ 'com.google.gwt.dev.Compiler',
+ '-deploy', path.join(TMP, 'deploy'),
+ '-workDir', path.join(TMP, 'work'),
+ '-war', outzip,
+ '-localWorkers', str(cpu_count()),
+] + opt + [module]
+
+gwt = Popen(cmd, stdout = PIPE, stderr = PIPE)
+out, err = gwt.communicate()
+if gwt.returncode != 0:
+ print >>stderr, out + err
+ exit(gwt.returncode)
+
+with open(rebuild, 'w') as fd:
+ def shquote(s):
+ return s.replace("'", "'\\''")
+ print >>fd, '#!/bin/sh'
+ print >>fd, "PATH='%s'" % shquote(environ['PATH'])
+ print >>fd, 'buck build "$1" || exit'
+ fchmod(fd.fileno(), 0755)
diff --git a/lib/jetty/BUCK b/lib/jetty/BUCK
new file mode 100644
index 0000000..b7bdbac
--- /dev/null
+++ b/lib/jetty/BUCK
@@ -0,0 +1,77 @@
+include_defs('//lib/maven.defs')
+
+VERSION = '8.1.7.v20120910'
+EXCLUDE = ['about.html']
+
+maven_jar(
+ name = 'servlet',
+ id = 'org.eclipse.jetty:jetty-servlet:' + VERSION,
+ sha1 = '93da01e3ea26e70449e9a1a0affa5c31436be5a0',
+ license = 'Apache2.0',
+ deps = [
+ ':security',
+ '//lib:servlet-api-3_0',
+ ],
+ exclude = EXCLUDE,
+)
+
+maven_jar(
+ name = 'security',
+ id = 'org.eclipse.jetty:jetty-security:' + VERSION,
+ sha1 = '8d78beb7a07f4cccee05a3f16a264f1025946258',
+ license = 'Apache2.0',
+ deps = [':server'],
+ exclude = EXCLUDE,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'server',
+ id = 'org.eclipse.jetty:jetty-server:' + VERSION,
+ sha1 = '6c81f733f28713919e99c2f8952e6ca5178033cd',
+ license = 'Apache2.0',
+ deps = [
+ ':continuation',
+ ':http',
+ ],
+ exclude = EXCLUDE,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'continuation',
+ id = 'org.eclipse.jetty:jetty-continuation:' + VERSION,
+ sha1 = 'f60cfe6267038000b459508529c88737601081e4',
+ license = 'Apache2.0',
+ exclude = EXCLUDE,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'http',
+ id = 'org.eclipse.jetty:jetty-http:' + VERSION,
+ sha1 = '10126433876cd74534695f7f99c4362596555493',
+ license = 'Apache2.0',
+ deps = [':io'],
+ exclude = EXCLUDE,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'io',
+ id = 'org.eclipse.jetty:jetty-io:' + VERSION,
+ sha1 = 'a81f746ae1b10c37e1bb0a01d1374c202c0bd549',
+ license = 'Apache2.0',
+ deps = [':util'],
+ exclude = EXCLUDE,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'util',
+ id = 'org.eclipse.jetty:jetty-util:' + VERSION,
+ sha1 = '7eb2004ab2c22fd3b00095bd9ba0f32a9e88f6a5',
+ license = 'Apache2.0',
+ exclude = EXCLUDE,
+ visibility = [],
+)
diff --git a/lib/jgit/BUCK b/lib/jgit/BUCK
new file mode 100644
index 0000000..eb44417
--- /dev/null
+++ b/lib/jgit/BUCK
@@ -0,0 +1,65 @@
+include_defs('//lib/maven.defs')
+
+REPO = GERRIT
+VERS = '2.3.1.201302201838-r.211-g36144e1'
+
+maven_jar(
+ name = 'jgit',
+ id = 'org.eclipse.jgit:org.eclipse.jgit:' + VERS,
+ bin_sha1 = '4328d64fb5f5a5a07795965801850a10901b0979',
+ src_sha1 = 'e55f1e231138df01edee9014df94ca3c6cbf0d8e',
+ license = 'jgit',
+ repository = REPO,
+ deps = [':ewah'],
+ exclude = [
+ 'META-INF/eclipse.inf',
+ 'about.html',
+ 'plugin.properties',
+ ],
+)
+
+maven_jar(
+ name = 'jgit-servlet',
+ id = 'org.eclipse.jgit:org.eclipse.jgit.http.server:' + VERS,
+ sha1 = '269b4096780247a26368985b05e4b66f16785946',
+ license = 'jgit',
+ repository = REPO,
+ deps = [':jgit'],
+ exclude = [
+ 'about.html',
+ 'plugin.properties',
+ ],
+)
+
+maven_jar(
+ name = 'junit',
+ id = 'org.eclipse.jgit:org.eclipse.jgit.junit:' + VERS,
+ sha1 = '0fa01088b0f7a847dabafec59318221828832b36',
+ license = 'DO_NOT_DISTRIBUTE',
+ repository = REPO,
+ deps = [':jgit'],
+)
+
+maven_jar(
+ name = 'ewah',
+ id = 'com.googlecode.javaewah:JavaEWAH:0.5.6',
+ sha1 = '1207c0fc8552d4f5f574b50f29321d923521128e',
+ license = 'Apache2.0',
+)
+
+prebuilt_jar(
+ name = 'Edit',
+ binary_jar = genfile('edit-src.jar'),
+ deps = [':jgit_edit_src'],
+ visibility = ['PUBLIC'],
+)
+
+genrule(
+ name = 'jgit_edit_src',
+ cmd = 'unzip -qd $TMP $SRCS org/eclipse/jgit/diff/Edit.java;' +
+ 'cd $TMP;' +
+ 'zip -Dq $OUT org/eclipse/jgit/diff/Edit.java',
+ srcs = [genfile('jgit/org.eclipse.jgit-%s-src.jar' % VERS)],
+ out = 'edit-src.jar',
+ deps = [':jgit_src']
+)
diff --git a/lib/log/BUCK b/lib/log/BUCK
new file mode 100644
index 0000000..5b541c4
--- /dev/null
+++ b/lib/log/BUCK
@@ -0,0 +1,24 @@
+include_defs('//lib/maven.defs')
+
+maven_jar(
+ name = 'api',
+ id = 'org.slf4j:slf4j-api:1.6.1',
+ sha1 = '6f3b8a24bf970f17289b234284c94f43eb42f0e4',
+ license = 'slf4j',
+)
+
+maven_jar(
+ name = 'impl_log4j',
+ id = 'org.slf4j:slf4j-log4j12:1.6.1',
+ sha1 = 'bd245d6746cdd4e6203e976e21d597a46f115802',
+ license = 'slf4j',
+ deps = [':log4j'],
+)
+
+maven_jar(
+ name = 'log4j',
+ id = 'log4j:log4j:1.2.16',
+ sha1 = '7999a63bfccbc7c247a9aea10d83d4272bd492c6',
+ license = 'Apache2.0',
+ exclude = ['META-INF/LICENSE', 'META-INF/NOTICE'],
+)
diff --git a/lib/maven.defs b/lib/maven.defs
new file mode 100644
index 0000000..a179deb8
--- /dev/null
+++ b/lib/maven.defs
@@ -0,0 +1,106 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+GERRIT = 'http://gerrit-maven.commondatastorage.googleapis.com'
+MAVEN_CENTRAL = 'http://repo1.maven.org/maven2'
+
+def define_license(name):
+ n = 'LICENSE-' + name
+ genrule(
+ name = n,
+ cmd = 'ln -s $SRCS $OUT',
+ srcs = [n],
+ out = n,
+ visibility = ['PUBLIC'],
+ )
+
+def maven_jar(
+ name,
+ id,
+ license,
+ exclude = [],
+ exclude_java_sources = False,
+ deps = [],
+ sha1 = '', bin_sha1 = '', src_sha1 = '',
+ repository = MAVEN_CENTRAL,
+ attach_source = True,
+ visibility = ['PUBLIC']):
+ from os import path
+
+ parts = id.split(':')
+ if len(parts) != 3:
+ raise NameError('expected id="groupId:artifactId:version"')
+ group, artifact, version = parts
+
+ jar = path.join(name, artifact.lower() + '-' + version)
+ url = '/'.join([
+ repository,
+ group.replace('.', '/'), artifact, version,
+ artifact + '-' + version])
+
+ binjar = jar + '.jar'
+ binurl = url + '.jar'
+
+ srcjar = jar + '-src.jar'
+ srcurl = url + '-sources.jar'
+
+ cmd = ['${//tools:download_jar}', '-o', '$OUT', '-u', binurl]
+ if sha1:
+ cmd.extend(['-v', sha1])
+ elif bin_sha1:
+ cmd.extend(['-v', bin_sha1])
+ for x in exclude:
+ cmd.extend(['-x', x])
+ if exclude_java_sources:
+ cmd.append('--exclude_java_sources')
+
+ genrule(
+ name = name + '__download_bin',
+ cmd = ' '.join(cmd),
+ srcs = [],
+ deps = ['//tools:download_jar'],
+ out = binjar,
+ )
+ download = [':' + name + '__download_bin']
+ license = ['//lib:LICENSE-' + license]
+
+ if src_sha1 or attach_source:
+ cmd = ['${//tools:download_jar}', '-o', '$OUT', '-u', srcurl]
+ if src_sha1:
+ cmd.extend(['-v', src_sha1])
+ genrule(
+ name = name + '__download_src',
+ cmd = ' '.join(cmd),
+ srcs = [],
+ deps = ['//tools:download_jar'],
+ out = srcjar,
+ )
+ if src_sha1:
+ prebuilt_jar(
+ name = name + '_src',
+ binary_jar = genfile(srcjar),
+ deps = [':' + name + '__download_src'] + license,
+ visibility = visibility,
+ )
+ download.append(':' + name + '__download_src')
+ else:
+ srcjar = None
+
+ prebuilt_jar(
+ name = name,
+ deps = deps + download + license,
+ binary_jar = genfile(binjar),
+ source_jar = genfile(srcjar) if srcjar else None,
+ visibility = visibility,
+ )
diff --git a/lib/mina/BUCK b/lib/mina/BUCK
new file mode 100644
index 0000000..3e9558a
--- /dev/null
+++ b/lib/mina/BUCK
@@ -0,0 +1,24 @@
+include_defs('//lib/maven.defs')
+
+EXCLUDE = [
+ 'META-INF/DEPENDENCIES',
+ 'META-INF/LICENSE',
+ 'META-INF/NOTICE',
+]
+
+maven_jar(
+ name = 'core',
+ id = 'org.apache.mina:mina-core:2.0.5',
+ sha1 = '0e134a3761833a3c28c79331e806f64f985a9eec',
+ license = 'Apache2.0',
+ exclude = EXCLUDE,
+)
+
+maven_jar(
+ name = 'sshd',
+ id = 'org.apache.sshd:sshd-core:0.6.0',
+ sha1 = '2b9a119dd77a1decec78b0c511ba400c8655e96e',
+ license = 'Apache2.0',
+ deps = [':core'],
+ exclude = EXCLUDE,
+)
diff --git a/lib/openid/BUCK b/lib/openid/BUCK
new file mode 100644
index 0000000..19ce077
--- /dev/null
+++ b/lib/openid/BUCK
@@ -0,0 +1,73 @@
+include_defs('//lib/maven.defs')
+
+java_library(
+ name = 'consumer',
+ deps = [
+ ':http-client',
+ ':nekohtml',
+ ':nodeps',
+ ],
+ visibility = ['PUBLIC'],
+)
+
+maven_jar(
+ name = 'nodeps',
+ id = 'org.openid4java:openid4java-nodeps:0.9.6',
+ sha1 = '52ca394f5f6d38b78e35a5a6a0a341dc5b3aaf34',
+ license = 'Apache2.0',
+ deps = [
+ '//lib/commons:logging',
+ '//lib/guice:guice',
+ ],
+ visibility = [],
+)
+
+maven_jar(
+ name = 'nekohtml',
+ id = 'net.sourceforge.nekohtml:nekohtml:1.9.10',
+ sha1 = '14052461031a7054aa094f5573792feb6686d3de',
+ license = 'Apache2.0',
+ deps = [':xerces'],
+ attach_source = False,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'xerces',
+ id = 'xerces:xercesImpl:2.8.1',
+ sha1 = '25101e37ec0c907db6f0612cbf106ee519c1aef1',
+ license = 'Apache2.0',
+ attach_source = False,
+ visibility = [],
+)
+
+maven_jar(
+ name = 'http-client',
+ id = 'org.apache.httpcomponents:httpclient:4.0',
+ sha1 = 'a76d7fd8033d48b4c67b4ccf159abb080c1059b6',
+ license = 'Apache2.0',
+ deps = [
+ ':http-core',
+ '//lib/commons:codec',
+ '//lib/commons:logging',
+ ],
+ exclude = [
+ 'META-INF/DEPENDENCIES',
+ 'META-INF/LICENSE',
+ 'META-INF/NOTICE',
+ ],
+ visibility = ['//gerrit-acceptance-tests:'],
+)
+
+maven_jar(
+ name = 'http-core',
+ id = 'org.apache.httpcomponents:httpcore:4.0.1',
+ sha1 = 'e813b8722c387b22e1adccf7914729db09bcb4a9',
+ license = 'Apache2.0',
+ exclude = [
+ 'META-INF/DEPENDENCIES',
+ 'META-INF/LICENSE',
+ 'META-INF/NOTICE',
+ ],
+ visibility = [],
+)
diff --git a/lib/prolog/BUCK b/lib/prolog/BUCK
new file mode 100644
index 0000000..d545c2f
--- /dev/null
+++ b/lib/prolog/BUCK
@@ -0,0 +1,23 @@
+include_defs('//lib/maven.defs')
+
+maven_jar(
+ name = 'prolog-cafe',
+ id = 'com.googlecode.prolog-cafe:PrologCafe:1.3',
+ sha1 = '5e0fbf18e8c98c4113f9acc978306884a1152870',
+ license = 'prologcafe',
+ repository = GERRIT,
+)
+
+java_binary(
+ name = 'compiler',
+ main_class = 'BuckPrologCompiler',
+ deps = [':compiler_lib'],
+ visibility = ['PUBLIC'],
+)
+
+java_library(
+ name = 'compiler_lib',
+ srcs = ['java/BuckPrologCompiler.java'],
+ deps = [':prolog-cafe'],
+ visibility = ['//:eclipse_classpath'],
+)
diff --git a/lib/prolog/DEFS b/lib/prolog/DEFS
new file mode 100644
index 0000000..38d7fe5
--- /dev/null
+++ b/lib/prolog/DEFS
@@ -0,0 +1,38 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+def prolog_cafe_library(
+ name,
+ srcs,
+ deps = [],
+ visibility = []):
+ genrule(
+ name = name + '_prolog2java',
+ cmd = '${//lib/prolog:compiler} $SRCS $DEPS $OUT',
+ srcs = srcs,
+ deps = [
+ '//lib/prolog:compiler',
+ '//lib/prolog:prolog-cafe',
+ ] + deps,
+ out = name + '.jar',
+ )
+ prebuilt_jar(
+ name = name,
+ binary_jar = genfile(name + '.jar'),
+ deps = [
+ ':' + name + '_prolog2java',
+ '//lib/prolog:prolog-cafe',
+ ] + deps,
+ visibility = visibility,
+ )
diff --git a/lib/prolog/java/BuckPrologCompiler.java b/lib/prolog/java/BuckPrologCompiler.java
new file mode 100644
index 0000000..d23e15d
--- /dev/null
+++ b/lib/prolog/java/BuckPrologCompiler.java
@@ -0,0 +1,166 @@
+// Copyright (C) 2013 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import javax.tools.Diagnostic;
+import javax.tools.DiagnosticCollector;
+import javax.tools.JavaCompiler;
+import javax.tools.JavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.ToolProvider;
+
+import com.googlecode.prolog_cafe.compiler.CompileException;
+import com.googlecode.prolog_cafe.compiler.Compiler;
+
+public class BuckPrologCompiler {
+ public static void main(String[] argv) throws IOException, CompileException {
+ List<File> srcs = new ArrayList<File>();
+ List<File> jars = new ArrayList<File>();
+ for (int i = 0; i < argv.length - 1; i++) {
+ String s = argv[i];
+ if (s.endsWith(".pl")) {
+ srcs.add(new File(s));
+ } else if (s.endsWith(".jar")) {
+ jars.add(new File(s));
+ }
+ }
+
+ File out = new File(argv[argv.length - 1]);
+ File java = tmpdir("java");
+ File classes = tmpdir("classes");
+ for (File src : srcs) {
+ new Compiler().prologToJavaSource(src.getPath(), java.getPath());
+ }
+ javac(jars, java, classes);
+ jar(out, classes);
+ }
+
+ private static File tmpdir(String name) throws IOException {
+ File d = File.createTempFile(name + "_", "");
+ if (!d.delete() || !d.mkdir()) {
+ throw new IOException("Cannot mkdir " + d);
+ }
+ return d;
+ }
+
+ private static void javac(List<File> cp, File java, File classes)
+ throws IOException, CompileException {
+ JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
+ if (javac == null) {
+ throw new CompileException("JDK required (running inside of JRE)");
+ }
+
+ DiagnosticCollector<JavaFileObject> d =
+ new DiagnosticCollector<JavaFileObject>();
+ StandardJavaFileManager fm = javac.getStandardFileManager(d, null, null);
+ try {
+ StringBuilder classpath = new StringBuilder();
+ for (File jar : cp) {
+ if (classpath.length() > 0) {
+ classpath.append(File.pathSeparatorChar);
+ }
+ classpath.append(jar.getPath());
+ }
+ ArrayList<String> args = new ArrayList<String>();
+ args.add("-g:none");
+ args.add("-nowarn");
+ if (classpath.length() > 0) {
+ args.add("-classpath");
+ args.add(classpath.toString());
+ }
+ args.add("-d");
+ args.add(classes.getPath());
+ if (!javac.getTask(null, fm, d, args, null,
+ fm.getJavaFileObjectsFromFiles(find(java, ".java"))).call()) {
+ StringBuilder msg = new StringBuilder();
+ for (Diagnostic<? extends JavaFileObject> err : d.getDiagnostics()) {
+ msg.append('\n').append(err.getKind()).append(": ");
+ if (err.getSource() != null) {
+ msg.append(err.getSource().getName());
+ }
+ msg.append(':').append(err.getLineNumber()).append(": ");
+ msg.append(err.getMessage(Locale.getDefault()));
+ }
+ throw new CompileException(msg.toString());
+ }
+ } finally {
+ fm.close();
+ }
+ }
+
+ private static void jar(File jar, File classes) throws IOException {
+ File tmp = File.createTempFile("prolog", ".jar", jar.getParentFile());
+ try {
+ JarOutputStream out = new JarOutputStream(new FileOutputStream(tmp));
+ try {
+ out.setLevel(9);
+ add(out, classes, "");
+ } finally {
+ out.close();
+ }
+ if (!tmp.renameTo(jar)) {
+ throw new IOException("Cannot create " + jar);
+ }
+ } finally {
+ tmp.delete();
+ }
+ }
+
+ private static void add(JarOutputStream out, File classes, String prefix)
+ throws IOException {
+ for (String name : classes.list()) {
+ File f = new File(classes, name);
+ if (f.isDirectory()) {
+ add(out, f, prefix + name + "/");
+ continue;
+ }
+
+ JarEntry e = new JarEntry(prefix + name);
+ FileInputStream in = new FileInputStream(f);
+ try {
+ e.setTime(f.lastModified());
+ out.putNextEntry(e);
+ byte[] buf = new byte[16 << 10];
+ int n;
+ while (0 < (n = in.read(buf))) {
+ out.write(buf, 0, n);
+ }
+ } finally {
+ in.close();
+ out.closeEntry();
+ }
+ }
+ }
+
+ private static List<File> find(File dir, String extension) {
+ ArrayList<File> list = new ArrayList<File>();
+ for (File f : dir.listFiles()) {
+ if (f.getName().endsWith(extension)) {
+ list.add(f);
+ } else if (f.isDirectory()) {
+ list.addAll(find(f, extension));
+ }
+ }
+ return list;
+ }
+}
diff --git a/plugins/BUCK b/plugins/BUCK
new file mode 100644
index 0000000..707b38e
--- /dev/null
+++ b/plugins/BUCK
@@ -0,0 +1,36 @@
+BASE = get_base_path()
+CORE = [
+ 'commit-message-length-validator',
+ 'replication',
+ 'reviewnotes',
+]
+
+# buck audit parses and resolves all deps even if not reachable
+# from the root(s) passed to audit. Filter dependencies to only
+# the ones that currently exist to allow buck to parse cleanly.
+# TODO(sop): buck should more lazily resolve deps
+def filter(names):
+ from os import path
+ h, n = [], []
+ for p in names:
+ if path.exists(path.join(BASE, p, 'BUCK')):
+ h.append(p)
+ else:
+ n.append(p)
+ return h, n
+HAVE, NEED = filter(CORE)
+
+genrule(
+ name = 'core',
+ cmd = '' +
+ ';'.join(['echo >&2 plugins/'+n+' is required.' for n in NEED]) +
+ (';echo >&2;exit 1;' if NEED else '') +
+ 'mkdir -p $TMP/WEB-INF/plugins &&' +
+ 'for s in $SRCS;do ln -s $s $TMP/WEB-INF/plugins;done;' +
+ 'cd $TMP &&' +
+ 'zip -qr $OUT .',
+ srcs = [genfile('%s/%s.jar' % (n, n)) for n in CORE],
+ deps = ['//%s/%s:%s' % (BASE, n, n) for n in HAVE],
+ out = 'core.zip',
+ visibility = ['//:release'],
+)
diff --git a/tools/BUCK b/tools/BUCK
new file mode 100644
index 0000000..1ea86be
--- /dev/null
+++ b/tools/BUCK
@@ -0,0 +1,23 @@
+python_binary(
+ name = 'download_jar',
+ main = 'download_jar.py',
+ visibility = ['PUBLIC'],
+)
+
+python_binary(
+ name = 'pack_war',
+ main = 'pack_war.py',
+ visibility = ['PUBLIC'],
+)
+
+python_binary(
+ name = 'eclipse_classpath',
+ main = 'eclipse_classpath.py',
+ visibility = ['PUBLIC'],
+)
+
+python_binary(
+ name = 'eclipse_project',
+ main = 'eclipse_project.py',
+ visibility = ['PUBLIC'],
+)
diff --git a/tools/build.defs b/tools/build.defs
new file mode 100644
index 0000000..42cb630
--- /dev/null
+++ b/tools/build.defs
@@ -0,0 +1,80 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+DOCS = ['//Documentation:html.zip']
+LIBS = [
+ '//gerrit-common:version',
+ '//gerrit-war:init',
+ '//gerrit-war:log4j-config',
+ '//lib:postgresql',
+ '//lib/log:impl_log4j',
+]
+PGMLIBS = ['//gerrit-pgm:pgm']
+
+def scan_plugins():
+ import os
+ deps = []
+ for n in os.listdir('plugins'):
+ if os.path.exists(os.path.join('plugins', n, 'BUCK')):
+ deps.append('//plugins/%s:%s__plugin__compile' % (n, n))
+ return deps
+
+def war(
+ name,
+ libs = [],
+ pgmlibs = [],
+ context = [],
+ visibility = []
+ ):
+ cmd = ['${//tools:pack_war}', '-o', '$OUT']
+ for l in libs:
+ cmd.extend(['--lib', l])
+ for l in pgmlibs:
+ cmd.extend(['--pgmlib', l])
+
+ src = []
+ dep = []
+ if context:
+ root = get_base_path()
+ if root:
+ root = '/'.join(['..' for _ in root.split('/')]) + '/'
+ for r in context:
+ dep.append(r[:r.rindex('.')])
+ if r.startswith('//'):
+ r = root + r[2:]
+ r = r.replace(':', '/')
+ src.append(genfile(r))
+ cmd.append('$SRCS')
+
+ genrule(
+ name = name,
+ cmd = ' '.join(cmd),
+ srcs = src,
+ deps = libs + pgmlibs + dep + ['//tools:pack_war'],
+ out = name + '.war',
+ visibility = visibility,
+ )
+
+def gerrit_war(name, ui = 'ui_optdbg', context = []):
+ war(
+ name = name,
+ libs = LIBS,
+ pgmlibs = PGMLIBS,
+ context = [
+ '//gerrit-main:main_bin.jar',
+ '//gerrit-war:webapp_assets.zip',
+ '//gerrit-gwtexpui:clippy_swf.zip',
+ '//gerrit-gwtui:' + ui + '.zip',
+ ] + context,
+ )
diff --git a/tools/daemon_ui_chrome.launch b/tools/daemon_ui_chrome.launch
new file mode 100644
index 0000000..efe2623
--- /dev/null
+++ b/tools/daemon_ui_chrome.launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/gerrit/gerrit-main/src/main/java/Main.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_chrome"/>
+</launchConfiguration>
diff --git a/tools/daemon_ui_dbg.launch b/tools/daemon_ui_dbg.launch
new file mode 100644
index 0000000..a345f8a
--- /dev/null
+++ b/tools/daemon_ui_dbg.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/gerrit/gerrit-main/src/main/java/Main.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_dbg"/>
+</launchConfiguration>
diff --git a/tools/daemon_ui_firefox.launch b/tools/daemon_ui_firefox.launch
new file mode 100644
index 0000000..383b051
--- /dev/null
+++ b/tools/daemon_ui_firefox.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/gerrit/gerrit-main/src/main/java/Main.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_firefox"/>
+</launchConfiguration>
diff --git a/tools/daemon_ui_ie9.launch b/tools/daemon_ui_ie9.launch
new file mode 100644
index 0000000..18863e7
--- /dev/null
+++ b/tools/daemon_ui_ie9.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/gerrit/gerrit-main/src/main/java/Main.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_ie9"/>
+</launchConfiguration>
diff --git a/tools/daemon_ui_safari.launch b/tools/daemon_ui_safari.launch
new file mode 100644
index 0000000..55259a9
--- /dev/null
+++ b/tools/daemon_ui_safari.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/gerrit/gerrit-main/src/main/java/Main.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_safari"/>
+</launchConfiguration>
diff --git a/tools/download_jar.py b/tools/download_jar.py
new file mode 100755
index 0000000..448a0dd
--- /dev/null
+++ b/tools/download_jar.py
@@ -0,0 +1,105 @@
+#!/usr/bin/python
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from hashlib import sha1
+from optparse import OptionParser
+from os import link, makedirs, path
+import shutil
+from subprocess import check_call
+from sys import stderr
+from zipfile import ZipFile, BadZipfile, LargeZipFile
+
+def hashfile(p):
+ d = sha1()
+ with open(p, 'rb') as f:
+ while True:
+ b = f.read(8192)
+ if not b:
+ break
+ d.update(b)
+ return d.hexdigest()
+
+def safe_mkdirs(d):
+ if path.isdir(d):
+ return
+ try:
+ makedirs(d)
+ except OSError as err:
+ if not path.isdir(d):
+ raise err
+
+opts = OptionParser()
+opts.add_option('-o', help='local output file')
+opts.add_option('-u', help='URL to download')
+opts.add_option('-v', help='expected content SHA-1')
+opts.add_option('-x', action='append', help='file to delete from ZIP')
+opts.add_option('--exclude_java_sources', action='store_true')
+args, _ = opts.parse_args()
+
+root_dir = args.o
+while root_dir:
+ root_dir, n = path.split(root_dir)
+ if n == 'buck-out':
+ break
+
+cache_ent = path.join(
+ root_dir,
+ 'buck-cache',
+ '%s-%s' % (path.basename(args.o), sha1(args.u).hexdigest()))
+
+if not path.exists(cache_ent):
+ try:
+ safe_mkdirs(path.dirname(cache_ent))
+ check_call(['curl', '-sfo', cache_ent, args.u])
+ except OSError as err:
+ print >>stderr, "error using curl: %s" % str(err)
+ exit(1)
+
+if args.v:
+ have = hashfile(cache_ent)
+ if args.v != have:
+ o = cache_ent[len(root_dir) + 1:]
+ print >>stderr, (
+ '%s:\n' +
+ 'expected %s\n' +
+ 'received %s\n' +
+ ' %s\n') % (args.u, args.v, have, o)
+ exit(1)
+
+exclude = []
+if args.x:
+ exclude += args.x
+if args.exclude_java_sources:
+ try:
+ zf = ZipFile(cache_ent, 'r')
+ try:
+ for n in zf.namelist():
+ if n.endswith('.java'):
+ exclude.append(n)
+ finally:
+ zf.close()
+ except (BadZipfile, LargeZipFile) as err:
+ print >>stderr, "error opening %s: %s" % (cache_ent, str(err))
+ exit(1)
+
+safe_mkdirs(path.dirname(args.o))
+if exclude:
+ shutil.copyfile(cache_ent, args.o)
+ check_call(['zip', '-d', args.o] + exclude)
+else:
+ try:
+ link(cache_ent, args.o)
+ except OSError as err:
+ symlink(cache_ent, args.o)
diff --git a/tools/eclipse_classpath.py b/tools/eclipse_classpath.py
new file mode 100755
index 0000000..01652bd
--- /dev/null
+++ b/tools/eclipse_classpath.py
@@ -0,0 +1,118 @@
+#!/usr/bin/python
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# TODO(sop): Remove hack after Buck supports Eclipse
+
+from os import path, link
+import re
+from subprocess import Popen, PIPE
+from sys import argv
+from xml.dom import minidom
+
+OUT = argv[1] if len(argv) >= 2 else None
+ROOT = path.dirname(path.dirname(path.abspath(__file__)))
+MAIN = ['//:eclipse_classpath']
+GWT = ['//gerrit-gwtui:ui_module']
+JRE = '/'.join([
+ 'org.eclipse.jdt.launching.JRE_CONTAINER',
+ 'org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType',
+ 'JavaSE-1.6',
+])
+
+def query_classpath(targets):
+ deps = []
+ p = Popen(['buck', 'audit', 'classpath'] + targets, stdout = PIPE)
+ for line in p.stdout:
+ deps.append(line.strip())
+ s = p.wait()
+ if s != 0:
+ exit(s)
+ return deps
+
+def make_classpath():
+ impl = minidom.getDOMImplementation()
+ return impl.createDocument(None, 'classpath', None)
+
+doc = make_classpath()
+src = set()
+lib = set()
+gwt_src = set()
+gwt_lib = set()
+
+def classpathentry(kind, path, src = None):
+ e = doc.createElement('classpathentry')
+ e.setAttribute('kind', kind)
+ e.setAttribute('path', path)
+ if src:
+ e.setAttribute('sourcepath', src)
+ doc.documentElement.appendChild(e)
+
+java_library = re.compile(r'[^/]+/gen/(.*)/lib__[^/]+__output/[^/]+[.]jar$')
+for p in query_classpath(MAIN):
+ if p.endswith('-src.jar'):
+ # gwt_module() depends on -src.jar for Java to JavaScript compiles.
+ gwt_lib.add(p)
+ continue
+
+ if p.startswith('buck-out/gen/lib/gwt/'):
+ # gwt_module() depends on huge shaded GWT JARs that import
+ # incorrect versions of classes for Gerrit. Collect into
+ # a private grouping for later use.
+ gwt_lib.add(p)
+ continue
+
+ m = java_library.match(p)
+ if m:
+ src.add(m.group(1))
+ else:
+ lib.add(p)
+
+for p in query_classpath(GWT):
+ m = java_library.match(p)
+ if m:
+ gwt_src.add(m.group(1))
+
+for s in sorted(src):
+ p = path.join(s, 'java')
+ if path.exists(p):
+ classpathentry('src', p)
+ continue
+
+ for env in ['main', 'test']:
+ for type in ['java', 'resources']:
+ p = path.join(s, 'src', env, type)
+ if path.exists(p):
+ classpathentry('src', p)
+
+for libs in [lib, gwt_lib]:
+ for j in sorted(libs):
+ s = None
+ if j.endswith('.jar'):
+ s = j[:-4] + '-src.jar'
+ if not path.exists(s):
+ s = None
+ classpathentry('lib', j, s)
+
+for s in sorted(gwt_src):
+ classpathentry('lib', path.join(ROOT, s, 'src', 'main', 'java'))
+
+classpathentry('con', JRE)
+classpathentry('output', 'buck-out/classes')
+
+p = path.join(ROOT, '.classpath')
+with open(p, 'w') as fd:
+ doc.writexml(fd, addindent = ' ', newl = '\n', encoding='UTF-8')
+if OUT:
+ link(p, OUT)
diff --git a/tools/eclipse_project.py b/tools/eclipse_project.py
new file mode 100755
index 0000000..5ec47be
--- /dev/null
+++ b/tools/eclipse_project.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# TODO(sop): Remove hack after Buck supports Eclipse
+
+from os import path, symlink
+from sys import argv
+
+OUT = argv[1]
+ROOT = path.dirname(path.dirname(path.abspath(__file__)))
+
+p = path.join(ROOT, '.project')
+with open(p, 'w') as fd:
+ print >>fd, """\
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>gerrit</name>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>\
+"""
+symlink(p, OUT)
diff --git a/tools/gwt_debug.launch b/tools/gwt_debug.launch
new file mode 100644
index 0000000..e2d77d7
--- /dev/null
+++ b/tools/gwt_debug.launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/gerrit/buck-out/gen/lib/gwt/dev/gwt-dev-2.5.0.jar"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-startupUrl / -war ${resource_loc:/gerrit}/buck-out/gen/gerrit-gwtui/ui_dbg__tmp/war -server com.google.gerrit.gwtdebug.GerritDebugLauncher com.google.gerrit.GerritGwtUI"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx256M -Dgwt.persistentunitcachedir=${resource_loc:/gerrit}/buck-out/gen/gerrit-gwtui/ui_dbg__tmp/unit_cache -Dgerrit.source_root=${resource_loc:/gerrit} -Dgerrit.site_path=${resource_loc:/gerrit}/../test_site -da:com.google.gwtexpui.globalkey.client.KeyCommandSet"/>
+</launchConfiguration>
diff --git a/tools/pack_war.py b/tools/pack_war.py
new file mode 100755
index 0000000..1c14bc8
--- /dev/null
+++ b/tools/pack_war.py
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from optparse import OptionParser
+from os import environ, makedirs, path, symlink
+from subprocess import check_call
+try:
+ from subprocess import check_output
+except ImportError:
+ from subprocess import Popen, PIPE
+ def check_output(*cmd):
+ return Popen(*cmd, stdout=PIPE).communicate()[0]
+
+opts = OptionParser()
+opts.add_option('-o', help='path to write WAR to')
+opts.add_option('--lib', action='append', help='target for WEB-INF/lib')
+opts.add_option('--pgmlib', action='append', help='target for WEB-INF/pgm-lib')
+args, ctx = opts.parse_args()
+
+war = environ['TMP']
+root = war[:war.index('buck-out')]
+jars = set()
+
+def link_jars(libs, dir):
+ makedirs(dir)
+ cp = check_output(['buck', 'audit', 'classpath'] + libs)
+ for j in cp.strip().splitlines():
+ if j not in jars:
+ jars.add(j)
+ n = path.basename(j)
+ if j.startswith('buck-out/gen/gerrit-'):
+ n = j.split('/')[2] + '-' + n
+ symlink(path.join(root, j), path.join(dir, n))
+
+if args.lib:
+ link_jars(args.lib, path.join(war, 'WEB-INF', 'lib'))
+if args.pgmlib:
+ link_jars(args.pgmlib, path.join(war, 'WEB-INF', 'pgm-lib'))
+for s in ctx:
+ check_call(['unzip', '-q', '-d', war, s])
+check_call(['zip', '-9qr', args.o, '.'], cwd = war)