mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
415 lines
12 KiB
ABAP
415 lines
12 KiB
ABAP
CLASS zcl_abapgit_persist_migrate DEFINITION PUBLIC CREATE PUBLIC.
|
|
|
|
PUBLIC SECTION.
|
|
CLASS-METHODS: run RAISING zcx_abapgit_exception.
|
|
|
|
PRIVATE SECTION.
|
|
CONSTANTS:
|
|
c_text TYPE string VALUE 'Generated by abapGit' ##NO_TEXT.
|
|
|
|
CLASS-METHODS:
|
|
migrate_settings
|
|
RAISING zcx_abapgit_exception,
|
|
table_create
|
|
RAISING zcx_abapgit_exception,
|
|
table_exists
|
|
RETURNING VALUE(rv_exists) TYPE abap_bool,
|
|
lock_create
|
|
RAISING zcx_abapgit_exception,
|
|
lock_exists
|
|
RETURNING VALUE(rv_exists) TYPE abap_bool,
|
|
settings_exists
|
|
RETURNING VALUE(rv_exists) TYPE abap_bool.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION.
|
|
|
|
|
|
METHOD lock_create.
|
|
|
|
DATA: lv_obj_name TYPE tadir-obj_name,
|
|
ls_dd25v TYPE dd25v,
|
|
lt_dd26e TYPE STANDARD TABLE OF dd26e WITH DEFAULT KEY,
|
|
lt_dd27p TYPE STANDARD TABLE OF dd27p WITH DEFAULT KEY.
|
|
|
|
FIELD-SYMBOLS: <ls_dd26e> LIKE LINE OF lt_dd26e,
|
|
<ls_dd27p> LIKE LINE OF lt_dd27p.
|
|
|
|
|
|
ls_dd25v-viewname = zcl_abapgit_persistence_db=>c_lock.
|
|
ls_dd25v-aggtype = 'E'.
|
|
ls_dd25v-roottab = zcl_abapgit_persistence_db=>c_tabname.
|
|
ls_dd25v-ddlanguage = zif_abapgit_definitions=>gc_english.
|
|
ls_dd25v-ddtext = c_text.
|
|
|
|
APPEND INITIAL LINE TO lt_dd26e ASSIGNING <ls_dd26e>.
|
|
<ls_dd26e>-viewname = zcl_abapgit_persistence_db=>c_lock.
|
|
<ls_dd26e>-tabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
<ls_dd26e>-tabpos = '0001'.
|
|
<ls_dd26e>-fortabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
<ls_dd26e>-enqmode = 'E'.
|
|
|
|
APPEND INITIAL LINE TO lt_dd27p ASSIGNING <ls_dd27p>.
|
|
<ls_dd27p>-viewname = zcl_abapgit_persistence_db=>c_lock.
|
|
<ls_dd27p>-objpos = '0001'.
|
|
<ls_dd27p>-viewfield = 'TYPE'.
|
|
<ls_dd27p>-tabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
<ls_dd27p>-fieldname = 'TYPE'.
|
|
<ls_dd27p>-keyflag = abap_true.
|
|
|
|
APPEND INITIAL LINE TO lt_dd27p ASSIGNING <ls_dd27p>.
|
|
<ls_dd27p>-viewname = zcl_abapgit_persistence_db=>c_lock.
|
|
<ls_dd27p>-objpos = '0002'.
|
|
<ls_dd27p>-viewfield = 'VALUE'.
|
|
<ls_dd27p>-tabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
<ls_dd27p>-fieldname = 'VALUE'.
|
|
<ls_dd27p>-keyflag = abap_true.
|
|
|
|
CALL FUNCTION 'DDIF_ENQU_PUT'
|
|
EXPORTING
|
|
name = zcl_abapgit_persistence_db=>c_lock
|
|
dd25v_wa = ls_dd25v
|
|
TABLES
|
|
dd26e_tab = lt_dd26e
|
|
dd27p_tab = lt_dd27p
|
|
EXCEPTIONS
|
|
enqu_not_found = 1
|
|
name_inconsistent = 2
|
|
enqu_inconsistent = 3
|
|
put_failure = 4
|
|
put_refused = 5
|
|
OTHERS = 6.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'migrate, error from DDIF_ENQU_PUT' ).
|
|
ENDIF.
|
|
|
|
lv_obj_name = zcl_abapgit_persistence_db=>c_lock.
|
|
CALL FUNCTION 'TR_TADIR_INTERFACE'
|
|
EXPORTING
|
|
wi_tadir_pgmid = 'R3TR'
|
|
wi_tadir_object = 'ENQU'
|
|
wi_tadir_obj_name = lv_obj_name
|
|
wi_set_genflag = abap_true
|
|
wi_test_modus = abap_false
|
|
wi_tadir_devclass = '$TMP'
|
|
EXCEPTIONS
|
|
OTHERS = 1.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'migrate, error from TR_TADIR_INTERFACE' ).
|
|
ENDIF.
|
|
|
|
CALL FUNCTION 'DDIF_ENQU_ACTIVATE'
|
|
EXPORTING
|
|
name = zcl_abapgit_persistence_db=>c_lock
|
|
EXCEPTIONS
|
|
not_found = 1
|
|
put_failure = 2
|
|
OTHERS = 3.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'migrate, error from DDIF_ENQU_ACTIVATE' ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD lock_exists.
|
|
|
|
DATA: lv_viewname TYPE dd25l-viewname.
|
|
|
|
|
|
SELECT SINGLE viewname FROM dd25l INTO lv_viewname
|
|
WHERE viewname = zcl_abapgit_persistence_db=>c_lock.
|
|
rv_exists = boolc( sy-subrc = 0 ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD migrate_settings.
|
|
|
|
DATA: lo_settings TYPE REF TO zcl_abapgit_settings,
|
|
lo_persist_settings TYPE REF TO zcl_abapgit_persist_settings,
|
|
lv_critical_tests_as_string TYPE string,
|
|
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_s_param_value TYPE string,
|
|
lv_i_param_value TYPE i,
|
|
lv_adt_jump_enabled_as_string TYPE string,
|
|
lv_adt_jump_enabled_as_boolean TYPE abap_bool.
|
|
|
|
|
|
lo_persist_settings = zcl_abapgit_persist_settings=>get_instance( ).
|
|
|
|
CREATE OBJECT lo_settings.
|
|
lo_settings->set_defaults( ).
|
|
|
|
TRY.
|
|
lo_settings->set_proxy_url(
|
|
zcl_abapgit_persistence_db=>get_instance( )->read(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'PROXY_URL' ) ).
|
|
CATCH zcx_abapgit_not_found.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
lo_settings->set_proxy_port(
|
|
zcl_abapgit_persistence_db=>get_instance( )->read(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'PROXY_PORT' ) ).
|
|
CATCH zcx_abapgit_not_found.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
lv_flag = zcl_abapgit_persistence_db=>get_instance( )->read(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'PROXY_AUTH' ).
|
|
lo_settings->set_proxy_authentication( lv_flag ).
|
|
CATCH zcx_abapgit_not_found.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
lv_critical_tests_as_string = zcl_abapgit_persistence_db=>get_instance( )->read(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'CRIT_TESTS' ).
|
|
lv_critical_tests_as_boolean = lv_critical_tests_as_string.
|
|
lo_settings->set_run_critical_tests( lv_critical_tests_as_boolean ).
|
|
CATCH zcx_abapgit_not_found.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
lv_max_lines_as_string = zcl_abapgit_persistence_db=>get_instance( )->read(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'MAX_LINES' ).
|
|
lv_max_lines_as_integer = lv_max_lines_as_string.
|
|
lo_settings->set_max_lines( lv_max_lines_as_integer ).
|
|
CATCH zcx_abapgit_not_found cx_sy_conversion_no_number.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
lv_adt_jump_enabled_as_string = zcl_abapgit_persistence_db=>get_instance( )->read(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'ADT_JUMP' ).
|
|
lv_adt_jump_enabled_as_boolean = lv_adt_jump_enabled_as_string.
|
|
lo_settings->set_adt_jump_enanbled( lv_adt_jump_enabled_as_boolean ).
|
|
CATCH zcx_abapgit_not_found.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
lv_s_param_value = zcl_abapgit_persistence_db=>get_instance( )->read(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'COMMENT_LEN' ).
|
|
lv_i_param_value = lv_s_param_value.
|
|
lo_settings->set_commitmsg_comment_length( lv_i_param_value ).
|
|
CATCH zcx_abapgit_not_found cx_sy_conversion_no_number.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
lv_s_param_value = zcl_abapgit_persistence_db=>get_instance( )->read(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'BODY_SIZE' ).
|
|
lv_i_param_value = lv_s_param_value.
|
|
lo_settings->set_commitmsg_body_size( lv_i_param_value ).
|
|
CATCH zcx_abapgit_not_found cx_sy_conversion_no_number.
|
|
ENDTRY.
|
|
|
|
lo_persist_settings->modify( lo_settings ).
|
|
|
|
TRY.
|
|
zcl_abapgit_persistence_db=>get_instance( )->delete(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'PROXY_URL' ).
|
|
CATCH zcx_abapgit_exception.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
zcl_abapgit_persistence_db=>get_instance( )->delete(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'PROXY_PORT' ).
|
|
CATCH zcx_abapgit_exception.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
zcl_abapgit_persistence_db=>get_instance( )->delete(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'PROXY_AUTH' ).
|
|
CATCH zcx_abapgit_exception.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
zcl_abapgit_persistence_db=>get_instance( )->delete(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'CRIT_TESTS' ).
|
|
CATCH zcx_abapgit_exception.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
zcl_abapgit_persistence_db=>get_instance( )->delete(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'MAX_LINES' ).
|
|
CATCH zcx_abapgit_exception.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
zcl_abapgit_persistence_db=>get_instance( )->delete(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'ADT_JUMP' ).
|
|
CATCH zcx_abapgit_exception.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
zcl_abapgit_persistence_db=>get_instance( )->delete(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'COMMENT_LEN' ).
|
|
CATCH zcx_abapgit_exception.
|
|
ENDTRY.
|
|
|
|
TRY.
|
|
zcl_abapgit_persistence_db=>get_instance( )->delete(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = 'BODY_SIZE' ).
|
|
CATCH zcx_abapgit_exception.
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD run.
|
|
|
|
IF table_exists( ) = abap_false.
|
|
table_create( ).
|
|
ENDIF.
|
|
|
|
IF lock_exists( ) = abap_false.
|
|
lock_create( ).
|
|
ENDIF.
|
|
|
|
IF settings_exists( ) = abap_false.
|
|
migrate_settings( ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD settings_exists.
|
|
|
|
TRY.
|
|
zcl_abapgit_persistence_db=>get_instance( )->read(
|
|
iv_type = 'SETTINGS'
|
|
iv_value = '' ).
|
|
rv_exists = abap_true.
|
|
CATCH zcx_abapgit_not_found.
|
|
rv_exists = abap_false.
|
|
ENDTRY.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD table_create.
|
|
|
|
DATA: lv_rc LIKE sy-subrc,
|
|
lv_obj_name TYPE tadir-obj_name,
|
|
ls_dd02v TYPE dd02v,
|
|
ls_dd09l TYPE dd09l,
|
|
lt_dd03p TYPE STANDARD TABLE OF dd03p WITH DEFAULT KEY.
|
|
|
|
FIELD-SYMBOLS: <ls_dd03p> LIKE LINE OF lt_dd03p.
|
|
|
|
ls_dd02v-tabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
ls_dd02v-ddlanguage = zif_abapgit_definitions=>gc_english.
|
|
ls_dd02v-tabclass = 'TRANSP'.
|
|
ls_dd02v-ddtext = c_text.
|
|
ls_dd02v-contflag = 'A'.
|
|
ls_dd02v-exclass = '1'.
|
|
|
|
ls_dd09l-tabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
ls_dd09l-as4local = 'A'.
|
|
ls_dd09l-tabkat = '1'.
|
|
ls_dd09l-tabart = 'APPL1'.
|
|
ls_dd09l-bufallow = 'N'.
|
|
|
|
APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
|
|
<ls_dd03p>-tabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
<ls_dd03p>-fieldname = 'TYPE'.
|
|
<ls_dd03p>-position = '0001'.
|
|
<ls_dd03p>-keyflag = 'X'.
|
|
<ls_dd03p>-datatype = 'CHAR'.
|
|
<ls_dd03p>-leng = '000012'.
|
|
|
|
APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
|
|
<ls_dd03p>-tabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
<ls_dd03p>-fieldname = 'VALUE'.
|
|
<ls_dd03p>-position = '0002'.
|
|
<ls_dd03p>-keyflag = 'X'.
|
|
<ls_dd03p>-datatype = 'CHAR'.
|
|
<ls_dd03p>-leng = '000012'.
|
|
|
|
APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
|
|
<ls_dd03p>-tabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
<ls_dd03p>-fieldname = 'DATA_STR'.
|
|
<ls_dd03p>-position = '0003'.
|
|
<ls_dd03p>-datatype = 'STRG'.
|
|
|
|
CALL FUNCTION 'DDIF_TABL_PUT'
|
|
EXPORTING
|
|
name = zcl_abapgit_persistence_db=>c_tabname
|
|
dd02v_wa = ls_dd02v
|
|
dd09l_wa = ls_dd09l
|
|
TABLES
|
|
dd03p_tab = lt_dd03p
|
|
EXCEPTIONS
|
|
tabl_not_found = 1
|
|
name_inconsistent = 2
|
|
tabl_inconsistent = 3
|
|
put_failure = 4
|
|
put_refused = 5
|
|
OTHERS = 6.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'migrate, error from DDIF_TABL_PUT' ).
|
|
ENDIF.
|
|
|
|
lv_obj_name = zcl_abapgit_persistence_db=>c_tabname.
|
|
CALL FUNCTION 'TR_TADIR_INTERFACE'
|
|
EXPORTING
|
|
wi_tadir_pgmid = 'R3TR'
|
|
wi_tadir_object = 'TABL'
|
|
wi_tadir_obj_name = lv_obj_name
|
|
wi_set_genflag = abap_true
|
|
wi_test_modus = abap_false
|
|
wi_tadir_devclass = '$TMP'
|
|
EXCEPTIONS
|
|
OTHERS = 1.
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise( 'migrate, error from TR_TADIR_INTERFACE' ).
|
|
ENDIF.
|
|
|
|
CALL FUNCTION 'DDIF_TABL_ACTIVATE'
|
|
EXPORTING
|
|
name = zcl_abapgit_persistence_db=>c_tabname
|
|
auth_chk = abap_false
|
|
IMPORTING
|
|
rc = lv_rc
|
|
EXCEPTIONS
|
|
not_found = 1
|
|
put_failure = 2
|
|
OTHERS = 3.
|
|
IF sy-subrc <> 0 OR lv_rc <> 0.
|
|
zcx_abapgit_exception=>raise( 'migrate, error from DDIF_TABL_ACTIVATE' ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD table_exists.
|
|
|
|
DATA: lv_tabname TYPE dd02l-tabname.
|
|
|
|
SELECT SINGLE tabname FROM dd02l INTO lv_tabname
|
|
WHERE tabname = zcl_abapgit_persistence_db=>c_tabname.
|
|
rv_exists = boolc( sy-subrc = 0 ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|