diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap
index 9fbab5536..27b7117af 100644
--- a/src/zabapgit_definitions.prog.abap
+++ b/src/zabapgit_definitions.prog.abap
@@ -21,7 +21,7 @@ TYPES: ty_file_signatures_ts TYPE SORTED TABLE OF
ty_file_signature WITH UNIQUE KEY path filename.
TYPES: BEGIN OF ty_file.
- INCLUDE TYPE ty_file_signature.
+ INCLUDE TYPE ty_file_signature.
TYPES: data TYPE xstring,
END OF ty_file.
TYPES: ty_files_tt TYPE STANDARD TABLE OF ty_file WITH DEFAULT KEY.
@@ -127,7 +127,7 @@ TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.
TYPES: ty_seocompotx_tt TYPE STANDARD TABLE OF seocompotx WITH DEFAULT KEY.
TYPES: BEGIN OF ty_tpool.
- INCLUDE TYPE textpool.
+ INCLUDE TYPE textpool.
TYPES: split TYPE c LENGTH 8.
TYPES: END OF ty_tpool.
@@ -185,6 +185,7 @@ CONSTANTS: BEGIN OF gc_action_type,
dummy TYPE c VALUE '_',
END OF gc_action_type.
+CONSTANTS: gc_crlf TYPE abap_cr_lf VALUE cl_abap_char_utilities=>cr_lf.
CONSTANTS: gc_newline TYPE abap_char1 VALUE cl_abap_char_utilities=>newline.
CONSTANTS: gc_english TYPE spras VALUE 'E'.
diff --git a/src/zabapgit_html_action_utils.prog.abap b/src/zabapgit_html_action_utils.prog.abap
index f560272e3..da423f823 100644
--- a/src/zabapgit_html_action_utils.prog.abap
+++ b/src/zabapgit_html_action_utils.prog.abap
@@ -302,6 +302,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
CLEAR es_fields.
CONCATENATE LINES OF it_postdata INTO lv_string.
+ REPLACE ALL OCCURRENCES OF gc_crlf IN lv_string WITH lc_replace.
REPLACE ALL OCCURRENCES OF gc_newline IN lv_string WITH lc_replace.
lt_fields = parse_fields( lv_string ).
diff --git a/src/zabapgit_page_commit.prog.abap b/src/zabapgit_page_commit.prog.abap
index 5ca69ca03..3cb752154 100644
--- a/src/zabapgit_page_commit.prog.abap
+++ b/src/zabapgit_page_commit.prog.abap
@@ -155,9 +155,14 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
METHOD render_form.
- DATA: lo_user TYPE REF TO lcl_persistence_user,
- lv_user TYPE string,
- lv_email TYPE string.
+ CONSTANTS: lc_body_col_max TYPE i VALUE 150.
+
+ DATA: lo_user TYPE REF TO lcl_persistence_user.
+ DATA: lv_user TYPE string.
+ DATA: lv_email TYPE string.
+ DATA: lv_s_param TYPE string.
+ DATA: lo_settings TYPE REF TO lcl_settings.
+ data: lv_body_size type i.
* see https://git-scm.com/book/ch5-2.html
* commit messages should be max 50 characters
@@ -189,13 +194,24 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
iv_label = 'committer e-mail'
iv_value = lv_email ) ).
+ lo_settings = lcl_app=>settings( )->read( ).
+
+ lv_s_param = lo_settings->get_commitmsg_comment_length( ).
+
ro_html->add( render_text_input( iv_name = 'comment'
iv_label = 'comment'
- iv_max_length = '72' ) ).
+ iv_max_length = lv_s_param ) ).
ro_html->add( '
' ).
ro_html->add( 'body ' ).
- ro_html->add( '' ).
+
+ lv_body_size = lo_settings->get_commitmsg_body_size( ).
+ IF lv_body_size > lc_body_col_max.
+ lv_body_size = lc_body_col_max.
+ ENDIF.
+ ro_html->add( || ).
+
ro_html->add( ' ' ).
ro_html->add( '
' ).
diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap
index 06692df16..cb4891456 100644
--- a/src/zabapgit_page_settings.prog.abap
+++ b/src/zabapgit_page_settings.prog.abap
@@ -32,6 +32,8 @@ CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS render_max_lines
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
+ METHODS render_commit_msg
+ RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
METHODS build_settings
IMPORTING
it_post_fields TYPE tihttpnvp.
@@ -64,9 +66,11 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
ro_html->add( render_form_begin( ) ).
ro_html->add( render_proxy( ) ).
ro_html->add( | | ).
- ro_html->add( render_development_internals( ) ).
- ro_html->add( | | ).
ro_html->add( render_max_lines( ) ).
+ ro_html->add( | | ).
+ ro_html->add( render_commit_msg( ) ).
+ ro_html->add( | | ).
+ ro_html->add( render_development_internals( ) ).
ro_html->add( render_form_end( ) ).
ENDMETHOD. "render_content
@@ -99,6 +103,7 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
ENDMETHOD.
METHOD lif_gui_page~on_event.
+* todo, check input values eg INT
DATA:
lt_post_fields TYPE tihttpnvp.
@@ -124,45 +129,79 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
METHOD build_settings.
- DATA: ls_post_field TYPE ihttpnvp,
- lv_max_lines_as_integer TYPE i.
+ DATA: lv_i_param_value TYPE i.
+ FIELD-SYMBOLS: TYPE ihttpnvp.
CREATE OBJECT mo_settings.
- READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'proxy_url'.
+ READ TABLE it_post_fields ASSIGNING WITH KEY name = 'proxy_url'.
IF sy-subrc <> 0.
mv_error = abap_true.
ENDIF.
- mo_settings->set_proxy_url( ls_post_field-value ).
+ mo_settings->set_proxy_url( -value ).
- READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'proxy_port'.
+ READ TABLE it_post_fields ASSIGNING WITH KEY name = 'proxy_port'.
IF sy-subrc <> 0.
mv_error = abap_true.
ENDIF.
- mo_settings->set_proxy_port( ls_post_field-value ).
+ mo_settings->set_proxy_port( -value ).
- READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'proxy_auth'.
+ READ TABLE it_post_fields ASSIGNING WITH KEY name = 'proxy_auth'.
IF sy-subrc = 0.
mo_settings->set_proxy_authentication( abap_true ).
ELSE.
mo_settings->set_proxy_authentication( abap_false ).
ENDIF.
- READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'critical_tests'.
+ READ TABLE it_post_fields ASSIGNING WITH KEY name = 'critical_tests'.
IF sy-subrc = 0.
mo_settings->set_run_critical_tests( abap_true ).
ELSE.
mo_settings->set_run_critical_tests( abap_false ).
ENDIF.
- READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'max_lines'.
+ READ TABLE it_post_fields ASSIGNING WITH KEY name = 'max_lines'.
IF sy-subrc = 0.
- lv_max_lines_as_integer = ls_post_field-value.
- mo_settings->set_max_lines( lv_max_lines_as_integer ).
+ lv_i_param_value = -value.
+ mo_settings->set_max_lines( lv_i_param_value ).
ELSE.
mo_settings->set_max_lines( 0 ).
ENDIF.
+ READ TABLE it_post_fields ASSIGNING WITH KEY name = 'comment_length'.
+ IF sy-subrc = 0.
+
+ lv_i_param_value = -value.
+
+ IF lv_i_param_value < lcl_settings=>c_commitmsg_comment_length_dft.
+ lv_i_param_value = lcl_settings=>c_commitmsg_comment_length_dft.
+ ENDIF.
+
+ mo_settings->set_commitmsg_comment_length( lv_i_param_value ).
+
+ ELSE.
+
+ mo_settings->set_commitmsg_comment_length( lcl_settings=>c_commitmsg_comment_length_dft ).
+
+ ENDIF.
+
+ READ TABLE it_post_fields ASSIGNING WITH KEY name = 'body_size'.
+ IF sy-subrc = 0.
+
+ lv_i_param_value = -value.
+
+ IF lv_i_param_value < lcl_settings=>c_commitmsg_body_size_dft.
+ lv_i_param_value = lcl_settings=>c_commitmsg_body_size_dft.
+ ENDIF.
+
+ mo_settings->set_commitmsg_body_size( lv_i_param_value ).
+
+ ELSE.
+
+ mo_settings->set_commitmsg_body_size( lcl_settings=>c_commitmsg_body_size_dft ).
+
+ ENDIF.
+
ENDMETHOD.
@@ -251,4 +290,21 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
ro_html->add( | | ).
ENDMETHOD.
+ METHOD render_commit_msg.
+ CREATE OBJECT ro_html.
+
+ ro_html->add( |Commit Message | ).
+ ro_html->add( |Max. length of comment (recommendation 50) | ).
+ ro_html->add( | | ).
+ ro_html->add( | | ).
+ ro_html->add( | | ).
+ ro_html->add( |Max. line size of body (recommendation 72) | ).
+ ro_html->add( | | ).
+ ro_html->add( | | ).
+ ro_html->add( | | ).
+ ro_html->add( | | ).
+ ENDMETHOD.
+
ENDCLASS.
diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap
index 7a14d0467..ac690d3e6 100644
--- a/src/zabapgit_persistence.prog.abap
+++ b/src/zabapgit_persistence.prog.abap
@@ -1534,6 +1534,9 @@ ENDCLASS.
CLASS lcl_settings DEFINITION FINAL.
PUBLIC SECTION.
+ CONSTANTS: c_commitmsg_comment_length_dft TYPE i VALUE 50.
+ CONSTANTS: c_commitmsg_body_size_dft TYPE i VALUE 72.
+
METHODS set_proxy_url
IMPORTING
iv_url TYPE string.
@@ -1563,13 +1566,25 @@ CLASS lcl_settings DEFINITION FINAL.
METHODS get_max_lines
RETURNING
VALUE(rv_lines) TYPE i.
+ METHODS set_commitmsg_comment_length
+ IMPORTING iv_length TYPE i.
+ METHODS get_commitmsg_comment_length
+ RETURNING
+ VALUE(rv_length) TYPE i.
+ METHODS set_commitmsg_body_size
+ IMPORTING iv_length TYPE i.
+ METHODS get_commitmsg_body_size
+ RETURNING
+ VALUE(rv_length) TYPE i.
PRIVATE SECTION.
- DATA: mv_proxy_url TYPE string,
- mv_proxy_port TYPE string,
- mv_proxy_auth TYPE string,
- mv_run_critical_tests TYPE abap_bool,
- mv_lines TYPE i.
+ DATA: mv_proxy_url TYPE string,
+ mv_proxy_port TYPE string,
+ mv_proxy_auth TYPE string,
+ mv_run_critical_tests TYPE abap_bool,
+ mv_lines TYPE i,
+ mv_commitmsg_comment_length TYPE i,
+ mv_commitmsg_body_size TYPE i.
ENDCLASS.
@@ -1615,6 +1630,21 @@ CLASS lcl_settings IMPLEMENTATION.
mv_lines = iv_lines.
ENDMETHOD.
+ METHOD get_commitmsg_comment_length.
+ rv_length = mv_commitmsg_comment_length.
+ ENDMETHOD.
+
+ METHOD set_commitmsg_comment_length.
+ mv_commitmsg_comment_length = iv_length.
+ ENDMETHOD.
+
+ METHOD get_commitmsg_body_size.
+ rv_length = mv_commitmsg_body_size.
+ ENDMETHOD.
+
+ METHOD set_commitmsg_body_size.
+ mv_commitmsg_body_size = iv_length.
+ ENDMETHOD.
ENDCLASS.
CLASS lcl_persistence_settings DEFINITION FINAL.
@@ -1661,6 +1691,16 @@ CLASS lcl_persistence_settings IMPLEMENTATION.
iv_value = 'MAX_LINES'
iv_data = |{ io_settings->get_max_lines( ) }| ).
+ lcl_app=>db( )->modify(
+ iv_type = 'SETTINGS'
+ iv_value = 'COMMENT_LEN'
+ iv_data = |{ io_settings->get_commitmsg_comment_length( ) }| ).
+
+ lcl_app=>db( )->modify(
+ iv_type = 'SETTINGS'
+ iv_value = 'BODY_SIZE'
+ iv_data = |{ io_settings->get_commitmsg_body_size( ) }| ).
+
ENDMETHOD.
METHOD read.
@@ -1669,7 +1709,9 @@ CLASS lcl_persistence_settings IMPLEMENTATION.
lv_critical_tests_as_boolean TYPE abap_bool,
lv_max_lines_as_string TYPE string,
lv_flag TYPE abap_bool,
- lv_max_lines_as_integer TYPE i.
+ lv_max_lines_as_integer TYPE i,
+ lv_s_param_value TYPE string,
+ lv_i_param_value TYPE i.
CREATE OBJECT ro_settings.
@@ -1710,15 +1752,36 @@ CLASS lcl_persistence_settings IMPLEMENTATION.
CATCH lcx_not_found.
ro_settings->set_run_critical_tests( abap_false ).
ENDTRY.
+
TRY.
lv_max_lines_as_string = lcl_app=>db( )->read(
iv_type = 'SETTINGS'
iv_value = 'MAX_LINES' ).
lv_max_lines_as_integer = lv_max_lines_as_string.
ro_settings->set_max_lines( lv_max_lines_as_integer ).
- CATCH lcx_not_found.
+ CATCH lcx_not_found cx_sy_conversion_no_number.
ro_settings->set_max_lines( 500 ). " default
ENDTRY.
+
+ TRY.
+ lv_s_param_value = lcl_app=>db( )->read(
+ iv_type = 'SETTINGS'
+ iv_value = 'COMMENT_LEN' ).
+ lv_i_param_value = lv_s_param_value.
+ ro_settings->set_commitmsg_comment_length( lv_i_param_value ).
+ CATCH lcx_not_found cx_sy_conversion_no_number.
+ ro_settings->set_commitmsg_comment_length( lcl_settings=>c_commitmsg_comment_length_dft ). " default
+ ENDTRY.
+
+ TRY.
+ lv_s_param_value = lcl_app=>db( )->read(
+ iv_type = 'SETTINGS'
+ iv_value = 'BODY_SIZE' ).
+ lv_i_param_value = lv_s_param_value.
+ ro_settings->set_commitmsg_body_size( lv_i_param_value ).
+ CATCH lcx_not_found cx_sy_conversion_no_number.
+ ro_settings->set_commitmsg_body_size( lcl_settings=>c_commitmsg_body_size_dft ). " default
+ ENDTRY.
ENDMETHOD.
ENDCLASS.