mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
some work on includes
This commit is contained in:
parent
a289fdea0d
commit
bff8e3caed
540
zagit.abap
540
zagit.abap
|
@ -285,6 +285,10 @@ CLASS lcl_xml DEFINITION FINAL.
|
||||||
ii_root TYPE REF TO if_ixml_element OPTIONAL
|
ii_root TYPE REF TO if_ixml_element OPTIONAL
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS element_add IMPORTING ig_element TYPE data
|
||||||
|
ii_root TYPE REF TO if_ixml_element OPTIONAL
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
METHODS structure_read CHANGING cg_structure TYPE data.
|
METHODS structure_read CHANGING cg_structure TYPE data.
|
||||||
|
|
||||||
METHODS render RETURNING value(rv_string) TYPE string.
|
METHODS render RETURNING value(rv_string) TYPE string.
|
||||||
|
@ -372,9 +376,10 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: lv_name TYPE string,
|
DATA: lv_name TYPE string,
|
||||||
li_table TYPE REF TO if_ixml_element,
|
li_table TYPE REF TO if_ixml_element,
|
||||||
|
lv_kind TYPE abap_typecategory,
|
||||||
lo_table_descr TYPE REF TO cl_abap_tabledescr.
|
lo_table_descr TYPE REF TO cl_abap_tabledescr.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <lg_line> TYPE any.
|
FIELD-SYMBOLS: <lg_line> TYPE any.
|
||||||
|
|
||||||
|
|
||||||
lo_table_descr ?= cl_abap_typedescr=>describe_by_data( it_table ).
|
lo_table_descr ?= cl_abap_typedescr=>describe_by_data( it_table ).
|
||||||
|
@ -385,15 +390,56 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
li_table = mi_xml_doc->create_element( lv_name ).
|
li_table = mi_xml_doc->create_element( lv_name ).
|
||||||
|
lv_kind = lo_table_descr->get_table_line_type( )->kind.
|
||||||
|
|
||||||
LOOP AT it_table ASSIGNING <lg_line>.
|
LOOP AT it_table ASSIGNING <lg_line>.
|
||||||
structure_add( ig_structure = <lg_line> ii_root = li_table ).
|
CASE lv_kind.
|
||||||
|
WHEN cl_abap_typedescr=>kind_struct.
|
||||||
|
structure_add( ig_structure = <lg_line>
|
||||||
|
ii_root = li_table ).
|
||||||
|
WHEN cl_abap_typedescr=>kind_elem.
|
||||||
|
element_add( ig_element = <lg_line>
|
||||||
|
ii_root = li_table ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
_raise 'unknown kind'.
|
||||||
|
ENDCASE.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
mi_root->append_child( li_table ).
|
mi_root->append_child( li_table ).
|
||||||
|
|
||||||
ENDMETHOD. "table_add
|
ENDMETHOD. "table_add
|
||||||
|
|
||||||
|
METHOD element_add.
|
||||||
|
|
||||||
|
DATA: lo_descr TYPE REF TO cl_abap_elemdescr,
|
||||||
|
lv_string TYPE string,
|
||||||
|
li_element TYPE REF TO if_ixml_element,
|
||||||
|
li_text TYPE REF TO if_ixml_text,
|
||||||
|
lv_name TYPE string.
|
||||||
|
|
||||||
|
|
||||||
|
lo_descr ?= cl_abap_typedescr=>describe_by_data( ig_element ).
|
||||||
|
|
||||||
|
lv_name = lo_descr->get_relative_name( ).
|
||||||
|
IF lv_name IS INITIAL.
|
||||||
|
_raise 'no name'.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_element = mi_xml_doc->create_element( lv_name ).
|
||||||
|
|
||||||
|
lv_string = ig_element.
|
||||||
|
li_text = mi_xml_doc->create_text( lv_string ).
|
||||||
|
|
||||||
|
li_element->append_child( li_text ).
|
||||||
|
|
||||||
|
IF ii_root IS SUPPLIED.
|
||||||
|
ii_root->append_child( li_element ).
|
||||||
|
ELSE.
|
||||||
|
mi_root->append_child( li_element ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "element_add
|
||||||
|
|
||||||
METHOD structure_add.
|
METHOD structure_add.
|
||||||
|
|
||||||
DATA: li_element TYPE REF TO if_ixml_element,
|
DATA: li_element TYPE REF TO if_ixml_element,
|
||||||
|
@ -408,6 +454,7 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
lo_descr ?= cl_abap_typedescr=>describe_by_data( ig_structure ).
|
lo_descr ?= cl_abap_typedescr=>describe_by_data( ig_structure ).
|
||||||
|
|
||||||
lv_name = lo_descr->get_relative_name( ).
|
lv_name = lo_descr->get_relative_name( ).
|
||||||
IF lv_name IS INITIAL.
|
IF lv_name IS INITIAL.
|
||||||
_raise 'no name'.
|
_raise 'no name'.
|
||||||
|
@ -738,195 +785,77 @@ CLASS lcl_convert IMPLEMENTATION.
|
||||||
ENDCLASS. "lcl_convert IMPLEMENTATION
|
ENDCLASS. "lcl_convert IMPLEMENTATION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_serialize DEFINITION
|
* INTERFACE lif_serialize IMPLEMENTATION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
*
|
*
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_serialize DEFINITION FINAL.
|
INTERFACE lif_serialize.
|
||||||
|
|
||||||
|
CLASS-METHODS: serialize IMPORTING iv_obj_name TYPE tadir-obj_name
|
||||||
|
RETURNING value(rt_files) TYPE tt_files
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS: deserialize IMPORTING iv_obj_name TYPE tadir-obj_name
|
||||||
|
it_files TYPE tt_files
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS: exists IMPORTING iv_obj_name TYPE tadir-obj_name
|
||||||
|
RETURNING value(rv_exists) TYPE abap_bool
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
ENDINTERFACE. "lif_serialize IMPLEMENTATION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_serialize_prog DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_serialize_prog DEFINITION FINAL.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
CLASS-METHODS serialize IMPORTING iv_obj_type TYPE tadir-object
|
INTERFACES lif_serialize.
|
||||||
iv_obj_name TYPE tadir-obj_name
|
|
||||||
RETURNING value(rt_files) TYPE tt_files
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS status IMPORTING it_files TYPE tt_files
|
ALIASES: serialize FOR lif_serialize~serialize,
|
||||||
RETURNING value(rt_results) TYPE tt_results
|
deserialize FOR lif_serialize~deserialize,
|
||||||
RAISING lcx_exception.
|
exists FOR lif_serialize~exists.
|
||||||
|
|
||||||
CLASS-METHODS deserialize IMPORTING it_files TYPE tt_files
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
CLASS-METHODS prog_serialize
|
CLASS-METHODS: serialize_dynpros IMPORTING iv_program_name TYPE programm
|
||||||
IMPORTING iv_obj_name TYPE tadir-obj_name
|
io_xml TYPE REF TO lcl_xml
|
||||||
RETURNING value(rt_files) TYPE tt_files
|
RAISING lcx_exception.
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS prog_deserialize
|
CLASS-METHODS: serialize_includes IMPORTING iv_program_name TYPE programm
|
||||||
IMPORTING it_files TYPE tt_files
|
io_xml TYPE REF TO lcl_xml
|
||||||
iv_obj_name TYPE tadir-obj_name
|
CHANGING ct_files TYPE tt_files
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS prog_exists
|
ENDCLASS. "lcl_serialize_prog DEFINITION
|
||||||
IMPORTING iv_obj_name TYPE tadir-obj_name
|
|
||||||
RETURNING value(rv_bool) TYPE abap_bool.
|
|
||||||
|
|
||||||
CLASS-METHODS compare_files
|
|
||||||
IMPORTING it_repo TYPE tt_files
|
|
||||||
it_sap TYPE tt_files
|
|
||||||
RETURNING value(rv_match) TYPE abap_bool
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
ENDCLASS. "lcl_serialize DEFINITION
|
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_serialize IMPLEMENTATION
|
* CLASS lcl_serialize_prog IMPLEMENTATION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
*
|
*
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_serialize IMPLEMENTATION.
|
CLASS lcl_serialize_prog IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD prog_exists.
|
METHOD lif_serialize~serialize.
|
||||||
|
|
||||||
DATA: lv_progname TYPE reposrc-progname.
|
|
||||||
|
|
||||||
|
|
||||||
SELECT SINGLE progname FROM reposrc INTO lv_progname
|
|
||||||
WHERE progname = iv_obj_name. "#EC WARNOK
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
rv_bool = abap_true.
|
|
||||||
ELSE.
|
|
||||||
rv_bool = abap_false.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "prog_exists
|
|
||||||
|
|
||||||
METHOD serialize.
|
|
||||||
|
|
||||||
CASE iv_obj_type.
|
|
||||||
WHEN 'PROG'.
|
|
||||||
rt_files = prog_serialize( iv_obj_name ).
|
|
||||||
WHEN OTHERS.
|
|
||||||
_raise 'Serialize, unknown type'.
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
* todo, duplicates in rt_files? via includes?
|
|
||||||
|
|
||||||
ENDMETHOD. "serialize
|
|
||||||
|
|
||||||
METHOD status.
|
|
||||||
|
|
||||||
DATA: lv_pre TYPE tadir-obj_name,
|
|
||||||
lt_files TYPE tt_files,
|
|
||||||
ls_result LIKE LINE OF rt_results,
|
|
||||||
lv_type TYPE string,
|
|
||||||
lv_ext TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_file> LIKE LINE OF it_files.
|
|
||||||
|
|
||||||
|
|
||||||
LOOP AT it_files ASSIGNING <ls_file>.
|
|
||||||
SPLIT <ls_file>-filename AT '.' INTO lv_pre lv_type lv_ext.
|
|
||||||
TRANSLATE lv_pre TO UPPER CASE.
|
|
||||||
TRANSLATE lv_type TO UPPER CASE.
|
|
||||||
|
|
||||||
IF lv_ext <> 'xml'.
|
|
||||||
CONTINUE. " current loop
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CLEAR ls_result.
|
|
||||||
ls_result-obj_type = lv_type.
|
|
||||||
ls_result-obj_name = lv_pre.
|
|
||||||
|
|
||||||
CASE lv_type.
|
|
||||||
WHEN 'PROG'.
|
|
||||||
IF prog_exists( lv_pre ) = abap_true.
|
|
||||||
lt_files = prog_serialize( lv_pre ).
|
|
||||||
ls_result-match = compare_files( it_repo = it_files it_sap = lt_files ).
|
|
||||||
ENDIF.
|
|
||||||
WHEN OTHERS.
|
|
||||||
_raise 'status, unknown type'.
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
APPEND ls_result TO rt_results.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
* todo, how to handle deleted in repo?
|
|
||||||
|
|
||||||
ENDMETHOD. "status
|
|
||||||
|
|
||||||
METHOD deserialize.
|
|
||||||
|
|
||||||
DATA: lv_pre TYPE tadir-obj_name,
|
|
||||||
lv_type TYPE string,
|
|
||||||
lv_ext TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_file> LIKE LINE OF it_files.
|
|
||||||
|
|
||||||
|
|
||||||
LOOP AT it_files ASSIGNING <ls_file>.
|
|
||||||
SPLIT <ls_file>-filename AT '.' INTO lv_pre lv_type lv_ext.
|
|
||||||
TRANSLATE lv_pre TO UPPER CASE.
|
|
||||||
TRANSLATE lv_type TO UPPER CASE.
|
|
||||||
|
|
||||||
IF lv_ext <> 'xml'.
|
|
||||||
CONTINUE. " current loop
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CASE lv_type.
|
|
||||||
WHEN 'PROG'.
|
|
||||||
prog_deserialize( it_files = it_files iv_obj_name = lv_pre ).
|
|
||||||
WHEN OTHERS.
|
|
||||||
_raise 'deserialize, unknown type'.
|
|
||||||
ENDCASE.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD. "deserialize
|
|
||||||
|
|
||||||
METHOD compare_files.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_sap> TYPE st_file.
|
|
||||||
|
|
||||||
|
|
||||||
LOOP AT it_sap ASSIGNING <ls_sap>.
|
|
||||||
READ TABLE it_repo WITH KEY path = <ls_sap>-path
|
|
||||||
filename = <ls_sap>-filename
|
|
||||||
data = <ls_sap>-data
|
|
||||||
TRANSPORTING NO FIELDS.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
rv_match = abap_false.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
rv_match = abap_true.
|
|
||||||
|
|
||||||
ENDMETHOD. "compare_files
|
|
||||||
|
|
||||||
METHOD prog_serialize.
|
|
||||||
|
|
||||||
DATA: ls_progdir TYPE progdir,
|
DATA: ls_progdir TYPE progdir,
|
||||||
lv_program_name TYPE programm,
|
lv_program_name TYPE programm,
|
||||||
lv_xml TYPE string,
|
lv_xml TYPE string,
|
||||||
lt_source TYPE TABLE OF abaptxt255,
|
lt_source TYPE TABLE OF abaptxt255,
|
||||||
lv_source TYPE string,
|
lv_source TYPE string,
|
||||||
lt_files LIKE rt_files,
|
|
||||||
lt_dynpros TYPE TABLE OF d020s,
|
|
||||||
lt_includes TYPE programt,
|
|
||||||
lt_textelements TYPE textpool_table,
|
lt_textelements TYPE textpool_table,
|
||||||
ls_file LIKE LINE OF rt_files,
|
ls_file LIKE LINE OF rt_files,
|
||||||
lo_xml TYPE REF TO lcl_xml.
|
lo_xml TYPE REF TO lcl_xml.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <lv_include> LIKE LINE OF lt_includes,
|
|
||||||
<ls_dynpro> LIKE LINE OF lt_dynpros.
|
|
||||||
|
|
||||||
|
|
||||||
lv_program_name = iv_obj_name.
|
lv_program_name = iv_obj_name.
|
||||||
|
|
||||||
CALL FUNCTION 'RPY_PROGRAM_READ'
|
CALL FUNCTION 'RPY_PROGRAM_READ'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
program_name = lv_program_name
|
program_name = lv_program_name
|
||||||
|
with_lowercase = abap_true
|
||||||
TABLES
|
TABLES
|
||||||
source_extended = lt_source
|
source_extended = lt_source
|
||||||
textelements = lt_textelements
|
textelements = lt_textelements
|
||||||
|
@ -958,48 +887,17 @@ CLASS lcl_serialize IMPLEMENTATION.
|
||||||
CREATE OBJECT lo_xml.
|
CREATE OBJECT lo_xml.
|
||||||
lo_xml->structure_add( ls_progdir ).
|
lo_xml->structure_add( ls_progdir ).
|
||||||
lo_xml->table_add( lt_textelements ).
|
lo_xml->table_add( lt_textelements ).
|
||||||
lv_xml = lo_xml->render( ).
|
|
||||||
|
|
||||||
|
IF ls_progdir-subc = '1'.
|
||||||
|
serialize_includes( EXPORTING iv_program_name = lv_program_name
|
||||||
|
io_xml = lo_xml
|
||||||
|
CHANGING ct_files = rt_files ).
|
||||||
|
|
||||||
CALL FUNCTION 'RS_SCREEN_LIST'
|
serialize_dynpros( EXPORTING iv_program_name = lv_program_name
|
||||||
EXPORTING
|
io_xml = lo_xml ).
|
||||||
dynnr = '*'
|
|
||||||
progname = lv_program_name
|
|
||||||
TABLES
|
|
||||||
dynpros = lt_dynpros
|
|
||||||
EXCEPTIONS
|
|
||||||
not_found = 1
|
|
||||||
OTHERS = 2.
|
|
||||||
IF sy-subrc = 2.
|
|
||||||
_raise 'error from screen_list'.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
DATA: ls_header TYPE rpy_dyhead,
|
lv_xml = lo_xml->render( ).
|
||||||
lt_containers TYPE dycatt_tab,
|
|
||||||
lt_fields_to_containers TYPE dyfatc_tab,
|
|
||||||
lt_flow_logic TYPE swydyflow.
|
|
||||||
|
|
||||||
LOOP AT lt_dynpros ASSIGNING <ls_dynpro>.
|
|
||||||
CALL FUNCTION 'RPY_DYNPRO_READ'
|
|
||||||
EXPORTING
|
|
||||||
progname = lv_program_name
|
|
||||||
dynnr = <ls_dynpro>-dnum
|
|
||||||
IMPORTING
|
|
||||||
header = ls_header
|
|
||||||
TABLES
|
|
||||||
containers = lt_containers
|
|
||||||
fields_to_containers = lt_fields_to_containers
|
|
||||||
flow_logic = lt_flow_logic
|
|
||||||
EXCEPTIONS
|
|
||||||
cancelled = 1
|
|
||||||
not_found = 2
|
|
||||||
permission_error = 3
|
|
||||||
OTHERS = 4.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
_raise 'Error while reading dynpro'.
|
|
||||||
ENDIF.
|
|
||||||
* todo, add to xml
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
CLEAR ls_file.
|
CLEAR ls_file.
|
||||||
ls_file-path = '/'.
|
ls_file-path = '/'.
|
||||||
|
@ -1016,10 +914,19 @@ CLASS lcl_serialize IMPLEMENTATION.
|
||||||
ls_file-data = lcl_convert=>string_to_xstring_utf8( lv_source ).
|
ls_file-data = lcl_convert=>string_to_xstring_utf8( lv_source ).
|
||||||
APPEND ls_file TO rt_files.
|
APPEND ls_file TO rt_files.
|
||||||
|
|
||||||
|
ENDMETHOD. "lif_serialize~serialize
|
||||||
|
|
||||||
|
METHOD serialize_includes.
|
||||||
|
|
||||||
|
DATA: lt_includes TYPE programt,
|
||||||
|
lt_files LIKE ct_files.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <lv_include> LIKE LINE OF lt_includes.
|
||||||
|
|
||||||
|
|
||||||
CALL FUNCTION 'RS_GET_ALL_INCLUDES'
|
CALL FUNCTION 'RS_GET_ALL_INCLUDES'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
program = lv_program_name
|
program = iv_program_name
|
||||||
TABLES
|
TABLES
|
||||||
includetab = lt_includes
|
includetab = lt_includes
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
|
@ -1030,15 +937,69 @@ CLASS lcl_serialize IMPLEMENTATION.
|
||||||
_raise 'Error from get_all_includes'.
|
_raise 'Error from get_all_includes'.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
io_xml->table_add( lt_includes ).
|
||||||
|
|
||||||
LOOP AT lt_includes ASSIGNING <lv_include>.
|
LOOP AT lt_includes ASSIGNING <lv_include>.
|
||||||
lt_files = prog_serialize( <lv_include> ).
|
lt_files = lif_serialize~serialize( <lv_include> ).
|
||||||
APPEND LINES OF lt_files TO rt_files.
|
APPEND LINES OF lt_files TO ct_files.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD. "prog_serialize
|
ENDMETHOD. "serialize_includes
|
||||||
|
|
||||||
|
METHOD serialize_dynpros.
|
||||||
|
|
||||||
|
DATA: ls_header TYPE rpy_dyhead,
|
||||||
|
lt_containers TYPE dycatt_tab,
|
||||||
|
lt_fields_to_containers TYPE dyfatc_tab,
|
||||||
|
lt_flow_logic TYPE swydyflow,
|
||||||
|
lt_dynpros TYPE TABLE OF d020s.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_dynpro> LIKE LINE OF lt_dynpros.
|
||||||
|
|
||||||
|
|
||||||
METHOD prog_deserialize.
|
CALL FUNCTION 'RS_SCREEN_LIST'
|
||||||
|
EXPORTING
|
||||||
|
dynnr = ''
|
||||||
|
progname = iv_program_name
|
||||||
|
TABLES
|
||||||
|
dynpros = lt_dynpros
|
||||||
|
EXCEPTIONS
|
||||||
|
not_found = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc = 2.
|
||||||
|
_raise 'error from screen_list'.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT lt_dynpros ASSIGNING <ls_dynpro>.
|
||||||
|
CALL FUNCTION 'RPY_DYNPRO_READ'
|
||||||
|
EXPORTING
|
||||||
|
progname = iv_program_name
|
||||||
|
dynnr = <ls_dynpro>-dnum
|
||||||
|
IMPORTING
|
||||||
|
header = ls_header
|
||||||
|
TABLES
|
||||||
|
containers = lt_containers
|
||||||
|
fields_to_containers = lt_fields_to_containers
|
||||||
|
flow_logic = lt_flow_logic
|
||||||
|
EXCEPTIONS
|
||||||
|
cancelled = 1
|
||||||
|
not_found = 2
|
||||||
|
permission_error = 3
|
||||||
|
OTHERS = 4.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
_raise 'Error while reading dynpro'.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
io_xml->structure_add( ls_header ).
|
||||||
|
io_xml->table_add( lt_containers ).
|
||||||
|
io_xml->table_add( lt_fields_to_containers ).
|
||||||
|
io_xml->table_add( lt_flow_logic ).
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_dynpros
|
||||||
|
|
||||||
|
METHOD lif_serialize~deserialize.
|
||||||
|
|
||||||
DATA: lv_name TYPE string,
|
DATA: lv_name TYPE string,
|
||||||
lv_xml TYPE string,
|
lv_xml TYPE string,
|
||||||
|
@ -1076,7 +1037,7 @@ CLASS lcl_serialize IMPLEMENTATION.
|
||||||
|
|
||||||
SPLIT lv_abap AT gc_newline INTO TABLE lt_source.
|
SPLIT lv_abap AT gc_newline INTO TABLE lt_source.
|
||||||
|
|
||||||
IF prog_exists( iv_obj_name ) = abap_true.
|
IF exists( iv_obj_name ) = abap_true.
|
||||||
CALL FUNCTION 'RPY_PROGRAM_UPDATE'
|
CALL FUNCTION 'RPY_PROGRAM_UPDATE'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
program_name = ls_progdir-name
|
program_name = ls_progdir-name
|
||||||
|
@ -1135,7 +1096,172 @@ CLASS lcl_serialize IMPLEMENTATION.
|
||||||
COMMIT WORK.
|
COMMIT WORK.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD. "p_deserialize
|
ENDMETHOD. "lif_serialize~deserialize
|
||||||
|
|
||||||
|
METHOD lif_serialize~exists.
|
||||||
|
|
||||||
|
DATA: lv_progname TYPE reposrc-progname.
|
||||||
|
|
||||||
|
|
||||||
|
SELECT SINGLE progname FROM reposrc INTO lv_progname
|
||||||
|
WHERE progname = iv_obj_name. "#EC WARNOK
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
rv_exists = abap_true.
|
||||||
|
ELSE.
|
||||||
|
rv_exists = abap_false.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "exists
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_serialize_prog IMPLEMENTATION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_serialize DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_serialize DEFINITION FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
CLASS-METHODS serialize IMPORTING iv_obj_type TYPE tadir-object
|
||||||
|
iv_obj_name TYPE tadir-obj_name
|
||||||
|
RETURNING value(rt_files) TYPE tt_files
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS status IMPORTING it_files TYPE tt_files
|
||||||
|
RETURNING value(rt_results) TYPE tt_results
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS deserialize IMPORTING it_files TYPE tt_files
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
CLASS-METHODS compare_files
|
||||||
|
IMPORTING it_repo TYPE tt_files
|
||||||
|
it_sap TYPE tt_files
|
||||||
|
RETURNING value(rv_match) TYPE abap_bool
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_serialize DEFINITION
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_serialize IMPLEMENTATION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_serialize IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD serialize.
|
||||||
|
|
||||||
|
DATA: lt_files TYPE tt_files.
|
||||||
|
|
||||||
|
|
||||||
|
CASE iv_obj_type.
|
||||||
|
WHEN 'PROG'.
|
||||||
|
rt_files = lcl_serialize_prog=>serialize( iv_obj_name ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
_raise 'Serialize, unknown type'.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
* check for duplicates
|
||||||
|
lt_files[] = rt_files[].
|
||||||
|
SORT lt_files BY path ASCENDING filename ASCENDING.
|
||||||
|
DELETE ADJACENT DUPLICATES FROM lt_files COMPARING path filename.
|
||||||
|
IF lines( lt_files ) <> lines( rt_files ).
|
||||||
|
_raise 'Duplicates'.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize
|
||||||
|
|
||||||
|
METHOD status.
|
||||||
|
|
||||||
|
DATA: lv_pre TYPE tadir-obj_name,
|
||||||
|
lt_files TYPE tt_files,
|
||||||
|
ls_result LIKE LINE OF rt_results,
|
||||||
|
lv_type TYPE string,
|
||||||
|
lv_ext TYPE string.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_file> LIKE LINE OF it_files.
|
||||||
|
|
||||||
|
|
||||||
|
LOOP AT it_files ASSIGNING <ls_file>.
|
||||||
|
SPLIT <ls_file>-filename AT '.' INTO lv_pre lv_type lv_ext.
|
||||||
|
TRANSLATE lv_pre TO UPPER CASE.
|
||||||
|
TRANSLATE lv_type TO UPPER CASE.
|
||||||
|
|
||||||
|
IF lv_ext <> 'xml'.
|
||||||
|
CONTINUE. " current loop
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CLEAR ls_result.
|
||||||
|
ls_result-obj_type = lv_type.
|
||||||
|
ls_result-obj_name = lv_pre.
|
||||||
|
|
||||||
|
CASE lv_type.
|
||||||
|
WHEN 'PROG'.
|
||||||
|
IF lcl_serialize_prog=>exists( lv_pre ) = abap_true.
|
||||||
|
lt_files = lcl_serialize_prog=>serialize( lv_pre ).
|
||||||
|
ls_result-match = compare_files( it_repo = it_files it_sap = lt_files ).
|
||||||
|
ENDIF.
|
||||||
|
WHEN OTHERS.
|
||||||
|
_raise 'status, unknown type'.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
APPEND ls_result TO rt_results.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
* todo, how to handle deleted in repo?
|
||||||
|
|
||||||
|
ENDMETHOD. "status
|
||||||
|
|
||||||
|
METHOD deserialize.
|
||||||
|
|
||||||
|
DATA: lv_pre TYPE tadir-obj_name,
|
||||||
|
lv_type TYPE string,
|
||||||
|
lv_ext TYPE string.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_file> LIKE LINE OF it_files.
|
||||||
|
|
||||||
|
|
||||||
|
LOOP AT it_files ASSIGNING <ls_file>.
|
||||||
|
SPLIT <ls_file>-filename AT '.' INTO lv_pre lv_type lv_ext.
|
||||||
|
TRANSLATE lv_pre TO UPPER CASE.
|
||||||
|
TRANSLATE lv_type TO UPPER CASE.
|
||||||
|
|
||||||
|
IF lv_ext <> 'xml'.
|
||||||
|
CONTINUE. " current loop
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CASE lv_type.
|
||||||
|
WHEN 'PROG'.
|
||||||
|
lcl_serialize_prog=>deserialize( it_files = it_files iv_obj_name = lv_pre ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
_raise 'deserialize, unknown type'.
|
||||||
|
ENDCASE.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "deserialize
|
||||||
|
|
||||||
|
METHOD compare_files.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_sap> TYPE st_file.
|
||||||
|
|
||||||
|
|
||||||
|
LOOP AT it_sap ASSIGNING <ls_sap>.
|
||||||
|
READ TABLE it_repo WITH KEY path = <ls_sap>-path
|
||||||
|
filename = <ls_sap>-filename
|
||||||
|
data = <ls_sap>-data
|
||||||
|
TRANSPORTING NO FIELDS.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
rv_match = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
rv_match = abap_true.
|
||||||
|
|
||||||
|
ENDMETHOD. "compare_files
|
||||||
|
|
||||||
ENDCLASS. "lcl_serialize IMPLEMENTATION
|
ENDCLASS. "lcl_serialize IMPLEMENTATION
|
||||||
|
|
||||||
|
@ -2533,6 +2659,7 @@ CLASS lcl_porcelain DEFINITION FINAL.
|
||||||
RETURNING value(rv_branch) TYPE t_sha1
|
RETURNING value(rv_branch) TYPE t_sha1
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
* todo, new files can/should be handled by push, so add is obsolete?
|
||||||
CLASS-METHODS add IMPORTING is_repo TYPE st_repo
|
CLASS-METHODS add IMPORTING is_repo TYPE st_repo
|
||||||
is_comment TYPE st_comment
|
is_comment TYPE st_comment
|
||||||
it_files TYPE tt_files
|
it_files TYPE tt_files
|
||||||
|
@ -2642,7 +2769,10 @@ CLASS lcl_porcelain IMPLEMENTATION.
|
||||||
LOOP AT it_files ASSIGNING <ls_file>.
|
LOOP AT it_files ASSIGNING <ls_file>.
|
||||||
READ TABLE lt_nodes ASSIGNING <ls_node> WITH KEY name = <ls_file>-filename.
|
READ TABLE lt_nodes ASSIGNING <ls_node> WITH KEY name = <ls_file>-filename.
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc <> 0.
|
||||||
_raise 'node not found'.
|
* in case of new files, eg. when adding include to report
|
||||||
|
APPEND INITIAL LINE TO lt_nodes ASSIGNING <ls_node>.
|
||||||
|
<ls_node>-chmod = gc_chmod_file.
|
||||||
|
<ls_node>-name = <ls_file>-filename.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
<ls_node>-sha1 = lcl_hash=>sha1( iv_type = gc_blob iv_data = <ls_file>-data ).
|
<ls_node>-sha1 = lcl_hash=>sha1( iv_type = gc_blob iv_data = <ls_file>-data ).
|
||||||
|
|
Loading…
Reference in New Issue
Block a user