[DEV] start transcode
This commit is contained in:
parent
e4b1d3ff46
commit
3619f28313
7
.checkstyle
Normal file
7
.checkstyle
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
|
||||
<fileset name="all" enabled="true" check-config-name="Ewol" local="false">
|
||||
<file-match-pattern match-pattern="." include-pattern="true"/>
|
||||
</fileset>
|
||||
</fileset-config>
|
24
.classpath
Normal file
24
.classpath
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5">
|
||||
<attributes>
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/scenarium-logger">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="out/eclipse/classes"/>
|
||||
</classpath>
|
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
# Compiled python modules.
|
||||
*.pyc
|
||||
|
||||
# Setuptools distribution folder.
|
||||
/dist/
|
||||
/build/
|
||||
|
||||
# Python egg metadata, regenerated from source files by setuptools.
|
||||
/*.egg-info
|
34
.gitlab-ci.yml
Normal file
34
.gitlab-ci.yml
Normal file
@ -0,0 +1,34 @@
|
||||
# This file is a template, and might need editing before it works on your project.
|
||||
# use the official gcc image, based on debian
|
||||
# can use verions as well, like gcc:5.2
|
||||
# see https://hub.docker.com/_/gcc/
|
||||
image: gcc
|
||||
|
||||
before_script:
|
||||
- pwd
|
||||
- git clone --depth 1 --branch master https://gitlab.com/atria-soft/ci.git
|
||||
- ls -l *
|
||||
- ls -l ..
|
||||
- apt-get update -qy
|
||||
- apt-get install -y python-dev python-pip
|
||||
#- pip install setuptools
|
||||
- ./setup.py install
|
||||
#- export PYTHONPATH=$PYTHONPATH:./lutin/build/lib.linux-x86_64-2.7/:./lutin/build/lib.linux-x86_64-2.7/lutin/:./lutin/build/lib:./lutin/build/lib/lutin/
|
||||
# - ./ci/build_send.py --tag=$TAG --status=START;
|
||||
|
||||
|
||||
build:
|
||||
stage: build
|
||||
# instead of calling g++ directly you can also use some build toolkit like make
|
||||
# install the necessary build tools when needed
|
||||
# before_script:
|
||||
# - apt update && apt -y install make autoconf
|
||||
script:
|
||||
- export TARGET=-tLinux
|
||||
- export CONF=-mdebug
|
||||
- export BUILDER=-cgcc
|
||||
- lutin -w -j4 -C -P $TARGET $BUILDER $COMPILATOR_OPTION $BUS $CONF $GCOV $DISABLE_PACKAGE test-c; STATUS=$?
|
||||
# - ./ci/build_send.py --tag=$TAG --status="$STATUS";
|
||||
# artifacts:
|
||||
# paths:
|
||||
# - mybinary
|
24
.project
Normal file
24
.project
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>atriasoft-island</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
<project>atriasoft-island</project>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
74
.travis.yml
Normal file
74
.travis.yml
Normal file
@ -0,0 +1,74 @@
|
||||
language: cpp
|
||||
|
||||
#sudo: false
|
||||
sudo: required
|
||||
dist: trusty
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- dev
|
||||
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-4.9
|
||||
- expect
|
||||
- binutils-mingw-w64-i686 # 32bit MinGW
|
||||
- gcc-mingw-w64-i686
|
||||
- g++-mingw-w64-i686
|
||||
- binutils-mingw-w64-x86-64 # 64bit MinGW
|
||||
- gcc-mingw-w64-x86-64
|
||||
- g++-mingw-w64-x86-64
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
env: CONF=release BUILDER=gcc TARGET=Linux TAG=Linux COMPILATOR_OPTION="--compilator-version=4.9"
|
||||
compiler: gcc
|
||||
- os: linux
|
||||
env: CONF=debug BUILDER=clang TARGET=Linux
|
||||
compiler: clang
|
||||
- os: linux
|
||||
env: CONF=release BUILDER=gcc TARGET=Windows TAG=Mingw
|
||||
compiler: x86_64-w64-mingw32-gcc
|
||||
- os: linux
|
||||
env: CONF=release BUILDER=gcc TARGET=Android TAG=Android DISABLE_PACKAGE=-p
|
||||
compiler: gcc
|
||||
- os: osx
|
||||
env: CONF=release BUILDER=clang TARGET=MacOs TAG=MacOs
|
||||
compiler: clang
|
||||
- os: osx
|
||||
env: CONF=release BUILDER=clang TARGET=IOs TAG=IOs
|
||||
compiler: clang
|
||||
|
||||
install:
|
||||
- ./setup.py build
|
||||
- export PYTHONPATH=$PYTHONPATH:./lutin/build/lib.linux-x86_64-2.7/:./lutin/build/lib.linux-x86_64-2.7/lutin/:./lutin/build/lib:./lutin/build/lib/lutin/
|
||||
- cd ..
|
||||
# download NDK
|
||||
- if [ "$TAG" == "Android" ]; then
|
||||
git clone --depth 1 --branch master https://github.com/HeeroYui/android-download-tool;
|
||||
./android-download-tool/dl-android.sh;
|
||||
fi
|
||||
- git clone --depth 1 --branch master https://github.com/atria-soft/ci.git
|
||||
- cd -
|
||||
|
||||
before_script:
|
||||
- cd ..
|
||||
- pwd
|
||||
- ls -l
|
||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
export PATH=$PATH:/Users/travis/Library/Python/2.7/bin/;
|
||||
fi
|
||||
- ./ci/build_send.py --tag=$TAG --status=START;
|
||||
|
||||
script:
|
||||
- ./lutin/build/scripts-2.7/lutin -w -j4 -C -P -t $TARGET -c $BUILDER $COMPILATOR_OPTION $BUS -m $CONF $GCOV $DISABLE_PACKAGE test-c; STATUS=$?
|
||||
- ./ci/build_send.py --tag=$TAG --status="$STATUS";
|
||||
|
||||
notifications:
|
||||
email:
|
||||
- yui.heero@gmail.com
|
66
CheckStyle.xml
Executable file
66
CheckStyle.xml
Executable file
@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Check Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
|
||||
|
||||
<!--
|
||||
This configuration file was written by the eclipse-cs plugin configuration editor
|
||||
-->
|
||||
<!--
|
||||
Checkstyle-Configuration: Marc Checks
|
||||
Description:
|
||||
Checkstyle configuration that checks the sun coding conventions.
|
||||
-->
|
||||
<module name="Checker">
|
||||
<property name="severity" value="error"/>
|
||||
<property name="fileExtensions" value="java, properties, xml"/>
|
||||
<module name="TreeWalker">
|
||||
<module name="ConstantName"/>
|
||||
<module name="LocalFinalVariableName"/>
|
||||
<module name="LocalVariableName"/>
|
||||
<module name="MemberName"/>
|
||||
<module name="MethodName"/>
|
||||
<module name="PackageName"/>
|
||||
<module name="ParameterName"/>
|
||||
<module name="StaticVariableName"/>
|
||||
<module name="TypeName"/>
|
||||
<module name="AvoidStarImport"/>
|
||||
<module name="IllegalImport"/>
|
||||
<module name="RedundantImport"/>
|
||||
<module name="UnusedImports">
|
||||
<property name="processJavadoc" value="false"/>
|
||||
</module>
|
||||
<module name="ModifierOrder"/>
|
||||
<module name="EmptyStatement"/>
|
||||
<module name="EqualsHashCode"/>
|
||||
<module name="IllegalInstantiation"/>
|
||||
<module name="MissingSwitchDefault"/>
|
||||
<module name="SimplifyBooleanExpression"/>
|
||||
<module name="SimplifyBooleanReturn"/>
|
||||
<module name="HideUtilityClassConstructor"/>
|
||||
<module name="InterfaceIsType"/>
|
||||
<module name="ArrayTypeStyle"/>
|
||||
<module name="TodoComment"/>
|
||||
<module name="UpperEll"/>
|
||||
<module name="AnnotationUseStyle"/>
|
||||
<module name="MissingDeprecated"/>
|
||||
<module name="MissingOverride"/>
|
||||
<module name="PackageAnnotation"/>
|
||||
<module name="SuppressWarnings"/>
|
||||
<module name="AnnotationLocation"/>
|
||||
<module name="ClassTypeParameterName"/>
|
||||
<module name="MethodTypeParameterName"/>
|
||||
<module name="InterfaceTypeParameterName"/>
|
||||
<module name="CatchParameterName"/>
|
||||
<module name="LambdaParameterName"/>
|
||||
<module name="Regexp"/>
|
||||
<module name="RegexpSinglelineJava"/>
|
||||
</module>
|
||||
<module name="BeforeExecutionExclusionFileFilter">
|
||||
<property name="fileNamePattern" value="module\-info\.java$"/>
|
||||
</module>
|
||||
<module name="Translation"/>
|
||||
<module name="Header"/>
|
||||
<module name="RegexpHeader"/>
|
||||
<module name="RegexpMultiline"/>
|
||||
<module name="RegexpOnFilename"/>
|
||||
<module name="RegexpSingleline"/>
|
||||
</module>
|
106
CleanUp.xml
Normal file
106
CleanUp.xml
Normal file
@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<profiles version="2">
|
||||
<profile kind="CleanUpProfile" name="EWOL" version="2">
|
||||
<setting id="cleanup.use_autoboxing" value="false"/>
|
||||
<setting id="cleanup.always_use_this_for_non_static_method_access" value="false"/>
|
||||
<setting id="cleanup.remove_trailing_whitespaces_ignore_empty" value="false"/>
|
||||
<setting id="cleanup.format_source_code_changes_only" value="false"/>
|
||||
<setting id="cleanup.remove_redundant_semicolons" value="false"/>
|
||||
<setting id="cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class" value="true"/>
|
||||
<setting id="cleanup.useless_continue" value="false"/>
|
||||
<setting id="cleanup.remove_redundant_type_arguments" value="true"/>
|
||||
<setting id="cleanup.remove_unused_imports" value="true"/>
|
||||
<setting id="cleanup.break_loop" value="false"/>
|
||||
<setting id="cleanup.pull_up_assignment" value="false"/>
|
||||
<setting id="cleanup.stringbuilder" value="false"/>
|
||||
<setting id="cleanup.no_super" value="false"/>
|
||||
<setting id="cleanup.arrays_fill" value="false"/>
|
||||
<setting id="cleanup.use_lambda" value="true"/>
|
||||
<setting id="cleanup.simplify_lambda_expression_and_method_ref" value="false"/>
|
||||
<setting id="cleanup.always_use_blocks" value="true"/>
|
||||
<setting id="cleanup.sort_members_all" value="false"/>
|
||||
<setting id="cleanup.instanceof" value="false"/>
|
||||
<setting id="cleanup.add_missing_annotations" value="true"/>
|
||||
<setting id="cleanup.precompile_regex" value="false"/>
|
||||
<setting id="cleanup.always_use_this_for_non_static_field_access" value="true"/>
|
||||
<setting id="cleanup.boolean_literal" value="false"/>
|
||||
<setting id="cleanup.always_use_parentheses_in_expressions" value="false"/>
|
||||
<setting id="cleanup.sort_members" value="false"/>
|
||||
<setting id="cleanup.remove_unused_local_variables" value="false"/>
|
||||
<setting id="cleanup.add_missing_deprecated_annotations" value="true"/>
|
||||
<setting id="cleanup.no_string_creation" value="false"/>
|
||||
<setting id="cleanup.use_unboxing" value="false"/>
|
||||
<setting id="cleanup.use_blocks_only_for_return_and_throw" value="false"/>
|
||||
<setting id="cleanup.if_condition" value="false"/>
|
||||
<setting id="cleanup.remove_trailing_whitespaces" value="true"/>
|
||||
<setting id="cleanup.map_cloning" value="false"/>
|
||||
<setting id="cleanup.add_serial_version_id" value="true"/>
|
||||
<setting id="cleanup.try_with_resource" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_method_access" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_method_access_only_if_necessary" value="true"/>
|
||||
<setting id="cleanup.make_local_variable_final" value="false"/>
|
||||
<setting id="cleanup.add_missing_methods" value="false"/>
|
||||
<setting id="cleanup.qualify_static_member_accesses_with_declaring_class" value="true"/>
|
||||
<setting id="cleanup.add_missing_override_annotations" value="true"/>
|
||||
<setting id="cleanup.use_blocks" value="true"/>
|
||||
<setting id="cleanup.collection_cloning" value="false"/>
|
||||
<setting id="cleanup.convert_to_enhanced_for_loop_if_loop_var_used" value="false"/>
|
||||
<setting id="cleanup.make_variable_declarations_final" value="true"/>
|
||||
<setting id="cleanup.remove_unused_private_types" value="true"/>
|
||||
<setting id="cleanup.qualify_static_method_accesses_with_declaring_class" value="false"/>
|
||||
<setting id="cleanup.organize_imports" value="true"/>
|
||||
<setting id="cleanup.lazy_logical_operator" value="false"/>
|
||||
<setting id="cleanup.bitwise_conditional_expression" value="false"/>
|
||||
<setting id="cleanup.add_all" value="false"/>
|
||||
<setting id="cleanup.use_directly_map_method" value="false"/>
|
||||
<setting id="cleanup.qualify_static_field_accesses_with_declaring_class" value="false"/>
|
||||
<setting id="cleanup.add_generated_serial_version_id" value="false"/>
|
||||
<setting id="cleanup.primitive_serialization" value="false"/>
|
||||
<setting id="cleanup.comparison_statement" value="false"/>
|
||||
<setting id="cleanup.insert_inferred_type_arguments" value="false"/>
|
||||
<setting id="cleanup.make_private_fields_final" value="true"/>
|
||||
<setting id="cleanup.useless_return" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_field_access_only_if_necessary" value="false"/>
|
||||
<setting id="cleanup.remove_trailing_whitespaces_all" value="true"/>
|
||||
<setting id="cleanup.remove_unnecessary_array_creation" value="false"/>
|
||||
<setting id="cleanup.remove_private_constructors" value="true"/>
|
||||
<setting id="cleanup.make_parameters_final" value="false"/>
|
||||
<setting id="cleanup.ternary_operator" value="false"/>
|
||||
<setting id="cleanup.merge_conditional_blocks" value="false"/>
|
||||
<setting id="cleanup.convert_to_enhanced_for_loop" value="false"/>
|
||||
<setting id="cleanup.remove_unused_private_fields" value="true"/>
|
||||
<setting id="cleanup.never_use_blocks" value="false"/>
|
||||
<setting id="cleanup.remove_redundant_modifiers" value="false"/>
|
||||
<setting id="cleanup.redundant_falling_through_block_end" value="false"/>
|
||||
<setting id="cleanup.switch" value="false"/>
|
||||
<setting id="cleanup.number_suffix" value="false"/>
|
||||
<setting id="cleanup.remove_unnecessary_nls_tags" value="true"/>
|
||||
<setting id="cleanup.convert_to_switch_expressions" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_field_access" value="true"/>
|
||||
<setting id="cleanup.add_missing_nls_tags" value="false"/>
|
||||
<setting id="cleanup.qualify_static_member_accesses_through_instances_with_declaring_class" value="true"/>
|
||||
<setting id="cleanup.remove_unnecessary_casts" value="true"/>
|
||||
<setting id="cleanup.objects_equals" value="false"/>
|
||||
<setting id="cleanup.convert_functional_interfaces" value="true"/>
|
||||
<setting id="cleanup.format_source_code" value="true"/>
|
||||
<setting id="cleanup.else_if" value="true"/>
|
||||
<setting id="cleanup.add_default_serial_version_id" value="true"/>
|
||||
<setting id="cleanup.remove_unused_private_methods" value="true"/>
|
||||
<setting id="cleanup.make_type_abstract_if_missing_method" value="false"/>
|
||||
<setting id="cleanup.join" value="false"/>
|
||||
<setting id="cleanup.embedded_if" value="false"/>
|
||||
<setting id="cleanup.use_anonymous_class_creation" value="false"/>
|
||||
<setting id="cleanup.add_missing_override_annotations_interface_methods" value="true"/>
|
||||
<setting id="cleanup.remove_unused_private_members" value="false"/>
|
||||
<setting id="cleanup.strictly_equal_or_different" value="false"/>
|
||||
<setting id="cleanup.never_use_parentheses_in_expressions" value="true"/>
|
||||
<setting id="cleanup.push_down_negation" value="false"/>
|
||||
<setting id="cleanup.evaluate_nullable" value="false"/>
|
||||
<setting id="cleanup.use_parentheses_in_expressions" value="true"/>
|
||||
<setting id="cleanup.hash" value="false"/>
|
||||
<setting id="cleanup.double_negation" value="false"/>
|
||||
<setting id="cleanup.overridden_assignment" value="false"/>
|
||||
<setting id="cleanup.correct_indentation" value="true"/>
|
||||
<setting id="cleanup.use_var" value="false"/>
|
||||
</profile>
|
||||
</profiles>
|
390
Formatter.xml
Normal file
390
Formatter.xml
Normal file
@ -0,0 +1,390 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<profiles version="20">
|
||||
<profile kind="CodeFormatterProfile" name="EWOL" version="20">
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="48"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_record_components" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_annotations" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_constructor" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="200"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="33"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assertion_message" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration" value="33"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="200"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
|
||||
</profile>
|
||||
</profiles>
|
373
LICENSE
Normal file
373
LICENSE
Normal file
@ -0,0 +1,373 @@
|
||||
Mozilla Public License Version 2.0
|
||||
==================================
|
||||
|
||||
1. Definitions
|
||||
--------------
|
||||
|
||||
1.1. "Contributor"
|
||||
means each individual or legal entity that creates, contributes to
|
||||
the creation of, or owns Covered Software.
|
||||
|
||||
1.2. "Contributor Version"
|
||||
means the combination of the Contributions of others (if any) used
|
||||
by a Contributor and that particular Contributor's Contribution.
|
||||
|
||||
1.3. "Contribution"
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
1.4. "Covered Software"
|
||||
means Source Code Form to which the initial Contributor has attached
|
||||
the notice in Exhibit A, the Executable Form of such Source Code
|
||||
Form, and Modifications of such Source Code Form, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.5. "Incompatible With Secondary Licenses"
|
||||
means
|
||||
|
||||
(a) that the initial Contributor has attached the notice described
|
||||
in Exhibit B to the Covered Software; or
|
||||
|
||||
(b) that the Covered Software was made available under the terms of
|
||||
version 1.1 or earlier of the License, but not also under the
|
||||
terms of a Secondary License.
|
||||
|
||||
1.6. "Executable Form"
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
1.7. "Larger Work"
|
||||
means a work that combines Covered Software with other material, in
|
||||
a separate file or files, that is not Covered Software.
|
||||
|
||||
1.8. "License"
|
||||
means this document.
|
||||
|
||||
1.9. "Licensable"
|
||||
means having the right to grant, to the maximum extent possible,
|
||||
whether at the time of the initial grant or subsequently, any and
|
||||
all of the rights conveyed by this License.
|
||||
|
||||
1.10. "Modifications"
|
||||
means any of the following:
|
||||
|
||||
(a) any file in Source Code Form that results from an addition to,
|
||||
deletion from, or modification of the contents of Covered
|
||||
Software; or
|
||||
|
||||
(b) any new file in Source Code Form that contains any Covered
|
||||
Software.
|
||||
|
||||
1.11. "Patent Claims" of a Contributor
|
||||
means any patent claim(s), including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by such
|
||||
Contributor that would be infringed, but for the grant of the
|
||||
License, by the making, using, selling, offering for sale, having
|
||||
made, import, or transfer of either its Contributions or its
|
||||
Contributor Version.
|
||||
|
||||
1.12. "Secondary License"
|
||||
means either the GNU General Public License, Version 2.0, the GNU
|
||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||
Public License, Version 3.0, or any later versions of those
|
||||
licenses.
|
||||
|
||||
1.13. "Source Code Form"
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
1.14. "You" (or "Your")
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, "You" includes any entity that
|
||||
controls, is controlled by, or is under common control with You. For
|
||||
purposes of this definition, "control" means (a) the power, direct
|
||||
or indirect, to cause the direction or management of such entity,
|
||||
whether by contract or otherwise, or (b) ownership of more than
|
||||
fifty percent (50%) of the outstanding shares or beneficial
|
||||
ownership of such entity.
|
||||
|
||||
2. License Grants and Conditions
|
||||
--------------------------------
|
||||
|
||||
2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||
for sale, have made, import, and otherwise transfer either its
|
||||
Contributions or its Contributor Version.
|
||||
|
||||
2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution
|
||||
become effective for each Contribution on the date the Contributor first
|
||||
distributes such Contribution.
|
||||
|
||||
2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under
|
||||
this License. No additional rights or licenses will be implied from the
|
||||
distribution or licensing of Covered Software under this License.
|
||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||
Contributor:
|
||||
|
||||
(a) for any code that a Contributor has removed from Covered Software;
|
||||
or
|
||||
|
||||
(b) for infringements caused by: (i) Your and any other third party's
|
||||
modifications of Covered Software, or (ii) the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
|
||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||
its Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks,
|
||||
or logos of any Contributor (except as may be necessary to comply with
|
||||
the notice requirements in Section 3.4).
|
||||
|
||||
2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this
|
||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||
permitted under the terms of Section 3.3).
|
||||
|
||||
2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its
|
||||
Contributions are its original creation(s) or it has sufficient rights
|
||||
to grant the rights to its Contributions conveyed by this License.
|
||||
|
||||
2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under
|
||||
applicable copyright doctrines of fair use, fair dealing, or other
|
||||
equivalents.
|
||||
|
||||
2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||
in Section 2.1.
|
||||
|
||||
3. Responsibilities
|
||||
-------------------
|
||||
|
||||
3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under
|
||||
the terms of this License. You must inform recipients that the Source
|
||||
Code Form of the Covered Software is governed by the terms of this
|
||||
License, and how they can obtain a copy of this License. You may not
|
||||
attempt to alter or restrict the recipients' rights in the Source Code
|
||||
Form.
|
||||
|
||||
3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
(a) such Covered Software must also be made available in Source Code
|
||||
Form, as described in Section 3.1, and You must inform recipients of
|
||||
the Executable Form how they can obtain a copy of such Source Code
|
||||
Form by reasonable means in a timely manner, at a charge no more
|
||||
than the cost of distribution to the recipient; and
|
||||
|
||||
(b) You may distribute such Executable Form under the terms of this
|
||||
License, or sublicense it under different terms, provided that the
|
||||
license for the Executable Form does not attempt to limit or alter
|
||||
the recipients' rights in the Source Code Form under this License.
|
||||
|
||||
3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for
|
||||
the Covered Software. If the Larger Work is a combination of Covered
|
||||
Software with a work governed by one or more Secondary Licenses, and the
|
||||
Covered Software is not Incompatible With Secondary Licenses, this
|
||||
License permits You to additionally distribute such Covered Software
|
||||
under the terms of such Secondary License(s), so that the recipient of
|
||||
the Larger Work may, at their option, further distribute the Covered
|
||||
Software under the terms of either this License or such Secondary
|
||||
License(s).
|
||||
|
||||
3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices
|
||||
(including copyright notices, patent notices, disclaimers of warranty,
|
||||
or limitations of liability) contained within the Source Code Form of
|
||||
the Covered Software, except that You may alter any license notices to
|
||||
the extent required to remedy known factual inaccuracies.
|
||||
|
||||
3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on
|
||||
behalf of any Contributor. You must make it absolutely clear that any
|
||||
such warranty, support, indemnity, or liability obligation is offered by
|
||||
You alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation
|
||||
---------------------------------------------------
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Software due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description must
|
||||
be placed in a text file included with all distributions of the Covered
|
||||
Software under this License. Except to the extent prohibited by statute
|
||||
or regulation, such description must be sufficiently detailed for a
|
||||
recipient of ordinary skill to be able to understand it.
|
||||
|
||||
5. Termination
|
||||
--------------
|
||||
|
||||
5.1. The rights granted under this License will terminate automatically
|
||||
if You fail to comply with any of its terms. However, if You become
|
||||
compliant, then the rights granted under this License from a particular
|
||||
Contributor are reinstated (a) provisionally, unless and until such
|
||||
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||
ongoing basis, if such Contributor fails to notify You of the
|
||||
non-compliance by some reasonable means prior to 60 days after You have
|
||||
come back into compliance. Moreover, Your grants from a particular
|
||||
Contributor are reinstated on an ongoing basis if such Contributor
|
||||
notifies You of the non-compliance by some reasonable means, this is the
|
||||
first time You have received notice of non-compliance with this License
|
||||
from such Contributor, and You become compliant prior to 30 days after
|
||||
Your receipt of the notice.
|
||||
|
||||
5.2. If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions,
|
||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||
directly or indirectly infringes any patent, then the rights granted to
|
||||
You by any and all Contributors for the Covered Software under Section
|
||||
2.1 of this License shall terminate.
|
||||
|
||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||
end user license agreements (excluding distributors and resellers) which
|
||||
have been validly granted by You or Your distributors under this License
|
||||
prior to termination shall survive termination.
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 6. Disclaimer of Warranty *
|
||||
* ------------------------- *
|
||||
* *
|
||||
* Covered Software is provided under this License on an "as is" *
|
||||
* basis, without warranty of any kind, either expressed, implied, or *
|
||||
* statutory, including, without limitation, warranties that the *
|
||||
* Covered Software is free of defects, merchantable, fit for a *
|
||||
* particular purpose or non-infringing. The entire risk as to the *
|
||||
* quality and performance of the Covered Software is with You. *
|
||||
* Should any Covered Software prove defective in any respect, You *
|
||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||
* essential part of this License. No use of any Covered Software is *
|
||||
* authorized under this License except under this disclaimer. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 7. Limitation of Liability *
|
||||
* -------------------------- *
|
||||
* *
|
||||
* Under no circumstances and under no legal theory, whether tort *
|
||||
* (including negligence), contract, or otherwise, shall any *
|
||||
* Contributor, or anyone who distributes Covered Software as *
|
||||
* permitted above, be liable to You for any direct, indirect, *
|
||||
* special, incidental, or consequential damages of any character *
|
||||
* including, without limitation, damages for lost profits, loss of *
|
||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||
* and all other commercial damages or losses, even if such party *
|
||||
* shall have been informed of the possibility of such damages. This *
|
||||
* limitation of liability shall not apply to liability for death or *
|
||||
* personal injury resulting from such party's negligence to the *
|
||||
* extent applicable law prohibits such limitation. Some *
|
||||
* jurisdictions do not allow the exclusion or limitation of *
|
||||
* incidental or consequential damages, so this exclusion and *
|
||||
* limitation may not apply to You. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
8. Litigation
|
||||
-------------
|
||||
|
||||
Any litigation relating to this License may be brought only in the
|
||||
courts of a jurisdiction where the defendant maintains its principal
|
||||
place of business and such litigation shall be governed by laws of that
|
||||
jurisdiction, without reference to its conflict-of-law provisions.
|
||||
Nothing in this Section shall prevent a party's ability to bring
|
||||
cross-claims or counter-claims.
|
||||
|
||||
9. Miscellaneous
|
||||
----------------
|
||||
|
||||
This License represents the complete agreement concerning the subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. Any law or regulation which provides
|
||||
that the language of a contract shall be construed against the drafter
|
||||
shall not be used to construe this License against a Contributor.
|
||||
|
||||
10. Versions of the License
|
||||
---------------------------
|
||||
|
||||
10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version
|
||||
of the License under which You originally received the Covered Software,
|
||||
or under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a
|
||||
modified version of this License if you rename the license and remove
|
||||
any references to the name of the license steward (except to note that
|
||||
such modified license differs from this License).
|
||||
|
||||
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||
Licenses
|
||||
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
Exhibit A - Source Code Form License Notice
|
||||
-------------------------------------------
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to look
|
||||
for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
||||
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||
---------------------------------------------------------
|
||||
|
||||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
defined by the Mozilla Public License, v. 2.0.
|
12
src/module-info.java
Normal file
12
src/module-info.java
Normal file
@ -0,0 +1,12 @@
|
||||
/** Basic module interface.
|
||||
*
|
||||
* @author Edouard DUPIN */
|
||||
|
||||
open module org.atriasoft.island {
|
||||
exports org.atriasoft.island;
|
||||
//exports org.atriasoft.island.model;
|
||||
//exports org.atriasoft.island.actions;
|
||||
|
||||
requires transitive io.scenarium.logger;
|
||||
requires java.base;
|
||||
}
|
151
src/org/atriasoft/island/Env.java
Normal file
151
src/org/atriasoft/island/Env.java
Normal file
@ -0,0 +1,151 @@
|
||||
package org.atriasoft.island;
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
// Local import
|
||||
import org.atriasoft.island.internal.Log;
|
||||
|
||||
public class Env {
|
||||
|
||||
public static final int ret_manifest_is_not_existing = -5;
|
||||
public static final int ret_action_is_not_existing = -10;
|
||||
public static final int ret_action_executing_system_error = -11;
|
||||
public static final int ret_action_wrong_parameters = -12;
|
||||
public static final int ret_action_partial_done = -13;
|
||||
public static final int ret_action_fail = -14;
|
||||
|
||||
public static int ret_action_need_updtate = 15;
|
||||
|
||||
public static String system_base_name = "island";
|
||||
|
||||
public static void set_system_base_name(String val) {
|
||||
system_base_name = val;
|
||||
}
|
||||
public static String get_system_base_name() {
|
||||
return system_base_name;
|
||||
}
|
||||
|
||||
public static String get_system_config_name() {
|
||||
return "." + system_base_name + "Config.json";
|
||||
}
|
||||
|
||||
private static boolean fetch_manifest = true;
|
||||
|
||||
public static void set_fetch_manifest(boolean val) {
|
||||
fetch_manifest = val;
|
||||
}
|
||||
public static boolean get_fetch_manifest() {
|
||||
return fetch_manifest;
|
||||
}
|
||||
|
||||
private static int wait_between_sever_command = 0;
|
||||
|
||||
public static void set_wait_between_sever_command(int val) {
|
||||
wait_between_sever_command = val;
|
||||
}
|
||||
|
||||
public static int get_wait_between_sever_command() {
|
||||
return wait_between_sever_command;
|
||||
}
|
||||
public static String filter_command = "";
|
||||
|
||||
public static void set_filter_command(String val) {
|
||||
filter_command = val;
|
||||
}
|
||||
public static String get_filter_command() {
|
||||
return filter_command;
|
||||
}
|
||||
public static boolean need_process_with_filter(String data) {
|
||||
if (filter_command.equals("")) {
|
||||
return true;
|
||||
}
|
||||
if (data.length() < filter_command.length()) {
|
||||
return false;
|
||||
}
|
||||
if (data.substring(0,filter_command.length()).equals(filter_command)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean display_folder_instead_of_git_name = true;
|
||||
|
||||
public static void set_display_folder_instead_of_git_name(boolean val) {
|
||||
display_folder_instead_of_git_name = val;
|
||||
}
|
||||
public static boolean get_display_folder_instead_of_git_name() {
|
||||
return display_folder_instead_of_git_name;
|
||||
}
|
||||
|
||||
private static Path island_root_path = null;
|
||||
private static Path island_path_user_config = null;
|
||||
private static Path island_path = null;
|
||||
private static Path island_path_config_old = null;
|
||||
private static Path island_path_config = null;
|
||||
private static Path island_path_manifest = null;
|
||||
|
||||
|
||||
static {
|
||||
//String tmp = island_root_path.toAbsolutePath().toString();
|
||||
//Log.info("Current absolute path is: " + tmp);
|
||||
island_root_path = Paths.get("");
|
||||
Path tmpPath = island_root_path;
|
||||
while (!Files.isDirectory(tmpPath.resolve("." + get_system_base_name()))) {
|
||||
tmpPath = tmpPath.getParent();
|
||||
if (tmpPath == null) {
|
||||
Log.critical("the root path of " + get_system_base_name() + " must not be upper parent paths of (" + island_root_path.toAbsolutePath() + ")");
|
||||
}
|
||||
}
|
||||
island_root_path = tmpPath;
|
||||
island_path_user_config = island_root_path.resolve(get_system_config_name());
|
||||
island_path = island_root_path.resolve("." + get_system_base_name());
|
||||
island_path_config_old = island_path.resolve("config.txt");
|
||||
island_path_config = island_path.resolve("config.json");
|
||||
island_path_manifest = island_path.resolve("manifest");
|
||||
}
|
||||
//#
|
||||
//# @brief to use later to know where the ".island" parent path is ...
|
||||
//# @return the parent path of the ".island"
|
||||
//#
|
||||
public static Path get_island_root_path() {
|
||||
return island_root_path;
|
||||
}
|
||||
public static Path get_island_path() {
|
||||
return island_path;
|
||||
}
|
||||
public static Path get_island_path_config() {
|
||||
return island_path_config;
|
||||
}
|
||||
public static Path get_island_path_config_old() {
|
||||
return island_path_config_old;
|
||||
}
|
||||
public static Path get_island_path_manifest() {
|
||||
return island_path_manifest;
|
||||
}
|
||||
public static Path get_island_path_user_config() {
|
||||
return island_path_user_config;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Log.error("island_root_path = " + island_root_path.toAbsolutePath());
|
||||
Log.error("island_path_user_config = " + island_path_user_config.toAbsolutePath());
|
||||
Log.error("island_path = " + island_path.toAbsolutePath());
|
||||
Log.error("island_path_config_old = " + island_path_config_old.toAbsolutePath());
|
||||
Log.error("island_path_config = " + island_path_config.toAbsolutePath());
|
||||
Log.error("island_path_manifest = " + island_path_manifest.toAbsolutePath());
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
185
src/org/atriasoft/island/MainIsland.java
Executable file
185
src/org/atriasoft/island/MainIsland.java
Executable file
@ -0,0 +1,185 @@
|
||||
package org.atriasoft.island;
|
||||
|
||||
|
||||
public class MainIsland {
|
||||
|
||||
//debug.verbose("List of actions: " + str(actions.get_list_of_action()))
|
||||
|
||||
my_args = arguments.Arguments()
|
||||
my_args.add_section("option", "Can be set one time in all case")
|
||||
my_args.add("h", "help", desc="Display this help")
|
||||
my_args.add("v", "verbose", list=[
|
||||
["0","None"],
|
||||
["1","error"],
|
||||
["2","warning"],
|
||||
["3","info"],
|
||||
["4","debug"],
|
||||
["5","verbose"],
|
||||
["6","extreme_verbose"],
|
||||
], desc="display debug level (verbose) default =2")
|
||||
my_args.add("c", "color", desc="Display message in color")
|
||||
my_args.add("n", "no-fetch-manifest", haveParam=false, desc="Disable the fetch of the manifest")
|
||||
my_args.add("F", "filter", haveParam=true, desc="Filter the action on a list of path or subpath: -f library")
|
||||
my_args.add("f", "folder", haveParam=false, desc="Display the folder instead of the git repository name")
|
||||
my_args.add("w", "wait", haveParam=true, desc="Wait between 2 acces on the server (needed when the server is really slow to remove ssh connection) (default=" + str(env.get_wait_between_sever_command()) + ")")
|
||||
my_args.set_stop_at(actions.get_list_of_action())
|
||||
local_argument = my_args.parse()
|
||||
|
||||
//
|
||||
// @brief Display the help of this makefile.
|
||||
//
|
||||
public void usage():
|
||||
color = debug.get_color_set()
|
||||
// generic argument displayed :
|
||||
my_args.display()
|
||||
print(" Action availlable" )
|
||||
list_actions = actions.get_list_of_action();
|
||||
for elem in list_actions:
|
||||
print(" " + color['green'] + elem + color['default'])
|
||||
print(" " + actions.get_action_help(elem))
|
||||
"""
|
||||
print(" " + color['green'] + "init" + color['default'])
|
||||
print(" initialize a 'island' interface with a manifest in a git ")
|
||||
print(" " + color['green'] + "sync" + color['default'])
|
||||
print(" Syncronise the currect environement")
|
||||
print(" " + color['green'] + "status" + color['default'])
|
||||
print(" Dump the status of the environement")
|
||||
"""
|
||||
print(" ex: " + sys.argv[0] + " -c init http://github.com/atria-soft/manifest.git")
|
||||
print(" ex: " + sys.argv[0] + " sync")
|
||||
exit(0)
|
||||
|
||||
public void check_boolean(value):
|
||||
if value == "" \
|
||||
or value == "1" \
|
||||
or value == "true" \
|
||||
or value == "true" \
|
||||
or value == true:
|
||||
return true
|
||||
return false
|
||||
|
||||
// preparse the argument to get the verbose element for debug mode
|
||||
public void parse_generic_arg(argument, active):
|
||||
debug.extreme_verbose("parse arg : " + argument.get_option_name() + " " + argument.get_arg() + " active=" + str(active))
|
||||
if argument.get_option_name() == "help":
|
||||
if active == false:
|
||||
usage()
|
||||
return true
|
||||
elif argument.get_option_name()=="jobs":
|
||||
if active == true:
|
||||
//multiprocess.set_core_number(int(argument.get_arg()))
|
||||
pass
|
||||
return true
|
||||
elif argument.get_option_name()=="wait":
|
||||
if active == true:
|
||||
env.set_wait_between_sever_command(int(argument.get_arg()))
|
||||
return true
|
||||
elif argument.get_option_name() == "verbose":
|
||||
if active == true:
|
||||
debug.set_level(int(argument.get_arg()))
|
||||
return true
|
||||
elif argument.get_option_name() == "folder":
|
||||
if active == true:
|
||||
env.set_display_folder_instead_of_git_name(true)
|
||||
return true
|
||||
elif argument.get_option_name() == "color":
|
||||
if active == true:
|
||||
if check_boolean(argument.get_arg()) == true:
|
||||
debug.enable_color()
|
||||
else:
|
||||
debug.disable_color()
|
||||
return true
|
||||
elif argument.get_option_name() == "filter":
|
||||
if active == true:
|
||||
env.set_filter_command(str(argument.get_arg()))
|
||||
return true
|
||||
elif argument.get_option_name() == "no-fetch-manifest":
|
||||
if active == false:
|
||||
env.set_fetch_manifest(false)
|
||||
return true
|
||||
return false
|
||||
|
||||
// open configuration of island:
|
||||
config_file = env.get_island_path_user_config()
|
||||
if os.path.isfile(config_file) == true:
|
||||
sys.path.append(os.path.dirname(config_file))
|
||||
debug.debug("Find basic configuration file: '" + config_file + "'")
|
||||
// the file exist, we can open it and get the initial configuration:
|
||||
configuration_file = __import__(env.get_system_config_name()[:-3])
|
||||
|
||||
if "get_exclude_path" in dir(configuration_file):
|
||||
data = configuration_file.get_exclude_path()
|
||||
debug.debug(" get default config 'get_exclude_path' val='" + str(data) + "'")
|
||||
env.set_exclude_search_path(data)
|
||||
|
||||
if "get_default_color" in dir(configuration_file):
|
||||
data = configuration_file.get_default_color()
|
||||
debug.debug(" get default config 'get_default_color' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("color", str(data)), true)
|
||||
|
||||
if "get_default_debug_level" in dir(configuration_file):
|
||||
data = configuration_file.get_default_debug_level()
|
||||
debug.debug(" get default config 'get_default_debug_level' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("verbose", str(data)), true)
|
||||
|
||||
if "get_default_folder" in dir(configuration_file):
|
||||
data = configuration_file.get_default_folder()
|
||||
debug.debug(" get default config 'get_default_folder' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("folder", str(data)), true)
|
||||
|
||||
if "get_default_wait" in dir(configuration_file):
|
||||
data = configuration_file.get_default_wait()
|
||||
debug.debug(" get default config 'get_default_wait' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("wait", str(data)), true)
|
||||
|
||||
if "get_default_filter" in dir(configuration_file):
|
||||
data = configuration_file.get_default_filter()
|
||||
debug.debug(" get default config 'get_default_filter' val='" + str(data) + "'")
|
||||
parse_generic_arg(arg_element.ArgElement("filter", str(data)), true)
|
||||
|
||||
|
||||
|
||||
// parse default unique argument:
|
||||
for argument in local_argument:
|
||||
parse_generic_arg(argument, true)
|
||||
|
||||
// remove all generic arguments:
|
||||
new_argument_list = []
|
||||
for argument in local_argument:
|
||||
if parse_generic_arg(argument, false) == true:
|
||||
continue
|
||||
new_argument_list.append(argument)
|
||||
|
||||
// now the first argument is: the action:
|
||||
if len(new_argument_list) == 0:
|
||||
debug.warning("--------------------------------------")
|
||||
debug.warning("Missing the action to do ...")
|
||||
debug.warning("--------------------------------------")
|
||||
usage()
|
||||
|
||||
|
||||
// TODO : move tin in actions ...
|
||||
list_actions = actions.get_list_of_action();
|
||||
|
||||
action_to_do = new_argument_list[0].get_arg()
|
||||
new_argument_list = new_argument_list[1:]
|
||||
if action_to_do not in list_actions:
|
||||
debug.warning("--------------------------------------")
|
||||
debug.warning("Wrong action type : '" + str(action_to_do) + "' availlable list: " + str(list_actions) )
|
||||
debug.warning("--------------------------------------")
|
||||
usage()
|
||||
|
||||
// todo : Remove this
|
||||
if action_to_do != "init" \
|
||||
and os.path.exists(env.get_island_path()) == false:
|
||||
debug.error("Can not execute a island cmd if we have not initialize a config: '" + str("." + env.get_system_base_name()) + "' in upper 6 parent path")
|
||||
exit(-1)
|
||||
|
||||
|
||||
ret = actions.execute(action_to_do, my_args.get_last_parsed()+1)
|
||||
|
||||
exit (ret)
|
||||
// stop all started threads;
|
||||
//multiprocess.un_init()
|
||||
|
||||
|
75
src/org/atriasoft/island/internal/Log.java
Normal file
75
src/org/atriasoft/island/internal/Log.java
Normal file
@ -0,0 +1,75 @@
|
||||
package org.atriasoft.island.internal;
|
||||
|
||||
import io.scenarium.logger.LogLevel;
|
||||
import io.scenarium.logger.Logger;
|
||||
|
||||
public class Log {
|
||||
private static final String LIB_NAME = "island";
|
||||
private static final String LIB_NAME_DRAW = Logger.getDrawableName(LIB_NAME);
|
||||
private static final boolean PRINT_CRITICAL = Logger.getNeedPrint(LIB_NAME, LogLevel.CRITICAL);
|
||||
private static final boolean PRINT_ERROR = Logger.getNeedPrint(LIB_NAME, LogLevel.ERROR);
|
||||
private static final boolean PRINT_WARNING = Logger.getNeedPrint(LIB_NAME, LogLevel.WARNING);
|
||||
private static final boolean PRINT_INFO = Logger.getNeedPrint(LIB_NAME, LogLevel.INFO);
|
||||
private static final boolean PRINT_DEBUG = Logger.getNeedPrint(LIB_NAME, LogLevel.DEBUG);
|
||||
private static final boolean PRINT_VERBOSE = Logger.getNeedPrint(LIB_NAME, LogLevel.VERBOSE);
|
||||
private static final boolean PRINT_TODO = Logger.getNeedPrint(LIB_NAME, LogLevel.TODO);
|
||||
private static final boolean PRINT_PRINT = Logger.getNeedPrint(LIB_NAME, LogLevel.PRINT);
|
||||
|
||||
public static void critical(final String data) {
|
||||
if (PRINT_CRITICAL) {
|
||||
Logger.critical(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void critical(final String data, final Exception e) {
|
||||
e.printStackTrace();
|
||||
if (PRINT_CRITICAL) {
|
||||
Logger.critical(LIB_NAME_DRAW, data + " : " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static void debug(final String data) {
|
||||
if (PRINT_DEBUG) {
|
||||
Logger.debug(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void error(final String data) {
|
||||
if (PRINT_ERROR) {
|
||||
Logger.error(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void info(final String data) {
|
||||
if (PRINT_INFO) {
|
||||
Logger.info(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void print(final String data) {
|
||||
if (PRINT_PRINT) {
|
||||
Logger.print(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void todo(final String data) {
|
||||
if (PRINT_TODO) {
|
||||
Logger.todo(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void verbose(final String data) {
|
||||
if (PRINT_VERBOSE) {
|
||||
Logger.verbose(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
public static void warning(final String data) {
|
||||
if (PRINT_WARNING) {
|
||||
Logger.warning(LIB_NAME_DRAW, data);
|
||||
}
|
||||
}
|
||||
|
||||
private Log() {}
|
||||
|
||||
}
|
140
tmpsrc/actions.java
Normal file
140
tmpsrc/actions.java
Normal file
@ -0,0 +1,140 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
// Local import
|
||||
from realog import debug
|
||||
import os
|
||||
import sys
|
||||
from . import env
|
||||
import death.Arguments as arguments
|
||||
|
||||
list_actions = []
|
||||
|
||||
__base_action_name = env.get_system_base_name() + "Action_"
|
||||
|
||||
public void init(files):
|
||||
global list_actions;
|
||||
debug.verbose("List of action for island: " + str(len(files)))
|
||||
for elem_path in files :
|
||||
debug.verbose("parse file : " + elem_path)
|
||||
base_name = os.path.basename(elem_path)
|
||||
if len(base_name) <= 3 + len(__base_action_name):
|
||||
// reject it, too small
|
||||
continue
|
||||
base_name = base_name[:-3]
|
||||
if base_name[:len(__base_action_name)] != __base_action_name:
|
||||
// reject it, wrong start file
|
||||
continue
|
||||
name_action = base_name[len(__base_action_name):]
|
||||
debug.debug(" '" + os.path.basename(elem_path)[:-3] + "' file=" + elem_path)
|
||||
list_actions.append({
|
||||
"name":name_action,
|
||||
"path":elem_path,
|
||||
})
|
||||
|
||||
//#
|
||||
//# @brief Get the wall list of action availlable
|
||||
//# @return ([string]) the list of action name
|
||||
//#
|
||||
public void get_list_of_action():
|
||||
global list_actions;
|
||||
out = []
|
||||
for elem in list_actions:
|
||||
out.append(elem["name"])
|
||||
return out
|
||||
|
||||
//#
|
||||
//# @brief Get a description of an action
|
||||
//# @param[in] action_name (string) Name of the action
|
||||
//# @param[in] function_name (string) Name of the fucntion to call
|
||||
//# @param[in] default_value (*) Renurned value of the call if function does not exist
|
||||
//# @return (*) the getted value or the default_value
|
||||
//#
|
||||
public void get_function_value(action_name, function_name, default_value = None):
|
||||
global list_actions;
|
||||
for elem in list_actions:
|
||||
if elem["name"] == action_name:
|
||||
// finish the parsing
|
||||
sys.path.append(os.path.dirname(elem["path"]))
|
||||
the_action = __import__(__base_action_name + action_name)
|
||||
if function_name not in dir(the_action):
|
||||
return default_value
|
||||
method_to_call = getattr(the_action, function_name)
|
||||
return method_to_call()
|
||||
return default_value
|
||||
|
||||
//#
|
||||
//# @brief Get the global help value of a module
|
||||
//# @param[in] action_name (string) Name of the action
|
||||
//# @return The first line of description
|
||||
//#
|
||||
public void get_action_help(action_name):
|
||||
value = get_function_value(action_name, "help", "---")
|
||||
return value.split("\n")[0]
|
||||
|
||||
|
||||
public void usage(arguments, action_name):
|
||||
color = debug.get_color_set()
|
||||
// generic argument displayed for specific action:
|
||||
//print("Specific argument for the command: '" + action_name + "'" )
|
||||
//print(" " + get_desc(action_name))
|
||||
value = get_function_value(action_name, "help")
|
||||
debug.info("Description:")
|
||||
debug.info("\t" + str(value))
|
||||
arguments.display(action_name)
|
||||
value = get_function_value(action_name, "help_example")
|
||||
if value != None:
|
||||
debug.info("Example:")
|
||||
for elem in value.split("\n"):
|
||||
debug.info("\t" + value)
|
||||
exit(0)
|
||||
|
||||
public void execute(action_name, argument_start_id):
|
||||
global list_actions;
|
||||
// TODO: Move here the check if action is availlable
|
||||
|
||||
for elem in list_actions:
|
||||
if elem["name"] != action_name:
|
||||
continue
|
||||
debug.info("action: " + str(elem));
|
||||
// finish the parsing
|
||||
sys.path.append(os.path.dirname(elem["path"]))
|
||||
the_action = __import__(__base_action_name + action_name)
|
||||
my_under_args_parser = arguments.Arguments()
|
||||
my_under_args_parser.add("h", "help", desc="Help of this action")
|
||||
|
||||
if "add_specific_arguments" in dir(the_action):
|
||||
the_action.add_specific_arguments(my_under_args_parser, elem["name"])
|
||||
have_unknow_argument = false
|
||||
if "have_unknow_argument" in dir(the_action):
|
||||
have_unknow_argument = the_action.have_unknow_argument()
|
||||
my_under_args = my_under_args_parser.parse(argument_start_id, have_unknow_argument)
|
||||
// search help if needed ==> permit to not duplicating code
|
||||
for elem in my_under_args:
|
||||
if elem.get_option_name() == "help":
|
||||
usage(my_under_args_parser, action_name)
|
||||
return 0
|
||||
// now we can execute:
|
||||
if "execute" not in dir(the_action):
|
||||
debug.error("execute is not implmented for this action ... '" + str(action_name) + "'")
|
||||
return -11
|
||||
debug.info("execute: " + action_name)
|
||||
for elem in my_under_args:
|
||||
debug.debug(" " + str(elem.get_option_name()) + "='" + str(elem.get_arg()) + "'")
|
||||
ret = the_action.execute(my_under_args)
|
||||
if ret == None:
|
||||
return 0
|
||||
if ret < 0:
|
||||
debug.info(" ==========================")
|
||||
debug.info(" == Some error occured ==")
|
||||
debug.info(" ==========================")
|
||||
return ret
|
||||
debug.error("Can not do the action...")
|
||||
return -10
|
88
tmpsrc/actions/islandAction_checkout.java
Normal file
88
tmpsrc/actions/islandAction_checkout.java
Normal file
@ -0,0 +1,88 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Ckeckout a specific branch in all repository"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=true, desc="Name of the remote server")
|
||||
my_args.add_arg("branch", optionnal=false, desc="Branch to checkout (if '__TAG__' ==> checkout specific repository tags)")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
branch_to_checkout = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "branch":
|
||||
branch_to_checkout = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
// update the local configuration file:
|
||||
configuration.set_branch(branch_to_checkout)
|
||||
configuration.store()
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("checkout of: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
have_error = false
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
if status.checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display) == false:
|
||||
have_error = true
|
||||
if have_error == true:
|
||||
return env.ret_action_fail
|
||||
|
||||
|
||||
|
||||
|
83
tmpsrc/actions/islandAction_command.java
Normal file
83
tmpsrc/actions/islandAction_command.java
Normal file
@ -0,0 +1,83 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import multiprocess
|
||||
from island import config
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Write the command you want to be executed in every repository"
|
||||
|
||||
//#
|
||||
//# @brief Set the option argument are not able to check if the argument are correct or not
|
||||
//# @return (boolean) have parameter without arguments
|
||||
//#
|
||||
public void have_unknow_argument():
|
||||
return true
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
cmd = ""
|
||||
for elem in _arguments:
|
||||
debug.info("Get data element: " + str(elem.get_arg()))
|
||||
cmd += elem.get_arg() + " "
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("status of: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
debug.info("------------------------------------------")
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("execute command : " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
//debug.debug("elem : " + str(elem))
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
debug.info("" + base_display + "\r\t\t\t\t\t\t\t\t\t" + " (not download)")
|
||||
continue
|
||||
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
if ret[0] == 0:
|
||||
debug.info("ret=" + ret[1])
|
||||
debug.info("err=" + ret[2])
|
||||
else:
|
||||
debug.info("Execution ERROR")
|
||||
|
95
tmpsrc/actions/islandAction_commit.java
Normal file
95
tmpsrc/actions/islandAction_commit.java
Normal file
@ -0,0 +1,95 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Commit in all repository"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
my_args.add("m", "message", haveParam=true, desc="Message to commit data")
|
||||
my_args.add("a", "all", desc="Commit all elements")
|
||||
my_args.add("", "amend", desc="Ammend data at the previous commit")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_message = ""
|
||||
argument_amend = ""
|
||||
argument_all = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "message":
|
||||
debug.info("find message: '" + elem.get_arg() + "'")
|
||||
argument_message = " --message \"" + elem.get_arg() + "\" ";
|
||||
elif elem.get_option_name() == "all":
|
||||
argument_all = " --all "
|
||||
elif elem.get_option_name() == "amend":
|
||||
argument_amend = " --amend "
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("commit : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("commit: " + base_display)
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
debug.error("can not commit project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(new Path(git_repo_path,".git")) == false:
|
||||
// path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.warning("path '" + git_repo_path + "' is already existing but not used for a git repository. Clean it and restart")
|
||||
continue;
|
||||
|
||||
// simply update the repository ...
|
||||
debug.verbose("commit in project:")
|
||||
// fetch the repository
|
||||
cmd = "git commit " + argument_amend + argument_all + argument_message
|
||||
debug.debug("execute : " + cmd)
|
||||
multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
|
80
tmpsrc/actions/islandAction_deliver-push.java
Normal file
80
tmpsrc/actions/islandAction_deliver-push.java
Normal file
@ -0,0 +1,80 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Push a delover (develop & master & tag) on the remotre server"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=true, desc="Name of the remote server")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("fetch : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
// configure remote name:
|
||||
if argument_remote_name == "":
|
||||
argument_remote_name = elem.select_remote["name"]
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("deliver-push: " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
status.deliver_push(elem, argument_remote_name, destination_branch, source_branch, base_display)
|
||||
|
||||
|
138
tmpsrc/actions/islandAction_deliver.java
Normal file
138
tmpsrc/actions/islandAction_deliver.java
Normal file
@ -0,0 +1,138 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import multiprocess
|
||||
from island import config
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Deliver the current repository (develop & master MUST be up to date and you MUST be on master)"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(_my_args, _section):
|
||||
_my_args.add("f", "from", haveParam=true, desc="source branche to deliver")
|
||||
_my_args.add("t", "to", haveParam=true, desc="desticantion branche of the deliver")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_from = None
|
||||
argument_to = None
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "from":
|
||||
debug.info("find source branch name: '" + elem.get_arg() + "'")
|
||||
argument_from = elem.get_arg()
|
||||
elif elem.get_option_name() == "to":
|
||||
debug.info("find destination branch name: '" + elem.get_arg() + "'")
|
||||
argument_to = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
if argument_from != None:
|
||||
source_branch = argument_from
|
||||
if argument_to != None:
|
||||
destination_branch = argument_to
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("Check if all project are on master: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
deliver_availlable = true
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.verbose("deliver-ckeck: " + base_display)
|
||||
if status.deliver_check(elem, argument_remote_name, id_element, base_display, source_branch, destination_branch) == false:
|
||||
deliver_availlable = false
|
||||
if deliver_availlable == false:
|
||||
debug.error("deliver-ckeck: Correct the warning to validate the Merge")
|
||||
return
|
||||
debug.info("deliver-ckeck: ==> All is OK")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("deliver: ========================================================================")
|
||||
debug.info("deliver: == " + base_display)
|
||||
debug.info("deliver: ========================================================================")
|
||||
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
// Check the validity of the version,
|
||||
version_description, add_in_version_management = status.get_current_version_repo(git_repo_path)
|
||||
if version_description == None:
|
||||
continue
|
||||
debug.info("deliver: ==> version: " + str(version_description))
|
||||
|
||||
// go to the dev branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
// Checkout destination branch:
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
|
||||
// create new repo tag
|
||||
new_version_description = status.create_new_version_repo(git_repo_path, version_description, add_in_version_management, source_branch, destination_branch)
|
||||
debug.info("new version: " + str(new_version_description))
|
||||
if new_version_description == None:
|
||||
continue
|
||||
// merge branch
|
||||
if mani.deliver_mode == "merge":
|
||||
merge_force = true
|
||||
else:
|
||||
merge_force = false
|
||||
commands.merge_branch_on_master(git_repo_path, source_branch, merge_force, branch_destination=destination_branch)
|
||||
|
||||
version_path_file = new Path(git_repo_path, "version.txt")
|
||||
// update version file:
|
||||
tools.file_write_data(version_path_file, tools.version_to_string(new_version_description))
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, "[RELEASE] Release v" + tools.version_to_string(new_version_description))
|
||||
commands.tag(git_repo_path, "v" + tools.version_to_string(new_version_description))
|
||||
commands.checkout(git_repo_path, source_branch)
|
||||
commands.reset_hard(git_repo_path, destination_branch)
|
||||
new_version_description.append("dev")
|
||||
tools.file_write_data(version_path_file, tools.version_to_string(new_version_description))
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, status.default_update_message)
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
|
92
tmpsrc/actions/islandAction_fetch.java
Normal file
92
tmpsrc/actions/islandAction_fetch.java
Normal file
@ -0,0 +1,92 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Fecth all the repository (get all modification on the server)"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=true, desc="Name of the remote server")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
debug.info("fetch manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
commands.fetch(env.get_island_path_manifest(), "origin")
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("fetch : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
// configure remote name:
|
||||
if argument_remote_name == "":
|
||||
argument_remote_name = elem.select_remote["name"]
|
||||
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("fetch: " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
//debug.debug("elem : " + str(elem))
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
debug.error("can not fetch project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(new Path(git_repo_path,".git")) == false:
|
||||
// path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.error("path '" + git_repo_path + "' is already existing but not used for a git repository. Clean it and restart")
|
||||
|
||||
// simply update the repository ...
|
||||
debug.verbose("Fetching project: ")
|
||||
|
||||
commands.fetch(git_repo_path, argument_remote_name)
|
||||
|
100
tmpsrc/actions/islandAction_init.java
Normal file
100
tmpsrc/actions/islandAction_init.java
Normal file
@ -0,0 +1,100 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import commands
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
import os
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Init a island repository (need 'fetch' after)"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
my_args.add("b", "branch", haveParam=true, desc="Select branch to display")
|
||||
my_args.add("m", "manifest", haveParam=true, desc="Name of the manifest")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
if len(_arguments) == 0:
|
||||
debug.error("Missing argument to execute the current action ...")
|
||||
|
||||
// the configuration availlable:
|
||||
branch = "master"
|
||||
manifest_name = "default.xml"
|
||||
address_manifest = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "branch":
|
||||
debug.info("find branch name: '" + elem.get_arg() + "'")
|
||||
branch = elem.get_arg()
|
||||
elif elem.get_option_name() == "manifest":
|
||||
debug.info("find mmanifest name: '" + elem.get_arg() + "'")
|
||||
manifest_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "":
|
||||
if address_manifest != "":
|
||||
debug.error("Manifest adress already set : '" + address_manifest + "' !!! '" + elem.get_arg() + "'")
|
||||
address_manifest = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
if address_manifest == "":
|
||||
debug.error("Init: Missing manifest name")
|
||||
|
||||
debug.info("Init with: '" + address_manifest + "' branch='" + branch + "' name of manifest='" + manifest_name + "'")
|
||||
|
||||
|
||||
// check if .XXX exist (create it if needed)
|
||||
if manifest.is_lutin_init() == true:
|
||||
debug.error("System already init: path already exist: '" + str(env.get_island_path()) + "'")
|
||||
|
||||
tools.create_directory(env.get_island_path())
|
||||
// check if the git of the manifest if availlable
|
||||
|
||||
// create the file configuration:
|
||||
conf = config.get_unique_config()
|
||||
conf.set_manifest(address_manifest)
|
||||
conf.set_branch(branch)
|
||||
conf.set_manifest_name(manifest_name)
|
||||
conf.store()
|
||||
|
||||
debug.info("Clone the manifest")
|
||||
ret_values = commands.clone(env.get_island_path_manifest(), address_manifest, branch_name=branch)
|
||||
|
||||
if ret_values == false:
|
||||
debug.info("'" + str(ret_values) + "'")
|
||||
debug.error("Init does not work")
|
||||
return false
|
||||
|
||||
debug.info("Init done correctly ...")
|
||||
|
||||
return None
|
||||
|
||||
|
||||
|
72
tmpsrc/actions/islandAction_manifest-checkout.java
Normal file
72
tmpsrc/actions/islandAction_manifest-checkout.java
Normal file
@ -0,0 +1,72 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Manifest Ckeckout a specific branch of repository"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "remote", haveParam=true, desc="Name of the remote server")
|
||||
my_args.add_arg("branch", optionnal=false, desc="Branch to checkout (if '__TAG__' ==> checkout specific repository tags)")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
branch_to_checkout = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "branch":
|
||||
branch_to_checkout = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
if status.checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display) == false:
|
||||
return env.ret_action_fail
|
||||
|
||||
|
||||
|
||||
|
72
tmpsrc/actions/islandAction_manifest-deliver-push.java
Normal file
72
tmpsrc/actions/islandAction_manifest-deliver-push.java
Normal file
@ -0,0 +1,72 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Push the manifest delivery"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
pass
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
for elem in _arguments:
|
||||
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
|
||||
// Check the manifest is up to date ...
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
status.deliver_push(elem, "origin", destination_branch, source_branch, base_display)
|
||||
|
||||
|
180
tmpsrc/actions/islandAction_manifest-deliver.java
Normal file
180
tmpsrc/actions/islandAction_manifest-deliver.java
Normal file
@ -0,0 +1,180 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Deliver the manifest (merge develop vertion and create a branch with the specific current tags)"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
pass
|
||||
|
||||
|
||||
// must be on the branch we choice to merge ...
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
destination_branch = mani.deliver_master
|
||||
source_branch = mani.deliver_develop
|
||||
|
||||
// Check the manifest is up to date ...
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
debug.verbose("deliver-ckeck: " + base_display)
|
||||
if status.deliver_check(elem, argument_remote_name, 0, base_display, source_branch, destination_branch) == false:
|
||||
debug.error("Can not deliver a MANIFEST that is not ready to merge", crash=false)
|
||||
return env.ret_action_fail
|
||||
|
||||
|
||||
all_tags = check_all_tags(mani)
|
||||
if all_tags == None:
|
||||
debug.error("Need the Tags are set in sub-repository", crash=false)
|
||||
return env.ret_action_fail
|
||||
|
||||
|
||||
// deliver the manifest (if Needed ...)
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
|
||||
debug.info("manifest-deliver: ========================================================================")
|
||||
debug.info("manifest-deliver: == " + base_display)
|
||||
debug.info("manifest-deliver: ========================================================================")
|
||||
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
// Check the validity of the version,
|
||||
version_description, add_in_version_management = status.get_current_version_repo(git_repo_path)
|
||||
if version_description == None:
|
||||
return env.ret_action_fail
|
||||
debug.info("manifest-deliver: ==> version: " + str(version_description))
|
||||
|
||||
// go to the dev branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
|
||||
// create new repo tag
|
||||
new_version_description = status.create_new_version_repo(git_repo_path, version_description, add_in_version_management, source_branch, destination_branch)
|
||||
debug.info("new version: " + str(new_version_description))
|
||||
if new_version_description == None:
|
||||
return
|
||||
// merge branch
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
if mani.deliver_mode == "merge":
|
||||
merge_force = true
|
||||
else:
|
||||
merge_force = false
|
||||
commands.merge_branch_on_master(git_repo_path, source_branch, merge_force, branch_destination=destination_branch)
|
||||
|
||||
manifest.tag_manifest(file_source_manifest, all_tags);
|
||||
|
||||
version_path_file = new Path(git_repo_path, "version.txt")
|
||||
// update version file:
|
||||
tools.file_write_data(version_path_file, tools.version_to_string(new_version_description))
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, "[RELEASE] Release v" + tools.version_to_string(new_version_description))
|
||||
commands.tag(git_repo_path, "v" + tools.version_to_string(new_version_description))
|
||||
commands.checkout(git_repo_path, source_branch)
|
||||
commands.reset_hard(git_repo_path, destination_branch)
|
||||
new_version_description.append("dev")
|
||||
manifest.tag_clear(file_source_manifest);
|
||||
tools.file_write_data(version_path_file, tools.version_to_string(new_version_description))
|
||||
commands.add_file(git_repo_path, version_path_file)
|
||||
commands.commit_all(git_repo_path, status.default_update_message)
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
|
||||
|
||||
debug.info("manifest-deliver: ==> DONE")
|
||||
|
||||
|
||||
|
||||
public void check_all_tags(mani):
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("Check all: " + str(len(all_project)) + " projects have a current tag ...")
|
||||
id_element = 0
|
||||
check_have_error = false
|
||||
list_tags = []
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
if elem.volatile == true:
|
||||
debug.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " (Not Managed)")
|
||||
continue
|
||||
tags_comment = ""
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
debug.error(base_display + volatile + "\r\t\t\t\t\t\t\t\t\t" + " (not download)", crash=false)
|
||||
check_have_error = true
|
||||
continue
|
||||
ret_current_tags = commands.get_tags_current(git_repo_path)
|
||||
debug.verbose("tags found: " + str(ret_current_tags))
|
||||
if len(ret_current_tags) == 0:
|
||||
list_tags.append({
|
||||
"name":elem.name,
|
||||
"tag":""
|
||||
})
|
||||
else:
|
||||
list_tags.append({
|
||||
"name":elem.name,
|
||||
"tag":ret_current_tags[0]
|
||||
})
|
||||
for elem_tag in ret_current_tags:
|
||||
if len(tags_comment) != 0:
|
||||
tags_comment += ","
|
||||
tags_comment += elem_tag
|
||||
if len(ret_current_tags) == 0:
|
||||
debug.error(base_display + "\r\t\t\t\t\t\t\t\t\t" + " (NO TAG DETECTED)", crash=false)
|
||||
check_have_error = true
|
||||
continue
|
||||
else:
|
||||
debug.info(base_display + "\r\t\t\t\t\t\t\t\t\t" + " " + tags_comment)
|
||||
if check_have_error == true:
|
||||
return None
|
||||
return list_tags
|
||||
|
63
tmpsrc/actions/islandAction_manifest-status.java
Normal file
63
tmpsrc/actions/islandAction_manifest-status.java
Normal file
@ -0,0 +1,63 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Display status spécifically of the manifest"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(_my_args, _section):
|
||||
_my_args.add("t", "tags", haveParam=false, desc="Display if the commit is on a tag (and display it)")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
argument_display_tag = false
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "tags":
|
||||
argument_display_tag = true
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
elem = configuration.get_manifest_config()
|
||||
base_display = tools.get_list_base_display(0, 0, elem)
|
||||
ret = status.display_status(elem, argument_remote_name, argument_display_tag, 0, base_display)
|
||||
if ret != None:
|
||||
return env.ret_action_need_updtate
|
60
tmpsrc/actions/islandAction_manifest-sync.java
Normal file
60
tmpsrc/actions/islandAction_manifest-sync.java
Normal file
@ -0,0 +1,60 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Syncronize all the repository referenced"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
pass
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
for elem in _arguments:
|
||||
debug.error("pull Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
|
||||
if is_modify_manifest == true:
|
||||
commands.fetch(env.get_island_path_manifest(), "origin")
|
||||
else:
|
||||
commands.pull(env.get_island_path_manifest(), "origin")
|
||||
|
114
tmpsrc/actions/islandAction_push.java
Normal file
114
tmpsrc/actions/islandAction_push.java
Normal file
@ -0,0 +1,114 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Push all repository to the upper server"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(_my_args, _section):
|
||||
_my_args.add("r", "remote", haveParam=true, desc="Name of the remote server")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("fetch : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("push: " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
//debug.debug("elem : " + str(elem))
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
debug.error("can not push project that not exist")
|
||||
continue
|
||||
|
||||
if os.path.exists(new Path(git_repo_path,".git")) == false:
|
||||
// path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.error("path '" + git_repo_path + "' exist but not used for a git repository. Clean it and restart")
|
||||
|
||||
// get the current branch:
|
||||
// get local branch
|
||||
cmd = "git branch -a"
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret_branch = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
list_branch = ret_branch[1].split('\n')
|
||||
list_branch2 = []
|
||||
list_branch3 = []
|
||||
select_branch = ""
|
||||
for elem_branch in list_branch:
|
||||
if len(elem_branch.split(" -> ")) != 1:
|
||||
continue
|
||||
if elem_branch[2:10] == "remotes/":
|
||||
elem_branch = elem_branch[:2] + elem_branch[10:]
|
||||
if elem_branch[:2] == "* ":
|
||||
list_branch2.append([elem_branch[2:], true])
|
||||
select_branch = elem_branch[2:]
|
||||
else:
|
||||
list_branch2.append([elem_branch[2:], false])
|
||||
list_branch3.append(elem_branch[2:])
|
||||
|
||||
// simply update the repository ...
|
||||
debug.verbose("Push project: ")
|
||||
// fetch the repository
|
||||
cmd = "git push"
|
||||
if argument_remote_name != "":
|
||||
cmd += " " + argument_remote_name
|
||||
else:
|
||||
cmd += " " + elem.select_remote["name"]
|
||||
cmd += " " + select_branch + ":" + select_branch
|
||||
debug.info("execute : " + cmd)
|
||||
multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
|
92
tmpsrc/actions/islandAction_status.java
Normal file
92
tmpsrc/actions/islandAction_status.java
Normal file
@ -0,0 +1,92 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import multiprocess
|
||||
from island import config
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import status
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Get the status of all the repositories"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(_my_args, _section):
|
||||
_my_args.add("r", "remote", haveParam=true, desc="Name of the remote server")
|
||||
_my_args.add("t", "tags", haveParam=false, desc="Display if the commit is on a tag (and display it)")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
argument_remote_name = ""
|
||||
argument_display_tag = false
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "remote":
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
argument_remote_name = elem.get_arg()
|
||||
elif elem.get_option_name() == "tags":
|
||||
argument_display_tag = true
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
|
||||
if is_modify_manifest == true:
|
||||
debug.info("!!!!!!!!!!!! MANIFEST is modify !!!!!!!!")
|
||||
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("status of: " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
|
||||
elem = configuration.get_manifest_config()
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
status.display_status(elem, argument_remote_name, argument_display_tag, id_element, base_display)
|
||||
|
||||
is_behind = false
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
ret = status.display_status(elem, argument_remote_name, argument_display_tag, id_element, base_display)
|
||||
if ret != None:
|
||||
is_behind = true
|
||||
|
||||
if is_behind == true:
|
||||
return env.ret_action_need_updtate
|
||||
|
||||
|
160
tmpsrc/actions/islandAction_sync-local.java
Normal file
160
tmpsrc/actions/islandAction_sync-local.java
Normal file
@ -0,0 +1,160 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import update_links
|
||||
import os
|
||||
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Update all the branche to the trackin branch in local (no remote access)"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
my_args.add("r", "reset", haveParam=false, desc="Rebase the repository instead of 'reset --hard'")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -5 : env.ret_manifest_is_not_existing : Manifest does not exit
|
||||
//# -10 : env.ret_action_is_not_existing : ACTION is not existing
|
||||
//# -11 : env.ret_action_executing_system_error : ACTION execution system error
|
||||
//# -12 : env.ret_action_wrong_parameters : ACTION Wrong parameters
|
||||
//# -13 : env.ret_action_partial_done : ACTION partially done
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
reset_instead_of_rebase = false
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "rebase":
|
||||
reset_instead_of_rebase = true
|
||||
debug.info("==> Request reset instead of rebase")
|
||||
else:
|
||||
debug.error("SYNC Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'", ret_value=env.ret_action_wrong_parameters)
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
|
||||
if is_modify_manifest == true:
|
||||
debug.warning("Manifest is modify")
|
||||
else:
|
||||
ret_track = commands.get_current_tracking_branch(env.get_island_path_manifest())
|
||||
is_forward = commands.is_forward(env.get_island_path_manifest(), ret_track)
|
||||
if is_forward == true:
|
||||
// fetch the repository
|
||||
debug.warning("sync-local: Not update ==> the MANIFEST is forward the remote branch " + str(commands.get_forward(env.get_island_path_manifest(), ret_track)))
|
||||
else:
|
||||
debug.verbose("Check behind:")
|
||||
is_behind = commands.is_behind(env.get_island_path_manifest(), ret_track)
|
||||
if is_behind == false:
|
||||
// fetch the repository
|
||||
debug.info("sync-local: MANIFEST is up-to-date")
|
||||
else:
|
||||
if reset_instead_of_rebase == true:
|
||||
debug.info("sync-local: MANIFEST Reset to " + ret_track)
|
||||
commands.reset_hard(env.get_island_path_manifest(), ret_track)
|
||||
else:
|
||||
debug.info("sync-local: MANIFEST Rebase to " + ret_track)
|
||||
commands.rebase(env.get_island_path_manifest(), ret_track)
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'", ret_value=env.ret_manifest_is_not_existing)
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("synchronize : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
count_error = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("----------------------------------------------------------------")
|
||||
debug.info("sync-local: " + base_display)
|
||||
//debug.debug("elem : " + str(elem))
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
// The Repository does not exist ==> Nothing to do...
|
||||
debug.warning("sync-local: ==> Not download")
|
||||
count_error += 1
|
||||
continue
|
||||
|
||||
if os.path.exists(new Path(git_repo_path,".git")) == false:
|
||||
// path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.warning("sync-local: is already existing but not used for a git repository. Remove it and sync")
|
||||
count_error += 1
|
||||
continue
|
||||
|
||||
// simply update the repository ...
|
||||
debug.verbose("Check modify:")
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
if is_modify == true:
|
||||
// fetch the repository
|
||||
debug.warning("sync-local: Not update ==> the repository is modified (pass through)")
|
||||
count_error += 1
|
||||
continue
|
||||
debug.verbose("Check tracking and local branch:")
|
||||
// get tracking branch
|
||||
ret_track = commands.get_current_tracking_branch(git_repo_path)
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
debug.debug("sync-local: check: " + select_branch + " ==> " + ret_track)
|
||||
debug.verbose("Check forward:")
|
||||
is_forward = commands.is_forward(git_repo_path, ret_track)
|
||||
if is_forward == true:
|
||||
// fetch the repository
|
||||
debug.warning("sync-local: Not update ==> the repository is forward the remote branch " + str(commands.get_forward(git_repo_path, ret_track)))
|
||||
count_error += 1
|
||||
continue
|
||||
debug.verbose("Check behind:")
|
||||
is_behind = commands.is_behind(git_repo_path, ret_track)
|
||||
if is_behind == false:
|
||||
// fetch the repository
|
||||
debug.info("sync-local: Nothing to do.")
|
||||
continue
|
||||
if reset_instead_of_rebase == true:
|
||||
debug.info("sync-local: Reset to " + ret_track)
|
||||
commands.reset_hard(git_repo_path, ret_track)
|
||||
else:
|
||||
debug.info("sync-local: Reset to " + ret_track)
|
||||
commands.rebase(git_repo_path, ret_track)
|
||||
if count_error != 0:
|
||||
debug.info(" ***********************************************************")
|
||||
debug.info(" ** local sync partial warning on " + str(count_error) + " repository")
|
||||
debug.info(" ***********************************************************")
|
||||
return env.ret_action_partial_done
|
||||
|
||||
//# Update the links:
|
||||
have_error = update_links.update(configuration, mani, "sync-local")
|
||||
if have_error == true:
|
||||
return -1
|
||||
return None
|
||||
|
||||
|
||||
|
190
tmpsrc/actions/islandAction_sync.java
Normal file
190
tmpsrc/actions/islandAction_sync.java
Normal file
@ -0,0 +1,190 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import update_links
|
||||
import os
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Syncronize all the repository referenced"
|
||||
|
||||
//#
|
||||
//# @brief at the end of the help wa have the example section
|
||||
//# @return (string) the Example description string
|
||||
//#
|
||||
public void help_example():
|
||||
return "island init https://git.heeroyui.org/atria-tools/island.git"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
my_args.add("d", "download", haveParam=false, desc="Just download the 'not download' repository")
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -10 : ACTION is not existing
|
||||
//# -11 : ACTION execution system error
|
||||
//# -12 : ACTION Wrong parameters
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
just_download = false
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "download":
|
||||
just_download = true
|
||||
debug.info("find remote name: '" + elem.get_arg() + "'")
|
||||
else:
|
||||
debug.error("SYNC Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
configuration = config.get_unique_config()
|
||||
|
||||
// TODO: Load Old manifect to check diff ...
|
||||
|
||||
debug.info("update manifest : '" + str(env.get_island_path_manifest()) + "'")
|
||||
is_modify_manifest = commands.check_repository_is_modify(env.get_island_path_manifest())
|
||||
if is_modify_manifest == true:
|
||||
commands.fetch(env.get_island_path_manifest(), "origin")
|
||||
else:
|
||||
commands.pull(env.get_island_path_manifest(), "origin")
|
||||
|
||||
file_source_manifest = new Path(env.get_island_path_manifest(), configuration.get_manifest_name())
|
||||
if os.path.exists(file_source_manifest) == false:
|
||||
debug.error("Missing manifest file : '" + str(file_source_manifest) + "'")
|
||||
|
||||
mani = manifest.Manifest(file_source_manifest)
|
||||
|
||||
all_project = mani.get_all_configs()
|
||||
debug.info("synchronize : " + str(len(all_project)) + " projects")
|
||||
id_element = 0
|
||||
for elem in all_project:
|
||||
id_element += 1
|
||||
base_display = tools.get_list_base_display(id_element, len(all_project), elem)
|
||||
debug.info("sync : " + base_display)
|
||||
tools.wait_for_server_if_needed()
|
||||
//debug.debug("elem : " + str(elem))
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if elem.tag != None:
|
||||
debug.warning("Need to select a specific tag version ... " + elem.tag)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
// this is a new clone ==> this is easy ...
|
||||
//clone the manifest repository
|
||||
address_manifest = ""
|
||||
//## example git@git.plouf.com:basic_folder
|
||||
address_manifest = elem.select_remote["fetch"]
|
||||
if elem.select_remote["fetch"][0:4] == "git@" \
|
||||
and len(elem.select_remote["fetch"][4:].split(":")) <= 1:
|
||||
address_manifest += ":"
|
||||
else:
|
||||
address_manifest += "/"
|
||||
address_manifest += elem.name
|
||||
debug.info("clone the repo")
|
||||
ret = commands.clone(git_repo_path, address_manifest, branch_name=elem.branch, origin=elem.select_remote["name"])
|
||||
if ret[0] != "" \
|
||||
and ret[0] != false:
|
||||
// all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("Clone repository does not work ... ")
|
||||
continue
|
||||
// add global mirror list
|
||||
for mirror in elem.select_remote["mirror"]:
|
||||
debug.verbose("Add global mirror: " + str(mirror))
|
||||
cmd = "git remote add " + mirror["name"] + " " + mirror["fetch"]
|
||||
if mirror["fetch"][0:4] == "git@":
|
||||
cmd += ":"
|
||||
else:
|
||||
cmd += "/"
|
||||
cmd += elem.name
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret != "" \
|
||||
and ret != false:
|
||||
// all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.warning("Can not add global mirror ... ")
|
||||
continue
|
||||
debug.verbose("Add global mirror: " + str(mirror) + " (done)")
|
||||
//debug.info("plop " + str(elem.select_remote.keys()))
|
||||
// check submodule if requested:
|
||||
if elem.select_remote["sync"] == true \
|
||||
and os.path.exists(new Path(git_repo_path, ".gitmodules")) == true:
|
||||
debug.info(" ==> update submodule")
|
||||
cmd = "git submodule init"
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret != "" \
|
||||
and ret != false:
|
||||
// all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("Can not init submodules ... ")
|
||||
continue
|
||||
cmd = "git submodule update"
|
||||
ret = multiprocess.run_command_direct(cmd, cwd=git_repo_path)
|
||||
if ret[:16] == "Submodule path '":
|
||||
//all is good ...
|
||||
debug.info(" " + ret)
|
||||
elif ret != "" \
|
||||
and ret != false:
|
||||
// all is good, ready to get the system work corectly
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("Can not init submodules ... ")
|
||||
continue
|
||||
continue
|
||||
|
||||
if just_download == true:
|
||||
debug.info("SYNC: Already downloaded")
|
||||
continue
|
||||
|
||||
if os.path.exists(new Path(git_repo_path,".git")) == false:
|
||||
// path already exist but it is not used to as a git repo ==> this is an error
|
||||
debug.error("path '" + git_repo_path + "' is already existing but not used for a git repository. Clean it and restart")
|
||||
|
||||
// simply update the repository ...
|
||||
debug.verbose("Fetching project: ")
|
||||
|
||||
// get tracking branch
|
||||
ret_track = commands.get_current_tracking_branch(git_repo_path)
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
if is_modify == true:
|
||||
// fetch the repository
|
||||
commands.fetch(git_repo_path, elem.select_remote["name"])
|
||||
debug.warning("[" + elem.name + "] Not update ==> the repository is modified (just fetch)")
|
||||
continue
|
||||
commands.pull(git_repo_path, elem.select_remote["name"])
|
||||
|
||||
debug.verbose("select branch = '" + select_branch + "' track: '" + str(ret_track) + "'")
|
||||
// check submodule if requested:
|
||||
if elem.select_remote["sync"] == true \
|
||||
and os.path.exists(new Path(git_repo_path, ".gitmodules")) == true:
|
||||
debug.info(" ==> sync submodule")
|
||||
commands.submodule_sync(git_repo_path)
|
||||
|
||||
//# Update the links:
|
||||
have_error = update_links.update(configuration, mani, "sync-local")
|
||||
if have_error == true:
|
||||
return -1
|
||||
return None
|
86
tmpsrc/actions/islandAction_volatile-add.java
Normal file
86
tmpsrc/actions/islandAction_volatile-add.java
Normal file
@ -0,0 +1,86 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import commands
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
import os
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "Add a 'volatile' repository with a local path (this element is update as an element in the manifest but is not managed by the manifest)"
|
||||
|
||||
//#
|
||||
//# @brief Add argument to the specific action
|
||||
//# @param[in,out] my_args (death.Arguments) Argument manager
|
||||
//# @param[in] section Name of the currect action
|
||||
//#
|
||||
public void add_specific_arguments(my_args, section):
|
||||
my_args.add_arg("git repository", optionnal=false, desc="Git repositoty to download")
|
||||
my_args.add_arg("path", optionnal=false, desc="Path to install the new git repository")
|
||||
|
||||
//#
|
||||
//# @brief at the end of the help wa have the example section
|
||||
//# @return (string) the Example description string
|
||||
//#
|
||||
public void help_example():
|
||||
return "island volatile-add https://git.heeroyui.org/atria-tools/island.git git"
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -5 : env.ret_manifest_is_not_existing : Manifest does not exit
|
||||
//# -10 : env.ret_action_is_not_existing : ACTION is not existing
|
||||
//# -11 : env.ret_action_executing_system_error : ACTION execution system error
|
||||
//# -12 : env.ret_action_wrong_parameters : ACTION Wrong parameters
|
||||
//# -13 : env.ret_action_partial_done : ACTION partially done
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
if len(_arguments) == 0:
|
||||
debug.error("Missing argument to execute the current action [git repository] [path]")
|
||||
|
||||
// the configuration availlable:
|
||||
path = ""
|
||||
address_git = ""
|
||||
for elem in _arguments:
|
||||
if elem.get_option_name() == "git repository":
|
||||
address_git = elem.get_arg()
|
||||
elif elem.get_option_name() == "path":
|
||||
path = elem.get_arg()
|
||||
else:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
if address_git == "":
|
||||
debug.error("volatile-add: Missing git repository address", env.ret_action_wrong_parameters)
|
||||
|
||||
debug.info("Add 'volatile' repository: '" + address_git + "' path='" + path + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
// Update the current configuration:
|
||||
conf = config.get_unique_config()
|
||||
// TODO: Check if the local path does not exist in the manifest
|
||||
|
||||
if false == conf.add_volatile(address_git, path):
|
||||
return env.ret_action_executing_system_error
|
||||
conf.store()
|
||||
return None
|
||||
|
||||
|
53
tmpsrc/actions/islandAction_volatile-list.java
Normal file
53
tmpsrc/actions/islandAction_volatile-list.java
Normal file
@ -0,0 +1,53 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import commands
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
import os
|
||||
|
||||
//#
|
||||
//# @brief Get the global description of the current action
|
||||
//# @return (string) the description string (fist line if reserved for the overview, all is for the specific display)
|
||||
//#
|
||||
public void help():
|
||||
return "List all the volatil repository"
|
||||
|
||||
//#
|
||||
//# @brief Execute the action required.
|
||||
//#
|
||||
//# @return error value [0 .. 50] the <0 value is reserved system ==> else, what you want.
|
||||
//# None : No error (return program out 0)
|
||||
//# -5 : env.ret_manifest_is_not_existing : Manifest does not exit
|
||||
//# -10 : env.ret_action_is_not_existing : ACTION is not existing
|
||||
//# -11 : env.ret_action_executing_system_error : ACTION execution system error
|
||||
//# -12 : env.ret_action_wrong_parameters : ACTION Wrong parameters
|
||||
//# -13 : env.ret_action_partial_done : ACTION partially done
|
||||
//#
|
||||
public void execute(_arguments):
|
||||
for elem in _arguments:
|
||||
debug.error("Wrong argument: '" + elem.get_option_name() + "' '" + elem.get_arg() + "'")
|
||||
|
||||
// check system is OK
|
||||
manifest.check_lutin_is_init()
|
||||
|
||||
conf = config.get_unique_config()
|
||||
volatiles = conf.get_volatile()
|
||||
debug.info("List of all volatiles repository: ")
|
||||
for elem in volatiles:
|
||||
debug.info("\t" + elem["path"] + "\r\t\t\t\t" + elem["git_address"])
|
||||
|
||||
return None
|
||||
|
||||
|
439
tmpsrc/actions/status.java
Normal file
439
tmpsrc/actions/status.java
Normal file
@ -0,0 +1,439 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
from island import config
|
||||
from island import multiprocess
|
||||
from island import manifest
|
||||
from island import commands
|
||||
import os
|
||||
|
||||
|
||||
default_behind_message = "[DEV] update dev tag version"
|
||||
default_update_message = "[VERSION] update dev tag version"
|
||||
|
||||
|
||||
base_name_of_a_tagged_branch = "branch_on_tag_"
|
||||
|
||||
public void display_status(elem, argument_remote_name, argument_display_tag, id_element, base_display):
|
||||
volatile = ""
|
||||
if elem.volatile == true:
|
||||
volatile = " (volatile)"
|
||||
debug.verbose("status : " + base_display)
|
||||
//debug.debug("elem : " + str(elem))
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
debug.info(base_display + volatile + "\r\t\t\t\t\t\t\t\t\t" + " (not download)")
|
||||
return
|
||||
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
list_branch = commands.get_list_branch_all(git_repo_path)
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
debug.verbose("List all branch: " + str(list_branch))
|
||||
if select_branch[:len(base_name_of_a_tagged_branch)] != base_name_of_a_tagged_branch:
|
||||
// get tracking branch
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, select_branch)
|
||||
if tracking_remote_branch == None:
|
||||
debug.info(base_display + volatile + "\r\t\t\t\t\t\t\t (NO BRANCH)")
|
||||
return
|
||||
else:
|
||||
tracking_remote_branch = select_branch[len(base_name_of_a_tagged_branch):]
|
||||
modify_status = " "
|
||||
if is_modify == true:
|
||||
modify_status = " *** "
|
||||
|
||||
debug.verbose("select branch = '" + select_branch + "' is modify : " + str(is_modify) + " track: '" + str(tracking_remote_branch) + "'")
|
||||
|
||||
ret_current_branch_sha1 = commands.get_revision_list_to_branch(git_repo_path, select_branch)
|
||||
ret_track_branch_sha1 = commands.get_revision_list_to_branch(git_repo_path, tracking_remote_branch)
|
||||
// remove all identical sha1 ==> not needed for this
|
||||
in_forward = 0
|
||||
for elem_sha1 in ret_current_branch_sha1:
|
||||
if elem_sha1 not in ret_track_branch_sha1:
|
||||
in_forward += 1
|
||||
in_behind = 0
|
||||
for elem_sha1 in ret_track_branch_sha1:
|
||||
if elem_sha1 not in ret_current_branch_sha1:
|
||||
in_behind += 1
|
||||
|
||||
behind_forward_comment = ""
|
||||
if in_forward != 0:
|
||||
behind_forward_comment += "forward=" + str(in_forward)
|
||||
if in_behind != 0:
|
||||
if in_forward != 0:
|
||||
behind_forward_comment += " "
|
||||
behind_forward_comment += "behind=" + str(in_behind)
|
||||
if behind_forward_comment != "":
|
||||
behind_forward_comment = "\r\t\t\t\t\t\t\t\t\t\t\t\t[" + behind_forward_comment + "]"
|
||||
|
||||
|
||||
tags_comment = ""
|
||||
// check the current tags of the repository
|
||||
if argument_display_tag == true:
|
||||
ret_current_tags = commands.get_tags_current(git_repo_path)
|
||||
debug.verbose("tags found: " + str(ret_current_tags))
|
||||
for elem_tag in ret_current_tags:
|
||||
if len(tags_comment) != 0:
|
||||
tags_comment += ","
|
||||
tags_comment += elem_tag
|
||||
if len(tags_comment) != 0:
|
||||
tags_comment = "\r\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[" + tags_comment + "]"
|
||||
else:
|
||||
tags_comment = "\r\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t- - - - -"
|
||||
debug.info(base_display + volatile + "\r\t\t\t\t\t\t\t" + modify_status + "(" + select_branch + " -> " + tracking_remote_branch + ")" + behind_forward_comment + tags_comment)
|
||||
if is_modify == true:
|
||||
cmd = "git status --short"
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret_diff = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
tmp_color_red = "\033[31m"
|
||||
tmp_color_default= "\033[00m"
|
||||
debug.info(tmp_color_red + ret_diff[1] + tmp_color_default)
|
||||
return in_behind
|
||||
|
||||
|
||||
|
||||
public void deliver_check(elem, argument_remote_name, id_element, base_display, source_branch, destination_branch):
|
||||
deliver_availlable = true
|
||||
debug.debug("deliver-ckeck: " + base_display)
|
||||
debug.debug(" ==> check repo exist")
|
||||
// Check the repo exist
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST be download")
|
||||
return false
|
||||
debug.debug(" ==> check is modify")
|
||||
// check if the curent repo is modify
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
if is_modify == true:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST not be modify")
|
||||
return false
|
||||
|
||||
|
||||
debug.debug(" ==> check current branch is '" + source_branch + "'")
|
||||
// check if we are on source_branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
if select_branch != source_branch:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST be on source branch: '" + source_branch + "' and is: '" + select_branch + "'")
|
||||
return false
|
||||
debug.debug(" ==> check have tracking branch")
|
||||
// check if we have a remote traking branch
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, select_branch)
|
||||
if tracking_remote_branch == None:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch")
|
||||
deliver_availlable = false
|
||||
|
||||
|
||||
// go on destination branch
|
||||
commands.checkout(git_repo_path, destination_branch)
|
||||
// TODO: check return value
|
||||
|
||||
debug.debug(" ==> check current branch is '" + source_branch + "'")
|
||||
// check if we are on "master"
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
if select_branch != destination_branch:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> Can not checkout branch: '" + destination_branch + "' and is: '" + select_branch + "'")
|
||||
deliver_availlable = false
|
||||
debug.debug(" ==> check have tracking branch")
|
||||
// check if we have a remote traking branch
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, select_branch)
|
||||
if tracking_remote_branch == None:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST have a remote tracking branch")
|
||||
deliver_availlable = false
|
||||
|
||||
|
||||
|
||||
"""
|
||||
// check if we have a local branch
|
||||
list_branch_local = commands.get_list_branch_local(git_repo_path)
|
||||
if destination_branch not in list_branch_local:
|
||||
debug.warning("deliver-ckeck: " + base_display + " ==> MUST have local branch named '" + destination_branch + "'")
|
||||
deliver_availlable = false
|
||||
// TODO: check source_branch is up to date
|
||||
|
||||
// TODO: check the remote branch and the local branch are the same
|
||||
//sha_tracking = get_sha1_for_branch(git_repo_path, tracking_remote_branch)
|
||||
//sha_current = get_sha1_for_branch(git_repo_path, select_branch)
|
||||
"""
|
||||
|
||||
// check out back the source branch
|
||||
commands.checkout(git_repo_path, source_branch)
|
||||
return deliver_availlable
|
||||
|
||||
|
||||
public void checkout_elem(elem, argument_remote_name, branch_to_checkout, base_display):
|
||||
debug.verbose("checkout : " + base_display)
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
debug.warning("checkout " + base_display + " ==> repository does not exist ...")
|
||||
return false
|
||||
|
||||
// check if the repository is modify
|
||||
is_modify = commands.check_repository_is_modify(git_repo_path)
|
||||
if is_modify == true:
|
||||
debug.warning("checkout " + base_display + " ==> modify data can not checkout new branch")
|
||||
return false
|
||||
|
||||
list_branch_local = commands.get_list_branch_local(git_repo_path)
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
|
||||
is_tag = false
|
||||
if branch_to_checkout == "__TAG__":
|
||||
branch_to_checkout = base_name_of_a_tagged_branch + str(elem.tag)
|
||||
is_tag = true
|
||||
if elem.volatile == true:
|
||||
debug.info("checkout " + base_display + " ==> Can not checkout for 'volatile' repository")
|
||||
return true
|
||||
if elem.tag == None:
|
||||
debug.info("checkout " + base_display + " ==> Can not checkout for '''None''' Tag")
|
||||
return true
|
||||
// check if we are on the good branch:
|
||||
if branch_to_checkout == select_branch:
|
||||
debug.info("checkout " + base_display + " ==> No change already on good branch")
|
||||
return true
|
||||
|
||||
// check if we have already checkout the branch before
|
||||
debug.verbose(" check : " + branch_to_checkout + " in " + str(list_branch_local))
|
||||
if branch_to_checkout in list_branch_local:
|
||||
cmd = "git checkout " + branch_to_checkout
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
if ret[0] != 0 \
|
||||
and ret[1] != "" \
|
||||
and ret != false:
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("checkout " + base_display + " ==> Can not checkout to the correct branch")
|
||||
return false
|
||||
debug.info("checkout " + base_display + " ==> switch branch")
|
||||
// TODO : Check the number of commit to the origin/XXX branch ....
|
||||
return true
|
||||
|
||||
list_tags = commands.get_tags(git_repo_path)
|
||||
if branch_to_checkout in list_tags:
|
||||
is_tag = true
|
||||
if elem.tag == None:
|
||||
elem.tag = branch_to_checkout
|
||||
branch_to_checkout = base_name_of_a_tagged_branch + str(elem.tag)
|
||||
|
||||
// Check if the remote branch exist ...
|
||||
if is_tag == false:
|
||||
list_branch_remote = commands.get_list_branch_remote(git_repo_path)
|
||||
if elem.select_remote["name"] + "/" + branch_to_checkout in list_branch_remote:
|
||||
debug.info(" ==> find ...")
|
||||
else:
|
||||
debug.info("checkout " + base_display + " ==> NO remote branch")
|
||||
return true
|
||||
// checkout the new branch:
|
||||
cmd = "git checkout --quiet " + elem.select_remote["name"] + "/" + branch_to_checkout + " -b " + branch_to_checkout
|
||||
// + " --track " + elem.select_remote["name"] + "/" + branch_to_checkout
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
if ret[1] != "" \
|
||||
and ret != false:
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("checkout " + base_display + " ==> Can not checkout to the correct branch")
|
||||
return false
|
||||
debug.info("checkout " + base_display + " ==> create new branch")
|
||||
return true
|
||||
// Checkout a specific tags:
|
||||
if elem.tag in list_tags:
|
||||
debug.info(" ==> find ...")
|
||||
else:
|
||||
debug.info("checkout " + base_display + " ==> NO remote tags")
|
||||
return true
|
||||
// checkout the new branch:
|
||||
cmd = "git checkout --quiet " + elem.tag + " -b " + branch_to_checkout
|
||||
// + " --track " + elem.select_remote["name"] + "/" + branch_to_checkout
|
||||
debug.verbose("execute : " + cmd)
|
||||
ret = multiprocess.run_command(cmd, cwd=git_repo_path)
|
||||
if ret[1] != "" \
|
||||
and ret != false:
|
||||
debug.info("'" + str(ret) + "'")
|
||||
debug.error("checkout " + base_display + " ==> Can not checkout to the correct tags")
|
||||
return false
|
||||
debug.info("checkout " + base_display + " ==> create new branch: " + branch_to_checkout)
|
||||
return true
|
||||
|
||||
|
||||
public void get_current_version_repo(git_repo_path):
|
||||
version_path_file = new Path(git_repo_path, "version.txt")
|
||||
add_in_version_management = false
|
||||
version_description = None
|
||||
if os.path.exists(version_path_file) == false:
|
||||
debug.info("deliver: ==> No 'version.txt' file ==> not manage release version....")
|
||||
// Action to do:
|
||||
valid = false
|
||||
while valid == false:
|
||||
debug.info("Create a new version: (0.0.0)")
|
||||
debug.info(" (1) Add in managing version")
|
||||
debug.info(" (2) Do NOTHING & continue")
|
||||
input1 = input()
|
||||
if input1 in ["1", "2"]:
|
||||
valid = true
|
||||
else:
|
||||
debug.info("!!! Must select in range " + str(["1", "2"]))
|
||||
if input1 == "1":
|
||||
version_description = [0, 0, 0]
|
||||
add_in_version_management = true
|
||||
elif input1 == "2":
|
||||
debug.info("Continue Not managing for this repository")
|
||||
return (None, None)
|
||||
else:
|
||||
debug.warning("An error occured for this repository")
|
||||
return (None, None)
|
||||
else:
|
||||
version_description = tools.version_string_to_list(tools.file_read_data(version_path_file))
|
||||
return (version_description, add_in_version_management)
|
||||
|
||||
|
||||
|
||||
public void create_new_version_repo(git_repo_path, version_description, add_in_version_management, source_branch, destination_branch):
|
||||
// get tracking branch
|
||||
ret_destination_branch_sha1 = commands.get_revision_list_to_branch(git_repo_path, destination_branch)
|
||||
ret_source_branch_sha1 = commands.get_revision_list_to_branch(git_repo_path, source_branch)
|
||||
// remove all identical sha1 ==> not needed for this
|
||||
have_forward = false
|
||||
for elem_sha1 in ret_destination_branch_sha1:
|
||||
if elem_sha1 not in ret_source_branch_sha1:
|
||||
message = commands.get_specific_commit_message(git_repo_path, elem_sha1)
|
||||
debug.warning("deliver: Forward commit: '" + message + "'")
|
||||
have_forward = true
|
||||
if have_forward == true:
|
||||
debug.error("'" + destination_branch + "' branch must not be forward '" + source_branch + "' branch")
|
||||
return None
|
||||
behind_message = ""
|
||||
behind_count = 0
|
||||
for elem_sha1 in ret_source_branch_sha1:
|
||||
if elem_sha1 not in ret_destination_branch_sha1:
|
||||
message = commands.get_specific_commit_message(git_repo_path, elem_sha1)
|
||||
behind_count += 1
|
||||
behind_message = message
|
||||
if behind_count == 0 and add_in_version_management == false:
|
||||
debug.info("deliver: ==> Nothing to do (1).")
|
||||
return None
|
||||
if behind_count == 1 \
|
||||
and ( behind_message == default_behind_message
|
||||
or behind_message == default_update_message):
|
||||
debug.info("deliver: ==> Nothing to do (2).")
|
||||
return None
|
||||
for elem_sha1 in ret_source_branch_sha1:
|
||||
if elem_sha1 not in ret_destination_branch_sha1:
|
||||
message = commands.get_specific_commit_message(git_repo_path, elem_sha1)
|
||||
debug.info("deliver: Behind commit: '" + message + "'")
|
||||
// Choice of the new version:
|
||||
valid = false
|
||||
while valid == false:
|
||||
debug.info("update version: curent: " + str(version_description))
|
||||
debug.info(" (1) Major version (change API)")
|
||||
debug.info(" (2) Medium version (add feature)")
|
||||
debug.info(" (3) Minor version (Bug fix & doc)")
|
||||
debug.info(" (4) Do not release & continue")
|
||||
input1 = input()
|
||||
if input1 in ["1", "2", "3", "4"]:
|
||||
valid = true
|
||||
else:
|
||||
debug.info("!!! Must select in range " + str(["1", "2", "3", "4"]))
|
||||
// limit and force at 3 the nuber of variables
|
||||
version_description_tmp = version_description
|
||||
version_description = []
|
||||
if len(version_description_tmp) >= 1:
|
||||
version_description.append(version_description_tmp[0])
|
||||
else:
|
||||
version_description.append(0)
|
||||
if len(version_description_tmp) >= 2:
|
||||
version_description.append(version_description_tmp[1])
|
||||
else:
|
||||
version_description.append(0)
|
||||
if len(version_description_tmp) >= 3:
|
||||
version_description.append(version_description_tmp[2])
|
||||
else:
|
||||
version_description.append(0)
|
||||
debug.info("update version: curent: " + str(version_description))
|
||||
// increment the version
|
||||
if input1 == "1":
|
||||
version_description[0] += 1
|
||||
version_description[1] = 0
|
||||
version_description[2] = 0
|
||||
elif input1 == "2":
|
||||
version_description[1] += 1
|
||||
version_description[2] = 0
|
||||
elif input1 == "3":
|
||||
version_description[2] += 1
|
||||
elif input1 == "4":
|
||||
debug.info("No release for this repository")
|
||||
return None
|
||||
else:
|
||||
debug.warning("An error occured for this repository")
|
||||
return None
|
||||
debug.info("update version: curent: " + str(version_description))
|
||||
return version_description
|
||||
|
||||
|
||||
public void deliver_push(elem, argument_remote_name, destination_branch, source_branch, base_display):
|
||||
// Check the repo exist
|
||||
git_repo_path = new Path(env.get_island_root_path(), elem.path)
|
||||
if os.path.exists(git_repo_path) == false:
|
||||
debug.warning("deliver-push: " + base_display + " ==> MUST be download")
|
||||
return
|
||||
// check if we are on destination_branch
|
||||
select_branch = commands.get_current_branch(git_repo_path)
|
||||
if select_branch != destination_branch:
|
||||
debug.warning("deliver-push: " + base_display + " ==> MUST be on '" + destination_branch + "'")
|
||||
return
|
||||
// check if we have a local branch
|
||||
list_branch_local = commands.get_list_branch_local(git_repo_path)
|
||||
if source_branch not in list_branch_local:
|
||||
debug.warning("deliver-push: " + base_display + " ==> No '" + source_branch + "' (not managed)")
|
||||
return
|
||||
if destination_branch not in list_branch_local:
|
||||
debug.warning("deliver-push: " + base_display + " ==> No '" + destination_branch + "' (not managed)")
|
||||
return
|
||||
list_of_element_to_push = []
|
||||
// check sha1 of destination_branch
|
||||
sha_1_destination = commands.get_sha1_for_branch(git_repo_path, destination_branch)
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, destination_branch)
|
||||
if tracking_remote_branch == None:
|
||||
debug.warning("deliver-push: " + base_display + " ==> '" + destination_branch + "' have no tracking branch")
|
||||
deliver_availlable = false
|
||||
sha_1_destination_tracking = commands.get_sha1_for_branch(git_repo_path, tracking_remote_branch)
|
||||
if sha_1_destination == sha_1_destination_tracking:
|
||||
debug.info("deliver-push: " + base_display + " ==> '" + destination_branch + "' && '" + tracking_remote_branch + "' have the same sha1")
|
||||
else:
|
||||
list_of_element_to_push.append(destination_branch)
|
||||
// check sha1 of source_branch
|
||||
sha_1_source = commands.get_sha1_for_branch(git_repo_path, source_branch)
|
||||
tracking_remote_branch = commands.get_tracking_branch(git_repo_path, argument_remote_name, source_branch)
|
||||
if tracking_remote_branch == None:
|
||||
debug.info("deliver-push: " + base_display + " ==> '" + source_branch + "' have no tracking branch")
|
||||
deliver_availlable = false
|
||||
sha_1_source_tracking = commands.get_sha1_for_branch(git_repo_path, tracking_remote_branch)
|
||||
if sha_1_source == sha_1_source_tracking:
|
||||
debug.info("deliver-push: " + base_display + " ==> '" + source_branch + "' && '" + tracking_remote_branch + "' have the same sha1")
|
||||
else:
|
||||
list_of_element_to_push.append(source_branch)
|
||||
ret_current_tags = commands.get_tags_current(git_repo_path)
|
||||
if len(ret_current_tags) == 0:
|
||||
debug.info("deliver-push: " + base_display + " ==> No tag on the current '" + destination_branch + "'")
|
||||
return
|
||||
if len(ret_current_tags) > 1:
|
||||
debug.info("deliver-push: " + base_display + " ==> Too mush tags on the current '" + destination_branch + "' : " + str(ret_current_tags) + " ==> only support 1")
|
||||
return
|
||||
list_remote_tags = commands.get_tags_remote(git_repo_path, argument_remote_name)
|
||||
debug.verbose("remote tags: " + str(list_remote_tags))
|
||||
if ret_current_tags[0] not in list_remote_tags:
|
||||
debug.info("deliver-push: " + base_display + " ==> tag already exist.")
|
||||
list_of_element_to_push.append(ret_current_tags[0])
|
||||
if len(list_of_element_to_push) == 0:
|
||||
debug.info("deliver-push: " + base_display + " ==> Everything up-to-date")
|
||||
return
|
||||
debug.info("deliver-push: " + base_display + " ==> element to push:" + str(list_of_element_to_push))
|
||||
//push all on the server:
|
||||
commands.push(git_repo_path, argument_remote_name, list_of_element_to_push)
|
43
tmpsrc/actions/update_links.java
Normal file
43
tmpsrc/actions/update_links.java
Normal file
@ -0,0 +1,43 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
from island import tools
|
||||
from island import env
|
||||
import os
|
||||
|
||||
//# Update the links:
|
||||
public void update(configuration, mani, type_call):
|
||||
// TODO: do not remove link when not needed
|
||||
if len(configuration.get_links()) != 0 \
|
||||
or len(mani.get_links()) != 0:
|
||||
debug.info(type_call + ": remove old links ...")
|
||||
for elem in configuration.get_links():
|
||||
base_path = new Path(env.get_island_root_path(), elem["destination"])
|
||||
debug.info(type_call + ": link: " + str(base_path))
|
||||
if os.path.islink(base_path) == true:
|
||||
os.unlink(base_path)
|
||||
else:
|
||||
debug.error(type_call + ": remove link is not authorised ==> not a link", crash=false)
|
||||
have_error = true
|
||||
configuration.clear_links()
|
||||
debug.info(type_call + ": add new links ...")
|
||||
for elem in mani.get_links():
|
||||
base_path = new Path(env.get_island_root_path(), elem["destination"])
|
||||
source_path = new Path(env.get_island_root_path(), elem["source"])
|
||||
debug.info(type_call + ": link: " + str(base_path))
|
||||
if os.path.exists(base_path) == true:
|
||||
debug.error(type_call + ": create link is not possible ==> path already exist", crash=false)
|
||||
have_error = true
|
||||
else:
|
||||
tools.create_directory_of_file(base_path)
|
||||
os.symlink(source_path, base_path)
|
||||
configuration.add_link(elem["source"], elem["destination"])
|
||||
configuration.store()
|
388
tmpsrc/commands.java
Normal file
388
tmpsrc/commands.java
Normal file
@ -0,0 +1,388 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import errno
|
||||
import fnmatch
|
||||
import stat
|
||||
// Local import
|
||||
from realog import debug
|
||||
from . import env
|
||||
from . import multiprocess
|
||||
from . import debug
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
public void check_repository_is_modify(path_repository):
|
||||
// check if the repository is modify
|
||||
cmd = "git diff --quiet"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "check_repository_is_modify", error_only=true, availlable_return=[0,1], display_if_nothing=false)
|
||||
ret_diff = return_value
|
||||
if ret_diff[0] == 0:
|
||||
return false
|
||||
return true
|
||||
|
||||
public void get_list_branch_meta(path_repository):
|
||||
// get local branch
|
||||
cmd = "git branch -a"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_list_branch_meta", error_only=true)
|
||||
ret_branch = return_value
|
||||
list_branch = ret_branch[1].split('\n')
|
||||
out = []
|
||||
for elem_branch in list_branch:
|
||||
is_remote = false
|
||||
branch_name = ""
|
||||
is_selected = false
|
||||
if len(elem_branch.split(" -> ")) != 1:
|
||||
continue
|
||||
// separate the remote element
|
||||
if elem_branch[2:10] == "remotes/":
|
||||
elem_branch = elem_branch[:2] + elem_branch[10:]
|
||||
is_remote = true
|
||||
// separate select branch
|
||||
if elem_branch[:2] == "* ":
|
||||
is_selected = true
|
||||
branch_name = elem_branch[2:]
|
||||
else:
|
||||
branch_name = elem_branch[2:]
|
||||
out.append({
|
||||
"remote": is_remote,
|
||||
"name": branch_name,
|
||||
"select": is_selected
|
||||
})
|
||||
debug.extreme_verbose("List all branch Meta: " + str(out))
|
||||
return out
|
||||
|
||||
|
||||
public void get_list_branch_all(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
for elem in tmp:
|
||||
out.append(elem["name"])
|
||||
debug.verbose("List all branch: " + str(out))
|
||||
return out
|
||||
|
||||
public void get_list_branch_local(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
for elem in tmp:
|
||||
if elem["remote"] == false:
|
||||
out.append(elem["name"])
|
||||
debug.verbose("List local branch: " + str(out))
|
||||
return out
|
||||
|
||||
public void get_list_branch_remote(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
out = []
|
||||
for elem in tmp:
|
||||
if elem["remote"] == true:
|
||||
out.append(elem["name"])
|
||||
debug.verbose("List remote branch: " + str(out))
|
||||
return out
|
||||
|
||||
public void get_current_branch(path_repository):
|
||||
tmp = get_list_branch_meta(path_repository)
|
||||
for elem in tmp:
|
||||
if elem["select"] == true:
|
||||
debug.verbose("List local branch: " + str(elem["name"]))
|
||||
return elem["name"]
|
||||
debug.verbose("List local branch: None" )
|
||||
return None
|
||||
|
||||
public void get_current_tracking_branch(path_repository):
|
||||
// get tracking branch
|
||||
cmd = "git rev-parse --abbrev-ref --symbolic-full-name @{u}"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
if return_value[1] == "@{u}":
|
||||
debug.warning("in '" + path_repository + "' no tracking branch is specify")
|
||||
return None
|
||||
multiprocess.generic_display_error(return_value, "get_current_tracking_branch", error_only=true)
|
||||
return return_value[1]
|
||||
|
||||
public void get_revision_list_to_branch(path_repository, branch):
|
||||
cmd = "git rev-list " + branch
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_revision_list_to_branch", error_only=true)
|
||||
return return_value[1].split('\n')
|
||||
|
||||
public void get_specific_commit_message(path_repository, sha_1):
|
||||
if sha_1 == None or sha_1 == "":
|
||||
return ""
|
||||
cmd = "git log --format=%B -n 1 " + sha_1
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_specific_commit_message", error_only=true)
|
||||
return return_value[1].split('\n')[0]
|
||||
|
||||
public void get_sha1_for_branch(path_repository, branch_name):
|
||||
if branch_name == None or branch_name == "":
|
||||
return None
|
||||
cmd = "git rev-parse " + branch_name
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_sha1_for_branch", error_only=true)
|
||||
return return_value[1].split('\n')[0]
|
||||
|
||||
|
||||
public void get_tags_current(path_repository):
|
||||
cmd = "git tag --points-at"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_tags_current", error_only=true)
|
||||
list_tags = []
|
||||
for elem in return_value[1].split('\n'):
|
||||
if elem != "":
|
||||
list_tags.append(elem)
|
||||
return list_tags
|
||||
|
||||
public void get_tags(path_repository):
|
||||
cmd = "git tag"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_tags", error_only=true)
|
||||
return return_value[1].split('\n')
|
||||
|
||||
public void get_tags_remote(path_repository, remote_name):
|
||||
if remote_name == "" or remote_name == None:
|
||||
return get_current_tracking_branch(path_repository)
|
||||
cmd = "git ls-remote --tags " + remote_name
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "get_tags_remote", error_only=true)
|
||||
list_element = return_value[1].split('\n')
|
||||
debug.verbose(" receive: " + str(list_element))
|
||||
//6bc01117e85d00686ae2d423193a161e82df9a44 refs/tags/0.1.0
|
||||
//7ef9caa51cf3744de0f46352e5aa07bd4980fe89 refs/tags/v0.2.0
|
||||
//870e8e039b0a98370a9d23844f0af66824c57a5f refs/tags/v0.2.0^{}
|
||||
//16707e17e58f16b3409f8c64df7f595ba7dcf499 refs/tags/v0.3.0
|
||||
//dfb97c3dfea776e5c4862dc9f60f8c5ad83b55eb refs/tags/v0.3.0^{}
|
||||
out = []
|
||||
for elem in list_element:
|
||||
cut = elem.split("\t")
|
||||
if len(cut) != 2:
|
||||
continue
|
||||
if cut[1][-3:] == "^{}":
|
||||
// specific usage for the annotated commit
|
||||
continue
|
||||
if cut[1][:10] == "refs/tags/":
|
||||
out.append(cut[1][10:])
|
||||
else:
|
||||
out.append(cut[1])
|
||||
return out
|
||||
|
||||
public void get_tracking_branch(path_repository, remote_name, select_branch):
|
||||
// get tracking branch
|
||||
if remote_name == "" or remote_name == None:
|
||||
return get_current_tracking_branch(path_repository)
|
||||
list_branch_remote = get_list_branch_remote(path_repository)
|
||||
debug.extreme_verbose("check if exist " + remote_name + "/" + select_branch + " in " + str(list_branch_remote))
|
||||
if remote_name + "/" + select_branch not in list_branch_remote:
|
||||
debug.debug(" ==> can not get remote branch")
|
||||
return None
|
||||
return remote_name + "/" + select_branch
|
||||
|
||||
|
||||
public void merge_branch_on_master(path_repository, branch_name, merge_force=true, branch_destination = "master"):
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "Missing branch name"
|
||||
cmd = "git merge "
|
||||
if merge_force == true:
|
||||
cmd += "--no-ff "
|
||||
cmd += branch_name + " --message \"Merge branch '" + branch_name + "' into '" + branch_destination + "'\""
|
||||
debug.verbose("execute : " + cmd)
|
||||
// TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "merge_branch_on_master", error_only=true)
|
||||
return return_value
|
||||
|
||||
|
||||
public void add_file(path_repository, file_path):
|
||||
if file_path == None or file_path == "":
|
||||
raise "Missing file_path name"
|
||||
cmd = "git add " + file_path
|
||||
debug.verbose("execute : " + cmd)
|
||||
// TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "add_file", error_only=true)
|
||||
return return_value
|
||||
|
||||
|
||||
public void commit_all(path_repository, comment):
|
||||
if comment == None or comment == "":
|
||||
raise "Missing comment description"
|
||||
cmd = 'git commit -a --message "' + comment +'"'
|
||||
debug.verbose("execute : " + cmd)
|
||||
// TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "commit_all", error_only=true)
|
||||
return return_value
|
||||
|
||||
public void tag(path_repository, tag_name):
|
||||
if tag_name == None or tag_name == "":
|
||||
raise "Missing tag name"
|
||||
tag_name = tag_name.replace(" ", "_")
|
||||
cmd = 'git tag ' + tag_name + ' --message "[TAG] create tag ' + tag_name +'"'
|
||||
debug.verbose("execute : " + cmd)
|
||||
// TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "tag", error_only=true)
|
||||
return return_value
|
||||
|
||||
public void checkout(path_repository, branch_name):
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "Missing branch name"
|
||||
cmd = 'git checkout ' + branch_name
|
||||
debug.verbose("execute : " + cmd)
|
||||
// TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "checkout", error_only=true)
|
||||
return return_value
|
||||
|
||||
public void reset_hard(path_repository, destination):
|
||||
if destination == None or destination == "":
|
||||
raise "Missing destination 'sha1' or 'branch name'"
|
||||
cmd = 'git reset --hard ' + destination
|
||||
debug.verbose("execute : " + cmd)
|
||||
// TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "reset_hard", error_only=true)
|
||||
return return_value
|
||||
|
||||
public void rebase(path_repository, destination):
|
||||
if destination == None or destination == "":
|
||||
raise "Missing destination 'sha1' or 'branch name'"
|
||||
cmd = 'git rebase ' + destination
|
||||
debug.verbose("execute : " + cmd)
|
||||
// TODO: check if the command work correctly
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "rebase", error_only=true)
|
||||
return return_value
|
||||
|
||||
|
||||
public void clone(path_repository, address, branch_name = None, origin=None):
|
||||
if address == None or address == "":
|
||||
raise "Missing address"
|
||||
cmd = 'git clone ' + address
|
||||
if branch_name != None and branch_name == "":
|
||||
cmd += " --branch " + branch_name
|
||||
if origin != None and origin == "":
|
||||
cmd += " --origin " + origin
|
||||
if path_repository != None and path_repository != "":
|
||||
cmd += " " + path_repository
|
||||
debug.verbose("execute : " + cmd)
|
||||
if os.path.exists(path_repository) == true:
|
||||
debug.warning("Can not clone repository path already exist")
|
||||
return false
|
||||
return_value = multiprocess.run_command(cmd)
|
||||
multiprocess.generic_display_error(return_value, "clone", error_only=true)
|
||||
return return_value
|
||||
|
||||
|
||||
public void fetch(path_repository, remote_name, prune=true):
|
||||
cmd = 'git fetch ' + remote_name
|
||||
if prune == true:
|
||||
cmd += " --prune"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "fetch")
|
||||
return return_value
|
||||
|
||||
public void pull(path_repository, remote_name, prune=true):
|
||||
if remote_name == None or remote_name == "":
|
||||
raise "Missing remote_name"
|
||||
cmd = 'git pull ' + remote_name
|
||||
if prune == true:
|
||||
cmd += " --prune"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "pull")
|
||||
return return_value
|
||||
|
||||
public void push(path_repository, remote_name, elements):
|
||||
if remote_name == None or remote_name == "":
|
||||
raise "Missing remote_name"
|
||||
if len(elements) == 0:
|
||||
raise "No elements to push on server"
|
||||
cmd = 'git push ' + remote_name
|
||||
for elem in elements:
|
||||
cmd += " " + elem
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "push")
|
||||
return return_value
|
||||
|
||||
|
||||
public void submodule_sync(path_repository, remote_name):
|
||||
cmd = "git submodule sync"
|
||||
debug.verbose("execute : " + cmd)
|
||||
return_value = multiprocess.run_command(cmd, cwd=path_repository)
|
||||
multiprocess.generic_display_error(return_value, "submodule_sync")
|
||||
"""
|
||||
if ret[:31] == "Synchronizing submodule url for":
|
||||
//all is good ...
|
||||
debug.info(" " + ret)
|
||||
elif ret != "" \
|
||||
and ret != false:
|
||||
// all is good, ready to get the system work corectly
|
||||
debug.info("'" + ret + "'")
|
||||
debug.error("Can not sync submodules ... ")
|
||||
"""
|
||||
|
||||
|
||||
|
||||
public void get_forward(path_repository, branch_name):
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "get_fast_forward: Missing branch_name"
|
||||
select_branch = get_current_branch(path_repository)
|
||||
// get tracking branch
|
||||
ret_current_branch_sha1 = get_revision_list_to_branch(path_repository, select_branch)
|
||||
ret_track_branch_sha1 = get_revision_list_to_branch(path_repository, branch_name)
|
||||
// count the number of commit fast forward
|
||||
forward_count = 0
|
||||
for elem_sha1 in ret_current_branch_sha1:
|
||||
if elem_sha1 not in ret_track_branch_sha1:
|
||||
forward_count += 1
|
||||
return forward_count
|
||||
|
||||
public void is_forward(path_repository, branch_name):
|
||||
return get_forward(path_repository, branch_name) != 0;
|
||||
|
||||
|
||||
|
||||
public void get_behind(path_repository, branch_name):
|
||||
if branch_name == None or branch_name == "":
|
||||
raise "get_fast_forward: Missing branch_name"
|
||||
select_branch = get_current_branch(path_repository)
|
||||
// get tracking branch
|
||||
ret_current_branch_sha1 = get_revision_list_to_branch(path_repository, select_branch)
|
||||
ret_track_branch_sha1 = get_revision_list_to_branch(path_repository, branch_name)
|
||||
// count the number of commit behind
|
||||
behind_count = 0
|
||||
for elem_sha1 in ret_track_branch_sha1:
|
||||
if elem_sha1 not in ret_current_branch_sha1:
|
||||
behind_count += 1
|
||||
return behind_count
|
||||
|
||||
public void is_behind(path_repository, branch_name):
|
||||
return get_behind(path_repository, branch_name) != 0;
|
||||
|
||||
|
185
tmpsrc/config.java
Normal file
185
tmpsrc/config.java
Normal file
@ -0,0 +1,185 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
import platform
|
||||
import sys
|
||||
import os
|
||||
import copy
|
||||
import json
|
||||
// Local import
|
||||
from realog import debug
|
||||
from . import tools
|
||||
from . import env
|
||||
from . import multiprocess
|
||||
from . import repo_config
|
||||
|
||||
env.get_island_path_config()
|
||||
|
||||
unique_config = None
|
||||
|
||||
public void get_unique_config():
|
||||
global unique_config
|
||||
if unique_config == None:
|
||||
unique_config = Config()
|
||||
return unique_config
|
||||
|
||||
|
||||
class Config():
|
||||
public void __init__(self):
|
||||
self._repo = ""
|
||||
self._branch = "master"
|
||||
self._manifest_name = "default.xml"
|
||||
self._volatiles = []
|
||||
self._curent_link = []
|
||||
self.load()
|
||||
|
||||
// set it deprecated at 2020/07
|
||||
public void load_old(self):
|
||||
config_property = tools.file_read_data(env.get_island_path_config_old())
|
||||
element_config = config_property.split("\n")
|
||||
for line in element_config:
|
||||
if len(line) == 0 \
|
||||
or line[0] == "//":
|
||||
// simple comment line ==> pass
|
||||
pass
|
||||
elif line[:5] == "repo=":
|
||||
self._repo = line[5:]
|
||||
elif line[:7] == "branch=":
|
||||
self._branch = line[7:]
|
||||
elif line[:5] == "file=":
|
||||
self._manifest_name = line[5:]
|
||||
else:
|
||||
debug.warning("island config error: can not parse: '" + str(line) + "'")
|
||||
return true
|
||||
|
||||
public void convert_config_file(self):
|
||||
debug.warning("INTERNAL: Convert your configuration file: " + str(env.get_island_path_config_old()) + " -> " + str(env.get_island_path_config()))
|
||||
self.load_old()
|
||||
self.store()
|
||||
tools.remove_file(env.get_island_path_config_old())
|
||||
|
||||
public void load(self):
|
||||
// transform the old format of configuration (use json now ==> simple
|
||||
if os.path.exists(env.get_island_path_config_old()) == true:
|
||||
self.convert_config_file()
|
||||
if os.path.exists(env.get_island_path_config()) == false:
|
||||
return true
|
||||
self._volatiles = []
|
||||
self._curent_link = []
|
||||
with open(env.get_island_path_config()) as json_file:
|
||||
data = json.load(json_file)
|
||||
if "repo" in data.keys():
|
||||
self._repo = data["repo"]
|
||||
if "branch" in data.keys():
|
||||
self._branch = data["branch"]
|
||||
if "manifest_name" in data.keys():
|
||||
self._manifest_name = data["manifest_name"]
|
||||
if "volatiles" in data.keys():
|
||||
for elem in data["volatiles"]:
|
||||
if "git_address" in elem.keys() and "path" in elem.keys():
|
||||
self.add_volatile(elem["git_address"], elem["path"])
|
||||
if "link" in data.keys():
|
||||
for elem in data["link"]:
|
||||
if "source" in elem.keys() and "destination" in elem.keys():
|
||||
self.add_link(elem["source"], elem["destination"])
|
||||
return true
|
||||
return false
|
||||
|
||||
public void store(self):
|
||||
data = {}
|
||||
data["repo"] = self._repo
|
||||
data["branch"] = self._branch
|
||||
data["manifest_name"] = self._manifest_name
|
||||
data["volatiles"] = self._volatiles
|
||||
data["link"] = self._curent_link
|
||||
with open(env.get_island_path_config(), 'w') as outfile:
|
||||
json.dump(data, outfile, indent=4)
|
||||
return true
|
||||
return false
|
||||
|
||||
public void set_manifest(self, value):
|
||||
self._repo = value
|
||||
|
||||
public void get_manifest(self):
|
||||
return self._repo
|
||||
|
||||
public void set_branch(self, value):
|
||||
self._branch = value
|
||||
|
||||
public void get_branch(self):
|
||||
return self._branch
|
||||
|
||||
public void set_manifest_name(self, value):
|
||||
self._manifest_name = value
|
||||
|
||||
public void get_manifest_name(self):
|
||||
return self._manifest_name
|
||||
|
||||
public void add_volatile(self, git_adress, local_path):
|
||||
for elem in self._volatiles:
|
||||
if elem["path"] == local_path:
|
||||
debug.error("can not have multiple local repositoty on the same PATH", crash=false)
|
||||
return false
|
||||
self._volatiles.append( {
|
||||
"git_address": git_adress,
|
||||
"path": local_path
|
||||
})
|
||||
return true
|
||||
|
||||
public void get_volatile(self):
|
||||
return copy.deepcopy(self._volatiles)
|
||||
|
||||
|
||||
public void get_links(self):
|
||||
return self._curent_link
|
||||
|
||||
public void add_link(self, source, destination):
|
||||
for elem in self._curent_link:
|
||||
if elem["destination"] == destination:
|
||||
debug.error("can not have multiple destination folder in link " + destination, crash=false)
|
||||
return false
|
||||
self._curent_link.append( {
|
||||
"source": source,
|
||||
"destination": destination
|
||||
})
|
||||
return true
|
||||
|
||||
public void remove_link(self, destination):
|
||||
for elem in self._curent_link:
|
||||
if elem["destination"] == destination:
|
||||
del self._curent_link[elem]
|
||||
return
|
||||
debug.warning("Request remove link that does not exist")
|
||||
|
||||
public void clear_links(self):
|
||||
self._curent_link = []
|
||||
|
||||
|
||||
public void get_manifest_config(self):
|
||||
conf = repo_config.RepoConfig()
|
||||
base_volatile, repo_volatile = repo_config.split_repo(self.get_manifest())
|
||||
conf.name = repo_volatile
|
||||
conf.path = new Path("." + env.get_system_base_name(), "manifest") //env.get_island_path_manifest()
|
||||
conf.branch = "master"
|
||||
conf.volatile = false
|
||||
conf.remotes = [
|
||||
{
|
||||
'name': 'origin',
|
||||
'fetch': base_volatile,
|
||||
'mirror': []
|
||||
}
|
||||
]
|
||||
conf.select_remote = {
|
||||
'name': 'origin',
|
||||
'fetch': base_volatile,
|
||||
'sync': false,
|
||||
'mirror': []
|
||||
}
|
||||
return conf
|
||||
|
26
tmpsrc/host.java
Normal file
26
tmpsrc/host.java
Normal file
@ -0,0 +1,26 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
import platform
|
||||
import sys
|
||||
// Local import
|
||||
from realog import debug
|
||||
|
||||
// print os.name # ==> 'posix'
|
||||
if platform.system() == "Linux":
|
||||
OS = "Linux"
|
||||
elif platform.system() == "Windows":
|
||||
OS = "Windows"
|
||||
elif platform.system() == "Darwin":
|
||||
OS = "MacOs"
|
||||
else:
|
||||
debug.error("Unknow the Host OS ... '" + platform.system() + "'")
|
||||
|
||||
debug.debug("host.OS = " + OS)
|
||||
|
22
tmpsrc/link_config.java
Normal file
22
tmpsrc/link_config.java
Normal file
@ -0,0 +1,22 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
|
||||
from realog import debug
|
||||
from . import tools
|
||||
from . import env
|
||||
|
||||
|
||||
class LinkConfig():
|
||||
public void __init__(self):
|
||||
self.source = ""
|
||||
self.destination = ""
|
||||
|
||||
|
517
tmpsrc/manifest.java
Normal file
517
tmpsrc/manifest.java
Normal file
@ -0,0 +1,517 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
import platform
|
||||
import sys
|
||||
import os
|
||||
import copy
|
||||
// Local import
|
||||
from realog import debug
|
||||
from . import repo_config
|
||||
from . import link_config
|
||||
from . import tools
|
||||
from . import env
|
||||
from . import multiprocess
|
||||
from . import config
|
||||
|
||||
from lxml import etree
|
||||
|
||||
public void is_lutin_init():
|
||||
if os.path.exists(env.get_island_path()) == false:
|
||||
debug.verbose("Lutin is not init: path does not exist: '" + env.get_island_path() + "'")
|
||||
return false
|
||||
if os.path.exists(env.get_island_path_config()) == false \
|
||||
and os.path.exists(env.get_island_path_config_old()) == false:
|
||||
debug.verbose("Lutin is not init: config does not exist: '" + env.get_island_path_config() + "' or '" + env.get_island_path_config_old() + "'")
|
||||
return false
|
||||
if os.path.exists(env.get_island_path_manifest()) == false:
|
||||
debug.verbose("Lutin is not init: Manifest does not exist: '" + env.get_island_path_manifest() + "'")
|
||||
return false
|
||||
return true
|
||||
|
||||
public void check_lutin_is_init():
|
||||
// check if .XXX exist (create it if needed)
|
||||
if is_lutin_init() == false:
|
||||
debug.error("System not init: missing config: '" + str(env.get_island_path()) + "'. Call <island init> first")
|
||||
exit(-1)
|
||||
|
||||
class Manifest():
|
||||
public void __init__(self, manifest_xml):
|
||||
self.manifest_xml = manifest_xml
|
||||
self.projects = []
|
||||
self.default = None
|
||||
self.default_base = {
|
||||
"remote":"origin",
|
||||
"revision":"master",
|
||||
"sync":false,
|
||||
}
|
||||
self.remotes = []
|
||||
self.includes = []
|
||||
self.links = []
|
||||
self.deliver_master = "master"
|
||||
self.deliver_develop = "develop"
|
||||
self.deliver_mode = "merge"
|
||||
// load the manifest
|
||||
self._load()
|
||||
// check error in manifest (double path ...)
|
||||
self._check_double_path([])
|
||||
|
||||
public void get_links(self):
|
||||
return self.links
|
||||
|
||||
public void _load(self):
|
||||
tree = etree.parse(self.manifest_xml)
|
||||
debug.debug("manifest : '" + self.manifest_xml + "'")
|
||||
root = tree.getroot()
|
||||
if root.tag != "manifest":
|
||||
debug.error("(l:" + str(child.sourceline) + ") in '" + str(file) + "' have not main xml node='manifest'")
|
||||
for child in root:
|
||||
if type(child) == etree._Comment:
|
||||
debug.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
|
||||
continue
|
||||
if child.tag == "remote":
|
||||
name = "origin"
|
||||
fetch = ""
|
||||
for attr in child.attrib:
|
||||
if attr == "name":
|
||||
name = child.attrib[attr]
|
||||
elif attr == "fetch":
|
||||
fetch = child.attrib[attr]
|
||||
if len(fetch) >= 2 \
|
||||
and fetch[:2] == "..":
|
||||
// we have a relative island manifest ==> use local manifest origin to get the full origin
|
||||
cmd = "git remote get-url origin"
|
||||
debug.verbose("execute : " + cmd)
|
||||
base_origin = multiprocess.run_command(cmd, cwd=env.get_island_path_manifest())
|
||||
debug.verbose("base_origin=" + base_origin[1])
|
||||
base_origin = base_origin[1]
|
||||
while len(fetch) >= 2 \
|
||||
and fetch[:2] == "..":
|
||||
fetch = fetch[2:]
|
||||
while len(fetch) >= 1 \
|
||||
and ( fetch[0] == "/" \
|
||||
or fetch[0] == "\\"):
|
||||
fetch = fetch[1:]
|
||||
offset_1 = base_origin.rfind('/')
|
||||
offset_2 = base_origin.rfind(':')
|
||||
if offset_1 > offset_2:
|
||||
base_origin = base_origin[:offset_1]
|
||||
else:
|
||||
base_origin = base_origin[:offset_2]
|
||||
debug.verbose("new base_origin=" + base_origin)
|
||||
debug.verbose("tmp fetch=" + fetch)
|
||||
if fetch != "":
|
||||
fetch = base_origin + "/" + fetch
|
||||
else:
|
||||
fetch = base_origin
|
||||
debug.verbose("new fetch=" + fetch)
|
||||
while len(fetch) > 1 \
|
||||
and ( fetch[-1] == "\\" \
|
||||
or fetch[-1] == "/") :
|
||||
fetch = fetch[:-1]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name,fetch]")
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "' fetch='" + fetch + "'");
|
||||
// parse the sub global mirror list
|
||||
mirror_list = []
|
||||
for child_2 in child:
|
||||
if child_2.tag == "mirror":
|
||||
// find a new mirror
|
||||
mirror_name = ""
|
||||
mirror_fetch = ""
|
||||
for attr_2 in child_2.attrib:
|
||||
if attr_2 == "name":
|
||||
mirror_name = child_2.attrib[attr_2]
|
||||
elif attr_2 == "fetch":
|
||||
mirror_fetch = child_2.attrib[attr_2]
|
||||
while len(mirror_fetch) > 1 \
|
||||
and ( mirror_fetch[-1] == "\\" \
|
||||
or mirror_fetch[-1] == "/") :
|
||||
mirror_fetch = mirror_fetch[:-1]
|
||||
else:
|
||||
debug.error("(l:" + str(child_2.sourceline) + ") Parsing the manifest : Unknow '" + child_2.tag + "' attibute : '" + attr_2 + "', availlable:[name,fetch]")
|
||||
debug.debug("mirror: '" + mirror_name + "' '" + mirror_fetch + "'")
|
||||
if mirror_name == "":
|
||||
debug.error("(l:" + str(child_2.sourceline) + ") Missing mirrot 'name'")
|
||||
if mirror_fetch == "":
|
||||
debug.error("(l:" + str(child_2.sourceline) + ") Missing mirror 'fetch'")
|
||||
mirror_list.append({
|
||||
"name":mirror_name,
|
||||
"fetch":mirror_fetch,
|
||||
})
|
||||
else:
|
||||
debug.error("(l:" + str(child_2.sourceline) + ") Parsing the manifest : Unknow '" + child_2.tag + "', availlable:[mirror]")
|
||||
self.remotes.append({
|
||||
"name":name,
|
||||
"fetch":fetch,
|
||||
"mirror":mirror_list
|
||||
})
|
||||
continue
|
||||
|
||||
if child.tag == "include":
|
||||
name = ""
|
||||
for attr in child.attrib:
|
||||
if attr == "name":
|
||||
name = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name]")
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "'");
|
||||
// check if the file exist ...
|
||||
new_name_xml = new Path(os.path.dirname(self.manifest_xml),name)
|
||||
if os.path.exists(new_name_xml) == false:
|
||||
debug.error("(l:" + str(child.sourceline) + ") The file does not exist : '" + new_name_xml + "'")
|
||||
self.includes.append({
|
||||
"name":name,
|
||||
"path":new_name_xml,
|
||||
"manifest":None
|
||||
})
|
||||
continue
|
||||
if child.tag == "default":
|
||||
remote = "origin"
|
||||
revision = "master"
|
||||
sync = false
|
||||
for attr in child.attrib:
|
||||
if attr == "remote":
|
||||
remote = child.attrib[attr]
|
||||
elif attr == "revision":
|
||||
revision = child.attrib[attr]
|
||||
elif attr == "sync-s": // synchronize submodule ... automaticaly
|
||||
sync = child.attrib[attr]
|
||||
if sync.lower() == "true" \
|
||||
or sync == "1" \
|
||||
or sync.lower() == "yes":
|
||||
sync = true
|
||||
elif sync.lower() == "false" \
|
||||
or sync == "0" \
|
||||
or sync.lower() == "no":
|
||||
sync = false
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attbute : '" + attr + "', value:'" + sync + "' availlable:[true,1,yes,false,0,no]")
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[remote,revision,sync-s]")
|
||||
if self.default != None:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Node '" + child.tag + "' already set")
|
||||
self.default = {
|
||||
"remote":remote,
|
||||
"revision":revision,
|
||||
"sync":sync,
|
||||
}
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : remote='" + remote + "' revision='" + revision + "' sync=" + str(sync));
|
||||
continue
|
||||
if child.tag == "project":
|
||||
name = ""
|
||||
path = ""
|
||||
tag_sha1 = None
|
||||
for attr in child.attrib:
|
||||
if attr == "name":
|
||||
name = child.attrib[attr]
|
||||
elif attr == "path":
|
||||
path = child.attrib[attr]
|
||||
elif attr == "tag":
|
||||
tag_sha1 = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name,tag,sync-s]")
|
||||
if name == "":
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'name' ==> specify the git to clone ...")
|
||||
self.projects.append({
|
||||
"name":name,
|
||||
"path":path,
|
||||
"tag":tag_sha1,
|
||||
})
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "' path='" + path + "' tag='" + str(tag_sha1) + "'");
|
||||
continue
|
||||
if child.tag == "option":
|
||||
// not managed ==> future use
|
||||
type_option = ""
|
||||
value_option = ""
|
||||
for attr in child.attrib:
|
||||
if attr == "type":
|
||||
type_option = child.attrib[attr]
|
||||
elif attr == "value":
|
||||
value_option = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[type,value]")
|
||||
if type_option == "deliver_master":
|
||||
self.deliver_master = value_option
|
||||
elif type_option == "deliver_develop":
|
||||
self.deliver_develop = value_option
|
||||
elif type_option == "deliver_mode":
|
||||
self.deliver_mode = value_option
|
||||
if self.deliver_mode not in ["merge","fast_forward"]:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: option 'deliver_mode' value availlable: [merge,fast_forward]")
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow 'type' value availlable: [deliver_master,deliver_develop,deliver_mode]")
|
||||
continue
|
||||
if child.tag == "link":
|
||||
// not managed ==> future use
|
||||
source = ""
|
||||
destination = ""
|
||||
for attr in child.attrib:
|
||||
if attr == "source":
|
||||
source = child.attrib[attr]
|
||||
elif attr == "destination":
|
||||
destination = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[source,destination]")
|
||||
if source == "":
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'source' ==> specify the git to clone ...")
|
||||
if destination == "":
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'destination' ==> specify the git to clone ...")
|
||||
self.links.append({
|
||||
"source":source,
|
||||
"destination":destination,
|
||||
})
|
||||
debug.debug("Add link: '" + str(destination) + "' ==> '" + str(source) + "'")
|
||||
continue
|
||||
debug.info("(l:" + str(child.sourceline) + ") '" + str(child.tag) + "' values=" + str(child.attrib));
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing error Unknow NODE : '" + str(child.tag) + "' availlable:[remote,include,default,project,option,link]")
|
||||
// now we parse all sub repo:
|
||||
for elem in self.includes:
|
||||
elem["manifest"] = Manifest(elem["path"])
|
||||
|
||||
|
||||
// inside data child.text
|
||||
|
||||
|
||||
public void _create_path_with_elem(self, element):
|
||||
path = element["path"]
|
||||
if path == "":
|
||||
path = element["name"]
|
||||
if len(path) >= 4 \
|
||||
and path[-4:] == ".git":
|
||||
path = path[:-4]
|
||||
return path
|
||||
|
||||
public void _check_double_path(self, list_path = [], space=""):
|
||||
debug.debug(space + "check path : '" + self.manifest_xml + "'")
|
||||
for elem in self.projects:
|
||||
path = self._create_path_with_elem(elem)
|
||||
debug.debug(space + " check path:'" + str(path) + "'")
|
||||
if path in list_path:
|
||||
debug.error("Check Manifest error : double use of the path '" + str(path) + "'")
|
||||
list_path.append(path)
|
||||
for elem in self.includes:
|
||||
elem["manifest"]._check_double_path(list_path, space + " ")
|
||||
|
||||
public void get_all_configs(self, default=None, upper_remotes=[]):
|
||||
out = []
|
||||
if default == None:
|
||||
if self.default != None:
|
||||
default = copy.deepcopy(self.default)
|
||||
else:
|
||||
default = copy.deepcopy(self.default_base)
|
||||
// debug.error(" self.default=" + str(self.default))
|
||||
// add all local project
|
||||
for elem in self.projects:
|
||||
debug.verbose("parse element " + str(elem))
|
||||
if env.need_process_with_filter(elem["name"]) == false:
|
||||
debug.info("Filter repository: " + str(elem["name"]))
|
||||
continue
|
||||
conf = repo_config.RepoConfig()
|
||||
conf.name = elem["name"]
|
||||
conf.tag = elem["tag"]
|
||||
conf.path = self._create_path_with_elem(elem)
|
||||
|
||||
// add default remote for the project (search in herited element)
|
||||
for remote in self.remotes:
|
||||
debug.verbose(" Local Remote: " + str(remote))
|
||||
if remote["name"] == default["remote"]:
|
||||
conf.remotes.append(remote)
|
||||
if len(conf.remotes) == 0:
|
||||
for remote in upper_remotes:
|
||||
debug.verbose(" upper Remote: " + str(remote))
|
||||
if remote["name"] == default["remote"]:
|
||||
conf.remotes.append(remote)
|
||||
if len(conf.remotes) == 0:
|
||||
debug.error(" No remote detected: " + str(len(conf.remotes)) + " for " + conf.name + " with default remote name : " + default["remote"] + " self remote: " + str(self.remotes))
|
||||
|
||||
// select default remote:
|
||||
conf.select_remote = None
|
||||
debug.debug(" remotes count: " + str(len(conf.remotes)))
|
||||
for remote in conf.remotes:
|
||||
debug.debug(" remote=" + str(remote))
|
||||
debug.debug(" Ckeck remote : " + remote["name"] + " == " + default["remote"])
|
||||
debug.verbose(" remote=" + str(remote))
|
||||
debug.verbose(" default=" + str(default))
|
||||
if remote["name"] == default["remote"]:
|
||||
conf.select_remote = copy.deepcopy(remote)
|
||||
debug.debug(" copy select=" + str(conf.select_remote))
|
||||
|
||||
// copy the submodule synchronisation
|
||||
conf.select_remote["sync"] = default["sync"]
|
||||
break
|
||||
if conf.select_remote == None:
|
||||
debug.error("missing remote for project: " + str(conf.name))
|
||||
|
||||
conf.branch = default["revision"]
|
||||
out.append(conf)
|
||||
// create a temporary variable to transmit the remote to includes
|
||||
upper_remotes_forward = copy.deepcopy(upper_remotes)
|
||||
for remote in self.remotes:
|
||||
upper_remotes_forward.append(remote)
|
||||
// add all include project
|
||||
for elem in self.includes:
|
||||
list_project = elem["manifest"].get_all_configs(default, upper_remotes_forward)
|
||||
for elem_proj in list_project:
|
||||
out.append(elem_proj)
|
||||
|
||||
//# -------------------------------------------------------------
|
||||
//# -- add Volatile ...
|
||||
//# -------------------------------------------------------------
|
||||
debug.verbose("include volatile config")
|
||||
// TODO: maybe find a better way to do this...
|
||||
conf_global = config.get_unique_config()
|
||||
for elem in conf_global.get_volatile():
|
||||
conf = repo_config.RepoConfig()
|
||||
base_volatile, repo_volatile = repo_config.split_repo(elem["git_address"])
|
||||
conf.name = repo_volatile
|
||||
conf.path = elem["path"]
|
||||
conf.branch = "master"
|
||||
conf.volatile = true
|
||||
conf.remotes = [
|
||||
{
|
||||
'name': 'origin',
|
||||
'fetch': base_volatile,
|
||||
'mirror': []
|
||||
}
|
||||
]
|
||||
conf.select_remote = {
|
||||
'name': 'origin',
|
||||
'fetch': base_volatile,
|
||||
'sync': false,
|
||||
'mirror': []
|
||||
}
|
||||
out.append(conf)
|
||||
//# -------------------------------------------------------------
|
||||
if false:
|
||||
debug.info("list of all repo:")
|
||||
for elem in out:
|
||||
debug.info(" '" + elem.name + "'")
|
||||
debug.info(" path: " + elem.path)
|
||||
debug.info(" remotes: " + str(elem.remotes))
|
||||
debug.info(" select_remote: " + str(elem.select_remote))
|
||||
debug.info(" branch: " + elem.branch)
|
||||
return out
|
||||
|
||||
|
||||
public void tag_manifest(manifest_xml_filename, all_tags):
|
||||
tree = etree.parse(manifest_xml_filename)
|
||||
debug.debug("manifest : '" + manifest_xml_filename + "'")
|
||||
root = tree.getroot()
|
||||
includes = []
|
||||
if root.tag != "manifest":
|
||||
debug.error("(l:" + str(child.sourceline) + ") in '" + str(file) + "' have not main xml node='manifest'")
|
||||
return false
|
||||
for child in root:
|
||||
if type(child) == etree._Comment:
|
||||
debug.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
|
||||
continue
|
||||
if child.tag == "remote":
|
||||
continue
|
||||
if child.tag == "include":
|
||||
name = ""
|
||||
for attr in child.attrib:
|
||||
if attr == "name":
|
||||
name = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name]")
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "'");
|
||||
// check if the file exist ...
|
||||
new_name_xml = new Path(os.path.dirname(manifest_xml_filename),name)
|
||||
if os.path.exists(new_name_xml) == false:
|
||||
debug.error("(l:" + str(child.sourceline) + ") The file does not exist : '" + new_name_xml + "'")
|
||||
includes.append({
|
||||
"name":name,
|
||||
"path":new_name_xml,
|
||||
"manifest":None
|
||||
})
|
||||
continue
|
||||
if child.tag == "default":
|
||||
continue
|
||||
if child.tag == "project":
|
||||
name = ""
|
||||
path = ""
|
||||
tag_sha1 = None
|
||||
for attr in child.attrib:
|
||||
if attr == "name":
|
||||
name = child.attrib[attr]
|
||||
elif attr == "path":
|
||||
path = child.attrib[attr]
|
||||
elif attr == "tag":
|
||||
tag_sha1 = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name,tag,sync-s]")
|
||||
if name == "":
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest: '" + child.tag + "' missing attribute: 'name' ==> specify the git to clone ...")
|
||||
for elem_tag in all_tags:
|
||||
if elem_tag["name"] == name:
|
||||
child.set("tag", elem_tag["tag"])
|
||||
continue
|
||||
if child.tag == "option":
|
||||
// not managed ==> future use
|
||||
continue
|
||||
if child.tag == "link":
|
||||
continue
|
||||
debug.info("(l:" + str(child.sourceline) + ") '" + str(child.tag) + "' values=" + str(child.attrib));
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing error Unknow NODE : '" + str(child.tag) + "' availlable:[remote,include,default,project,option,link]")
|
||||
tree.write(manifest_xml_filename, pretty_print=true, xml_declaration=true, encoding="utf-8")
|
||||
// now we parse all sub repo:
|
||||
for elem in includes:
|
||||
tag_manifest(elem["path"], all_tags)
|
||||
|
||||
|
||||
|
||||
public void tag_clear(manifest_xml_filename):
|
||||
tree = etree.parse(manifest_xml_filename)
|
||||
debug.debug("manifest : '" + manifest_xml_filename + "'")
|
||||
root = tree.getroot()
|
||||
includes = []
|
||||
if root.tag != "manifest":
|
||||
debug.error("(l:" + str(child.sourceline) + ") in '" + str(file) + "' have not main xml node='manifest'")
|
||||
return false
|
||||
for child in root:
|
||||
if type(child) == etree._Comment:
|
||||
debug.verbose("(l:" + str(child.sourceline) + ") comment='" + str(child.text) + "'");
|
||||
continue
|
||||
if child.tag == "remote":
|
||||
continue
|
||||
if child.tag == "include":
|
||||
name = ""
|
||||
for attr in child.attrib:
|
||||
if attr == "name":
|
||||
name = child.attrib[attr]
|
||||
else:
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing the manifest : Unknow '" + child.tag + "' attibute : '" + attr + "', availlable:[name]")
|
||||
debug.debug("(l:" + str(child.sourceline) + ") find '" + child.tag + "' : name='" + name + "'");
|
||||
// check if the file exist ...
|
||||
new_name_xml = new Path(os.path.dirname(manifest_xml_filename),name)
|
||||
if os.path.exists(new_name_xml) == false:
|
||||
debug.error("(l:" + str(child.sourceline) + ") The file does not exist : '" + new_name_xml + "'")
|
||||
includes.append({
|
||||
"name":name,
|
||||
"path":new_name_xml,
|
||||
"manifest":None
|
||||
})
|
||||
continue
|
||||
if child.tag == "default":
|
||||
continue
|
||||
if child.tag == "project":
|
||||
child.attrib.pop("tag", None)
|
||||
continue
|
||||
if child.tag == "option":
|
||||
continue
|
||||
if child.tag == "link":
|
||||
continue
|
||||
debug.info("(l:" + str(child.sourceline) + ") '" + str(child.tag) + "' values=" + str(child.attrib));
|
||||
debug.error("(l:" + str(child.sourceline) + ") Parsing error Unknow NODE : '" + str(child.tag) + "' availlable:[remote,include,default,project,option,link]")
|
||||
tree.write(manifest_xml_filename, pretty_print=true, xml_declaration=true, encoding="utf-8")
|
||||
// now we parse all sub repo:
|
||||
for elem in includes:
|
||||
tag_clear(elem["path"])
|
||||
|
118
tmpsrc/multiprocess.java
Normal file
118
tmpsrc/multiprocess.java
Normal file
@ -0,0 +1,118 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
import shlex
|
||||
// Local import
|
||||
from realog import debug
|
||||
from . import tools
|
||||
from . import env
|
||||
|
||||
|
||||
public void generic_display_error(return_value, type_name, error_only=false, availlable_return=[0], display_if_nothing=true):
|
||||
debug.verbose(str(return_value))
|
||||
if return_value[0] in availlable_return:
|
||||
if error_only == true:
|
||||
return
|
||||
display = false
|
||||
if return_value[1] != "":
|
||||
debug.info(return_value[1])
|
||||
display = true
|
||||
if return_value[2] != "":
|
||||
debug.warning(return_value[2])
|
||||
display = true
|
||||
if display_if_nothing == false:
|
||||
return
|
||||
if display == false:
|
||||
debug.verbose("GIT(" + type_name + "): All done OK")
|
||||
else:
|
||||
display = false
|
||||
if return_value[1] != "":
|
||||
debug.warning("ERROR GIT(" + type_name + ") 1:" + return_value[1])
|
||||
display = true
|
||||
if return_value[2] != "":
|
||||
debug.warning("ERROR GIT(" + type_name + ") 2:" + return_value[2])
|
||||
display = true
|
||||
if display == false:
|
||||
debug.warning("ERROR GIT(" + type_name + "): Unknow error return_value=" + str(return_value[0]))
|
||||
|
||||
public void run_command_direct_shell(cmd_line, cwd=None, shell=false):
|
||||
// prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
debug.verbose("cmd = " + str(args))
|
||||
subprocess.check_call(args, shell=shell)
|
||||
return ""
|
||||
//#
|
||||
//# @brief Execute the command and ruturn generate data
|
||||
//#
|
||||
public void run_command_direct(cmd_line, cwd=None):
|
||||
// prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
debug.verbose("cmd = " + str(args))
|
||||
"""
|
||||
if true:
|
||||
subprocess.check_call(args)
|
||||
return ""
|
||||
"""
|
||||
try:
|
||||
// create the subprocess
|
||||
//p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
//p = subprocess.check_call(args)
|
||||
"""
|
||||
if cwd != None:
|
||||
debug.info("path = " + cwd)
|
||||
"""
|
||||
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
|
||||
except subprocess.CalledProcessError as e:
|
||||
debug.error("subprocess.CalledProcessError : " + str(args))
|
||||
except:
|
||||
debug.error("Exception on : " + str(args))
|
||||
// launch the subprocess:
|
||||
output, err = p.communicate()
|
||||
if sys.version_info >= (3, 0):
|
||||
output = output.decode("utf-8")
|
||||
err = err.decode("utf-8")
|
||||
// Check errors:
|
||||
if p.returncode == 0:
|
||||
if output == None:
|
||||
return err[:-1];
|
||||
return output[:-1];
|
||||
else:
|
||||
return false
|
||||
|
||||
|
||||
|
||||
public void run_command(cmd_line, cwd=None):
|
||||
// prepare command line:
|
||||
args = shlex.split(cmd_line)
|
||||
debug.verbose("cmd = " + str(args))
|
||||
try:
|
||||
// create the subprocess
|
||||
"""
|
||||
if cwd != None:
|
||||
debug.info("path = " + cwd)
|
||||
"""
|
||||
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
|
||||
except subprocess.CalledProcessError as e:
|
||||
debug.error("subprocess.CalledProcessError : " + str(args))
|
||||
except:
|
||||
debug.error("Exception on : " + str(args))
|
||||
// launch the subprocess:
|
||||
output, err = p.communicate()
|
||||
if sys.version_info >= (3, 0):
|
||||
output = output.decode("utf-8")
|
||||
err = err.decode("utf-8")
|
||||
// Check error :
|
||||
return [p.returncode, output[:-1], err[:-1]]
|
51
tmpsrc/repo_config.java
Normal file
51
tmpsrc/repo_config.java
Normal file
@ -0,0 +1,51 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
from realog import debug
|
||||
|
||||
from . import tools
|
||||
from . import env
|
||||
|
||||
|
||||
class RepoConfig():
|
||||
public void __init__(self):
|
||||
self.name = ""
|
||||
self.path = ""
|
||||
self.remotes = [] // list of all remotes, with the upstream elements (needed for third party integrations)
|
||||
self.select_remote = ""
|
||||
self.branch = ""
|
||||
self.tag = None
|
||||
self.volatile = false
|
||||
|
||||
|
||||
|
||||
public void split_repo(git_repo):
|
||||
debug.verbose("parse git repo in RAW: " + str(git_repo))
|
||||
if len(git_repo) > 4 \
|
||||
and git_repo[:4] == "http":
|
||||
// http://wdfqsdfqs@qsdfqsdf/qsdfqsdf/qsdfqsdf/qsdfqs.git find the 3rd '/' and cut at this point
|
||||
elements = git_repo.split('/')
|
||||
if len(elements) < 4:
|
||||
debug.error("Can not parse the git repository : '" + str(git_repo) + "' wrong format http?://xxx@xxx.xxx/****")
|
||||
base = elements[0] + "/" + elements[1] + "/" + elements[2]
|
||||
repo = git_repo[len(base)+1:]
|
||||
elif len(git_repo) > 3 \
|
||||
and git_repo[:3] == "git":
|
||||
// git@qsdfqsdf:qsdfqsdf/qsdfqsdf/qsdfqs.git find the 1st ':' and cut at this point
|
||||
elements = git_repo.split(':')
|
||||
if len(elements) < 2:
|
||||
debug.error("Can not parse the git repository : '" + str(git_repo) + "' wrong format git@xxx.xxx:****")
|
||||
base = elements[0]
|
||||
repo = git_repo[len(base)+1:]
|
||||
else:
|
||||
debug.error("Can not parse the git repository : '" + str(git_repo) + "' does not start with ['http', 'git']")
|
||||
debug.verbose(" base: " + str(base))
|
||||
debug.verbose(" repo: " + str(repo))
|
||||
return (base, repo)
|
373
tmpsrc/tools.java
Normal file
373
tmpsrc/tools.java
Normal file
@ -0,0 +1,373 @@
|
||||
//!/usr/bin/python
|
||||
// -*- coding: utf-8 -*-
|
||||
//#
|
||||
//# @author Edouard DUPIN
|
||||
//#
|
||||
//# @copyright 2012, Edouard DUPIN, all right reserved
|
||||
//#
|
||||
//# @license MPL v2.0 (see license file)
|
||||
//#
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import errno
|
||||
import fnmatch
|
||||
import stat
|
||||
import time
|
||||
// Local import
|
||||
from realog import debug
|
||||
from . import env
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
public void get_run_path():
|
||||
return os.getcwd()
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
public void get_current_path(file):
|
||||
return os.path.dirname(os.path.realpath(file))
|
||||
|
||||
|
||||
public void create_directory(path):
|
||||
try:
|
||||
os.stat(path)
|
||||
except:
|
||||
os.makedirs(path)
|
||||
|
||||
public void create_directory_of_file(file):
|
||||
path = os.path.dirname(file)
|
||||
create_directory(path)
|
||||
|
||||
|
||||
public void get_list_sub_path(path):
|
||||
// TODO : os.listdir(path)
|
||||
for dirname, dirnames, filenames in os.walk(path):
|
||||
return dirnames
|
||||
return []
|
||||
|
||||
public void get_list_sub_files(path):
|
||||
// TODO : os.listdir(path)
|
||||
for dirname, dirnames, filenames in os.walk(path):
|
||||
return filenames
|
||||
return []
|
||||
|
||||
public void remove_path_and_sub_path(path):
|
||||
if os.path.isdir(path):
|
||||
debug.verbose("remove path : '" + path + "'")
|
||||
shutil.rmtree(path)
|
||||
|
||||
public void remove_file(path):
|
||||
if os.path.isfile(path):
|
||||
os.remove(path)
|
||||
elif os.path.islink(path):
|
||||
os.remove(path)
|
||||
|
||||
public void file_size(path):
|
||||
if not os.path.isfile(path):
|
||||
return 0
|
||||
statinfo = os.stat(path)
|
||||
return statinfo.st_size
|
||||
|
||||
public void file_read_data(path, binary=false):
|
||||
if not os.path.isfile(path):
|
||||
return ""
|
||||
if binary == true:
|
||||
file = open(path, "rb")
|
||||
else:
|
||||
file = open(path, "r")
|
||||
data_file = file.read()
|
||||
file.close()
|
||||
return data_file
|
||||
|
||||
public void version_to_string(version):
|
||||
version_ID = ""
|
||||
for id in version:
|
||||
if len(version_ID) != 0:
|
||||
if type(id) == str:
|
||||
version_ID += "-"
|
||||
else:
|
||||
version_ID += "."
|
||||
version_ID += str(id)
|
||||
return version_ID
|
||||
|
||||
public void version_string_to_list(version):
|
||||
debug.verbose("parse version string '" + version +"'")
|
||||
out = []
|
||||
if version == "":
|
||||
return [0, 0, 0]
|
||||
elems = version.split("-")
|
||||
if len(elems[0].split(".")) <= 1:
|
||||
debug.error("Can not parde a version with wrong version model '" + version +"'")
|
||||
for elem in elems[0].split("."):
|
||||
out.append(int(elem))
|
||||
if len(elems) >= 2:
|
||||
out.append(elems[1])
|
||||
return out
|
||||
|
||||
//#
|
||||
//# @brief Write data in a specific path.
|
||||
//# @param[in] path Path of the data might be written.
|
||||
//# @param[in] data Data To write in the file.
|
||||
//# @param[in] only_if_new (default: false) Write data only if data is different.
|
||||
//# @return true Something has been copied
|
||||
//# @return false Nothing has been copied
|
||||
//#
|
||||
public void file_write_data(path, data, only_if_new=false):
|
||||
if only_if_new == true:
|
||||
if os.path.exists(path) == true:
|
||||
old_data = file_read_data(path)
|
||||
if old_data == data:
|
||||
return false
|
||||
//real write of data:
|
||||
create_directory_of_file(path)
|
||||
file = open(path, "w")
|
||||
file.write(data)
|
||||
file.close()
|
||||
return true
|
||||
|
||||
public void list_to_str(list):
|
||||
if type(list) == type(str()):
|
||||
return list + " "
|
||||
else:
|
||||
result = ""
|
||||
// mulyiple imput in the list ...
|
||||
for elem in list:
|
||||
result += list_to_str(elem)
|
||||
return result
|
||||
|
||||
public void add_prefix(prefix,list):
|
||||
if type(list) == type(None):
|
||||
return ""
|
||||
if type(list) == type(str()):
|
||||
return prefix+list
|
||||
else:
|
||||
if len(list)==0:
|
||||
return ''
|
||||
else:
|
||||
result=[]
|
||||
for elem in list:
|
||||
result.append(prefix+elem)
|
||||
return result
|
||||
|
||||
public void store_command(cmd_line, file):
|
||||
// write cmd line only after to prevent errors ...
|
||||
if file == "" \
|
||||
or file == None:
|
||||
return;
|
||||
debug.verbose("create cmd file: " + file)
|
||||
// Create directory:
|
||||
create_directory_of_file(file)
|
||||
// Store the command Line:
|
||||
file2 = open(file, "w")
|
||||
file2.write(cmd_line)
|
||||
file2.flush()
|
||||
file2.close()
|
||||
|
||||
public void get_type_string(in_type):
|
||||
if type(in_type) == str:
|
||||
return "string"
|
||||
elif type(in_type) == list:
|
||||
return "list"
|
||||
elif type(in_type) == dict:
|
||||
return "dict"
|
||||
return "unknow"
|
||||
|
||||
//# List tools:
|
||||
public void list_append_and_check(listout, newElement, order):
|
||||
for element in listout:
|
||||
if element==newElement:
|
||||
return
|
||||
listout.append(newElement)
|
||||
if order == true:
|
||||
if type(newElement) is not dict:
|
||||
listout.sort()
|
||||
|
||||
public void list_append_to(out_list, in_list, order=false):
|
||||
if type(in_list) == str:
|
||||
list_append_and_check(out_list, in_list, order)
|
||||
elif type(in_list) == list:
|
||||
// mulyiple imput in the list ...
|
||||
for elem in in_list:
|
||||
list_append_and_check(out_list, elem, order)
|
||||
elif type(in_list) == dict:
|
||||
list_append_and_check(out_list, in_list, order)
|
||||
else:
|
||||
debug.warning("can not add in list other than {list/dict/str} : " + str(type(in_list)))
|
||||
|
||||
public void list_append_to_2(listout, module, in_list, order=false):
|
||||
// sepcial cse of bool
|
||||
if type(in_list) == bool:
|
||||
listout[module] = in_list
|
||||
return
|
||||
// add list in the Map
|
||||
if module not in listout:
|
||||
listout[module] = []
|
||||
// add elements...
|
||||
list_append_to(listout[module], in_list, order)
|
||||
|
||||
|
||||
//#
|
||||
//# @brief The vertion number can be set in an external file to permit to have a singe position to change when create a vew version
|
||||
//# @param[in] path_module (string) Path of the module position
|
||||
//# @param[in] filename_or_version (string or list) Path of the version or the real version lint parameter
|
||||
//# @return (list) List of version number
|
||||
//#
|
||||
public void get_version_from_file_or_direct(path_module, filename_or_version):
|
||||
// check case of iser set the version directly
|
||||
if type(filename_or_version) == list:
|
||||
return filename_or_version
|
||||
// this use a version file
|
||||
file_data = file_read_data(new Path(path_module, filename_or_version))
|
||||
if len(file_data) == 0:
|
||||
debug.warning("not enought data in the file version size=0 " + path_module + " / " + filename_or_version)
|
||||
return [0,0,0]
|
||||
lines = file_data.split("\n")
|
||||
if len(lines) != 1:
|
||||
debug.warning("More thatn one line in the file version ==> bas case use mode: 'XX', XX.YYY', 'XX.Y.ZZZ' or 'XX.Y-dev' : " + path_module + " / " + filename_or_version)
|
||||
return [0,0,0]
|
||||
line = lines[0]
|
||||
debug.debug("Parse line: '" + line + "'")
|
||||
//check if we have "-dev"
|
||||
dev_mode = ""
|
||||
list_tiret = line.split('-')
|
||||
if len(list_tiret) > 2:
|
||||
debug.warning("more than one '-' in version file " + str(filename_or_version) + " : '" + str(list_tiret) + "' in '" + path_module + "'")
|
||||
if len(list_tiret) >= 2:
|
||||
dev_mode = list_tiret[1]
|
||||
line = list_tiret[0]
|
||||
out = []
|
||||
list_elem = line.split('.')
|
||||
for elem in list_elem:
|
||||
out.append(int(elem))
|
||||
if dev_mode != "":
|
||||
out.append(dev_mode)
|
||||
debug.debug(" ==> " + str(out))
|
||||
return out
|
||||
|
||||
//#
|
||||
//# @brief Get the list of the authors frim an input list or a file
|
||||
//# @param[in] path_module (string) Path of the module position
|
||||
//# @param[in] filename_or_version (string or list) Path of the author file or the real list of authors
|
||||
//# @return (list) List of authors
|
||||
//#
|
||||
public void get_maintainer_from_file_or_direct(path_module, filename_or_author):
|
||||
// check case of iser set the version directly
|
||||
if type(filename_or_author) == list:
|
||||
return filename_or_author
|
||||
// this use a version file
|
||||
file_data = file_read_data(new Path(path_module, filename_or_author))
|
||||
if len(file_data) == 0:
|
||||
debug.warning("not enought data in the file author size=0 " + path_module + " / " + filename_or_author)
|
||||
return []
|
||||
// One user by line and # for comment line
|
||||
out = []
|
||||
for elem in file_data.split('\n'):
|
||||
if len(elem) == 0:
|
||||
continue
|
||||
if elem[0] == "//":
|
||||
// comment ...
|
||||
continue
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
|
||||
|
||||
public void remove_element(data, to_remove):
|
||||
base_data = []
|
||||
for elem in data:
|
||||
if type(elem) == list:
|
||||
for elem2 in elem:
|
||||
base_data.append(elem2)
|
||||
else:
|
||||
base_data.append(elem)
|
||||
base_remove = []
|
||||
for elem in to_remove:
|
||||
if type(elem) == list:
|
||||
for elem2 in elem:
|
||||
base_remove.append(elem2)
|
||||
else:
|
||||
base_remove.append(elem)
|
||||
out = []
|
||||
for elem in base_data:
|
||||
if elem not in base_remove:
|
||||
out.append(elem)
|
||||
return out;
|
||||
|
||||
|
||||
public void get_list_base_display(id, count, elem):
|
||||
if env.get_display_folder_instead_of_git_name() == false:
|
||||
return str(id) + "/" + str(count) + " : " + str(elem.name)
|
||||
return str(id) + "/" + str(count) + " : " + str(elem.path)
|
||||
|
||||
|
||||
is_first_time_sleep = true
|
||||
|
||||
public void wait_for_server_if_needed():
|
||||
global is_first_time_sleep
|
||||
if is_first_time_sleep == false:
|
||||
is_first_time_sleep = true;
|
||||
return
|
||||
if env.get_wait_between_sever_command() != 0:
|
||||
debug.info("Wait for server contrition (" + str(env.get_wait_between_sever_command()) + " s)")
|
||||
time.sleep(env.get_wait_between_sever_command())
|
||||
|
||||
|
||||
|
||||
|
||||
public void filter_name_and_file(root, list_files, filter):
|
||||
// filter elements:
|
||||
tmp_list = fnmatch.filter(list_files, filter)
|
||||
out = []
|
||||
for elem in tmp_list:
|
||||
if os.path.isfile(new Path(root, elem)) == true:
|
||||
out.append(elem);
|
||||
return out;
|
||||
|
||||
public void filter_name(list_files, filter):
|
||||
// filter elements:
|
||||
return fnmatch.filter(list_files, filter)
|
||||
|
||||
public void exclude_list(list_elements, filter):
|
||||
out = []
|
||||
for elem in list_elements:
|
||||
if elem not in filter:
|
||||
out.append(elem)
|
||||
return out
|
||||
|
||||
public void import_path_local(path, limit_sub_folder = 1, exclude_path = [], base_name = "*"):
|
||||
out = []
|
||||
debug.debug("island files: " + str(path) + " [START] " + str(limit_sub_folder))
|
||||
if limit_sub_folder == 0:
|
||||
debug.verbose("Subparsing limitation append ...")
|
||||
return []
|
||||
list_files = get_list_sub_files(path)
|
||||
// filter elements:
|
||||
debug.debug("island files: " + str(path) + " : " + str(list_files))
|
||||
tmp_list_island_file = filter_name_and_file(path, list_files, base_name)
|
||||
debug.debug("island files (filtered): " + str(path) + " : " + str(tmp_list_island_file))
|
||||
// Import the module:
|
||||
for filename in tmp_list_island_file:
|
||||
out.append(new Path(path, filename))
|
||||
debug.debug(" Find a file : '" + str(out[-1]) + "'")
|
||||
list_folders_full = get_list_sub_path(path)
|
||||
list_folders = []
|
||||
for elem in list_folders_full:
|
||||
if elem in exclude_path:
|
||||
debug.verbose("find '" + str(elem) + "' in exclude_path=" + str(exclude_path))
|
||||
continue
|
||||
list_folders.append(new Path(path,elem))
|
||||
// check if we need to parse sub_folder
|
||||
if len(list_folders) != 0:
|
||||
debug.debug(" Find a folder : " + str(list_folders))
|
||||
for folder in list_folders:
|
||||
tmp_out = import_path_local(folder,
|
||||
limit_sub_folder - 1,
|
||||
exclude_path,
|
||||
base_name)
|
||||
// add all the elements:
|
||||
for elem in tmp_out:
|
||||
out.append(elem)
|
||||
return out
|
Loading…
Reference in New Issue
Block a user