Browse Source

Implement SHA-256 abstraction

The Large File Storage extension specified by GitHub [1] uses SHA-256 to
compute the ID of large files stored by the extension. Hence implement a
SHA-256 abstraction similar to the SHA-1 abstraction used by JGit.

[1] https://git-lfs.github.com/

Bug: 470333
Change-Id: I3a95954543c8570d73929e55f4a884b55dbf1b7a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-4.3
Matthias Sohn 10 years ago committed by Saša Živkov
parent
commit
536db18cc6
  1. 16
      BUCK
  2. 8
      org.eclipse.jgit.lfs.test/.classpath
  3. 2
      org.eclipse.jgit.lfs.test/.gitignore
  4. 34
      org.eclipse.jgit.lfs.test/.project
  5. 2
      org.eclipse.jgit.lfs.test/.settings/org.eclipse.core.resources.prefs
  6. 2
      org.eclipse.jgit.lfs.test/.settings/org.eclipse.core.runtime.prefs
  7. 398
      org.eclipse.jgit.lfs.test/.settings/org.eclipse.jdt.core.prefs
  8. 61
      org.eclipse.jgit.lfs.test/.settings/org.eclipse.jdt.ui.prefs
  9. 3
      org.eclipse.jgit.lfs.test/.settings/org.eclipse.mylyn.tasks.ui.prefs
  10. 2
      org.eclipse.jgit.lfs.test/.settings/org.eclipse.mylyn.team.ui.prefs
  11. 93
      org.eclipse.jgit.lfs.test/.settings/org.eclipse.pde.api.tools.prefs
  12. 2
      org.eclipse.jgit.lfs.test/.settings/org.eclipse.pde.core.prefs
  13. 31
      org.eclipse.jgit.lfs.test/BUCK
  14. 20
      org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
  15. 5
      org.eclipse.jgit.lfs.test/build.properties
  16. 2
      org.eclipse.jgit.lfs.test/plugin.properties
  17. 119
      org.eclipse.jgit.lfs.test/pom.xml
  18. 94
      org.eclipse.jgit.lfs.test/src/org/eclipse/jgit/lfs/test/LongObjectIdTestUtils.java
  19. 596
      org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/lib/AbbreviatedLongObjectIdTest.java
  20. 427
      org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/lib/LongObjectIdTest.java
  21. 92
      org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/lib/MutableLongObjectIdTest.java
  22. 8
      org.eclipse.jgit.lfs/.classpath
  23. 125
      org.eclipse.jgit.lfs/.fbprefs
  24. 2
      org.eclipse.jgit.lfs/.gitignore
  25. 34
      org.eclipse.jgit.lfs/.project
  26. 2
      org.eclipse.jgit.lfs/.settings/org.eclipse.core.resources.prefs
  27. 2
      org.eclipse.jgit.lfs/.settings/org.eclipse.core.runtime.prefs
  28. 398
      org.eclipse.jgit.lfs/.settings/org.eclipse.jdt.core.prefs
  29. 61
      org.eclipse.jgit.lfs/.settings/org.eclipse.jdt.ui.prefs
  30. 3
      org.eclipse.jgit.lfs/.settings/org.eclipse.mylyn.tasks.ui.prefs
  31. 2
      org.eclipse.jgit.lfs/.settings/org.eclipse.mylyn.team.ui.prefs
  32. 98
      org.eclipse.jgit.lfs/.settings/org.eclipse.pde.api.tools.prefs
  33. 2
      org.eclipse.jgit.lfs/.settings/org.eclipse.pde.core.prefs
  34. 17
      org.eclipse.jgit.lfs/BUCK
  35. 15
      org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
  36. 59
      org.eclipse.jgit.lfs/about.html
  37. 7
      org.eclipse.jgit.lfs/build.properties
  38. 2
      org.eclipse.jgit.lfs/plugin.properties
  39. 140
      org.eclipse.jgit.lfs/pom.xml
  40. 4
      org.eclipse.jgit.lfs/resources/org/eclipse/jgit/lfs/internal/LfsText.properties
  41. 90
      org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/errors/InvalidLongObjectIdException.java
  42. 65
      org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsText.java
  43. 375
      org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/AbbreviatedLongObjectId.java
  44. 555
      org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/AnyLongObjectId.java
  45. 102
      org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/Constants.java
  46. 309
      org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/LongObjectId.java
  47. 256
      org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/MutableLongObjectId.java
  48. 1
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.gitignore
  49. 17
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.project
  50. 3
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.settings/org.eclipse.core.resources.prefs
  51. 3
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.settings/org.eclipse.core.runtime.prefs
  52. 4
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.settings/org.eclipse.mylyn.tasks.ui.prefs
  53. 3
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.settings/org.eclipse.mylyn.team.ui.prefs
  54. 4
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/build.properties
  55. 59
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/edl-v10.html
  56. 159
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.properties
  57. 36
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml
  58. 106
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/license.html
  59. 77
      org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml
  60. 3
      org.eclipse.jgit.packaging/org.eclipse.jgit.repository/category.xml
  61. 5
      org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml
  62. 3
      org.eclipse.jgit.packaging/pom.xml
  63. 13
      org.eclipse.jgit.test/tst/org/eclipse/jgit/util/NBTest.java
  64. 33
      org.eclipse.jgit/src/org/eclipse/jgit/util/NB.java
  65. 66
      org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java
  66. 2
      pom.xml

16
BUCK

