From 33cba1d3b8de0609b6e1178b92371feb9e43f0a6 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Mon, 18 Sep 2017 21:05:32 +0200 Subject: [PATCH 1/3] Skip SADL generated classes --- src/zabapgit.prog.abap | 2 + src/zabapgit_file_status.prog.abap | 28 ++++++++++++- src/zabapgit_object_oo_functions.prog.abap | 12 +++++- src/zabapgit_skip_objects.prog.abap | 46 ++++++++++++++++++++++ src/zabapgit_skip_objects.prog.xml | 25 ++++++++++++ src/zabapgit_unit_test_clas_intf.prog.abap | 4 ++ 6 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 src/zabapgit_skip_objects.prog.abap create mode 100644 src/zabapgit_skip_objects.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 7ec348804..119a894ed 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -67,6 +67,8 @@ INCLUDE zabapgit_objects_impl. INCLUDE zabapgit_object_serializing. " All serializing classes here +INCLUDE zabapgit_skip_objects. + INCLUDE zabapgit_repo_impl. INCLUDE zabapgit_background. INCLUDE zabapgit_transport. diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index d7402cfa1..35a48422b 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -7,6 +7,23 @@ *----------------------------------------------------------------------* CLASS ltcl_file_status DEFINITION DEFERRED. CLASS ltcl_file_status2 DEFINITION DEFERRED. +CLASS lcl_skip_objects DEFINITION. + PUBLIC SECTION. + METHODS: + skip_sadl_generated_objects + IMPORTING + it_results TYPE lif_defs=>ty_results_tt + io_log TYPE REF TO lcl_log + RETURNING + VALUE(rt_results) TYPE lif_defs=>ty_results_tt. + PRIVATE SECTION. + METHODS: + has_sadl_superclass + IMPORTING + is_class TYPE lif_defs=>ty_result + RETURNING + VALUE(rv_return) TYPE abap_bool. +ENDCLASS. CLASS lcl_file_status DEFINITION FINAL FRIENDS ltcl_file_status ltcl_file_status2. @@ -144,8 +161,9 @@ CLASS lcl_file_status IMPLEMENTATION. METHOD status. - DATA: lv_index LIKE sy-tabix, - lo_dot_abapgit TYPE REF TO lcl_dot_abapgit. + DATA: lv_index LIKE sy-tabix, + lo_dot_abapgit TYPE REF TO lcl_dot_abapgit, + lo_skip_objects TYPE REF TO lcl_skip_objects. FIELD-SYMBOLS LIKE LINE OF rt_results. @@ -169,6 +187,12 @@ CLASS lcl_file_status IMPLEMENTATION. ENDIF. ENDLOOP. + + CREATE OBJECT lo_skip_objects. + rt_results = lo_skip_objects->skip_sadl_generated_objects( + it_results = rt_results + io_log = io_log ). + run_checks( io_log = io_log it_results = rt_results diff --git a/src/zabapgit_object_oo_functions.prog.abap b/src/zabapgit_object_oo_functions.prog.abap index ba0fe5da8..2d71e47c9 100644 --- a/src/zabapgit_object_oo_functions.prog.abap +++ b/src/zabapgit_object_oo_functions.prog.abap @@ -125,7 +125,12 @@ INTERFACE lif_oo_object_fnc. IMPORTING is_deletion_key TYPE seoclskey RAISING - lcx_exception. + lcx_exception, + read_superclass + IMPORTING + iv_classname TYPE seoclsname + RETURNING + VALUE(rv_superclass) TYPE seoclsname. ENDINTERFACE. CLASS lcl_oo_serializer DEFINITION. @@ -612,6 +617,11 @@ CLASS lcl_oo_base IMPLEMENTATION. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. + METHOD lif_oo_object_fnc~read_superclass. + SELECT SINGLE refclsname FROM vseoextend INTO rv_superclass + WHERE clsname = iv_classname. + ENDMETHOD. + ENDCLASS. "Backdoor injection for test purposes diff --git a/src/zabapgit_skip_objects.prog.abap b/src/zabapgit_skip_objects.prog.abap new file mode 100644 index 000000000..e4afe3d84 --- /dev/null +++ b/src/zabapgit_skip_objects.prog.abap @@ -0,0 +1,46 @@ +*&---------------------------------------------------------------------* +*& Include zabapgit_skip_objects +*&---------------------------------------------------------------------* + +CLASS lcl_skip_objects IMPLEMENTATION. + METHOD skip_sadl_generated_objects. + DATA: ls_ddls_class_result LIKE LINE OF rt_results, + lo_sadl_class TYPE REF TO lif_object, + ls_item TYPE lif_defs=>ty_item, + ls_result LIKE LINE OF rt_results, + lt_lines_to_delete TYPE lif_defs=>ty_results_tt. + + rt_results = it_results. + LOOP AT it_results INTO ls_result WHERE obj_type = 'DDLS'. + LOOP AT it_results INTO ls_ddls_class_result + WHERE obj_type = 'CLAS' AND obj_name CS ls_result-obj_name. + + IF has_sadl_superclass( ls_ddls_class_result ). + APPEND ls_ddls_class_result TO lt_lines_to_delete. + ENDIF. + ENDLOOP. + ENDLOOP. + + SORT lt_lines_to_delete BY filename. + DELETE ADJACENT DUPLICATES FROM lt_lines_to_delete. + LOOP AT lt_lines_to_delete INTO ls_ddls_class_result. + DELETE TABLE rt_results FROM ls_ddls_class_result. + io_log->add( + iv_msg = |{ ls_ddls_class_result-filename } skipped: generated by SADL| + iv_type = 'W' ). + ENDLOOP. + ENDMETHOD. + + METHOD has_sadl_superclass. + DATA: lo_oo_functions TYPE REF TO lif_oo_object_fnc, + lv_class_name TYPE seoclsname, + lv_superclass TYPE seoclsname. + + lo_oo_functions = lcl_oo_factory=>make( is_class-obj_type ). + lv_class_name = is_class-obj_name. + lv_superclass = lo_oo_functions->read_superclass( lv_class_name ). + IF lv_superclass = 'CL_SADL_GTK_EXPOSURE_MPC'. + rv_return = abap_true. + ENDIF. + ENDMETHOD. +ENDCLASS. diff --git a/src/zabapgit_skip_objects.prog.xml b/src/zabapgit_skip_objects.prog.xml new file mode 100644 index 000000000..3ab107430 --- /dev/null +++ b/src/zabapgit_skip_objects.prog.xml @@ -0,0 +1,25 @@ + + + + + + ZABAPGIT_SKIP_OBJECTS + A + X + S + D$ + I + X + D$S + X + + + + R + Include ZABAPGIT_SKIP_OBJECTS + 29 + + + + + diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap index de0f19545..424cf4323 100644 --- a/src/zabapgit_unit_test_clas_intf.prog.abap +++ b/src/zabapgit_unit_test_clas_intf.prog.abap @@ -150,6 +150,10 @@ CLASS ltd_spy_oo_object IMPLEMENTATION. ms_delete_key = is_deletion_key. ENDMETHOD. + METHOD lif_oo_object_fnc~read_superclass. + RETURN. + ENDMETHOD. + ENDCLASS. CLASS ltd_fake_object_files DEFINITION FOR TESTING From b1c22a5b349724b0e8b4bbc49cbed2b7c743e7be Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Thu, 28 Sep 2017 21:41:38 +0200 Subject: [PATCH 2/3] Moves lcl_skip_objects closer to lcl_tadir --- src/zabapgit_file_status.prog.abap | 26 +------------------ src/zabapgit_repo_impl.prog.abap | 3 ++- src/zabapgit_skip_objects.prog.abap | 37 ++++++++++++++------------- src/zabapgit_tadir.prog.abap | 39 +++++++++++++++++++++++++---- 4 files changed, 56 insertions(+), 49 deletions(-) diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index 35a48422b..827bf21ba 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -7,23 +7,6 @@ *----------------------------------------------------------------------* CLASS ltcl_file_status DEFINITION DEFERRED. CLASS ltcl_file_status2 DEFINITION DEFERRED. -CLASS lcl_skip_objects DEFINITION. - PUBLIC SECTION. - METHODS: - skip_sadl_generated_objects - IMPORTING - it_results TYPE lif_defs=>ty_results_tt - io_log TYPE REF TO lcl_log - RETURNING - VALUE(rt_results) TYPE lif_defs=>ty_results_tt. - PRIVATE SECTION. - METHODS: - has_sadl_superclass - IMPORTING - is_class TYPE lif_defs=>ty_result - RETURNING - VALUE(rv_return) TYPE abap_bool. -ENDCLASS. CLASS lcl_file_status DEFINITION FINAL FRIENDS ltcl_file_status ltcl_file_status2. @@ -162,8 +145,7 @@ CLASS lcl_file_status IMPLEMENTATION. METHOD status. DATA: lv_index LIKE sy-tabix, - lo_dot_abapgit TYPE REF TO lcl_dot_abapgit, - lo_skip_objects TYPE REF TO lcl_skip_objects. + lo_dot_abapgit TYPE REF TO lcl_dot_abapgit. FIELD-SYMBOLS LIKE LINE OF rt_results. @@ -187,12 +169,6 @@ CLASS lcl_file_status IMPLEMENTATION. ENDIF. ENDLOOP. - - CREATE OBJECT lo_skip_objects. - rt_results = lo_skip_objects->skip_sadl_generated_objects( - it_results = rt_results - io_log = io_log ). - run_checks( io_log = io_log it_results = rt_results diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 8d5147f8a..bccf9b731 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -636,7 +636,8 @@ CLASS lcl_repo IMPLEMENTATION. lt_tadir = lcl_tadir=>read( iv_package = get_package( ) iv_ignore_subpackages = ignore_subpackages( ) - io_dot = get_dot_abapgit( ) ). + io_dot = get_dot_abapgit( ) + io_log = io_log ). lt_filter = it_filter. lv_filter_exist = boolc( lines( lt_filter ) > 0 ). diff --git a/src/zabapgit_skip_objects.prog.abap b/src/zabapgit_skip_objects.prog.abap index e4afe3d84..ccc528e30 100644 --- a/src/zabapgit_skip_objects.prog.abap +++ b/src/zabapgit_skip_objects.prog.abap @@ -4,30 +4,31 @@ CLASS lcl_skip_objects IMPLEMENTATION. METHOD skip_sadl_generated_objects. - DATA: ls_ddls_class_result LIKE LINE OF rt_results, - lo_sadl_class TYPE REF TO lif_object, - ls_item TYPE lif_defs=>ty_item, - ls_result LIKE LINE OF rt_results, - lt_lines_to_delete TYPE lif_defs=>ty_results_tt. + DATA: ls_tadir_class LIKE LINE OF rt_tadir, + lo_sadl_class TYPE REF TO lif_object, + ls_item TYPE lif_defs=>ty_tadir, + ls_tadir LIKE LINE OF rt_tadir, + lt_lines_to_delete TYPE lif_defs=>ty_tadir_tt. - rt_results = it_results. - LOOP AT it_results INTO ls_result WHERE obj_type = 'DDLS'. - LOOP AT it_results INTO ls_ddls_class_result - WHERE obj_type = 'CLAS' AND obj_name CS ls_result-obj_name. + rt_tadir = it_tadir. + LOOP AT it_tadir INTO ls_tadir WHERE object = 'DDLS'. + LOOP AT rt_tadir INTO ls_tadir_class + WHERE object = 'CLAS' AND obj_name CS ls_tadir-obj_name. - IF has_sadl_superclass( ls_ddls_class_result ). - APPEND ls_ddls_class_result TO lt_lines_to_delete. + IF has_sadl_superclass( ls_tadir_class ). + APPEND ls_tadir_class TO lt_lines_to_delete. ENDIF. ENDLOOP. ENDLOOP. - SORT lt_lines_to_delete BY filename. DELETE ADJACENT DUPLICATES FROM lt_lines_to_delete. - LOOP AT lt_lines_to_delete INTO ls_ddls_class_result. - DELETE TABLE rt_results FROM ls_ddls_class_result. - io_log->add( - iv_msg = |{ ls_ddls_class_result-filename } skipped: generated by SADL| - iv_type = 'W' ). + LOOP AT lt_lines_to_delete INTO ls_tadir_class. + DELETE TABLE rt_tadir FROM ls_tadir_class. + IF io_log IS BOUND. + io_log->add( + iv_msg = |{ ls_tadir_class-obj_name } skipped: generated by SADL| + iv_type = 'W' ). + ENDIF. ENDLOOP. ENDMETHOD. @@ -36,7 +37,7 @@ CLASS lcl_skip_objects IMPLEMENTATION. lv_class_name TYPE seoclsname, lv_superclass TYPE seoclsname. - lo_oo_functions = lcl_oo_factory=>make( is_class-obj_type ). + lo_oo_functions = lcl_oo_factory=>make( is_class-object ). lv_class_name = is_class-obj_name. lv_superclass = lo_oo_functions->read_superclass( lv_class_name ). IF lv_superclass = 'CL_SADL_GTK_EXPOSURE_MPC'. diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index b3170da02..52dd4118b 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -7,6 +7,24 @@ *----------------------------------------------------------------------* * *----------------------------------------------------------------------* +CLASS lcl_skip_objects DEFINITION. + PUBLIC SECTION. + METHODS: + skip_sadl_generated_objects + IMPORTING + it_tadir TYPE lif_defs=>ty_tadir_tt + io_log TYPE REF TO lcl_log OPTIONAL + RETURNING + VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt. + PRIVATE SECTION. + METHODS: + has_sadl_superclass + IMPORTING + is_class TYPE lif_defs=>ty_tadir + RETURNING + VALUE(rv_return) TYPE abap_bool. +ENDCLASS. + CLASS lcl_tadir DEFINITION FINAL. PUBLIC SECTION. @@ -15,6 +33,7 @@ CLASS lcl_tadir DEFINITION FINAL. IMPORTING iv_package TYPE tadir-devclass iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false io_dot TYPE REF TO lcl_dot_abapgit OPTIONAL + io_log TYPE REF TO lcl_log OPTIONAL RETURNING VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt RAISING lcx_exception, read_single @@ -50,6 +69,7 @@ CLASS lcl_tadir DEFINITION FINAL. iv_top TYPE tadir-devclass io_dot TYPE REF TO lcl_dot_abapgit iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false + io_log TYPE REF TO lcl_log OPTIONAL RETURNING VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt RAISING lcx_exception. @@ -188,7 +208,8 @@ CLASS lcl_tadir IMPLEMENTATION. rt_tadir = build( iv_package = iv_package iv_top = iv_package io_dot = io_dot - iv_ignore_subpackages = iv_ignore_subpackages ). + iv_ignore_subpackages = iv_ignore_subpackages + io_log = io_log ). rt_tadir = check_exists( rt_tadir ). @@ -196,9 +217,10 @@ CLASS lcl_tadir IMPLEMENTATION. METHOD build. - DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt, - lt_tdevc TYPE STANDARD TABLE OF tdevc, - lv_path TYPE string. + DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt, + lt_tdevc TYPE STANDARD TABLE OF tdevc, + lv_path TYPE string, + lo_skip_objects TYPE REF TO lcl_skip_objects. FIELD-SYMBOLS: LIKE LINE OF lt_tdevc, LIKE LINE OF rt_tadir. @@ -216,6 +238,12 @@ CLASS lcl_tadir IMPLEMENTATION. AND delflag = abap_false ORDER BY PRIMARY KEY. "#EC CI_GENBUFF "#EC CI_SUBRC + CREATE OBJECT lo_skip_objects. + rt_tadir = lo_skip_objects->skip_sadl_generated_objects( + it_tadir = rt_tadir + io_log = io_log + ). + IF NOT io_dot IS INITIAL. lv_path = lcl_folder_logic=>package_to_path( iv_top = iv_top @@ -243,7 +271,8 @@ CLASS lcl_tadir IMPLEMENTATION. LOOP AT lt_tdevc ASSIGNING . lt_tadir = build( iv_package = -devclass iv_top = iv_top - io_dot = io_dot ). + io_dot = io_dot + io_log = io_log ). APPEND LINES OF lt_tadir TO rt_tadir. ENDLOOP. From 2acee1b836ea1c4feac6c62929f63d2e66885cd4 Mon Sep 17 00:00:00 2001 From: eduardocopat Date: Thu, 28 Sep 2017 21:45:20 +0200 Subject: [PATCH 3/3] lint --- src/zabapgit_tadir.prog.abap | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index 52dd4118b..4877431a3 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -241,8 +241,7 @@ CLASS lcl_tadir IMPLEMENTATION. CREATE OBJECT lo_skip_objects. rt_tadir = lo_skip_objects->skip_sadl_generated_objects( it_tadir = rt_tadir - io_log = io_log - ). + io_log = io_log ). IF NOT io_dot IS INITIAL. lv_path = lcl_folder_logic=>package_to_path(