@ -29,6 +29,22 @@ java_library(
visibility = ['PUBLIC'], visibility = ['PUBLIC'],
) )
java_library(
name = 'jgit-lfs',
exported_deps = [
':jgit',
'//org.eclipse.jgit.lfs:jgit-lfs'
],
visibility = ['PUBLIC'],
)
genrule(
name = 'jgit-lfs_src',
cmd = 'ln -s $(location //org.eclipse.jgit.lfs:jgit-lfs_src) $OUT',
out = 'jgit-lfs_src.zip',
visibility = ['PUBLIC'],
)
java_library( java_library(
name = 'junit', name = 'junit',
exported_deps = [ exported_deps = [

8
org.eclipse.jgit.lfs.test/.classpath

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="tst"/>
<classpathentry kind="output" path="bin"/>
</classpath>

2
org.eclipse.jgit.lfs.test/.gitignore vendored

@ -0,0 +1,2 @@
/target
/bin

34
org.eclipse.jgit.lfs.test/.project

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.jgit.lfs.test</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
</natures>
</projectDescription>

2
org.eclipse.jgit.lfs.test/.settings/org.eclipse.core.resources.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

2
org.eclipse.jgit.lfs.test/.settings/org.eclipse.core.runtime.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
line.separator=\n

398
org.eclipse.jgit.lfs.test/.settings/org.eclipse.jdt.core.prefs

@ -0,0 +1,398 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.doc.comment.support=enabled
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.autoboxing=warning
org.eclipse.jdt.core.compiler.problem.comparingIdentical=error
org.eclipse.jdt.core.compiler.problem.deadCode=error
org.eclipse.jdt.core.compiler.problem.deprecation=warning
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=error
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=protected
org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
org.eclipse.jdt.core.compiler.problem.missingJavadocTags=error
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
org.eclipse.jdt.core.compiler.problem.nullReference=error
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=error
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=error
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
org.eclipse.jdt.core.compiler.problem.unusedImport=error
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
org.eclipse.jdt.core.compiler.problem.unusedLocal=error
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=error
org.eclipse.jdt.core.compiler.source=1.7
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_annotation=0
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=0
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=80
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
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_resources_in_try=80
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.alignment_for_union_type_in_multicatch=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=1
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
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=1
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=false
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_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=false
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=true
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=insert
org.eclipse.jdt.core.formatter.comment.line_length=80
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
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.disabling_tag=@formatter\:off
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
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=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
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_method=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_label=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=do not 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=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=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=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_try=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_semicolon_in_try_resources=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=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_try=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_try=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_semicolon_in_try_resources=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=false
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=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=tab
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=true
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true

61
org.eclipse.jgit.lfs.test/.settings/org.eclipse.jdt.ui.prefs

@ -0,0 +1,61 @@
eclipse.preferences.version=1
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
formatter_profile=_JGit Format
formatter_settings_version=12
org.eclipse.jdt.ui.ignorelowercasenames=true
org.eclipse.jdt.ui.importorder=java;javax;org;com;
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"?><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_missing_override_annotations_interface_methods=false
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=true
sp_cleanup.format_source_code_changes_only=true
sp_cleanup.make_local_variable_final=false
sp_cleanup.make_parameters_final=false
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

3
org.eclipse.jgit.lfs.test/.settings/org.eclipse.mylyn.tasks.ui.prefs

@ -0,0 +1,3 @@
eclipse.preferences.version=1
project.repository.kind=bugzilla
project.repository.url=https\://bugs.eclipse.org/bugs

2
org.eclipse.jgit.lfs.test/.settings/org.eclipse.mylyn.team.ui.prefs

@ -0,0 +1,2 @@
commit.comment.template=${task.description} \n\nBug\: ${task.key}
eclipse.preferences.version=1

93
org.eclipse.jgit.lfs.test/.settings/org.eclipse.pde.api.tools.prefs

@ -0,0 +1,93 @@
ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
ILLEGAL_EXTEND=Warning
ILLEGAL_IMPLEMENT=Warning
ILLEGAL_INSTANTIATE=Warning
ILLEGAL_OVERRIDE=Warning
ILLEGAL_REFERENCE=Warning
INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
INVALID_JAVADOC_TAG=Ignore
INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
LEAK_EXTEND=Warning
LEAK_FIELD_DECL=Warning
LEAK_IMPLEMENT=Warning
LEAK_METHOD_PARAM=Warning
LEAK_METHOD_RETURN_TYPE=Warning
METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
UNUSED_PROBLEM_FILTERS=Warning
automatically_removed_unused_problem_filters=false
eclipse.preferences.version=1
incompatible_api_component_version=Error
incompatible_api_component_version_include_major_without_breaking_change=Disabled
incompatible_api_component_version_include_minor_without_api_change=Disabled
invalid_since_tag_version=Error
malformed_since_tag=Error
missing_since_tag=Error
report_api_breakage_when_major_version_incremented=Disabled
report_resolution_errors_api_component=Warning

2
org.eclipse.jgit.lfs.test/.settings/org.eclipse.pde.core.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
resolve.requirebundle=false

31
org.eclipse.jgit.lfs.test/BUCK

@ -0,0 +1,31 @@
TESTS = glob(['tst/**/*.java'])
for t in TESTS:
n = t[len('tst/'):len(t)-len('.java')].replace('/', '.')
java_test(
name = n,
labels = ['lfs'],
srcs = [t],
deps = [
':helpers',
'//org.eclipse.jgit.junit:junit',
'//org.eclipse.jgit.lfs:jgit-lfs',
'//org.eclipse.jgit:jgit',
'//lib:hamcrest-core',
'//lib:hamcrest-library',
'//lib:junit',
],
source_under_test = ['//org.eclipse.jgit.lfs:jgit-lfs'],
)
java_library(
name = 'helpers',
srcs = glob(['src/**/*.java']),
deps = [
'//org.eclipse.jgit:jgit',
'//org.eclipse.jgit.lfs:jgit-lfs',
'//org.eclipse.jgit.junit:junit',
'//lib:junit',
],
visibility = ['PUBLIC']
)

20
org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF

@ -0,0 +1,20 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin_name
Bundle-SymbolicName: org.eclipse.jgit.lfs.test
Bundle-Version: 4.3.0.qualifier
Bundle-Vendor: %provider_name
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.eclipse.jgit.junit;version="[4.3.0,4.4.0)",
org.eclipse.jgit.lfs.errors;version="[4.3.0,4.4.0)",
org.eclipse.jgit.lfs.lib;version="[4.3.0,4.4.0)",
org.eclipse.jgit.lib;version="[4.3.0,4.4.0)",
org.eclipse.jgit.util;version="[4.3.0,4.4.0)",
org.hamcrest.core;version="[1.1.0,2.0.0)",
org.junit;version="[4.0.0,5.0.0)",
org.junit.runner;version="[4.0.0,5.0.0)",
org.junit.runners;version="[4.0.0,5.0.0)"
Export-Package: org.eclipse.jgit.lfs.lib;version="4.3.0";x-internal:=true,
org.eclipse.jgit.lfs.test;version="4.3.0";x-internal:=true

5
org.eclipse.jgit.lfs.test/build.properties

@ -0,0 +1,5 @@
source.. = tst/, src/
output.. = bin/
bin.includes = META-INF/,\
.,\
plugin.properties

2
org.eclipse.jgit.lfs.test/plugin.properties

@ -0,0 +1,2 @@
plugin_name=JGit LFS Tests
provider_name=Eclipse JGit

119
org.eclipse.jgit.lfs.test/pom.xml

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2015 Matthias Sohn <matthias.sohn@sap.com>
and other copyright owners as documented in the project's IP log.
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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit-parent</artifactId>
<version>4.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.eclipse.jgit.lfs.test</artifactId>
<name>JGit - Large File Storage Tests</name>
<description>
Tests for the Large File Extension (LFS).
</description>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit.lfs</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit.junit</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<testSourceDirectory>tst/</testSourceDirectory>
<sourceDirectory>src/</sourceDirectory>
<testResources>
<testResource>
<directory>tst-rsrc/</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Djava.io.tmpdir=${project.build.directory} -Xmx300m</argLine>
</configuration>
</plugin>
</plugins>
</build>
</project>

94
org.eclipse.jgit.lfs.test/src/org/eclipse/jgit/lfs/test/LongObjectIdTestUtils.java

@ -0,0 +1,94 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.test;
import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.MessageDigest;
import org.eclipse.jgit.lfs.lib.Constants;
import org.eclipse.jgit.lfs.lib.LongObjectId;
public class LongObjectIdTestUtils {
/**
* Create id as hash of the given string.
*
* @param s
* the string to hash
* @return id calculated by hashing string
*/
public static LongObjectId hash(String s) {
MessageDigest md = Constants.newMessageDigest();
md.update(s.getBytes(StandardCharsets.UTF_8));
return LongObjectId.fromRaw(md.digest());
}
/**
* Create id as hash of a file content
*
* @param file
* the file to hash
* @return id calculated by hashing file content
* @throws FileNotFoundException
* if file doesn't exist
* @throws IOException
*/
public static LongObjectId hash(Path file)
throws FileNotFoundException, IOException {
MessageDigest md = Constants.newMessageDigest();
try (InputStream is = new BufferedInputStream(
Files.newInputStream(file))) {
final byte[] buffer = new byte[4096];
for (int read = 0; (read = is.read(buffer)) != -1;) {
md.update(buffer, 0, read);
}
}
return LongObjectId.fromRaw(md.digest());
}
}

596
org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/lib/AbbreviatedLongObjectIdTest.java

@ -0,0 +1,596 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.lib;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.eclipse.jgit.lfs.test.LongObjectIdTestUtils;
import org.junit.Test;
/*
* Ported to SHA-256 from org.eclipse.jgit.lib.AbbreviatedObjectIdTest
*/
public class AbbreviatedLongObjectIdTest {
@Test
public void testEmpty_FromByteArray() {
final AbbreviatedLongObjectId i;
i = AbbreviatedLongObjectId.fromString(new byte[] {}, 0, 0);
assertNotNull(i);
assertEquals(0, i.length());
assertFalse(i.isComplete());
assertEquals("", i.name());
}
@Test
public void testEmpty_FromString() {
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId
.fromString("");
assertNotNull(i);
assertEquals(0, i.length());
assertFalse(i.isComplete());
assertEquals("", i.name());
}
@Test
public void testFull_FromByteArray() {
final String s = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final byte[] b = org.eclipse.jgit.lib.Constants.encodeASCII(s);
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(b,
0, b.length);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertTrue(i.isComplete());
assertEquals(s, i.name());
final LongObjectId f = i.toLongObjectId();
assertNotNull(f);
assertEquals(LongObjectId.fromString(s), f);
assertEquals(f.hashCode(), i.hashCode());
}
@Test
public void testFull_FromString() {
final String s = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertTrue(i.isComplete());
assertEquals(s, i.name());
final LongObjectId f = i.toLongObjectId();
assertNotNull(f);
assertEquals(LongObjectId.fromString(s), f);
assertEquals(f.hashCode(), i.hashCode());
}
@Test
public void test1_FromString() {
final String s = "2";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test2_FromString() {
final String s = "27";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test3_FromString() {
final String s = "27e";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test4_FromString() {
final String s = "27e1";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test5_FromString() {
final String s = "27e15";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test6_FromString() {
final String s = "27e15b";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test7_FromString() {
final String s = "27e15b7";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test8_FromString() {
final String s = "27e15b72";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test9_FromString() {
final String s = "27e15b729";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test15_FromString() {
final String s = "27e15b72937fc8f";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test16_FromString() {
final String s = "27e15b72937fc8f5";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test17_FromString() {
final String s = "27e15b72937fc8f55";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void test33_FromString() {
final String s = "27e15b72937fc8f558da24ac3d50ec203";
final AbbreviatedLongObjectId i = AbbreviatedLongObjectId.fromString(s);
assertNotNull(i);
assertEquals(s.length(), i.length());
assertFalse(i.isComplete());
assertEquals(s, i.name());
assertNull(i.toLongObjectId());
}
@Test
public void testEquals_Short() {
final String s = "27e15b72";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId.fromString(s);
final AbbreviatedLongObjectId b = AbbreviatedLongObjectId.fromString(s);
assertNotSame(a, b);
assertTrue(a.hashCode() == b.hashCode());
assertEquals(b, a);
assertEquals(a, b);
}
@Test
public void testEquals_Full() {
final String s = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId.fromString(s);
final AbbreviatedLongObjectId b = AbbreviatedLongObjectId.fromString(s);
assertNotSame(a, b);
assertTrue(a.hashCode() == b.hashCode());
assertEquals(b, a);
assertEquals(a, b);
}
@Test
public void testNotEquals_SameLength() {
final String sa = "27e15b72";
final String sb = "27e15b7f";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
.fromString(sa);
final AbbreviatedLongObjectId b = AbbreviatedLongObjectId
.fromString(sb);
assertFalse(a.equals(b));
assertFalse(b.equals(a));
}
@Test
public void testNotEquals_DiffLength() {
final String sa = "27e15b72abcd";
final String sb = "27e15b72";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
.fromString(sa);
final AbbreviatedLongObjectId b = AbbreviatedLongObjectId
.fromString(sb);
assertFalse(a.equals(b));
assertFalse(b.equals(a));
}
@Test
public void testPrefixCompare_Full() {
final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
.fromString(s1);
final LongObjectId i1 = LongObjectId.fromString(s1);
assertEquals(0, a.prefixCompare(i1));
assertTrue(i1.startsWith(a));
final String s2 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b11";
final LongObjectId i2 = LongObjectId.fromString(s2);
assertTrue(a.prefixCompare(i2) < 0);
assertFalse(i2.startsWith(a));
final String s3 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b0f";
final LongObjectId i3 = LongObjectId.fromString(s3);
assertTrue(a.prefixCompare(i3) > 0);
assertFalse(i3.startsWith(a));
}
@Test
public void testPrefixCompare_1() {
final String sa = "2";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
.fromString(sa);
final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i1 = LongObjectId.fromString(s1);
assertEquals(0, a.prefixCompare(i1));
assertTrue(i1.startsWith(a));
final String s2 = "37e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i2 = LongObjectId.fromString(s2);
assertTrue(a.prefixCompare(i2) < 0);
assertFalse(i2.startsWith(a));
final String s3 = "17e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i3 = LongObjectId.fromString(s3);
assertTrue(a.prefixCompare(i3) > 0);
assertFalse(i3.startsWith(a));
}
@Test
public void testPrefixCompare_15() {
final String sa = "27e15b72937fc8f";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
.fromString(sa);
final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i1 = LongObjectId.fromString(s1);
assertEquals(0, a.prefixCompare(i1));
assertTrue(i1.startsWith(a));
final String s2 = "27e15b72937fc90558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i2 = LongObjectId.fromString(s2);
assertTrue(a.prefixCompare(i2) < 0);
assertFalse(i2.startsWith(a));
final String s3 = "27e15b72937fc8e558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i3 = LongObjectId.fromString(s3);
assertTrue(a.prefixCompare(i3) > 0);
assertFalse(i3.startsWith(a));
}
@Test
public void testPrefixCompare_16() {
final String sa = "27e15b72937fc8f5";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
.fromString(sa);
final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i1 = LongObjectId.fromString(s1);
assertEquals(0, a.prefixCompare(i1));
assertTrue(i1.startsWith(a));
final String s2 = "27e15b72937fc8f658da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i2 = LongObjectId.fromString(s2);
assertTrue(a.prefixCompare(i2) < 0);
assertFalse(i2.startsWith(a));
final String s3 = "27e15b72937fc8f458da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i3 = LongObjectId.fromString(s3);
assertTrue(a.prefixCompare(i3) > 0);
assertFalse(i3.startsWith(a));
}
@Test
public void testPrefixCompare_17() {
final String sa = "27e15b72937fc8f55";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
.fromString(sa);
final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i1 = LongObjectId.fromString(s1);
assertEquals(0, a.prefixCompare(i1));
assertTrue(i1.startsWith(a));
final String s2 = "27e15b72937fc8f568da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i2 = LongObjectId.fromString(s2);
assertTrue(a.prefixCompare(i2) < 0);
assertFalse(i2.startsWith(a));
final String s3 = "27e15b72937fc8f548da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i3 = LongObjectId.fromString(s3);
assertTrue(a.prefixCompare(i3) > 0);
assertFalse(i3.startsWith(a));
}
@Test
public void testPrefixCompare_33() {
final String sa = "27e15b72937fc8f558da24ac3d50ec203";
final AbbreviatedLongObjectId a = AbbreviatedLongObjectId
.fromString(sa);
final String s1 = "27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i1 = LongObjectId.fromString(s1);
assertEquals(0, a.prefixCompare(i1));
assertTrue(i1.startsWith(a));
final String s2 = "27e15b72937fc8f558da24ac3d50ec20402a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i2 = LongObjectId.fromString(s2);
assertTrue(a.prefixCompare(i2) < 0);
assertFalse(i2.startsWith(a));
final String s3 = "27e15b72937fc8f558da24ac3d50ec20202a4cf21e33b87ae8e4ce90e89c4b10";
final LongObjectId i3 = LongObjectId.fromString(s3);
assertTrue(a.prefixCompare(i3) > 0);
assertFalse(i3.startsWith(a));
}
@Test
public void testIsId() {
// These are all too short.
assertFalse(AbbreviatedLongObjectId.isId(""));
assertFalse(AbbreviatedLongObjectId.isId("a"));
// These are too long.
assertFalse(AbbreviatedLongObjectId.isId(LongObjectId
.fromString(
"27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10")
.name() + "0"));
assertFalse(AbbreviatedLongObjectId.isId(LongObjectId
.fromString(
"27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10")
.name() + "c0ffee"));
// These contain non-hex characters.
assertFalse(AbbreviatedLongObjectId.isId("01notahexstring"));
// These should all work.
assertTrue(AbbreviatedLongObjectId.isId("ab"));
assertTrue(AbbreviatedLongObjectId.isId("abc"));
assertTrue(AbbreviatedLongObjectId.isId("abcd"));
assertTrue(AbbreviatedLongObjectId.isId("abcd0"));
assertTrue(AbbreviatedLongObjectId.isId("abcd09"));
assertTrue(AbbreviatedLongObjectId.isId(LongObjectId
.fromString(
"27e15b72937fc8f558da24ac3d50ec20302a4cf21e33b87ae8e4ce90e89c4b10")
.name()));
}
@Test
public void testAbbreviate() {
AnyLongObjectId id = LongObjectIdTestUtils.hash("test");
assertEquals(
"abbreviated id should match the id it was abbreviated from", 0,
id.abbreviate(10).prefixCompare(id));
}
@Test
public void testFromStringByteWrongLength() {
byte[] buf = new byte[65];
try {
AbbreviatedLongObjectId.fromString(buf, 0, 65);
fail("expected IllegalArgumentException for too long AbbreviatedLongObjectId");
} catch (IllegalArgumentException e) {
// expected
}
}
@Test
public void testFromStringWrongLength() {
AnyLongObjectId id = LongObjectIdTestUtils.hash("test");
try {
AbbreviatedLongObjectId.fromString(id.name() + "c0ffee");
fail("expected IllegalArgumentException for too long AbbreviatedLongObjectId");
} catch (IllegalArgumentException e) {
// expected
}
}
@Test
public void testFromLongObjectId() {
AnyLongObjectId id = LongObjectIdTestUtils.hash("test");
assertEquals(0,
AbbreviatedLongObjectId.fromLongObjectId(id).prefixCompare(id));
}
@Test
public void testPrefixCompareByte() {
AnyLongObjectId id = LongObjectId.fromString(
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef");
byte[] buf = new byte[32];
id.copyRawTo(buf, 0);
AbbreviatedLongObjectId a = id.abbreviate(62);
assertEquals(0, a.prefixCompare(buf, 0));
a = LongObjectId
.fromString(
"0023456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
.abbreviate(16);
assertEquals(-1, a.prefixCompare(buf, 0));
a = LongObjectId
.fromString(
"0123456789abcdef0023456789abcdef0123456789abcdef0123456789abcdef")
.abbreviate(32);
assertEquals(-1, a.prefixCompare(buf, 0));
a = LongObjectId
.fromString(
"0123456789abcdef0123456789abcdef0023456789abcdef0123456789abcdef")
.abbreviate(48);
assertEquals(-1, a.prefixCompare(buf, 0));
a = LongObjectId
.fromString(
"0123456789abcdef0123456789abcdef0123456789abcdef0023456789abcdef")
.abbreviate(64);
assertEquals(-1, a.prefixCompare(buf, 0));
a = LongObjectId
.fromString(
"1123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
.abbreviate(16);
assertEquals(1, a.prefixCompare(buf, 0));
a = LongObjectId
.fromString(
"0123456789abcdef1123456789abcdef0123456789abcdef0123456789abcdef")
.abbreviate(32);
assertEquals(1, a.prefixCompare(buf, 0));
a = LongObjectId
.fromString(
"0123456789abcdef0123456789abcdef1123456789abcdef0123456789abcdef")
.abbreviate(48);
assertEquals(1, a.prefixCompare(buf, 0));
a = LongObjectId
.fromString(
"0123456789abcdef0123456789abcdef0123456789abcdef1123456789abcdef")
.abbreviate(64);
assertEquals(1, a.prefixCompare(buf, 0));
}
@Test
public void testPrefixCompareLong() {
AnyLongObjectId id = new LongObjectId(1L, 2L, 3L, 4L);
long[] buf = new long[4];
id.copyRawTo(buf, 0);
AbbreviatedLongObjectId a = id.abbreviate(62);
assertEquals(0, a.prefixCompare(buf, 0));
a = new LongObjectId(0L, 2L, 3L, 4L).abbreviate(16);
assertEquals(-1, a.prefixCompare(buf, 0));
a = new LongObjectId(1L, 1L, 3L, 4L).abbreviate(32);
assertEquals(-1, a.prefixCompare(buf, 0));
a = new LongObjectId(1L, 2L, 2L, 4L).abbreviate(48);
assertEquals(-1, a.prefixCompare(buf, 0));
a = new LongObjectId(1L, 2L, 3L, 3L).abbreviate(64);
assertEquals(-1, a.prefixCompare(buf, 0));
a = new LongObjectId(2L, 2L, 3L, 4L).abbreviate(16);
assertEquals(1, a.prefixCompare(buf, 0));
a = new LongObjectId(1L, 3L, 3L, 4L).abbreviate(32);
assertEquals(1, a.prefixCompare(buf, 0));
a = new LongObjectId(1L, 2L, 4L, 4L).abbreviate(48);
assertEquals(1, a.prefixCompare(buf, 0));
a = new LongObjectId(1L, 2L, 3L, 5L).abbreviate(64);
assertEquals(1, a.prefixCompare(buf, 0));
}
@Test
public void testGetFirstByte() {
AnyLongObjectId id = LongObjectId.fromString(
"f423456789abcdef0123456789abcdef0123456789abcdef1123456789abcdef");
AbbreviatedLongObjectId a = id.abbreviate(10);
assertEquals(0xf4, a.getFirstByte());
assertEquals(id.getFirstByte(), a.getFirstByte());
}
@Test
public void testNotEquals() {
AbbreviatedLongObjectId a = new LongObjectId(1L, 2L, 3L, 4L)
.abbreviate(10);
assertFalse(a.equals("different"));
}
}

427
org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/lib/LongObjectIdTest.java

@ -0,0 +1,427 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.lib;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import org.eclipse.jgit.junit.JGitTestUtil;
import org.eclipse.jgit.lfs.errors.InvalidLongObjectIdException;
import org.eclipse.jgit.lfs.test.LongObjectIdTestUtils;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.util.FileUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/*
* Ported to SHA-256 from org.eclipse.jgit.lib.ObjectIdTest
*/
public class LongObjectIdTest {
private static Path tmp;
@BeforeClass
public static void setup() throws IOException {
tmp = Files.createTempDirectory("jgit_test_");
}
@AfterClass
public static void tearDown() throws IOException {
FileUtils.delete(tmp.toFile(), FileUtils.RECURSIVE | FileUtils.RETRY);
}
@Test
public void test001_toString() {
final String x = "8367b0edc81df80e6b42eb1b71f783111224e058cb3da37894d065d2deb7ab0a";
final LongObjectId oid = LongObjectId.fromString(x);
assertEquals(x, oid.name());
}
@Test
public void test002_toString() {
final String x = "140ce71d628cceb78e3709940ba52a651a0c4a9c1400f2e15e998a1a43887edf";
final LongObjectId oid = LongObjectId.fromString(x);
assertEquals(x, oid.name());
}
@Test
public void test003_equals() {
final String x = "8367b0edc81df80e6b42eb1b71f783111224e058cb3da37894d065d2deb7ab0a";
final LongObjectId a = LongObjectId.fromString(x);
final LongObjectId b = LongObjectId.fromString(x);
assertEquals(a.hashCode(), b.hashCode());
assertEquals("a and b should be equal", b, a);
}
@Test
public void test004_isId() {
assertTrue("valid id", LongObjectId.isId(
"8367b0edc81df80e6b42eb1b71f783111224e058cb3da37894d065d2deb7ab0a"));
}
@Test
public void test005_notIsId() {
assertFalse("bob is not an id", LongObjectId.isId("bob"));
}
@Test
public void test006_notIsId() {
assertFalse("63 digits is not an id", LongObjectId.isId(
"8367b0edc81df80e6b42eb1b71f783111224e058cb3da37894d065d2deb7ab0"));
}
@Test
public void test007_isId() {
assertTrue("uppercase is accepted", LongObjectId.isId(
"8367b0edc81df80e6b42eb1b71f783111224e058cb3da37894d065d2dEb7ab0A"));
}
@Test
public void test008_notIsId() {
assertFalse("g is not a valid hex digit", LongObjectId.isId(
"g367b0edc81df80e6b42eb1b71f783111224e058cb3da37894d065d2deb7ab0a"));
}
@Test
public void test009_toString() {
final String x = "140ce71d628cceb78e3709940ba52a651a0c4a9c1400f2e15e998a1a43887edf";
final LongObjectId oid = LongObjectId.fromString(x);
assertEquals(x, LongObjectId.toString(oid));
}
@Test
public void test010_toString() {
final String x = "0000000000000000000000000000000000000000000000000000000000000000";
assertEquals(x, LongObjectId.toString(null));
}
@Test
public void test011_toString() {
final String x = "0123456789ABCDEFabcdef01234567890123456789ABCDEFabcdef0123456789";
final LongObjectId oid = LongObjectId.fromString(x);
assertEquals(x.toLowerCase(), oid.name());
}
@Test
public void testGetByte() {
byte[] raw = new byte[32];
for (int i = 0; i < 32; i++)
raw[i] = (byte) (0xa0 + i);
LongObjectId id = LongObjectId.fromRaw(raw);
assertEquals(raw[0] & 0xff, id.getFirstByte());
assertEquals(raw[0] & 0xff, id.getByte(0));
assertEquals(raw[1] & 0xff, id.getByte(1));
assertEquals(raw[1] & 0xff, id.getSecondByte());
for (int i = 2; i < 32; i++) {
assertEquals("index " + i, raw[i] & 0xff, id.getByte(i));
}
try {
id.getByte(32);
fail("LongObjectId has 32 byte only");
} catch (ArrayIndexOutOfBoundsException e) {
// expected
}
}
@Test
public void testSetByte() {
byte[] exp = new byte[32];
for (int i = 0; i < 32; i++) {
exp[i] = (byte) (0xa0 + i);
}
MutableLongObjectId id = new MutableLongObjectId();
id.fromRaw(exp);
assertEquals(LongObjectId.fromRaw(exp).name(), id.name());
id.setByte(0, 0x10);
assertEquals(0x10, id.getByte(0));
exp[0] = 0x10;
assertEquals(LongObjectId.fromRaw(exp).name(), id.name());
for (int p = 1; p < 32; p++) {
id.setByte(p, 0x10 + p);
assertEquals(0x10 + p, id.getByte(p));
exp[p] = (byte) (0x10 + p);
assertEquals(LongObjectId.fromRaw(exp).name(), id.name());
}
for (int p = 0; p < 32; p++) {
id.setByte(p, 0x80 + p);
assertEquals(0x80 + p, id.getByte(p));
exp[p] = (byte) (0x80 + p);
assertEquals(LongObjectId.fromRaw(exp).name(), id.name());
}
}
@Test
public void testZeroId() {
AnyLongObjectId zero = new LongObjectId(0L, 0L, 0L, 0L);
assertEquals(zero, LongObjectId.zeroId());
assertEquals(
"0000000000000000000000000000000000000000000000000000000000000000",
LongObjectId.zeroId().name());
}
@Test
public void testEquals() {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
assertTrue("id should equal itself", id1.equals(id1));
AnyLongObjectId id2 = new LongObjectId(id1);
assertEquals("objects should be equals", id1, id2);
id2 = LongObjectIdTestUtils.hash("other");
assertNotEquals("objects should be not equal", id1, id2);
}
@Test
public void testCopyRawBytes() {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
AnyLongObjectId id2 = new LongObjectId(id1);
byte[] buf = new byte[64];
id1.copyRawTo(buf, 0);
id2.copyRawTo(buf, 32);
assertTrue("objects should be equals",
LongObjectId.equals(buf, 0, buf, 32));
}
@Test
public void testCopyRawLongs() {
long[] a = new long[4];
a[0] = 1L;
a[1] = 2L;
a[2] = 3L;
a[3] = 4L;
AnyLongObjectId id1 = new LongObjectId(a[0], a[1], a[2], a[3]);
AnyLongObjectId id2 = LongObjectId.fromRaw(a);
assertEquals("objects should be equals", id1, id2);
}
@Test
public void testCopyFromStringInvalid() {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
try {
LongObjectId.fromString(id1.name() + "01234");
fail("expected InvalidLongObjectIdException");
} catch (InvalidLongObjectIdException e) {
assertEquals("Invalid id: " + id1.name() + "01234",
e.getMessage());
}
}
@Test
public void testCopyFromStringByte() {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
byte[] buf = new byte[64];
Charset cs = StandardCharsets.US_ASCII;
cs.encode(id1.name()).get(buf);
AnyLongObjectId id2 = LongObjectId.fromString(buf, 0);
assertEquals("objects should be equals", id1, id2);
}
@Test
public void testHashFile() throws IOException {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
Path f = tmp.resolve("test");
JGitTestUtil.write(f.toFile(), "test");
AnyLongObjectId id2 = LongObjectIdTestUtils.hash(f);
assertEquals("objects should be equals", id1, id2);
}
@Test
public void testCompareTo() {
AnyLongObjectId id1 = LongObjectId.fromString(
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef");
assertEquals(0, id1.compareTo(LongObjectId.fromString(
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")));
assertEquals(0, id1.compareTo(id1));
assertEquals(-1, id1.compareTo(LongObjectId.fromString(
"1123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")));
assertEquals(-1, id1.compareTo(LongObjectId.fromString(
"0123456789abcdef1123456789abcdef0123456789abcdef0123456789abcdef")));
assertEquals(-1, id1.compareTo(LongObjectId.fromString(
"0123456789abcdef0123456789abcdef1123456789abcdef0123456789abcdef")));
assertEquals(-1, id1.compareTo(LongObjectId.fromString(
"0123456789abcdef0123456789abcdef0123456789abcdef1123456789abcdef")));
assertEquals(1, id1.compareTo(LongObjectId.fromString(
"0023456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")));
assertEquals(1, id1.compareTo(LongObjectId.fromString(
"0123456789abcdef0023456789abcdef0123456789abcdef0123456789abcdef")));
assertEquals(1, id1.compareTo(LongObjectId.fromString(
"0123456789abcdef0123456789abcdef0023456789abcdef0123456789abcdef")));
assertEquals(1, id1.compareTo(LongObjectId.fromString(
"0123456789abcdef0123456789abcdef0123456789abcdef0023456789abcdef")));
}
@Test
public void testCompareToByte() {
AnyLongObjectId id1 = LongObjectId.fromString(
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef");
byte[] buf = new byte[32];
id1.copyRawTo(buf, 0);
assertEquals(0, id1.compareTo(buf, 0));
LongObjectId
.fromString(
"1123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
.copyRawTo(buf, 0);
assertEquals(-1, id1.compareTo(buf, 0));
LongObjectId
.fromString(
"0023456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
.copyRawTo(buf, 0);
assertEquals(1, id1.compareTo(buf, 0));
}
@Test
public void testCompareToLong() {
AnyLongObjectId id1 = new LongObjectId(1L, 2L, 3L, 4L);
long[] buf = new long[4];
id1.copyRawTo(buf, 0);
assertEquals(0, id1.compareTo(buf, 0));
new LongObjectId(2L, 2L, 3L, 4L).copyRawTo(buf, 0);
assertEquals(-1, id1.compareTo(buf, 0));
new LongObjectId(0L, 2L, 3L, 4L).copyRawTo(buf, 0);
assertEquals(1, id1.compareTo(buf, 0));
}
@Test
public void testCopyToByte() {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
byte[] buf = new byte[64];
id1.copyTo(buf, 0);
assertEquals(id1, LongObjectId.fromString(buf, 0));
}
@Test
public void testCopyRawToByteBuffer() {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
ByteBuffer buf = ByteBuffer.allocate(32);
id1.copyRawTo(buf);
assertEquals(id1, LongObjectId.fromRaw(buf.array(), 0));
}
@Test
public void testCopyToByteBuffer() {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
ByteBuffer buf = ByteBuffer.allocate(64);
id1.copyTo(buf);
assertEquals(id1, LongObjectId.fromString(buf.array(), 0));
}
@Test
public void testCopyRawToOutputStream() throws IOException {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
ByteArrayOutputStream os = new ByteArrayOutputStream(32);
id1.copyRawTo(os);
assertEquals(id1, LongObjectId.fromRaw(os.toByteArray(), 0));
}
@Test
public void testCopyToOutputStream() throws IOException {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
ByteArrayOutputStream os = new ByteArrayOutputStream(64);
id1.copyTo(os);
assertEquals(id1, LongObjectId.fromString(os.toByteArray(), 0));
}
@Test
public void testCopyToWriter() throws IOException {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
ByteArrayOutputStream os = new ByteArrayOutputStream(64);
OutputStreamWriter w = new OutputStreamWriter(os, Constants.CHARSET);
id1.copyTo(w);
w.close();
assertEquals(id1, LongObjectId.fromString(os.toByteArray(), 0));
}
@Test
public void testCopyToWriterWithBuf() throws IOException {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
ByteArrayOutputStream os = new ByteArrayOutputStream(64);
OutputStreamWriter w = new OutputStreamWriter(os, Constants.CHARSET);
char[] buf = new char[64];
id1.copyTo(buf, w);
w.close();
assertEquals(id1, LongObjectId.fromString(os.toByteArray(), 0));
}
@Test
public void testCopyToStringBuilder() {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
StringBuilder sb = new StringBuilder();
char[] buf = new char[64];
id1.copyTo(buf, sb);
assertEquals(id1, LongObjectId.fromString(sb.toString()));
}
@Test
public void testCopy() {
AnyLongObjectId id1 = LongObjectIdTestUtils.hash("test");
assertEquals(id1.copy(), id1);
MutableLongObjectId id2 = new MutableLongObjectId();
id2.fromObjectId(id1);
assertEquals(id1, id2.copy());
}
}

92
org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/lib/MutableLongObjectIdTest.java

@ -0,0 +1,92 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.lib;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
/*
* Ported to SHA-256 from org.eclipse.jgit.lib.MutableObjectIdTest
*/
public class MutableLongObjectIdTest {
@Test
public void testFromRawLong() {
MutableLongObjectId m = new MutableLongObjectId();
m.fromRaw(new long[] { 1L, 2L, 3L, 4L });
assertEquals(new LongObjectId(1L, 2L, 3L, 4L), m);
}
@Test
public void testFromString() {
AnyLongObjectId id = new LongObjectId(1L, 2L, 3L, 4L);
MutableLongObjectId m = new MutableLongObjectId();
m.fromString(id.name());
assertEquals(id, m);
}
@Test
public void testFromStringByte() {
AnyLongObjectId id = new LongObjectId(1L, 2L, 3L, 4L);
MutableLongObjectId m = new MutableLongObjectId();
byte[] buf = new byte[64];
id.copyTo(buf, 0);
m.fromString(buf, 0);
assertEquals(id, m);
}
@Test
public void testCopy() {
MutableLongObjectId m = new MutableLongObjectId();
m.fromRaw(new long[] { 1L, 2L, 3L, 4L });
assertEquals(m, new MutableLongObjectId(m));
}
@Test
public void testToObjectId() {
MutableLongObjectId m = new MutableLongObjectId();
m.fromRaw(new long[] { 1L, 2L, 3L, 4L });
assertEquals(m, m.toObjectId());
}
}

8
org.eclipse.jgit.lfs/.classpath

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="output" path="bin"/>
</classpath>

125
org.eclipse.jgit.lfs/.fbprefs

@ -0,0 +1,125 @@
#FindBugs User Preferences
#Mon May 04 16:24:13 PDT 2009
detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
detectorBadAppletConstructor=BadAppletConstructor|false
detectorBadResultSetAccess=BadResultSetAccess|true
detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
detectorBadUseOfReturnValue=BadUseOfReturnValue|true
detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
detectorBooleanReturnNull=BooleanReturnNull|true
detectorCallToUnsupportedMethod=CallToUnsupportedMethod|true
detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
detectorCheckTypeQualifiers=CheckTypeQualifiers|true
detectorCloneIdiom=CloneIdiom|false
detectorComparatorIdiom=ComparatorIdiom|true
detectorConfusedInheritance=ConfusedInheritance|true
detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
detectorCrossSiteScripting=CrossSiteScripting|true
detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
detectorDontUseEnum=DontUseEnum|true
detectorDroppedException=DroppedException|true
detectorDumbMethodInvocations=DumbMethodInvocations|true
detectorDumbMethods=DumbMethods|true
detectorDuplicateBranches=DuplicateBranches|true
detectorEmptyZipFileEntry=EmptyZipFileEntry|true
detectorEqualsOperandShouldHaveClassCompatibleWithThis=EqualsOperandShouldHaveClassCompatibleWithThis|true
detectorFinalizerNullsFields=FinalizerNullsFields|true
detectorFindBadCast2=FindBadCast2|true
detectorFindBadForLoop=FindBadForLoop|true
detectorFindCircularDependencies=FindCircularDependencies|false
detectorFindDeadLocalStores=FindDeadLocalStores|true
detectorFindDoubleCheck=FindDoubleCheck|true
detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
detectorFindFinalizeInvocations=FindFinalizeInvocations|true
detectorFindFloatEquality=FindFloatEquality|true
detectorFindHEmismatch=FindHEmismatch|true
detectorFindInconsistentSync2=FindInconsistentSync2|true
detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
detectorFindMaskedFields=FindMaskedFields|true
detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
detectorFindNakedNotify=FindNakedNotify|true
detectorFindNonSerializableStoreIntoSession=FindNonSerializableStoreIntoSession|true
detectorFindNonSerializableValuePassedToWriteObject=FindNonSerializableValuePassedToWriteObject|true
detectorFindNonShortCircuit=FindNonShortCircuit|true
detectorFindNullDeref=FindNullDeref|true
detectorFindNullDerefsInvolvingNonShortCircuitEvaluation=FindNullDerefsInvolvingNonShortCircuitEvaluation|true
detectorFindOpenStream=FindOpenStream|true
detectorFindPuzzlers=FindPuzzlers|true
detectorFindRefComparison=FindRefComparison|true
detectorFindReturnRef=FindReturnRef|true
detectorFindRunInvocations=FindRunInvocations|true
detectorFindSelfComparison=FindSelfComparison|true
detectorFindSelfComparison2=FindSelfComparison2|true
detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
detectorFindSpinLoop=FindSpinLoop|true
detectorFindSqlInjection=FindSqlInjection|true
detectorFindTwoLockWait=FindTwoLockWait|true
detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
detectorFindUnconditionalWait=FindUnconditionalWait|true
detectorFindUninitializedGet=FindUninitializedGet|true
detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
detectorFindUnreleasedLock=FindUnreleasedLock|true
detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true
detectorFindUnsyncGet=FindUnsyncGet|true
detectorFindUselessControlFlow=FindUselessControlFlow|true
detectorFormatStringChecker=FormatStringChecker|true
detectorHugeSharedStringConstants=HugeSharedStringConstants|true
detectorIDivResultCastToDouble=IDivResultCastToDouble|true
detectorIncompatMask=IncompatMask|true
detectorInconsistentAnnotations=InconsistentAnnotations|true
detectorInefficientMemberAccess=InefficientMemberAccess|false
detectorInefficientToArray=InefficientToArray|true
detectorInfiniteLoop=InfiniteLoop|true
detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false
detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
detectorInitializationChain=InitializationChain|true
detectorInstantiateStaticClass=InstantiateStaticClass|true
detectorInvalidJUnitTest=InvalidJUnitTest|true
detectorIteratorIdioms=IteratorIdioms|true
detectorLazyInit=LazyInit|true
detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
detectorMethodReturnCheck=MethodReturnCheck|true
detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
detectorMutableLock=MutableLock|true
detectorMutableStaticFields=MutableStaticFields|true
detectorNaming=Naming|true
detectorNumberConstructor=NumberConstructor|true
detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
detectorPublicSemaphores=PublicSemaphores|false
detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
detectorRedundantInterfaces=RedundantInterfaces|true
detectorRepeatedConditionals=RepeatedConditionals|true
detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
detectorSerializableIdiom=SerializableIdiom|true
detectorStartInConstructor=StartInConstructor|true
detectorStaticCalendarDetector=StaticCalendarDetector|true
detectorStringConcatenation=StringConcatenation|true
detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
detectorSwitchFallthrough=SwitchFallthrough|true
detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true
detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true
detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true
detectorURLProblems=URLProblems|true
detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
detectorUnnecessaryMath=UnnecessaryMath|true
detectorUnreadFields=UnreadFields|true
detectorUseObjectEquals=UseObjectEquals|false
detectorUselessSubclassMethod=UselessSubclassMethod|false
detectorVarArgsProblems=VarArgsProblems|true
detectorVolatileUsage=VolatileUsage|true
detectorWaitInLoop=WaitInLoop|true
detectorWrongMapIterator=WrongMapIterator|true
detectorXMLFactoryBypass=XMLFactoryBypass|true
detector_threshold=2
effort=default
excludefilter0=findBugs/FindBugsExcludeFilter.xml
filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,MT_CORRECTNESS,PERFORMANCE,STYLE|false
filter_settings_neg=MALICIOUS_CODE,NOISE,I18N,SECURITY,EXPERIMENTAL|
run_at_full_build=true

2
org.eclipse.jgit.lfs/.gitignore vendored

@ -0,0 +1,2 @@
/bin
/target

34
org.eclipse.jgit.lfs/.project

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.jgit.lfs</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
</natures>
</projectDescription>

2
org.eclipse.jgit.lfs/.settings/org.eclipse.core.resources.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

2
org.eclipse.jgit.lfs/.settings/org.eclipse.core.runtime.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
line.separator=\n

398
org.eclipse.jgit.lfs/.settings/org.eclipse.jdt.core.prefs

@ -0,0 +1,398 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.doc.comment.support=enabled
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.autoboxing=warning
org.eclipse.jdt.core.compiler.problem.comparingIdentical=error
org.eclipse.jdt.core.compiler.problem.deadCode=error
org.eclipse.jdt.core.compiler.problem.deprecation=warning
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=error
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=error
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=protected
org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
org.eclipse.jdt.core.compiler.problem.missingJavadocTags=error
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
org.eclipse.jdt.core.compiler.problem.nullReference=error
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=error
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
org.eclipse.jdt.core.compiler.problem.unusedImport=error
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
org.eclipse.jdt.core.compiler.problem.unusedLocal=error
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=error
org.eclipse.jdt.core.compiler.source=1.7
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_annotation=0
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=0
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=80
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
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_resources_in_try=80
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.alignment_for_union_type_in_multicatch=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=1
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
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=1
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=false
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_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=false
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=true
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=insert
org.eclipse.jdt.core.formatter.comment.line_length=80
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
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.disabling_tag=@formatter\:off
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
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=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
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_method=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_label=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=do not 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=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=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=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_try=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_semicolon_in_try_resources=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=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_try=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_try=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_semicolon_in_try_resources=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=false
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=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=tab
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=true
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true

61
org.eclipse.jgit.lfs/.settings/org.eclipse.jdt.ui.prefs

@ -0,0 +1,61 @@
eclipse.preferences.version=1
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
formatter_profile=_JGit Format
formatter_settings_version=12
org.eclipse.jdt.ui.ignorelowercasenames=true
org.eclipse.jdt.ui.importorder=java;javax;org;com;
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"?><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_missing_override_annotations_interface_methods=false
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=true
sp_cleanup.format_source_code_changes_only=true
sp_cleanup.make_local_variable_final=false
sp_cleanup.make_parameters_final=false
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

3
org.eclipse.jgit.lfs/.settings/org.eclipse.mylyn.tasks.ui.prefs

@ -0,0 +1,3 @@
eclipse.preferences.version=1
project.repository.kind=bugzilla
project.repository.url=https\://bugs.eclipse.org/bugs

2
org.eclipse.jgit.lfs/.settings/org.eclipse.mylyn.team.ui.prefs

@ -0,0 +1,2 @@
commit.comment.template=${task.description} \n\nBug\: ${task.key}
eclipse.preferences.version=1

98
org.eclipse.jgit.lfs/.settings/org.eclipse.pde.api.tools.prefs

@ -0,0 +1,98 @@
ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
API_USE_SCAN_FIELD_SEVERITY=Error
API_USE_SCAN_METHOD_SEVERITY=Error
API_USE_SCAN_TYPE_SEVERITY=Error
CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
ILLEGAL_EXTEND=Warning
ILLEGAL_IMPLEMENT=Warning
ILLEGAL_INSTANTIATE=Warning
ILLEGAL_OVERRIDE=Warning
ILLEGAL_REFERENCE=Warning
INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
INVALID_ANNOTATION=Ignore
INVALID_JAVADOC_TAG=Ignore
INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
LEAK_EXTEND=Warning
LEAK_FIELD_DECL=Warning
LEAK_IMPLEMENT=Warning
LEAK_METHOD_PARAM=Warning
LEAK_METHOD_RETURN_TYPE=Warning
METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
MISSING_EE_DESCRIPTIONS=Error
TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
UNUSED_PROBLEM_FILTERS=Warning
automatically_removed_unused_problem_filters=false
eclipse.preferences.version=1
incompatible_api_component_version=Error
incompatible_api_component_version_include_major_without_breaking_change=Disabled
incompatible_api_component_version_include_minor_without_api_change=Disabled
invalid_since_tag_version=Error
malformed_since_tag=Error
missing_since_tag=Error
report_api_breakage_when_major_version_incremented=Disabled
report_resolution_errors_api_component=Warning

2
org.eclipse.jgit.lfs/.settings/org.eclipse.pde.core.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
resolve.requirebundle=false

17
org.eclipse.jgit.lfs/BUCK

@ -0,0 +1,17 @@
SRCS = glob(['src/**'])
RESOURCES = glob(['resources/**'])
java_library(
name = 'jgit-lfs',
srcs = SRCS,
resources = RESOURCES,
deps = [
'//org.eclipse.jgit:jgit'
],
visibility = ['PUBLIC'],
)
java_sources(
name = 'jgit-lfs_src',
srcs = SRCS + RESOURCES,
)

15
org.eclipse.jgit.lfs/META-INF/MANIFEST.MF

@ -0,0 +1,15 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin_name
Bundle-SymbolicName: org.eclipse.jgit.lfs
Bundle-Version: 4.3.0.qualifier
Bundle-Localization: plugin
Bundle-Vendor: %provider_name
Export-Package: org.eclipse.jgit.lfs.errors;version="4.3.0",
org.eclipse.jgit.lfs.internal;version="4.3.0";x-friends:="org.eclipse.jgit.lfs.test",
org.eclipse.jgit.lfs.lib;version="4.3.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.eclipse.jgit.internal.storage.file;version="[4.3.0,4.4.0)",
org.eclipse.jgit.lib;version="[4.3.0,4.4.0)",
org.eclipse.jgit.nls;version="[4.3.0,4.4.0)",
org.eclipse.jgit.util;version="[4.3.0,4.4.0)"

59
org.eclipse.jgit.lfs/about.html

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Eclipse Distribution License - Version 1.0</title>
<style type="text/css">
body {
size: 8.5in 11.0in;
margin: 0.25in 0.5in 0.25in 0.5in;
tab-interval: 0.5in;
}
p {
margin-left: auto;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
p.list {
margin-left: 0.5in;
margin-top: 0.05em;
margin-bottom: 0.05em;
}
</style>
</head>
<body lang="EN-US">
<p><b>Eclipse Distribution License - v 1.0</b></p>
<p>Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors. </p>
<p>All rights reserved.</p>
<p>Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
<ul><li>Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. </li>
<li>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. </li>
<li>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. </li></ul>
</p>
<p>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.</p>
</body>
</html>

7
org.eclipse.jgit.lfs/build.properties

@ -0,0 +1,7 @@
source.. = src/,\
resources/
output.. = bin/
bin.includes = META-INF/,\
.,\
plugin.properties,\
about.html

2
org.eclipse.jgit.lfs/plugin.properties

@ -0,0 +1,2 @@
plugin_name=JGit Large File Storage
provider_name=Eclipse JGit

140
org.eclipse.jgit.lfs/pom.xml

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
and other copyright owners as documented in the project's IP log.
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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit-parent</artifactId>
<version>4.3.0-SNAPSHOT</version>
</parent>
<artifactId>org.eclipse.jgit.lfs</artifactId>
<name>JGit - Large File Storage</name>
<description>
JGit Large File Storage (LFS) implementation.
</description>
<properties>
<translate-qualifier/>
</properties>
<dependencies>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/</sourceDirectory>
<resources>
<resource>
<directory>.</directory>
<includes>
<include>plugin.properties</include>
<include>about.html</include>
</includes>
</resource>
<resource>
<directory>resources/</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<inherited>true</inherited>
<executions>
<execution>
<id>attach-sources</id>
<phase>process-classes</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<archive>
<manifestFile>${source-bundle-manifest}</manifestFile>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${bundle-manifest}</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>clirr-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>clirr-maven-plugin</artifactId>
<version>${clirr-version}</version>
<configuration>
<comparisonVersion>${jgit-last-release-version}</comparisonVersion>
<minSeverity>info</minSeverity>
</configuration>
</plugin>
</plugins>
</reporting>
</project>

4
org.eclipse.jgit.lfs/resources/org/eclipse/jgit/lfs/internal/LfsText.properties

@ -0,0 +1,4 @@
incorrectLONG_OBJECT_ID_LENGTH=Incorrect LONG_OBJECT_ID_LENGTH.
invalidLongId=Invalid id: {0}
invalidLongIdLength=Invalid id length {0}; should be {1}
requiredHashFunctionNotAvailable=Required hash function {0} not available.

90
org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/errors/InvalidLongObjectIdException.java

@ -0,0 +1,90 @@
/*
* Copyright (C) 2009, Jonas Fonseca <fonseca@diku.dk>
* Copyright (C) 2007, Robin Rosenberg <robin.rosenberg@dewire.com>
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.errors;
import java.io.UnsupportedEncodingException;
import java.text.MessageFormat;
import org.eclipse.jgit.lfs.internal.LfsText;
/**
* Thrown when an invalid long object id is passed in as an argument.
*
* @since 4.3
*/
public class InvalidLongObjectIdException extends IllegalArgumentException {
private static final long serialVersionUID = 1L;
/**
* Create exception with bytes of the invalid object id.
*
* @param bytes containing the invalid id.
* @param offset in the byte array where the error occurred.
* @param length of the sequence of invalid bytes.
*/
public InvalidLongObjectIdException(byte[] bytes, int offset, int length) {
super(MessageFormat.format(LfsText.get().invalidLongId,
asAscii(bytes, offset, length)));
}
/**
* @param idString
* String containing the invalid id
*/
public InvalidLongObjectIdException(String idString) {
super(MessageFormat.format(LfsText.get().invalidLongId, idString));
}
private static String asAscii(byte[] bytes, int offset, int length) {
try {
return ": " + new String(bytes, offset, length, "US-ASCII"); //$NON-NLS-1$ //$NON-NLS-2$
} catch (UnsupportedEncodingException e2) {
return ""; //$NON-NLS-1$
} catch (StringIndexOutOfBoundsException e2) {
return ""; //$NON-NLS-1$
}
}
}

65
org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/internal/LfsText.java

@ -0,0 +1,65 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.internal;
import org.eclipse.jgit.nls.NLS;
import org.eclipse.jgit.nls.TranslationBundle;
/**
* Translation bundle for JGit LFS server
*/
public class LfsText extends TranslationBundle {
/**
* @return an instance of this translation bundle
*/
public static LfsText get() {
return NLS.getBundleFor(LfsText.class);
}
// @formatter:off
/***/ public String incorrectLONG_OBJECT_ID_LENGTH;
/***/ public String invalidLongId;
/***/ public String invalidLongIdLength;
/***/ public String requiredHashFunctionNotAvailable;
}

375
org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/AbbreviatedLongObjectId.java

@ -0,0 +1,375 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.lib;
import java.io.Serializable;
import java.text.MessageFormat;
import org.eclipse.jgit.lfs.errors.InvalidLongObjectIdException;
import org.eclipse.jgit.lfs.internal.LfsText;
import org.eclipse.jgit.lib.AbbreviatedObjectId;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.util.NB;
import org.eclipse.jgit.util.RawParseUtils;
/**
* A prefix abbreviation of an {@link LongObjectId}.
* <p>
* Enable abbreviating SHA-256 strings used by Git LFS, using sufficient leading
* digits from the LongObjectId name to still be unique within the repository
* the string was generated from. These ids are likely to be unique for a useful
* period of time, especially if they contain at least 6-10 hex digits.
* <p>
* This class converts the hex string into a binary form, to make it more
* efficient for matching against an object.
*
* Ported to SHA-256 from {@link AbbreviatedObjectId}
*
* @since 4.3
*/
public final class AbbreviatedLongObjectId implements Serializable {
private static final long serialVersionUID = 1L;
/**
* Test a string of characters to verify it is a hex format.
* <p>
* If true the string can be parsed with {@link #fromString(String)}.
*
* @param id
* the string to test.
* @return true if the string can converted into an AbbreviatedObjectId.
*/
public static final boolean isId(final String id) {
if (id.length() < 2
|| Constants.LONG_OBJECT_ID_STRING_LENGTH < id.length())
return false;
try {
for (int i = 0; i < id.length(); i++)
RawParseUtils.parseHexInt4((byte) id.charAt(i));
return true;
} catch (ArrayIndexOutOfBoundsException e) {
return false;
}
}
/**
* Convert an AbbreviatedObjectId from hex characters (US-ASCII).
*
* @param buf
* the US-ASCII buffer to read from.
* @param offset
* position to read the first character from.
* @param end
* one past the last position to read (<code>end-offset</code> is
* the length of the string).
* @return the converted object id.
*/
public static final AbbreviatedLongObjectId fromString(final byte[] buf,
final int offset, final int end) {
if (end - offset > Constants.LONG_OBJECT_ID_STRING_LENGTH)
throw new IllegalArgumentException(MessageFormat.format(
LfsText.get().invalidLongIdLength,
Integer.valueOf(end - offset),
Integer.valueOf(Constants.LONG_OBJECT_ID_STRING_LENGTH)));
return fromHexString(buf, offset, end);
}
/**
* Convert an AbbreviatedObjectId from an {@link AnyObjectId}.
* <p>
* This method copies over all bits of the Id, and is therefore complete
* (see {@link #isComplete()}).
*
* @param id
* the {@link ObjectId} to convert from.
* @return the converted object id.
*/
public static final AbbreviatedLongObjectId fromLongObjectId(
AnyLongObjectId id) {
return new AbbreviatedLongObjectId(
Constants.LONG_OBJECT_ID_STRING_LENGTH, id.w1, id.w2, id.w3,
id.w4);
}
/**
* Convert an AbbreviatedLongObjectId from hex characters.
*
* @param str
* the string to read from. Must be &lt;= 64 characters.
* @return the converted object id.
*/
public static final AbbreviatedLongObjectId fromString(final String str) {
if (str.length() > Constants.LONG_OBJECT_ID_STRING_LENGTH)
throw new IllegalArgumentException(
MessageFormat.format(LfsText.get().invalidLongId, str));
final byte[] b = org.eclipse.jgit.lib.Constants.encodeASCII(str);
return fromHexString(b, 0, b.length);
}
private static final AbbreviatedLongObjectId fromHexString(final byte[] bs,
int ptr, final int end) {
try {
final long a = hexUInt64(bs, ptr, end);
final long b = hexUInt64(bs, ptr + 16, end);
final long c = hexUInt64(bs, ptr + 32, end);
final long d = hexUInt64(bs, ptr + 48, end);
return new AbbreviatedLongObjectId(end - ptr, a, b, c, d);
} catch (ArrayIndexOutOfBoundsException e1) {
throw new InvalidLongObjectIdException(bs, ptr, end - ptr);
}
}
private static final long hexUInt64(final byte[] bs, int p, final int end) {
if (16 <= end - p)
return RawParseUtils.parseHexInt64(bs, p);
long r = 0;
int n = 0;
while (n < 16 && p < end) {
r <<= 4;
r |= RawParseUtils.parseHexInt4(bs[p++]);
n++;
}
return r << (16 - n) * 4;
}
static long mask(final int nibbles, final long word, final long v) {
final long b = (word - 1) * 16;
if (b + 16 <= nibbles) {
// We have all of the bits required for this word.
//
return v;
}
if (nibbles <= b) {
// We have none of the bits required for this word.
//
return 0;
}
final long s = 64 - (nibbles - b) * 4;
return (v >>> s) << s;
}
/** Number of half-bytes used by this id. */
final int nibbles;
final long w1;
final long w2;
final long w3;
final long w4;
AbbreviatedLongObjectId(final int n, final long new_1, final long new_2,
final long new_3, final long new_4) {
nibbles = n;
w1 = new_1;
w2 = new_2;
w3 = new_3;
w4 = new_4;
}
/** @return number of hex digits appearing in this id */
public int length() {
return nibbles;
}
/** @return true if this ObjectId is actually a complete id. */
public boolean isComplete() {
return length() == Constants.LONG_OBJECT_ID_STRING_LENGTH;
}
/** @return a complete ObjectId; null if {@link #isComplete()} is false */
public LongObjectId toLongObjectId() {
return isComplete() ? new LongObjectId(w1, w2, w3, w4) : null;
}
/**
* Compares this abbreviation to a full object id.
*
* @param other
* the other object id.
* @return &lt;0 if this abbreviation names an object that is less than
* <code>other</code>; 0 if this abbreviation exactly matches the
* first {@link #length()} digits of <code>other.name()</code>;
* &gt;0 if this abbreviation names an object that is after
* <code>other</code>.
*/
public final int prefixCompare(final AnyLongObjectId other) {
int cmp;
cmp = NB.compareUInt64(w1, mask(1, other.w1));
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w2, mask(2, other.w2));
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w3, mask(3, other.w3));
if (cmp != 0)
return cmp;
return NB.compareUInt64(w4, mask(4, other.w4));
}
/**
* Compare this abbreviation to a network-byte-order LongObjectId.
*
* @param bs
* array containing the other LongObjectId in network byte order.
* @param p
* position within {@code bs} to start the compare at. At least
* 32 bytes, starting at this position are required.
* @return &lt;0 if this abbreviation names an object that is less than
* <code>other</code>; 0 if this abbreviation exactly matches the
* first {@link #length()} digits of <code>other.name()</code>;
* &gt;0 if this abbreviation names an object that is after
* <code>other</code>.
*/
public final int prefixCompare(final byte[] bs, final int p) {
int cmp;
cmp = NB.compareUInt64(w1, mask(1, NB.decodeInt64(bs, p)));
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w2, mask(2, NB.decodeInt64(bs, p + 8)));
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w3, mask(3, NB.decodeInt64(bs, p + 16)));
if (cmp != 0)
return cmp;
return NB.compareUInt64(w4, mask(4, NB.decodeInt64(bs, p + 24)));
}
/**
* Compare this abbreviation to a network-byte-order LongObjectId.
*
* @param bs
* array containing the other LongObjectId in network byte order.
* @param p
* position within {@code bs} to start the compare at. At least 4
* longs, starting at this position are required.
* @return &lt;0 if this abbreviation names an object that is less than
* <code>other</code>; 0 if this abbreviation exactly matches the
* first {@link #length()} digits of <code>other.name()</code>;
* &gt;0 if this abbreviation names an object that is after
* <code>other</code>.
*/
public final int prefixCompare(final long[] bs, final int p) {
int cmp;
cmp = NB.compareUInt64(w1, mask(1, bs[p]));
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w2, mask(2, bs[p + 1]));
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w3, mask(3, bs[p + 2]));
if (cmp != 0)
return cmp;
return NB.compareUInt64(w4, mask(4, bs[p + 3]));
}
/** @return value for a fan-out style map, only valid of length &gt;= 2. */
public final int getFirstByte() {
return (int) (w1 >>> 56);
}
private long mask(final long word, final long v) {
return mask(nibbles, word, v);
}
@Override
public int hashCode() {
return (int) (w1 >> 32);
}
@Override
public boolean equals(final Object o) {
if (o instanceof AbbreviatedLongObjectId) {
final AbbreviatedLongObjectId b = (AbbreviatedLongObjectId) o;
return nibbles == b.nibbles && w1 == b.w1 && w2 == b.w2
&& w3 == b.w3 && w4 == b.w4;
}
return false;
}
/**
* @return string form of the abbreviation, in lower case hexadecimal.
*/
public final String name() {
final char[] b = new char[Constants.LONG_OBJECT_ID_STRING_LENGTH];
AnyLongObjectId.formatHexChar(b, 0, w1);
if (nibbles <= 16)
return new String(b, 0, nibbles);
AnyLongObjectId.formatHexChar(b, 16, w2);
if (nibbles <= 32)
return new String(b, 0, nibbles);
AnyLongObjectId.formatHexChar(b, 32, w3);
if (nibbles <= 48)
return new String(b, 0, nibbles);
AnyLongObjectId.formatHexChar(b, 48, w4);
return new String(b, 0, nibbles);
}
@SuppressWarnings("nls")
@Override
public String toString() {
return "AbbreviatedLongObjectId[" + name() + "]"; //$NON-NLS-1$
}
}

555
org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/AnyLongObjectId.java

@ -0,0 +1,555 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.lib;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import java.nio.ByteBuffer;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.util.NB;
/**
* A (possibly mutable) SHA-256 abstraction.
* <p>
* If this is an instance of {@link MutableLongObjectId} the concept of equality
* with this instance can alter at any time, if this instance is modified to
* represent a different object name.
*
* Ported to SHA-256 from {@link AnyObjectId}
*
* @since 4.3
*/
public abstract class AnyLongObjectId implements Comparable<AnyLongObjectId> {
/**
* Compare two object identifier byte sequences for equality.
*
* @param firstObjectId
* the first identifier to compare. Must not be null.
* @param secondObjectId
* the second identifier to compare. Must not be null.
* @return true if the two identifiers are the same.
*/
public static boolean equals(final AnyLongObjectId firstObjectId,
final AnyLongObjectId secondObjectId) {
if (firstObjectId == secondObjectId)
return true;
// We test word 2 first as odds are someone already used our
// word 1 as a hash code, and applying that came up with these
// two instances we are comparing for equality. Therefore the
// first two words are very likely to be identical. We want to
// break away from collisions as quickly as possible.
//
return firstObjectId.w2 == secondObjectId.w2
&& firstObjectId.w3 == secondObjectId.w3
&& firstObjectId.w4 == secondObjectId.w4
&& firstObjectId.w1 == secondObjectId.w1;
}
long w1;
long w2;
long w3;
long w4;
/**
* Get the first 8 bits of the LongObjectId.
*
* This is a faster version of {@code getByte(0)}.
*
* @return a discriminator usable for a fan-out style map. Returned values
* are unsigned and thus are in the range [0,255] rather than the
* signed byte range of [-128, 127].
*/
public final int getFirstByte() {
return (int) (w1 >>> 56);
}
/**
* Get the second 8 bits of the LongObjectId.
*
* @return a discriminator usable for a fan-out style map. Returned values
* are unsigned and thus are in the range [0,255] rather than the
* signed byte range of [-128, 127].
*/
public final int getSecondByte() {
return (int) ((w1 >>> 48) & 0xff);
}
/**
* Get any byte from the LongObjectId.
*
* Callers hard-coding {@code getByte(0)} should instead use the much faster
* special case variant {@link #getFirstByte()}.
*
* @param index
* index of the byte to obtain from the raw form of the
* LongObjectId. Must be in range [0,
* {@link Constants#LONG_OBJECT_ID_LENGTH}).
* @return the value of the requested byte at {@code index}. Returned values
* are unsigned and thus are in the range [0,255] rather than the
* signed byte range of [-128, 127].
* @throws ArrayIndexOutOfBoundsException
* {@code index} is less than 0, equal to
* {@link Constants#LONG_OBJECT_ID_LENGTH}, or greater than
* {@link Constants#LONG_OBJECT_ID_LENGTH}.
*/
public final int getByte(int index) {
long w;
switch (index >> 3) {
case 0:
w = w1;
break;
case 1:
w = w2;
break;
case 2:
w = w3;
break;
case 3:
w = w4;
break;
default:
throw new ArrayIndexOutOfBoundsException(index);
}
return (int) ((w >>> (8 * (15 - (index & 15)))) & 0xff);
}
/**
* Compare this LongObjectId to another and obtain a sort ordering.
*
* @param other
* the other id to compare to. Must not be null.
* @return &lt; 0 if this id comes before other; 0 if this id is equal to
* other; &gt; 0 if this id comes after other.
*/
public final int compareTo(final AnyLongObjectId other) {
if (this == other)
return 0;
int cmp;
cmp = NB.compareUInt64(w1, other.w1);
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w2, other.w2);
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w3, other.w3);
if (cmp != 0)
return cmp;
return NB.compareUInt64(w4, other.w4);
}
/**
* Compare this LongObjectId to a network-byte-order LongObjectId.
*
* @param bs
* array containing the other LongObjectId in network byte order.
* @param p
* position within {@code bs} to start the compare at. At least
* 32 bytes, starting at this position are required.
* @return a negative integer, zero, or a positive integer as this object is
* less than, equal to, or greater than the specified object.
*/
public final int compareTo(final byte[] bs, final int p) {
int cmp;
cmp = NB.compareUInt64(w1, NB.decodeInt64(bs, p));
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w2, NB.decodeInt64(bs, p + 8));
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w3, NB.decodeInt64(bs, p + 16));
if (cmp != 0)
return cmp;
return NB.compareUInt64(w4, NB.decodeInt64(bs, p + 24));
}
/**
* Compare this LongObjectId to a network-byte-order LongObjectId.
*
* @param bs
* array containing the other LongObjectId in network byte order.
* @param p
* position within {@code bs} to start the compare at. At least 4
* longs, starting at this position are required.
* @return a negative integer, zero, or a positive integer as this object is
* less than, equal to, or greater than the specified object.
*/
public final int compareTo(final long[] bs, final int p) {
int cmp;
cmp = NB.compareUInt64(w1, bs[p]);
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w2, bs[p + 1]);
if (cmp != 0)
return cmp;
cmp = NB.compareUInt64(w3, bs[p + 2]);
if (cmp != 0)
return cmp;
return NB.compareUInt64(w4, bs[p + 3]);
}
/**
* Tests if this LongObjectId starts with the given abbreviation.
*
* @param abbr
* the abbreviation.
* @return true if this LongObjectId begins with the abbreviation; else
* false.
*/
public boolean startsWith(final AbbreviatedLongObjectId abbr) {
return abbr.prefixCompare(this) == 0;
}
public final int hashCode() {
return (int) (w1 >> 32);
}
/**
* Determine if this LongObjectId has exactly the same value as another.
*
* @param other
* the other id to compare to. May be null.
* @return true only if both LongObjectIds have identical bits.
*/
public final boolean equals(final AnyLongObjectId other) {
return other != null ? equals(this, other) : false;
}
public final boolean equals(final Object o) {
if (o instanceof AnyLongObjectId)
return equals((AnyLongObjectId) o);
else
return false;
}
/**
* Copy this LongObjectId to an output writer in raw binary.
*
* @param w
* the buffer to copy to. Must be in big endian order.
*/
public void copyRawTo(final ByteBuffer w) {
w.putLong(w1);
w.putLong(w2);
w.putLong(w3);
w.putLong(w4);
}
/**
* Copy this LongObjectId to a byte array.
*
* @param b
* the buffer to copy to.
* @param o
* the offset within b to write at.
*/
public void copyRawTo(final byte[] b, final int o) {
NB.encodeInt64(b, o, w1);
NB.encodeInt64(b, o + 8, w2);
NB.encodeInt64(b, o + 16, w3);
NB.encodeInt64(b, o + 24, w4);
}
/**
* Copy this LongObjectId to an long array.
*
* @param b
* the buffer to copy to.
* @param o
* the offset within b to write at.
*/
public void copyRawTo(final long[] b, final int o) {
b[o] = w1;
b[o + 1] = w2;
b[o + 2] = w3;
b[o + 3] = w4;
}
/**
* Copy this LongObjectId to an output writer in raw binary.
*
* @param w
* the stream to write to.
* @throws IOException
* the stream writing failed.
*/
public void copyRawTo(final OutputStream w) throws IOException {
writeRawLong(w, w1);
writeRawLong(w, w2);
writeRawLong(w, w3);
writeRawLong(w, w4);
}
private static void writeRawLong(final OutputStream w, long v)
throws IOException {
w.write((int) (v >>> 56));
w.write((int) (v >>> 48));
w.write((int) (v >>> 40));
w.write((int) (v >>> 32));
w.write((int) (v >>> 24));
w.write((int) (v >>> 16));
w.write((int) (v >>> 8));
w.write((int) v);
}
/**
* Copy this LongObjectId to an output writer in hex format.
*
* @param w
* the stream to copy to.
* @throws IOException
* the stream writing failed.
*/
public void copyTo(final OutputStream w) throws IOException {
w.write(toHexByteArray());
}
/**
* Copy this LongObjectId to a byte array in hex format.
*
* @param b
* the buffer to copy to.
* @param o
* the offset within b to write at.
*/
public void copyTo(byte[] b, int o) {
formatHexByte(b, o + 0, w1);
formatHexByte(b, o + 16, w2);
formatHexByte(b, o + 32, w3);
formatHexByte(b, o + 48, w4);
}
/**
* Copy this LongObjectId to a ByteBuffer in hex format.
*
* @param b
* the buffer to copy to.
*/
public void copyTo(ByteBuffer b) {
b.put(toHexByteArray());
}
private byte[] toHexByteArray() {
final byte[] dst = new byte[Constants.LONG_OBJECT_ID_STRING_LENGTH];
formatHexByte(dst, 0, w1);
formatHexByte(dst, 16, w2);
formatHexByte(dst, 32, w3);
formatHexByte(dst, 48, w4);
return dst;
}
private static final byte[] hexbyte = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
private static void formatHexByte(final byte[] dst, final int p, long w) {
int o = p + 15;
while (o >= p && w != 0) {
dst[o--] = hexbyte[(int) (w & 0xf)];
w >>>= 4;
}
while (o >= p)
dst[o--] = '0';
}
/**
* Copy this LongObjectId to an output writer in hex format.
*
* @param w
* the stream to copy to.
* @throws IOException
* the stream writing failed.
*/
public void copyTo(final Writer w) throws IOException {
w.write(toHexCharArray());
}
/**
* Copy this LongObjectId to an output writer in hex format.
*
* @param tmp
* temporary char array to buffer construct into before writing.
* Must be at least large enough to hold 2 digits for each byte
* of object id (64 characters or larger).
* @param w
* the stream to copy to.
* @throws IOException
* the stream writing failed.
*/
public void copyTo(final char[] tmp, final Writer w) throws IOException {
toHexCharArray(tmp);
w.write(tmp, 0, Constants.LONG_OBJECT_ID_STRING_LENGTH);
}
/**
* Copy this LongObjectId to a StringBuilder in hex format.
*
* @param tmp
* temporary char array to buffer construct into before writing.
* Must be at least large enough to hold 2 digits for each byte
* of object id (64 characters or larger).
* @param w
* the string to append onto.
*/
public void copyTo(final char[] tmp, final StringBuilder w) {
toHexCharArray(tmp);
w.append(tmp, 0, Constants.LONG_OBJECT_ID_STRING_LENGTH);
}
char[] toHexCharArray() {
final char[] dst = new char[Constants.LONG_OBJECT_ID_STRING_LENGTH];
toHexCharArray(dst);
return dst;
}
private void toHexCharArray(final char[] dst) {
formatHexChar(dst, 0, w1);
formatHexChar(dst, 16, w2);
formatHexChar(dst, 32, w3);
formatHexChar(dst, 48, w4);
}
private static final char[] hexchar = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
static void formatHexChar(final char[] dst, final int p, long w) {
int o = p + 15;
while (o >= p && w != 0) {
dst[o--] = hexchar[(int) (w & 0xf)];
w >>>= 4;
}
while (o >= p)
dst[o--] = '0';
}
@SuppressWarnings("nls")
@Override
public String toString() {
return "AnyLongObjectId[" + name() + "]";
}
/**
* @return string form of the SHA-256, in lower case hexadecimal.
*/
public final String name() {
return new String(toHexCharArray());
}
/**
* @return string form of the SHA-256, in lower case hexadecimal.
*/
public final String getName() {
return name();
}
/**
* Return an abbreviation (prefix) of this object SHA-256.
* <p>
* This implementation does not guarantee uniqueness. Callers should instead
* use {@link ObjectReader#abbreviate(AnyObjectId, int)} to obtain a unique
* abbreviation within the scope of a particular object database.
*
* @param len
* length of the abbreviated string.
* @return SHA-256 abbreviation.
*/
public AbbreviatedLongObjectId abbreviate(final int len) {
final long a = AbbreviatedLongObjectId.mask(len, 1, w1);
final long b = AbbreviatedLongObjectId.mask(len, 2, w2);
final long c = AbbreviatedLongObjectId.mask(len, 3, w3);
final long d = AbbreviatedLongObjectId.mask(len, 4, w4);
return new AbbreviatedLongObjectId(len, a, b, c, d);
}
/**
* Obtain an immutable copy of this current object.
* <p>
* Only returns <code>this</code> if this instance is an unsubclassed
* instance of {@link LongObjectId}; otherwise a new instance is returned
* holding the same value.
* <p>
* This method is useful to shed any additional memory that may be tied to
* the subclass, yet retain the unique identity of the object id for future
* lookups within maps and repositories.
*
* @return an immutable copy, using the smallest memory footprint possible.
*/
public final LongObjectId copy() {
if (getClass() == LongObjectId.class)
return (LongObjectId) this;
return new LongObjectId(this);
}
/**
* Obtain an immutable copy of this current object.
* <p>
* See {@link #copy()} if <code>this</code> is a possibly subclassed (but
* immutable) identity and the application needs a lightweight identity
* <i>only</i> reference.
*
* @return an immutable copy. May be <code>this</code> if this is already an
* immutable instance.
*/
public abstract LongObjectId toObjectId();
}

102
org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/Constants.java

@ -0,0 +1,102 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.lib;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.MessageFormat;
import org.eclipse.jgit.lfs.internal.LfsText;
/**
* Misc. constants used throughout JGit LFS extension.
*
* @since 4.3
**/
@SuppressWarnings("nls")
public final class Constants {
/** Hash function used natively by Git LFS extension for large objects. */
private static final String LONG_HASH_FUNCTION = "SHA-256";
/**
* A Git LFS large object hash is 256 bits, i.e. 32 bytes.
* <p>
* Changing this assumption is not going to be as easy as changing this
* declaration.
*/
public static final int LONG_OBJECT_ID_LENGTH = 32;
/**
* A Git LFS large object can be expressed as a 64 character string of
* hexadecimal digits.
*
* @see #LONG_OBJECT_ID_LENGTH
*/
public static final int LONG_OBJECT_ID_STRING_LENGTH = LONG_OBJECT_ID_LENGTH
* 2;
/**
* Create a new digest function for objects.
*
* @return a new digest object.
* @throws RuntimeException
* this Java virtual machine does not support the required hash
* function. Very unlikely given that JGit uses a hash function
* that is in the Java reference specification.
*/
public static MessageDigest newMessageDigest() {
try {
return MessageDigest.getInstance(LONG_HASH_FUNCTION);
} catch (NoSuchAlgorithmException nsae) {
throw new RuntimeException(MessageFormat.format(
LfsText.get().requiredHashFunctionNotAvailable,
LONG_HASH_FUNCTION), nsae);
}
}
static {
if (LONG_OBJECT_ID_LENGTH != newMessageDigest().getDigestLength())
throw new LinkageError(
LfsText.get().incorrectLONG_OBJECT_ID_LENGTH);
}
}

309
org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/LongObjectId.java

@ -0,0 +1,309 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.lib;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import org.eclipse.jgit.lfs.errors.InvalidLongObjectIdException;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.util.NB;
import org.eclipse.jgit.util.RawParseUtils;
/**
* A SHA-256 abstraction.
*
* Ported to SHA-256 from {@link ObjectId}
*
* @since 4.3
*/
public class LongObjectId extends AnyLongObjectId implements Serializable {
private static final long serialVersionUID = 1L;
private static final LongObjectId ZEROID;
private static final String ZEROID_STR;
static {
ZEROID = new LongObjectId(0L, 0L, 0L, 0L);
ZEROID_STR = ZEROID.name();
}
/**
* Get the special all-zero LongObjectId.
*
* @return the all-zero LongObjectId, often used to stand-in for no object.
*/
public static final LongObjectId zeroId() {
return ZEROID;
}
/**
* Test a string of characters to verify that it can be interpreted as
* LongObjectId.
* <p>
* If true the string can be parsed with {@link #fromString(String)}.
*
* @param id
* the string to test.
* @return true if the string can converted into an LongObjectId.
*/
public static final boolean isId(final String id) {
if (id.length() != Constants.LONG_OBJECT_ID_STRING_LENGTH)
return false;
try {
for (int i = 0; i < Constants.LONG_OBJECT_ID_STRING_LENGTH; i++) {
RawParseUtils.parseHexInt4((byte) id.charAt(i));
}
return true;
} catch (ArrayIndexOutOfBoundsException e) {
return false;
}
}
/**
* Convert a LongObjectId into a hex string representation.
*
* @param i
* the id to convert. May be null.
* @return the hex string conversion of this id's content.
*/
public static final String toString(final LongObjectId i) {
return i != null ? i.name() : ZEROID_STR;
}
/**
* Compare two object identifier byte sequences for equality.
*
* @param firstBuffer
* the first buffer to compare against. Must have at least 32
* bytes from position fi through the end of the buffer.
* @param fi
* first offset within firstBuffer to begin testing.
* @param secondBuffer
* the second buffer to compare against. Must have at least 32
* bytes from position si through the end of the buffer.
* @param si
* first offset within secondBuffer to begin testing.
* @return true if the two identifiers are the same.
*/
public static boolean equals(final byte[] firstBuffer, final int fi,
final byte[] secondBuffer, final int si) {
return firstBuffer[fi] == secondBuffer[si]
&& firstBuffer[fi + 1] == secondBuffer[si + 1]
&& firstBuffer[fi + 2] == secondBuffer[si + 2]
&& firstBuffer[fi + 3] == secondBuffer[si + 3]
&& firstBuffer[fi + 4] == secondBuffer[si + 4]
&& firstBuffer[fi + 5] == secondBuffer[si + 5]
&& firstBuffer[fi + 6] == secondBuffer[si + 6]
&& firstBuffer[fi + 7] == secondBuffer[si + 7]
&& firstBuffer[fi + 8] == secondBuffer[si + 8]
&& firstBuffer[fi + 9] == secondBuffer[si + 9]
&& firstBuffer[fi + 10] == secondBuffer[si + 10]
&& firstBuffer[fi + 11] == secondBuffer[si + 11]
&& firstBuffer[fi + 12] == secondBuffer[si + 12]
&& firstBuffer[fi + 13] == secondBuffer[si + 13]
&& firstBuffer[fi + 14] == secondBuffer[si + 14]
&& firstBuffer[fi + 15] == secondBuffer[si + 15]
&& firstBuffer[fi + 16] == secondBuffer[si + 16]
&& firstBuffer[fi + 17] == secondBuffer[si + 17]
&& firstBuffer[fi + 18] == secondBuffer[si + 18]
&& firstBuffer[fi + 19] == secondBuffer[si + 19]
&& firstBuffer[fi + 20] == secondBuffer[si + 20]
&& firstBuffer[fi + 21] == secondBuffer[si + 21]
&& firstBuffer[fi + 22] == secondBuffer[si + 22]
&& firstBuffer[fi + 23] == secondBuffer[si + 23]
&& firstBuffer[fi + 24] == secondBuffer[si + 24]
&& firstBuffer[fi + 25] == secondBuffer[si + 25]
&& firstBuffer[fi + 26] == secondBuffer[si + 26]
&& firstBuffer[fi + 27] == secondBuffer[si + 27]
&& firstBuffer[fi + 28] == secondBuffer[si + 28]
&& firstBuffer[fi + 29] == secondBuffer[si + 29]
&& firstBuffer[fi + 30] == secondBuffer[si + 30]
&& firstBuffer[fi + 31] == secondBuffer[si + 31];
}
/**
* Convert a LongObjectId from raw binary representation.
*
* @param bs
* the raw byte buffer to read from. At least 32 bytes must be
* available within this byte array.
* @return the converted object id.
*/
public static final LongObjectId fromRaw(final byte[] bs) {
return fromRaw(bs, 0);
}
/**
* Convert a LongObjectId from raw binary representation.
*
* @param bs
* the raw byte buffer to read from. At least 32 bytes after p
* must be available within this byte array.
* @param p
* position to read the first byte of data from.
* @return the converted object id.
*/
public static final LongObjectId fromRaw(final byte[] bs, final int p) {
final long a = NB.decodeInt64(bs, p);
final long b = NB.decodeInt64(bs, p + 8);
final long c = NB.decodeInt64(bs, p + 16);
final long d = NB.decodeInt64(bs, p + 24);
return new LongObjectId(a, b, c, d);
}
/**
* Convert a LongObjectId from raw binary representation.
*
* @param is
* the raw long buffer to read from. At least 4 longs must be
* available within this long array.
* @return the converted object id.
*/
public static final LongObjectId fromRaw(final long[] is) {
return fromRaw(is, 0);
}
/**
* Convert a LongObjectId from raw binary representation.
*
* @param is
* the raw long buffer to read from. At least 4 longs after p
* must be available within this long array.
* @param p
* position to read the first long of data from.
* @return the converted object id.
*/
public static final LongObjectId fromRaw(final long[] is, final int p) {
return new LongObjectId(is[p], is[p + 1], is[p + 2], is[p + 3]);
}
/**
* Convert a LongObjectId from hex characters (US-ASCII).
*
* @param buf
* the US-ASCII buffer to read from. At least 64 bytes after
* offset must be available within this byte array.
* @param offset
* position to read the first character from.
* @return the converted object id.
*/
public static final LongObjectId fromString(final byte[] buf, final int offset) {
return fromHexString(buf, offset);
}
/**
* Convert a LongObjectId from hex characters.
*
* @param str
* the string to read from. Must be 64 characters long.
* @return the converted object id.
*/
public static LongObjectId fromString(final String str) {
if (str.length() != Constants.LONG_OBJECT_ID_STRING_LENGTH)
throw new InvalidLongObjectIdException(str);
return fromHexString(org.eclipse.jgit.lib.Constants.encodeASCII(str),
0);
}
private static final LongObjectId fromHexString(final byte[] bs, int p) {
try {
final long a = RawParseUtils.parseHexInt64(bs, p);
final long b = RawParseUtils.parseHexInt64(bs, p + 16);
final long c = RawParseUtils.parseHexInt64(bs, p + 32);
final long d = RawParseUtils.parseHexInt64(bs, p + 48);
return new LongObjectId(a, b, c, d);
} catch (ArrayIndexOutOfBoundsException e1) {
throw new InvalidLongObjectIdException(bs, p,
Constants.LONG_OBJECT_ID_STRING_LENGTH);
}
}
LongObjectId(final long new_1, final long new_2, final long new_3,
final long new_4) {
w1 = new_1;
w2 = new_2;
w3 = new_3;
w4 = new_4;
}
/**
* Initialize this instance by copying another existing LongObjectId.
* <p>
* This constructor is mostly useful for subclasses which want to extend a
* LongObjectId with more properties, but initialize from an existing
* LongObjectId instance acquired by other means.
*
* @param src
* another already parsed LongObjectId to copy the value out of.
*/
protected LongObjectId(final AnyLongObjectId src) {
w1 = src.w1;
w2 = src.w2;
w3 = src.w3;
w4 = src.w4;
}
@Override
public LongObjectId toObjectId() {
return this;
}
private void writeObject(ObjectOutputStream os) throws IOException {
os.writeLong(w1);
os.writeLong(w2);
os.writeLong(w3);
os.writeLong(w4);
}
private void readObject(ObjectInputStream ois) throws IOException {
w1 = ois.readLong();
w2 = ois.readLong();
w3 = ois.readLong();
w4 = ois.readLong();
}
}

256
org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/MutableLongObjectId.java

@ -0,0 +1,256 @@
/*
* Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* 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.
*/
package org.eclipse.jgit.lfs.lib;
import java.text.MessageFormat;
import org.eclipse.jgit.lfs.errors.InvalidLongObjectIdException;
import org.eclipse.jgit.lfs.internal.LfsText;
import org.eclipse.jgit.lib.MutableObjectId;
import org.eclipse.jgit.util.NB;
import org.eclipse.jgit.util.RawParseUtils;
/**
* A mutable SHA-256 abstraction.
*
* Ported to SHA-256 from {@link MutableObjectId}
*
* @since 4.3
*/
public class MutableLongObjectId extends AnyLongObjectId {
/**
* Empty constructor. Initialize object with default (zeros) value.
*/
public MutableLongObjectId() {
super();
}
/**
* Copying constructor.
*
* @param src
* original entry, to copy id from
*/
MutableLongObjectId(MutableLongObjectId src) {
fromObjectId(src);
}
/**
* Set any byte in the id.
*
* @param index
* index of the byte to set in the raw form of the ObjectId. Must
* be in range [0, {@link Constants#LONG_OBJECT_ID_LENGTH}).
* @param value
* the value of the specified byte at {@code index}. Values are
* unsigned and thus are in the range [0,255] rather than the
* signed byte range of [-128, 127].
* @throws ArrayIndexOutOfBoundsException
* {@code index} is less than 0, equal to
* {@link Constants#LONG_OBJECT_ID_LENGTH}, or greater than
* {@link Constants#LONG_OBJECT_ID_LENGTH}.
*/
public void setByte(int index, int value) {
switch (index >> 3) {
case 0:
w1 = set(w1, index & 7, value);
break;
case 1:
w2 = set(w2, index & 7, value);
break;
case 2:
w3 = set(w3, index & 7, value);
break;
case 3:
w4 = set(w4, index & 7, value);
break;
default:
throw new ArrayIndexOutOfBoundsException(index);
}
}
private static long set(long w, int index, long value) {
value &= 0xff;
switch (index) {
case 0:
return (w & 0x00ffffffffffffffL) | (value << 56);
case 1:
return (w & 0xff00ffffffffffffL) | (value << 48);
case 2:
return (w & 0xffff00ffffffffffL) | (value << 40);
case 3:
return (w & 0xffffff00ffffffffL) | (value << 32);
case 4:
return (w & 0xffffffff00ffffffL) | (value << 24);
case 5:
return (w & 0xffffffffff00ffffL) | (value << 16);
case 6:
return (w & 0xffffffffffff00ffL) | (value << 8);
case 7:
return (w & 0xffffffffffffff00L) | value;
default:
throw new ArrayIndexOutOfBoundsException();
}
}
/** Make this id match {@link LongObjectId#zeroId()}. */
public void clear() {
w1 = 0;
w2 = 0;
w3 = 0;
w4 = 0;
}
/**
* Copy an LongObjectId into this mutable buffer.
*
* @param src
* the source id to copy from.
*/
public void fromObjectId(AnyLongObjectId src) {
this.w1 = src.w1;
this.w2 = src.w2;
this.w3 = src.w3;
this.w4 = src.w4;
}
/**
* Convert an LongObjectId from raw binary representation.
*
* @param bs
* the raw byte buffer to read from. At least 32 bytes must be
* available within this byte array.
*/
public void fromRaw(final byte[] bs) {
fromRaw(bs, 0);
}
/**
* Convert an LongObjectId from raw binary representation.
*
* @param bs
* the raw byte buffer to read from. At least 32 bytes after p
* must be available within this byte array.
* @param p
* position to read the first byte of data from.
*/
public void fromRaw(final byte[] bs, final int p) {
w1 = NB.decodeInt64(bs, p);
w2 = NB.decodeInt64(bs, p + 8);
w3 = NB.decodeInt64(bs, p + 16);
w4 = NB.decodeInt64(bs, p + 24);
}
/**
* Convert an LongObjectId from binary representation expressed in integers.
*
* @param longs
* the raw long buffer to read from. At least 4 longs must be
* available within this longs array.
*/
public void fromRaw(final long[] longs) {
fromRaw(longs, 0);
}
/**
* Convert an LongObjectId from binary representation expressed in longs.
*
* @param longs
* the raw int buffer to read from. At least 4 longs after p must
* be available within this longs array.
* @param p
* position to read the first integer of data from.
*
*/
public void fromRaw(final long[] longs, final int p) {
w1 = longs[p];
w2 = longs[p + 1];
w3 = longs[p + 2];
w4 = longs[p + 3];
}
/**
* Convert an LongObjectId from hex characters (US-ASCII).
*
* @param buf
* the US-ASCII buffer to read from. At least 32 bytes after
* offset must be available within this byte array.
* @param offset
* position to read the first character from.
*/
public void fromString(final byte[] buf, final int offset) {
fromHexString(buf, offset);
}
/**
* Convert an LongObjectId from hex characters.
*
* @param str
* the string to read from. Must be 64 characters long.
*/
public void fromString(final String str) {
if (str.length() != Constants.LONG_OBJECT_ID_STRING_LENGTH)
throw new IllegalArgumentException(
MessageFormat.format(LfsText.get().invalidLongId, str));
fromHexString(org.eclipse.jgit.lib.Constants.encodeASCII(str), 0);
}
private void fromHexString(final byte[] bs, int p) {
try {
w1 = RawParseUtils.parseHexInt64(bs, p);
w2 = RawParseUtils.parseHexInt64(bs, p + 16);
w3 = RawParseUtils.parseHexInt64(bs, p + 32);
w4 = RawParseUtils.parseHexInt64(bs, p + 48);
} catch (ArrayIndexOutOfBoundsException e1) {
throw new InvalidLongObjectIdException(bs, p,
Constants.LONG_OBJECT_ID_STRING_LENGTH);
}
}
@Override
public LongObjectId toObjectId() {
return new LongObjectId(this);
}
}

1
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.gitignore vendored

@ -0,0 +1 @@
target/

17
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.project

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.jgit.lfs.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>

3
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.settings/org.eclipse.core.resources.prefs

@ -0,0 +1,3 @@
#Fri Jun 18 23:33:45 CEST 2010
eclipse.preferences.version=1
encoding/<project>=UTF-8

3
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.settings/org.eclipse.core.runtime.prefs

@ -0,0 +1,3 @@
#Fri Jun 18 23:33:45 CEST 2010
eclipse.preferences.version=1
line.separator=\n

4
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.settings/org.eclipse.mylyn.tasks.ui.prefs

@ -0,0 +1,4 @@
#Tue Jul 19 20:11:28 CEST 2011
eclipse.preferences.version=1
project.repository.kind=bugzilla
project.repository.url=https\://bugs.eclipse.org/bugs

3
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/.settings/org.eclipse.mylyn.team.ui.prefs

@ -0,0 +1,3 @@
#Tue Jul 19 20:11:28 CEST 2011
commit.comment.template=${task.description} \n\nBug\: ${task.key}
eclipse.preferences.version=1

4
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/build.properties

@ -0,0 +1,4 @@
bin.includes = feature.xml,\
edl-v10.html,\
feature.properties,\
license.html

59
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/edl-v10.html

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Eclipse Distribution License - Version 1.0</title>
<style type="text/css">
body {
size: 8.5in 11.0in;
margin: 0.25in 0.5in 0.25in 0.5in;
tab-interval: 0.5in;
}
p {
margin-left: auto;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
p.list {
margin-left: 0.5in;
margin-top: 0.05em;
margin-bottom: 0.05em;
}
</style>
</head>
<body lang="EN-US">
<p><b>Eclipse Distribution License - v 1.0</b></p>
<p>Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors. </p>
<p>All rights reserved.</p>
<p>Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
<ul><li>Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.</li>
<li>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.</li>
<li>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.</li></ul>
</p>
<p>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.</p>
</body>
</html>

159
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.properties

@ -0,0 +1,159 @@
###############################################################################
# Copyright (c) 20015 Matthias Sohn <matthias.sohn@sap.com> and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
###############################################################################
featureName=Java implementation of Git - optional LFS support
providerName=Eclipse JGit
updateSiteName=Eclipse JGit Update Site
# description property - text of the "Feature Description"
description=\
Optional LFS support.\n
################ end of description property ##################################
# "copyright" property - text of the "Feature Update Copyright"
copyright=\
Copyright (c) 2015, Matthias Sohn et.al.\n\
All rights reserved. This program and the accompanying materials\n\
are made available under the terms of the Eclipse Distribution License v1.0\n\
which accompanies this distribution, and is available at\n\
http://www.eclipse.org/org/documents/edl-v10.html\n
################ end of copyright property ####################################
# "licenseURL" property - URL of the "Feature License"
# do not translate value - just change to point to a locale-specific HTML page
licenseURL=license.html
# "license" property - text of the "Feature Update License"
# should be plain text version of license agreement pointed to be "licenseURL"
license=\
Eclipse Foundation Software User Agreement\n\
April 9, 2014\n\
\n\
Usage Of Content\n\
\n\
THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
\n\
Applicable Licenses\n\
\n\
Unless otherwise indicated, all Content made available by the\n\
Eclipse Foundation is provided to you under the terms and conditions of\n\
the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
For purposes of the EPL, "Program" will mean the Content.\n\
\n\
Content includes, but is not limited to, source code, object code,\n\
documentation and other files maintained in the Eclipse Foundation source code\n\
repository ("Repository") in software modules ("Modules") and made available\n\
as downloadable archives ("Downloads").\n\
\n\
- Content may be structured and packaged into modules to facilitate delivering,\n\
extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
plug-in fragments ("Fragments"), and features ("Features").\n\
- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
in a directory named "plugins".\n\
- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
Each Feature may be packaged as a sub-directory in a directory named "features".\n\
Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
- Features may also include other Features ("Included Features"). Within a Feature, files\n\
named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
\n\
The terms and conditions governing Plug-ins and Fragments should be\n\
contained in files named "about.html" ("Abouts"). The terms and\n\
conditions governing Features and Included Features should be contained\n\
in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
Licenses may be located in any directory of a Download or Module\n\
including, but not limited to the following locations:\n\
\n\
- The top-level (root) directory\n\
- Plug-in and Fragment directories\n\
- Inside Plug-ins and Fragments packaged as JARs\n\
- Sub-directories of the directory named "src" of certain Plug-ins\n\
- Feature directories\n\
\n\
Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
Update License") during the installation process. If the Feature contains\n\
Included Features, the Feature Update License should either provide you\n\
with the terms and conditions governing the Included Features or inform\n\
you where you can locate them. Feature Update Licenses may be found in\n\
the "license" property of files named "feature.properties" found within a Feature.\n\
Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
terms and conditions (or references to such terms and conditions) that\n\
govern your use of the associated Content in that directory.\n\
\n\
THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
\n\
- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
\n\
IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
govern that particular Content.\n\
\n\
\n\Use of Provisioning Technology\n\
\n\
The Eclipse Foundation makes available provisioning software, examples of which include,\n\
but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
the purpose of allowing users to install software, documentation, information and/or\n\
other materials (collectively "Installable Software"). This capability is provided with\n\
the intent of allowing such users to install, extend and update Eclipse-based products.\n\
Information about packaging Installable Software is available at\n\
http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
\n\
You may use Provisioning Technology to allow other parties to install Installable Software.\n\
You shall be responsible for enabling the applicable license agreements relating to the\n\
Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
making it available in accordance with the Specification, you further acknowledge your\n\
agreement to, and the acquisition of all necessary rights to permit the following:\n\
\n\
1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
extending or updating the functionality of an Eclipse-based product.\n\
2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
govern the use of the Installable Software ("Installable Software Agreement") and such\n\
Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
with the Specification. Such Installable Software Agreement must inform the user of the\n\
terms and conditions that govern the Installable Software and must solicit acceptance by\n\
the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
indication of agreement by the user, the provisioning Technology will complete installation\n\
of the Installable Software.\n\
\n\
Cryptography\n\
\n\
Content may contain encryption software. The country in which you are\n\
currently may have restrictions on the import, possession, and use,\n\
and/or re-export to another country, of encryption software. BEFORE\n\
using any encryption software, please check the country's laws,\n\
regulations and policies concerning the import, possession, or use, and\n\
re-export of encryption software, to see if this is permitted.\n\
\n\
Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
########### end of license property ##########################################

36
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.eclipse.jgit.lfs"
label="%featureName"
version="4.3.0.qualifier"
provider-name="%providerName">
<description url="http://www.eclipse.org/jgit/">
%description
</description>
<copyright>
%copyright
</copyright>
<license url="%licenseURL">
%license
</license>
<url>
<update label="%updateSiteName" url="http://download.eclipse.org/egit/updates"/>
<discovery label="%updateSiteName" url="http://download.eclipse.org/egit/updates"/>
</url>
<requires>
<import plugin="org.eclipse.jgit"/>
</requires>
<plugin
id="org.eclipse.jgit.lfs"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

106
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/license.html

@ -0,0 +1,106 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- saved from url=(0044)http://www.eclipse.org/legal/epl/notice.html -->
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Eclipse Foundation Software User Agreement</title>
</head>
<body lang="EN-US">
<h2>Eclipse Foundation Software User Agreement</h2>
<p>April 9, 2014</p>
<h3>Usage Of Content</h3>
<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
(COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
<h3>Applicable Licenses</h3>
<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
("EPL"). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
For purposes of the EPL, "Program" will mean the Content.</p>
<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
<ul>
<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
and/or Fragments associated with that Feature.</li>
<li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
</ul>
<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
including, but not limited to the following locations:</p>
<ul>
<li>The top-level (root) directory</li>
<li>Plug-in and Fragment directories</li>
<li>Inside Plug-ins and Fragments packaged as JARs</li>
<li>Sub-directories of the directory named "src" of certain Plug-ins</li>
<li>Feature directories</li>
</ul>
<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
that directory.</p>
<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
<ul>
<li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
</ul>
<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
<h3>Use of Provisioning Technology</h3>
<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
("Specification").</p>
<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
<ol>
<li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
product.</li>
<li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
accessed and copied to the Target Machine.</li>
<li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
</ol>
<h3>Cryptography</h3>
<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
possession, or use, and re-export of encryption software, to see if this is permitted.</p>
<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
</body></html>

77
org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2015, Matthias Sohn <matthias.sohn@sap.com>
and other copyright owners as documented in the project's IP log.
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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.eclipse.jgit</groupId>
<artifactId>jgit.tycho.parent</artifactId>
<version>4.3.0-SNAPSHOT</version>
</parent>
<groupId>org.eclipse.jgit.feature</groupId>
<artifactId>org.eclipse.jgit.lfs</artifactId>
<packaging>eclipse-feature</packaging>
<name>JGit - Optional LFS support</name>
<dependencies>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit.lfs</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

3
org.eclipse.jgit.packaging/org.eclipse.jgit.repository/category.xml

@ -21,6 +21,9 @@
<feature url="features/org.eclipse.jgit.http.apache_0.0.0.qualifier.jar" id="org.eclipse.jgit.http.apache" version="0.0.0" patch="true"> <feature url="features/org.eclipse.jgit.http.apache_0.0.0.qualifier.jar" id="org.eclipse.jgit.http.apache" version="0.0.0" patch="true">
<category name="JGit"/> <category name="JGit"/>
</feature> </feature>
<feature url="features/org.eclipse.jgit.lfs_0.0.0.qualifier.jar" id="org.eclipse.jgit.lfs" version="0.0.0">
<category name="JGit"/>
</feature>
<category-def name="JGit" label="JGit"> <category-def name="JGit" label="JGit">
<description> <description>
JGit JGit

5
org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml

@ -69,6 +69,11 @@
<artifactId>org.eclipse.jgit.http.apache</artifactId> <artifactId>org.eclipse.jgit.http.apache</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit.lfs</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.eclipse.jgit</groupId> <groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit.pgm</artifactId> <artifactId>org.eclipse.jgit.pgm</artifactId>

3
org.eclipse.jgit.packaging/pom.xml

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
Copyright (C) 2009, 2013, Matthias Sohn <matthias.sohn@sap.com> Copyright (C) 2009, 2015, Matthias Sohn <matthias.sohn@sap.com>
and other copyright owners as documented in the project's IP log. and other copyright owners as documented in the project's IP log.
This program and the accompanying materials are made available This program and the accompanying materials are made available
@ -78,6 +78,7 @@
<module>org.eclipse.jgit.target</module> <module>org.eclipse.jgit.target</module>
<module>org.eclipse.jgit.feature</module> <module>org.eclipse.jgit.feature</module>
<module>org.eclipse.jgit.http.apache.feature</module> <module>org.eclipse.jgit.http.apache.feature</module>
<module>org.eclipse.jgit.lfs.feature</module>
<module>org.eclipse.jgit.pgm.feature</module> <module>org.eclipse.jgit.pgm.feature</module>
<module>org.eclipse.jgit.source.feature</module> <module>org.eclipse.jgit.source.feature</module>
<module>org.eclipse.jgit.pgm.source.feature</module> <module>org.eclipse.jgit.pgm.source.feature</module>

13
org.eclipse.jgit.test/tst/org/eclipse/jgit/util/NBTest.java

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2008, Google Inc. * Copyright (C) 2008, 2015 Google Inc.
* and other copyright owners as documented in the project's IP log. * and other copyright owners as documented in the project's IP log.
* *
* This program and the accompanying materials are made available * This program and the accompanying materials are made available
@ -60,6 +60,17 @@ public class NBTest {
assertTrue(NB.compareUInt32(1, -1) < 0); assertTrue(NB.compareUInt32(1, -1) < 0);
} }
@Test
public void testCompareUInt64() {
assertTrue(NB.compareUInt64(0, 0) == 0);
assertTrue(NB.compareUInt64(1, 0) > 0);
assertTrue(NB.compareUInt64(0, 1) < 0);
assertTrue(NB.compareUInt64(-1, 0) > 0);
assertTrue(NB.compareUInt64(0, -1) < 0);
assertTrue(NB.compareUInt64(-1, 1) > 0);
assertTrue(NB.compareUInt64(1, -1) < 0);
}
@Test @Test
public void testDecodeUInt16() { public void testDecodeUInt16() {
assertEquals(0, NB.decodeUInt16(b(0, 0), 0)); assertEquals(0, NB.decodeUInt16(b(0, 0), 0));

33
org.eclipse.jgit/src/org/eclipse/jgit/util/NB.java

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> * Copyright (C) 2008, 2015 Shawn O. Pearce <spearce@spearce.org>
* and other copyright owners as documented in the project's IP log. * and other copyright owners as documented in the project's IP log.
* *
* This program and the accompanying materials are made available * This program and the accompanying materials are made available
@ -65,6 +65,37 @@ public final class NB {
return (a & 1) - (b & 1); return (a & 1) - (b & 1);
} }
/**
* Compare a 64 bit unsigned integer stored in a 64 bit signed integer.
* <p>
* This function performs an unsigned compare operation, even though Java
* does not natively support unsigned integer values. Negative numbers are
* treated as larger than positive ones.
*
* @param a
* the first value to compare.
* @param b
* the second value to compare.
* @return &lt; 0 if a &lt; b; 0 if a == b; &gt; 0 if a &gt; b.
* @since 4.3
*/
public static int compareUInt64(final long a, final long b) {
long cmp = (a >>> 1) - (b >>> 1);
if (cmp > 0) {
return 1;
} else if (cmp < 0) {
return -1;
}
cmp = ((a & 1) - (b & 1));
if (cmp > 0) {
return 1;
} else if (cmp < 0) {
return -1;
} else {
return 0;
}
}
/** /**
* Convert sequence of 2 bytes (network byte order) into unsigned value. * Convert sequence of 2 bytes (network byte order) into unsigned value.
* *

66
org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java

@ -365,6 +365,72 @@ public final class RawParseUtils {
return (r << 4) | last; return (r << 4) | last;
} }
/**
* Parse 16 character base 16 (hex) formatted string to unsigned long.
* <p>
* The number is read in network byte order, that is, most significant
* nibble first.
*
* @param bs
* buffer to parse digits from; positions {@code [p, p+16)} will
* be parsed.
* @param p
* first position within the buffer to parse.
* @return the integer value.
* @throws ArrayIndexOutOfBoundsException
* if the string is not hex formatted.
* @since 4.3
*/
public static final long parseHexInt64(final byte[] bs, final int p) {
long r = digits16[bs[p]] << 4;
r |= digits16[bs[p + 1]];
r <<= 4;
r |= digits16[bs[p + 2]];
r <<= 4;
r |= digits16[bs[p + 3]];
r <<= 4;
r |= digits16[bs[p + 4]];
r <<= 4;
r |= digits16[bs[p + 5]];
r <<= 4;
r |= digits16[bs[p + 6]];
r <<= 4;
r |= digits16[bs[p + 7]];
r <<= 4;
r |= digits16[bs[p + 8]];
r <<= 4;
r |= digits16[bs[p + 9]];
r <<= 4;
r |= digits16[bs[p + 10]];
r <<= 4;
r |= digits16[bs[p + 11]];
r <<= 4;
r |= digits16[bs[p + 12]];
r <<= 4;
r |= digits16[bs[p + 13]];
r <<= 4;
r |= digits16[bs[p + 14]];
final int last = digits16[bs[p + 15]];
if (r < 0 || last < 0)
throw new ArrayIndexOutOfBoundsException();
return (r << 4) | last;
}
/** /**
* Parse a single hex digit to its numeric value (0-15). * Parse a single hex digit to its numeric value (0-15).
* *

2
pom.xml

@ -767,6 +767,7 @@
<module>org.eclipse.jgit.http.apache</module> <module>org.eclipse.jgit.http.apache</module>
<module>org.eclipse.jgit.http.server</module> <module>org.eclipse.jgit.http.server</module>
<module>org.eclipse.jgit.pgm</module> <module>org.eclipse.jgit.pgm</module>
<module>org.eclipse.jgit.lfs</module>
<module>org.eclipse.jgit.junit</module> <module>org.eclipse.jgit.junit</module>
<module>org.eclipse.jgit.junit.http</module> <module>org.eclipse.jgit.junit.http</module>
@ -774,6 +775,7 @@
<module>org.eclipse.jgit.ant.test</module> <module>org.eclipse.jgit.ant.test</module>
<module>org.eclipse.jgit.http.test</module> <module>org.eclipse.jgit.http.test</module>
<module>org.eclipse.jgit.pgm.test</module> <module>org.eclipse.jgit.pgm.test</module>
<module>org.eclipse.jgit.lfs.test</module>
</modules> </modules>
</project> </project>

Loading…
Cancel
Save