From f3541de70a243c3ea0342f058e7b26da83860e7f Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 14 Feb 2017 12:17:51 +0000 Subject: [PATCH 1/8] more refactoring * propagate dot abapgit varialbe to folder logic class * change lcl_sap_package to instance class --- src/zabapgit_file_status.prog.abap | 11 +++--- src/zabapgit_folder_logic.prog.abap | 44 ++++++++++----------- src/zabapgit_objects_impl.prog.abap | 8 ++-- src/zabapgit_sap_package.prog.abap | 60 ++++++++++++++++++++--------- src/zabapgit_transport.prog.abap | 4 +- src/zabapgit_unit_test.prog.abap | 10 ++--- 6 files changed, 78 insertions(+), 59 deletions(-) diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index 306af38c8..73017fac1 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -31,7 +31,7 @@ CLASS lcl_file_status DEFINITION FINAL run_checks IMPORTING io_log TYPE REF TO lcl_log it_results TYPE ty_results_tt - iv_start TYPE string + io_dot TYPE REF TO lcl_dot_abapgit iv_top TYPE devclass, build_existing IMPORTING is_local TYPE ty_file_item @@ -109,9 +109,9 @@ CLASS lcl_file_status IMPLEMENTATION. " Check that objects are created in package corresponding to folder LOOP AT it_results ASSIGNING WHERE NOT package IS INITIAL AND NOT path IS INITIAL. - lv_path = lcl_folder_logic=>class_to_path( iv_top = iv_top - iv_start = iv_start - iv_package = -package ). + lv_path = lcl_folder_logic=>package_to_path( iv_top = iv_top + io_dot = io_dot + iv_package = -package ). IF lv_path <> -path. io_log->add( iv_msgv1 = 'Package and path does not match for object,' iv_msgv2 = -obj_type @@ -151,7 +151,6 @@ CLASS lcl_file_status IMPLEMENTATION. rt_results = calculate_status( - iv_devclass = io_repo->get_package( ) it_local = io_repo->get_files_local( io_log = io_log ) it_remote = io_repo->get_files_remote( ) @@ -173,7 +172,7 @@ CLASS lcl_file_status IMPLEMENTATION. run_checks( io_log = io_log it_results = rt_results - iv_start = lo_dot_abapgit->get_starting_folder( ) + io_dot = lo_dot_abapgit iv_top = io_repo->get_package( ) ). ENDMETHOD. "status diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 78c5d653d..28e9862e3 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -6,21 +6,22 @@ CLASS lcl_folder_logic DEFINITION. PUBLIC SECTION. CLASS-METHODS: - class_to_path + package_to_path IMPORTING iv_top TYPE devclass - iv_start TYPE string + io_dot TYPE REF TO lcl_dot_abapgit iv_package TYPE devclass RETURNING - VALUE(rv_path) TYPE string. - - CLASS-METHODS + VALUE(rv_path) TYPE string, path_to_package - IMPORTING iv_top TYPE devclass - iv_start TYPE string - iv_path TYPE string - RETURNING VALUE(rv_package) TYPE devclass - RAISING lcx_exception. + IMPORTING + iv_top TYPE devclass + io_dot TYPE REF TO lcl_dot_abapgit + iv_path TYPE string + RETURNING + VALUE(rv_package) TYPE devclass + RAISING + lcx_exception. ENDCLASS. @@ -34,9 +35,9 @@ CLASS lcl_folder_logic IMPLEMENTATION. lv_path TYPE string. - lv_length = strlen( iv_start ). - lv_path = iv_path+lv_length. - lv_parent = iv_top. + lv_length = strlen( io_dot->get_starting_folder( ) ). + lv_path = iv_path+lv_length. + lv_parent = iv_top. rv_package = iv_top. WHILE lv_path CA '/'. @@ -45,9 +46,8 @@ CLASS lcl_folder_logic IMPLEMENTATION. CONCATENATE rv_package '_' lv_new INTO rv_package. TRANSLATE rv_package TO UPPER CASE. - IF lcl_sap_package=>exists( rv_package ) = abap_false. - lcl_sap_package=>create_child( iv_parent = lv_parent - iv_child = rv_package ). + IF lcl_sap_package=>get( rv_package )->exists( ) = abap_false. + lcl_sap_package=>get( rv_package )->create_child( rv_package ). ENDIF. lv_parent = rv_package. @@ -55,7 +55,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. ENDMETHOD. - METHOD class_to_path. + METHOD package_to_path. DATA: lv_len TYPE i, lv_path TYPE string, @@ -63,7 +63,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. IF iv_top = iv_package. - rv_path = iv_start. + rv_path = io_dot->get_starting_folder( ). ELSE. SELECT SINGLE parentcl FROM tdevc INTO lv_parentcl WHERE devclass = iv_package. "#EC CI_SUBRC "#EC CI_GENBUFF @@ -83,14 +83,12 @@ CLASS lcl_folder_logic IMPLEMENTATION. TRANSLATE lv_path TO LOWER CASE. CONCATENATE lv_path '/' INTO lv_path. - rv_path = class_to_path( iv_top = iv_top - iv_start = iv_start - iv_package = lv_parentcl ). + rv_path = package_to_path( iv_top = iv_top + io_dot = io_dot + iv_package = lv_parentcl ). CONCATENATE rv_path lv_path INTO rv_path. - ENDIF. - ENDIF. ENDMETHOD. "class_to_path diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 751fafa78..1802dc474 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -85,7 +85,7 @@ CLASS lcl_objects IMPLEMENTATION. lv_tree TYPE dirtree-tname. - lt_packages = lcl_sap_package=>list_subpackages( iv_package ). + lt_packages = lcl_sap_package=>get( iv_package )->list_subpackages( ). APPEND iv_package TO lt_packages. LOOP AT lt_packages INTO lv_package. @@ -596,9 +596,9 @@ CLASS lcl_objects IMPLEMENTATION. REPLACE ALL OCCURRENCES OF '#' IN ls_item-obj_name WITH '/'. lv_package = lcl_folder_logic=>path_to_package( - iv_top = io_repo->get_package( ) - iv_start = io_repo->get_dot_abapgit( )->get_starting_folder( ) - iv_path = -path ). + iv_top = io_repo->get_package( ) + io_dot = io_repo->get_dot_abapgit( ) + iv_path = -path ). lv_cancel = warning_package( is_item = ls_item iv_package = lv_package ). diff --git a/src/zabapgit_sap_package.prog.abap b/src/zabapgit_sap_package.prog.abap index 0aa4622ae..82f60939f 100644 --- a/src/zabapgit_sap_package.prog.abap +++ b/src/zabapgit_sap_package.prog.abap @@ -7,31 +7,43 @@ *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -CLASS lcl_sap_package DEFINITION FINAL. +CLASS lcl_sap_package DEFINITION FINAL CREATE PRIVATE. PUBLIC SECTION. TYPES: ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY. CLASS-METHODS: - list_subpackages IMPORTING iv_package TYPE devclass - RETURNING VALUE(rt_list) TYPE ty_devclass_tt, - list_superpackages IMPORTING iv_package TYPE devclass - RETURNING VALUE(rt_list) TYPE ty_devclass_tt, - create_local - IMPORTING iv_package TYPE devclass - RAISING lcx_exception, + get + IMPORTING iv_package TYPE devclass + RETURNING VALUE(ro_package) TYPE REF TO lcl_sap_package, create IMPORTING is_package TYPE scompkdtln RETURNING VALUE(ri_package) TYPE REF TO if_package RAISING lcx_exception, + create_local + IMPORTING iv_package TYPE devclass + RAISING lcx_exception. + + METHODS: + constructor + IMPORTING iv_package TYPE devclass. + + METHODS: + list_subpackages + RETURNING VALUE(rt_list) TYPE ty_devclass_tt, + list_superpackages + RETURNING VALUE(rt_list) TYPE ty_devclass_tt, +* todo, read parent? create_child - IMPORTING iv_parent TYPE devclass - iv_child TYPE devclass + IMPORTING iv_child TYPE devclass RAISING lcx_exception, +* todo, exception instead? exists - IMPORTING iv_package TYPE devclass RETURNING VALUE(rv_bool) TYPE abap_bool. + PRIVATE SECTION. + DATA: mv_package TYPE devclass. + ENDCLASS. "lcl_package DEFINITION *----------------------------------------------------------------------* @@ -41,11 +53,21 @@ ENDCLASS. "lcl_package DEFINITION *----------------------------------------------------------------------* CLASS lcl_sap_package IMPLEMENTATION. + METHOD get. + CREATE OBJECT ro_package TYPE lcl_sap_package + EXPORTING + iv_package = iv_package. + ENDMETHOD. + + METHOD constructor. + mv_package = iv_package. + ENDMETHOD. + METHOD exists. cl_package_factory=>load_package( EXPORTING - i_package_name = iv_package + i_package_name = mv_package EXCEPTIONS object_not_existing = 1 unexpected_error = 2 @@ -64,7 +86,7 @@ CLASS lcl_sap_package IMPLEMENTATION. cl_package_factory=>load_package( EXPORTING - i_package_name = iv_parent + i_package_name = mv_package IMPORTING e_package = li_parent EXCEPTIONS @@ -80,7 +102,7 @@ CLASS lcl_sap_package IMPLEMENTATION. ls_child-devclass = iv_child. ls_child-dlvunit = li_parent->software_component. ls_child-ctext = iv_child. - ls_child-parentcl = iv_parent. + ls_child-parentcl = mv_package. ls_child-pdevclass = li_parent->transport_layer. ls_child-as4user = sy-uname. @@ -180,14 +202,14 @@ CLASS lcl_sap_package IMPLEMENTATION. lv_devclass LIKE LINE OF rt_list. - APPEND iv_package TO rt_list. + APPEND mv_package TO rt_list. SELECT SINGLE parentcl INTO lv_parent - FROM tdevc WHERE devclass = iv_package. "#EC CI_GENBUFF + FROM tdevc WHERE devclass = mv_package. "#EC CI_GENBUFF IF NOT lv_parent IS INITIAL. APPEND lv_parent TO rt_list. - lt_list = list_superpackages( lv_devclass ). + lt_list = get( lv_devclass )->list_superpackages( ). APPEND LINES OF lt_list TO rt_list. ENDIF. @@ -200,11 +222,11 @@ CLASS lcl_sap_package IMPLEMENTATION. SELECT devclass INTO TABLE rt_list - FROM tdevc WHERE parentcl = iv_package. "#EC CI_GENBUFF + FROM tdevc WHERE parentcl = mv_package. "#EC CI_GENBUFF * note the recursion, since packages are added to the list LOOP AT rt_list INTO lv_devclass. - lt_list = list_subpackages( lv_devclass ). + lt_list = get( lv_devclass )->list_subpackages( ). APPEND LINES OF lt_list TO rt_list. ENDLOOP. diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index d654b1d53..6f2eaabc9 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -79,10 +79,10 @@ CLASS lcl_transport IMPLEMENTATION. READ TABLE it_tadir INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. - lt_super = lcl_sap_package=>list_superpackages( -devclass ). + lt_super = lcl_sap_package=>get( -devclass )->list_superpackages( ). LOOP AT it_tadir ASSIGNING . - lt_obj = lcl_sap_package=>list_superpackages( -devclass ). + lt_obj = lcl_sap_package=>get( -devclass )->list_superpackages( ). * filter out possibilities from lt_super LOOP AT lt_super INTO lv_super. diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 0f762c6a2..0d90dd967 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -1986,7 +1986,7 @@ CLASS ltcl_file_status2 IMPLEMENTATION. lcl_file_status=>run_checks( io_log = lo_log it_results = lt_results - iv_start = '/' + io_dot = lcl_dot_abapgit=>build_default( sy-langu ) iv_top = '$Z$' ). assert_equals( act = lo_log->count( ) exp = 0 ). @@ -2004,7 +2004,7 @@ CLASS ltcl_file_status2 IMPLEMENTATION. lcl_file_status=>run_checks( io_log = lo_log it_results = lt_results - iv_start = '/' + io_dot = lcl_dot_abapgit=>build_default( sy-langu ) iv_top = '$Z$' ). " This one is not pure - incorrect path also triggers path vs package check @@ -2024,7 +2024,7 @@ CLASS ltcl_file_status2 IMPLEMENTATION. lcl_file_status=>run_checks( io_log = lo_log it_results = lt_results - iv_start = '/' + io_dot = lcl_dot_abapgit=>build_default( sy-langu ) iv_top = '$Z$' ). assert_equals( act = lo_log->count( ) exp = 1 ). @@ -2043,7 +2043,7 @@ CLASS ltcl_file_status2 IMPLEMENTATION. lcl_file_status=>run_checks( io_log = lo_log it_results = lt_results - iv_start = '/' + io_dot = lcl_dot_abapgit=>build_default( sy-langu ) iv_top = '$Z$' ). assert_equals( act = lo_log->count( ) exp = 1 ). @@ -2061,7 +2061,7 @@ CLASS ltcl_file_status2 IMPLEMENTATION. lcl_file_status=>run_checks( io_log = lo_log it_results = lt_results - iv_start = '/' + io_dot = lcl_dot_abapgit=>build_default( sy-langu ) iv_top = '$Z$' ). assert_equals( act = lo_log->count( ) From 9794b598c7674032789a6007cffe6ff965bc367b Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 14 Feb 2017 12:53:20 +0000 Subject: [PATCH 2/8] start some dependency injection --- src/zabapgit_folder_logic.prog.abap | 4 +- src/zabapgit_objects_impl.prog.abap | 2 +- src/zabapgit_sap_package.prog.abap | 89 +++++++++++++++++++---------- src/zabapgit_transport.prog.abap | 4 +- 4 files changed, 64 insertions(+), 35 deletions(-) diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 28e9862e3..0e7e1dd5f 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -65,9 +65,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. IF iv_top = iv_package. rv_path = io_dot->get_starting_folder( ). ELSE. - SELECT SINGLE parentcl FROM tdevc INTO lv_parentcl - WHERE devclass = iv_package. "#EC CI_SUBRC "#EC CI_GENBUFF - ASSERT sy-subrc = 0. + lv_parentcl = lcl_sap_package=>get( iv_package )->read_parent( ). IF lv_parentcl IS INITIAL. rv_path = 'error' ##no_text. diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 1802dc474..ced014a35 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -80,7 +80,7 @@ CLASS lcl_objects IMPLEMENTATION. METHOD update_package_tree. - DATA: lt_packages TYPE lcl_sap_package=>ty_devclass_tt, + DATA: lt_packages TYPE lif_sap_package=>ty_devclass_tt, lv_package LIKE LINE OF lt_packages, lv_tree TYPE dirtree-tname. diff --git a/src/zabapgit_sap_package.prog.abap b/src/zabapgit_sap_package.prog.abap index 82f60939f..8b138bd0f 100644 --- a/src/zabapgit_sap_package.prog.abap +++ b/src/zabapgit_sap_package.prog.abap @@ -2,6 +2,25 @@ *& Include ZABAPGIT_SAP_PACKAGE *&---------------------------------------------------------------------* +INTERFACE lif_sap_package. + + TYPES: ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY. + + METHODS: + list_subpackages + RETURNING VALUE(rt_list) TYPE ty_devclass_tt, + list_superpackages + RETURNING VALUE(rt_list) TYPE ty_devclass_tt, + read_parent + RETURNING VALUE(rv_parentcl) TYPE tdevc-parentcl, + create_child + IMPORTING iv_child TYPE devclass + RAISING lcx_exception, + exists + RETURNING VALUE(rv_bool) TYPE abap_bool. + +ENDINTERFACE. + *----------------------------------------------------------------------* * CLASS lcl_package DEFINITION *----------------------------------------------------------------------* @@ -10,15 +29,12 @@ CLASS lcl_sap_package DEFINITION FINAL CREATE PRIVATE. PUBLIC SECTION. - TYPES: ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY. - CLASS-METHODS: get - IMPORTING iv_package TYPE devclass - RETURNING VALUE(ro_package) TYPE REF TO lcl_sap_package, + IMPORTING iv_package TYPE devclass + RETURNING VALUE(ri_package) TYPE REF TO lif_sap_package, create - IMPORTING is_package TYPE scompkdtln - RETURNING VALUE(ri_package) TYPE REF TO if_package + IMPORTING is_package TYPE scompkdtln RAISING lcx_exception, create_local IMPORTING iv_package TYPE devclass @@ -26,22 +42,18 @@ CLASS lcl_sap_package DEFINITION FINAL CREATE PRIVATE. METHODS: constructor - IMPORTING iv_package TYPE devclass. + IMPORTING iv_package TYPE devclass. - METHODS: - list_subpackages - RETURNING VALUE(rt_list) TYPE ty_devclass_tt, - list_superpackages - RETURNING VALUE(rt_list) TYPE ty_devclass_tt, -* todo, read parent? - create_child - IMPORTING iv_child TYPE devclass - RAISING lcx_exception, -* todo, exception instead? - exists - RETURNING VALUE(rv_bool) TYPE abap_bool. + INTERFACES: lif_sap_package. PRIVATE SECTION. + TYPES: BEGIN OF ty_injected, + package TYPE devclass, + object TYPE REF TO lif_sap_package, + END OF ty_injected. + + CLASS-DATA: gt_injected TYPE STANDARD TABLE OF ty_injected. + DATA: mv_package TYPE devclass. ENDCLASS. "lcl_package DEFINITION @@ -54,16 +66,26 @@ ENDCLASS. "lcl_package DEFINITION CLASS lcl_sap_package IMPLEMENTATION. METHOD get. - CREATE OBJECT ro_package TYPE lcl_sap_package - EXPORTING - iv_package = iv_package. + + FIELD-SYMBOLS: LIKE LINE OF gt_injected. + + + READ TABLE gt_injected ASSIGNING WITH KEY package = iv_package. + IF sy-subrc = 0. + ri_package = -object. + ELSE. + CREATE OBJECT ri_package TYPE lcl_sap_package + EXPORTING + iv_package = iv_package. + ENDIF. + ENDMETHOD. METHOD constructor. mv_package = iv_package. ENDMETHOD. - METHOD exists. + METHOD lif_sap_package~exists. cl_package_factory=>load_package( EXPORTING @@ -78,7 +100,7 @@ CLASS lcl_sap_package IMPLEMENTATION. ENDMETHOD. - METHOD create_child. + METHOD lif_sap_package~create_child. DATA: li_parent TYPE REF TO if_package, ls_child TYPE scompkdtln. @@ -113,6 +135,7 @@ CLASS lcl_sap_package IMPLEMENTATION. METHOD create. DATA: lv_err TYPE string, + li_package TYPE REF TO if_package, ls_package LIKE is_package. @@ -144,7 +167,7 @@ CLASS lcl_sap_package IMPLEMENTATION. i_reuse_deleted_object = abap_true * i_suppress_dialog = abap_true " does not exist in 730 IMPORTING - e_package = ri_package + e_package = li_package CHANGING c_package_data = ls_package EXCEPTIONS @@ -174,7 +197,7 @@ CLASS lcl_sap_package IMPLEMENTATION. lcx_exception=>raise( |Package { is_package-devclass } could not be created| ). ENDIF. - ri_package->save( + li_package->save( * EXPORTING * i_suppress_dialog = abap_true " Controls whether popups can be transmitted EXCEPTIONS @@ -191,11 +214,19 @@ CLASS lcl_sap_package IMPLEMENTATION. lcx_exception=>raise( lv_err ). ENDIF. - ri_package->set_changeable( abap_false ). + li_package->set_changeable( abap_false ). ENDMETHOD. - METHOD list_superpackages. + METHOD lif_sap_package~read_parent. + + SELECT SINGLE parentcl FROM tdevc INTO rv_parentcl + WHERE devclass = mv_package. "#EC CI_SUBRC "#EC CI_GENBUFF + ASSERT sy-subrc = 0. + + ENDMETHOD. + + METHOD lif_sap_package~list_superpackages. DATA: lt_list LIKE rt_list, lv_parent TYPE tdevc-parentcl, @@ -215,7 +246,7 @@ CLASS lcl_sap_package IMPLEMENTATION. ENDMETHOD. - METHOD list_subpackages. + METHOD lif_sap_package~list_subpackages. DATA: lt_list LIKE rt_list, lv_devclass LIKE LINE OF rt_list. diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index 6f2eaabc9..4d7bc6b6e 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -69,8 +69,8 @@ CLASS lcl_transport IMPLEMENTATION. METHOD find_top_package. * assumption: all objects in transport share a common super package - DATA: lt_obj TYPE lcl_sap_package=>ty_devclass_tt, - lt_super TYPE lcl_sap_package=>ty_devclass_tt, + DATA: lt_obj TYPE lif_sap_package=>ty_devclass_tt, + lt_super TYPE lif_sap_package=>ty_devclass_tt, lv_super LIKE LINE OF lt_super, lv_index TYPE i. From a3fd8d8ece9c2509f2092cd0d6a9fe872aae8f3b Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 14 Feb 2017 17:38:53 +0000 Subject: [PATCH 3/8] unit tests for existing logic --- src/zabapgit_dot_abapgit.prog.abap | 20 +++--- src/zabapgit_folder_logic.prog.abap | 104 ++++++++++++++++++++++++++++ src/zabapgit_sap_package.prog.abap | 11 +-- 3 files changed, 121 insertions(+), 14 deletions(-) diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index 71684faf5..f75b74d37 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -4,14 +4,14 @@ CLASS ltcl_dot_abapgit DEFINITION DEFERRED. -CONSTANTS: BEGIN OF c_folder_logic, - prefix TYPE string VALUE 'PREFIX', - full TYPE string VALUE 'FULL', - END OF c_folder_logic. - CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit. PUBLIC SECTION. + CONSTANTS: BEGIN OF c_folder_logic, + prefix TYPE string VALUE 'PREFIX', + full TYPE string VALUE 'FULL', + END OF c_folder_logic. + CLASS-METHODS: build_default IMPORTING iv_master_language TYPE spras @@ -39,8 +39,8 @@ CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit. RETURNING VALUE(rv_path) TYPE string, get_folder_logic RETURNING VALUE(rv_logic) TYPE string, -* set_starting_folder -* IMPORTING iv_path TYPE string, + set_starting_folder + IMPORTING iv_path TYPE string, get_master_language RETURNING VALUE(rv_language) TYPE spras, * set_master_language @@ -220,9 +220,9 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. rv_logic = ms_data-folder_logic. ENDMETHOD. -* METHOD set_starting_folder. -* ms_data-starting_folder = iv_path. -* ENDMETHOD. + METHOD set_starting_folder. + ms_data-starting_folder = iv_path. + ENDMETHOD. METHOD get_master_language. rv_language = ms_data-master_language. diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 0e7e1dd5f..a1a5557a9 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -92,3 +92,107 @@ CLASS lcl_folder_logic IMPLEMENTATION. ENDMETHOD. "class_to_path ENDCLASS. + +CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. + + PUBLIC SECTION. + INTERFACES: lif_sap_package. + + PRIVATE SECTION. + CONSTANTS: lc_top TYPE devclass VALUE '$TOP', + lc_src TYPE string VALUE '/src/'. + + METHODS: + setup, + teardown, + test_prefix + IMPORTING + iv_logic type string + iv_package TYPE devclass + iv_path TYPE string + RAISING lcx_exception, + prefix1 FOR TESTING RAISING lcx_exception, + prefix2 FOR TESTING RAISING lcx_exception. + +ENDCLASS. "ltcl_convert DEFINITION + +CLASS ltcl_folder_logic IMPLEMENTATION. + + METHOD lif_sap_package~list_subpackages. + ENDMETHOD. + + METHOD lif_sap_package~list_superpackages. + ENDMETHOD. + + METHOD lif_sap_package~read_parent. + rv_parentcl = '$TOP'. + ENDMETHOD. + + METHOD lif_sap_package~create_child. + ENDMETHOD. + + METHOD lif_sap_package~exists. + rv_bool = abap_true. + ENDMETHOD. + + METHOD setup. + FIELD-SYMBOLS: LIKE LINE OF lcl_sap_package=>gt_injected. + + CLEAR lcl_sap_package=>gt_injected. + + APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + -package = '$TOP'. + -object = me. + + APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + -package = '$TOP_FOO'. + -object = me. + ENDMETHOD. + + METHOD teardown. + CLEAR lcl_sap_package=>gt_injected. + ENDMETHOD. + + METHOD prefix1. + test_prefix( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = lc_top + iv_path = lc_src ). + ENDMETHOD. + + METHOD prefix2. + test_prefix( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = '$TOP_FOO' + iv_path = '/src/foo/' ). + ENDMETHOD. + + METHOD test_prefix. + + DATA: lv_path TYPE string, + lv_package TYPE devclass, + lo_dot TYPE REF TO lcl_dot_abapgit. + + + lo_dot = lcl_dot_abapgit=>build_default( sy-langu ). + lo_dot->set_starting_folder( lc_src ). + + lv_package = lcl_folder_logic=>path_to_package( + iv_top = lc_top + io_dot = lo_dot + iv_path = iv_path ). + + cl_abap_unit_assert=>assert_equals( + act = lv_package + exp = iv_package ). + + lv_path = lcl_folder_logic=>package_to_path( + iv_top = lc_top + io_dot = lo_dot + iv_package = iv_package ). + + cl_abap_unit_assert=>assert_equals( + act = lv_path + exp = iv_path ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zabapgit_sap_package.prog.abap b/src/zabapgit_sap_package.prog.abap index 8b138bd0f..78d987071 100644 --- a/src/zabapgit_sap_package.prog.abap +++ b/src/zabapgit_sap_package.prog.abap @@ -21,12 +21,15 @@ INTERFACE lif_sap_package. ENDINTERFACE. +CLASS ltcl_folder_logic DEFINITION DEFERRED. + *----------------------------------------------------------------------* * CLASS lcl_package DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -CLASS lcl_sap_package DEFINITION FINAL CREATE PRIVATE. +CLASS lcl_sap_package DEFINITION FINAL CREATE PRIVATE + FRIENDS ltcl_folder_logic. PUBLIC SECTION. CLASS-METHODS: @@ -69,9 +72,9 @@ CLASS lcl_sap_package IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF gt_injected. - - READ TABLE gt_injected ASSIGNING WITH KEY package = iv_package. - IF sy-subrc = 0. + IF lines( gt_injected ) > 0. + READ TABLE gt_injected ASSIGNING WITH KEY package = iv_package. + ASSERT sy-subrc = 0. " unit test should be in control ri_package = -object. ELSE. CREATE OBJECT ri_package TYPE lcl_sap_package From 3c31e929080d4d86cef1f9658c22a788dd9b9bf8 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 14 Feb 2017 18:00:04 +0000 Subject: [PATCH 4/8] ready for some testing --- src/zabapgit_dot_abapgit.prog.abap | 6 +++ src/zabapgit_folder_logic.prog.abap | 66 +++++++++++++++++++++++------ 2 files changed, 59 insertions(+), 13 deletions(-) diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index f75b74d37..72147df9f 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -39,6 +39,8 @@ CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit. RETURNING VALUE(rv_path) TYPE string, get_folder_logic RETURNING VALUE(rv_logic) TYPE string, + set_folder_logic + IMPORTING iv_logic TYPE string, set_starting_folder IMPORTING iv_path TYPE string, get_master_language @@ -220,6 +222,10 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. rv_logic = ms_data-folder_logic. ENDMETHOD. + METHOD set_folder_logic. + ms_data-folder_logic = iv_logic. + ENDMETHOD. + METHOD set_starting_folder. ms_data-starting_folder = iv_path. ENDMETHOD. diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index a1a5557a9..3ff5e0579 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -43,7 +43,18 @@ CLASS lcl_folder_logic IMPLEMENTATION. WHILE lv_path CA '/'. SPLIT lv_path AT '/' INTO lv_new lv_path. - CONCATENATE rv_package '_' lv_new INTO rv_package. + CASE io_dot->get_folder_logic( ). + WHEN lcl_dot_abapgit=>c_folder_logic-full. + rv_package = lv_new. + IF iv_top(1) = '$'. + CONCATENATE '$' rv_package INTO rv_package. + ENDIF. + WHEN lcl_dot_abapgit=>c_folder_logic-prefix. + CONCATENATE rv_package '_' lv_new INTO rv_package. + WHEN OTHERS. + ASSERT 0 = 1. + ENDCASE. + TRANSLATE rv_package TO UPPER CASE. IF lcl_sap_package=>get( rv_package )->exists( ) = abap_false. @@ -53,6 +64,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. lv_parent = rv_package. ENDWHILE. + ENDMETHOD. METHOD package_to_path. @@ -70,14 +82,27 @@ CLASS lcl_folder_logic IMPLEMENTATION. IF lv_parentcl IS INITIAL. rv_path = 'error' ##no_text. ELSE. - lv_len = strlen( lv_parentcl ). + CASE io_dot->get_folder_logic( ). + WHEN lcl_dot_abapgit=>c_folder_logic-full. + lv_len = 0. + IF iv_package(1) = '$'. + lv_len = 1. + ENDIF. + WHEN lcl_dot_abapgit=>c_folder_logic-prefix. + lv_len = strlen( lv_parentcl ). + WHEN OTHERS. + ASSERT 0 = 1. + ENDCASE. + lv_path = iv_package+lv_len. IF strlen( lv_path ) = 0. RETURN. " prevent dump ENDIF. + IF lv_path(1) = '_'. lv_path = lv_path+1. ENDIF. + TRANSLATE lv_path TO LOWER CASE. CONCATENATE lv_path '/' INTO lv_path. @@ -105,14 +130,16 @@ CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHOR METHODS: setup, teardown, - test_prefix + test IMPORTING - iv_logic type string + iv_logic TYPE string iv_package TYPE devclass - iv_path TYPE string + iv_path TYPE string RAISING lcx_exception, prefix1 FOR TESTING RAISING lcx_exception, - prefix2 FOR TESTING RAISING lcx_exception. + prefix2 FOR TESTING RAISING lcx_exception, + full1 FOR TESTING RAISING lcx_exception, + full2 FOR TESTING RAISING lcx_exception. ENDCLASS. "ltcl_convert DEFINITION @@ -154,18 +181,30 @@ CLASS ltcl_folder_logic IMPLEMENTATION. ENDMETHOD. METHOD prefix1. - test_prefix( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix - iv_package = lc_top - iv_path = lc_src ). + test( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = lc_top + iv_path = lc_src ). ENDMETHOD. METHOD prefix2. - test_prefix( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix - iv_package = '$TOP_FOO' - iv_path = '/src/foo/' ). + test( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = '$TOP_FOO' + iv_path = '/src/foo/' ). ENDMETHOD. - METHOD test_prefix. + METHOD full1. + test( iv_logic = lcl_dot_abapgit=>c_folder_logic-full + iv_package = lc_top + iv_path = lc_src ). + ENDMETHOD. + + METHOD full2. + test( iv_logic = lcl_dot_abapgit=>c_folder_logic-full + iv_package = '$TOP_FOO' + iv_path = '/src/top_foo/' ). + ENDMETHOD. + + METHOD test. DATA: lv_path TYPE string, lv_package TYPE devclass, @@ -174,6 +213,7 @@ CLASS ltcl_folder_logic IMPLEMENTATION. lo_dot = lcl_dot_abapgit=>build_default( sy-langu ). lo_dot->set_starting_folder( lc_src ). + lo_dot->set_folder_logic( iv_logic ). lv_package = lcl_folder_logic=>path_to_package( iv_top = lc_top From 3dbc04ecaf381e5eb27d14e3091ddfbb1dcbb1a8 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 14 Feb 2017 18:51:13 +0000 Subject: [PATCH 5/8] more, almost there --- src/zabapgit_file_status.prog.abap | 3 +- src/zabapgit_folder_logic.prog.abap | 12 ++++-- src/zabapgit_repo_browser_util.prog.abap | 8 +++- src/zabapgit_repo_impl.prog.abap | 5 ++- src/zabapgit_tadir.prog.abap | 55 +++++++++++++++--------- src/zabapgit_unit_test.prog.abap | 4 +- 6 files changed, 56 insertions(+), 31 deletions(-) diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index 73017fac1..ee105864a 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -32,7 +32,8 @@ CLASS lcl_file_status DEFINITION FINAL IMPORTING io_log TYPE REF TO lcl_log it_results TYPE ty_results_tt io_dot TYPE REF TO lcl_dot_abapgit - iv_top TYPE devclass, + iv_top TYPE devclass + RAISING lcx_exception, build_existing IMPORTING is_local TYPE ty_file_item is_remote TYPE ty_file diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 3ff5e0579..90aca3eea 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -12,7 +12,8 @@ CLASS lcl_folder_logic DEFINITION. io_dot TYPE REF TO lcl_dot_abapgit iv_package TYPE devclass RETURNING - VALUE(rv_path) TYPE string, + VALUE(rv_path) TYPE string + RAISING lcx_exception, path_to_package IMPORTING iv_top TYPE devclass @@ -71,6 +72,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. DATA: lv_len TYPE i, lv_path TYPE string, + lv_message TYPE string, lv_parentcl TYPE tdevc-parentcl. @@ -80,7 +82,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. lv_parentcl = lcl_sap_package=>get( iv_package )->read_parent( ). IF lv_parentcl IS INITIAL. - rv_path = 'error' ##no_text. + lcx_exception=>raise( 'error, expected parent package' ). ELSE. CASE io_dot->get_folder_logic( ). WHEN lcl_dot_abapgit=>c_folder_logic-full. @@ -96,7 +98,11 @@ CLASS lcl_folder_logic IMPLEMENTATION. lv_path = iv_package+lv_len. IF strlen( lv_path ) = 0. - RETURN. " prevent dump +* if abapGit project is installed in package ZZZ, all subpackages should be named +* ZZZ_something. This will define the folder name in the zip file to be "something", +* similarily with online projects + lv_message = 'Unexpected package naming(' && iv_package && ')' ##no_text. + lcx_exception=>raise( lv_message ). ENDIF. IF lv_path(1) = '_'. diff --git a/src/zabapgit_repo_browser_util.prog.abap b/src/zabapgit_repo_browser_util.prog.abap index 7cab7d7e7..1be3130f0 100644 --- a/src/zabapgit_repo_browser_util.prog.abap +++ b/src/zabapgit_repo_browser_util.prog.abap @@ -181,12 +181,16 @@ CLASS lcl_repo_content_browser IMPLEMENTATION. LIKE LINE OF lt_tadir. - lt_tadir = lcl_tadir=>read( mo_repo->get_package( ) ). +* todo, offline projects should have an dot abapgit too + lt_tadir = lcl_tadir=>read( + iv_package = mo_repo->get_package( ) + io_dot = lcl_dot_abapgit=>build_default( sy-langu ) ). + LOOP AT lt_tadir ASSIGNING . APPEND INITIAL LINE TO rt_repo_items ASSIGNING . -obj_type = -object. -obj_name = -obj_name. - -path = '/' && -path. " Add root anchor + -path = -path. -sortkey = c_sortkey-default. " Default sort key ENDLOOP. diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 292f18924..8b0421318 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -537,7 +537,8 @@ CLASS lcl_repo IMPLEMENTATION. lt_cache = mt_local. lt_tadir = lcl_tadir=>read( iv_package = get_package( ) - iv_ignore_subpackages = ignore_subpackages( ) ). + iv_ignore_subpackages = ignore_subpackages( ) + io_dot = get_dot_abapgit( ) ). lt_filter = it_filter. lv_filter_exist = boolc( lines( lt_filter ) > 0 ) . @@ -582,7 +583,7 @@ CLASS lcl_repo IMPLEMENTATION. iv_language = get_master_language( ) io_log = io_log ). LOOP AT lt_files ASSIGNING . - -path = mo_dot_abapgit->get_starting_folder( ) && -path. + -path = -path. -sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = -data ). APPEND INITIAL LINE TO rt_files ASSIGNING . diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index 10dd69ff8..7e9f11776 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -14,6 +14,7 @@ CLASS lcl_tadir DEFINITION FINAL. read IMPORTING iv_package TYPE tadir-devclass iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false + io_dot TYPE REF TO lcl_dot_abapgit OPTIONAL RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt RAISING lcx_exception, read_single @@ -35,7 +36,8 @@ CLASS lcl_tadir DEFINITION FINAL. RAISING lcx_exception, build IMPORTING iv_package TYPE tadir-devclass - iv_path TYPE string + iv_top TYPE tadir-devclass + io_dot TYPE REF TO lcl_dot_abapgit iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt RAISING lcx_exception. @@ -112,8 +114,10 @@ CLASS lcl_tadir IMPLEMENTATION. METHOD read. * start recursion +* hmm, some problems here, should TADIR also build path? rt_tadir = build( iv_package = iv_package - iv_path = '' + iv_top = iv_package + io_dot = io_dot iv_ignore_subpackages = iv_ignore_subpackages ). rt_tadir = check_exists( rt_tadir ). @@ -145,15 +149,23 @@ CLASS lcl_tadir IMPLEMENTATION. AND delflag = abap_false ORDER BY PRIMARY KEY. "#EC CI_GENBUFF "#EC CI_SUBRC + IF NOT io_dot IS INITIAL. + lv_path = lcl_folder_logic=>package_to_path( + iv_top = iv_top + io_dot = io_dot + iv_package = iv_package ). + ENDIF. + LOOP AT rt_tadir ASSIGNING . lv_index = sy-tabix. - -path = iv_path. + -path = lv_path. CASE -object. WHEN 'SICF'. -obj_name = -obj_name(15). WHEN 'INTF'. +* todo, move this logic to INTF exists method SELECT SINGLE category FROM seoclassdf INTO lv_category WHERE clsname = -obj_name AND ( version = '1' @@ -172,26 +184,27 @@ CLASS lcl_tadir IMPLEMENTATION. ENDIF. LOOP AT lt_tdevc ASSIGNING . - lv_len = strlen( iv_package ). - IF -devclass(lv_len) <> iv_package. -* if abapGit project is installed in package ZZZ, all subpackages should be named -* ZZZ_something. This will define the folder name in the zip file to be "something", -* similarily with online projects - lv_message = 'Unexpected package naming(' && - -devclass && ')' ##no_text. - MESSAGE lv_message TYPE 'I'. - CONTINUE. - ENDIF. - - lv_path = -devclass+lv_len. - IF lv_path(1) = '_'. - lv_path = lv_path+1. - ENDIF. - TRANSLATE lv_path TO LOWER CASE. - CONCATENATE iv_path lv_path '/' INTO lv_path. +* lv_len = strlen( iv_package ). +* IF -devclass(lv_len) <> iv_package. +** if abapGit project is installed in package ZZZ, all subpackages should be named +** ZZZ_something. This will define the folder name in the zip file to be "something", +** similarily with online projects +* lv_message = 'Unexpected package naming(' && +* -devclass && ')' ##no_text. +* MESSAGE lv_message TYPE 'I'. +* CONTINUE. +* ENDIF. +* +* lv_path = -devclass+lv_len. +* IF lv_path(1) = '_'. +* lv_path = lv_path+1. +* ENDIF. +* TRANSLATE lv_path TO LOWER CASE. +* CONCATENATE iv_path lv_path '/' INTO lv_path. lt_tadir = build( iv_package = -devclass - iv_path = lv_path ). + iv_top = iv_top + io_dot = io_dot ). APPEND LINES OF lt_tadir TO rt_tadir. ENDLOOP. diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 0d90dd967..3c8ae49ae 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -1961,7 +1961,7 @@ CLASS ltcl_file_status2 DEFINITION INHERITING FROM cl_aunit_assert. PUBLIC SECTION. - METHODS check FOR TESTING. + METHODS check FOR TESTING RAISING lcx_exception. ENDCLASS. "ltcl_sap_package @@ -2242,4 +2242,4 @@ CLASS ltcl_persistence_settings IMPLEMENTATION. ENDCLASS. -INCLUDE ZABAPGIT_UNIT_TEST_CLAS_INTF. +INCLUDE zabapgit_unit_test_clas_intf. From 0d2e66e837d18daafee235f5395353dfecfd02a8 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 14 Feb 2017 19:04:37 +0000 Subject: [PATCH 6/8] final adjustments, #521 --- src/zabapgit_folder_logic.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 90aca3eea..5813d61c8 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -59,7 +59,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. TRANSLATE rv_package TO UPPER CASE. IF lcl_sap_package=>get( rv_package )->exists( ) = abap_false. - lcl_sap_package=>get( rv_package )->create_child( rv_package ). + lcl_sap_package=>get( lv_parent )->create_child( rv_package ). ENDIF. lv_parent = rv_package. From 9dae60ebadd6bdefb594347f3e95253ac0bccf12 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 15 Feb 2017 16:23:14 +0000 Subject: [PATCH 7/8] PREFIX: error handling fixed --- src/zabapgit_folder_logic.prog.abap | 38 ++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 5813d61c8..5f05fbe4f 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -92,17 +92,21 @@ CLASS lcl_folder_logic IMPLEMENTATION. ENDIF. WHEN lcl_dot_abapgit=>c_folder_logic-prefix. lv_len = strlen( lv_parentcl ). + + IF iv_package(lv_len) <> lv_parentcl. +* if abapGit project is installed in package ZZZ, all subpackages should be named +* ZZZ_something. This will define the folder name in the zip file to be "something", +* similarily with online projects. Alternatively change to FULL folder logic + lv_message = 'PREFIX: Unexpected package naming(' && iv_package && ')' ##no_text. + lcx_exception=>raise( lv_message ). + ENDIF. WHEN OTHERS. ASSERT 0 = 1. ENDCASE. lv_path = iv_package+lv_len. IF strlen( lv_path ) = 0. -* if abapGit project is installed in package ZZZ, all subpackages should be named -* ZZZ_something. This will define the folder name in the zip file to be "something", -* similarily with online projects - lv_message = 'Unexpected package naming(' && iv_package && ')' ##no_text. - lcx_exception=>raise( lv_message ). + lcx_exception=>raise( 'Folder logic: length = 0' ). ENDIF. IF lv_path(1) = '_'. @@ -144,6 +148,7 @@ CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHOR RAISING lcx_exception, prefix1 FOR TESTING RAISING lcx_exception, prefix2 FOR TESTING RAISING lcx_exception, + prefix_error1 FOR TESTING RAISING lcx_exception, full1 FOR TESTING RAISING lcx_exception, full2 FOR TESTING RAISING lcx_exception. @@ -180,6 +185,10 @@ CLASS ltcl_folder_logic IMPLEMENTATION. APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . -package = '$TOP_FOO'. -object = me. + + APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + -package = '$FOOBAR'. + -object = me. ENDMETHOD. METHOD teardown. @@ -198,6 +207,17 @@ CLASS ltcl_folder_logic IMPLEMENTATION. iv_path = '/src/foo/' ). ENDMETHOD. + METHOD prefix_error1. +* PREFIX mode, top package is $TOP, so all subpackages should be named $TOP_something + TRY. + test( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = '$FOOBAR' + iv_path = '/src/' ). + cl_abap_unit_assert=>fail( 'Error expected' ). + CATCH lcx_exception. + ENDTRY. + ENDMETHOD. + METHOD full1. test( iv_logic = lcl_dot_abapgit=>c_folder_logic-full iv_package = lc_top @@ -226,15 +246,15 @@ CLASS ltcl_folder_logic IMPLEMENTATION. io_dot = lo_dot iv_path = iv_path ). - cl_abap_unit_assert=>assert_equals( - act = lv_package - exp = iv_package ). - lv_path = lcl_folder_logic=>package_to_path( iv_top = lc_top io_dot = lo_dot iv_package = iv_package ). + cl_abap_unit_assert=>assert_equals( + act = lv_package + exp = iv_package ). + cl_abap_unit_assert=>assert_equals( act = lv_path exp = iv_path ). From 5a13042681138396c96b94621173f975b2c1e17c Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 16 Feb 2017 14:02:37 +0000 Subject: [PATCH 8/8] folder logic, handle namespaces --- src/zabapgit_folder_logic.prog.abap | 237 ++++++++++++++++++++++------ src/zabapgit_sap_package.prog.abap | 5 +- 2 files changed, 189 insertions(+), 53 deletions(-) diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 5f05fbe4f..68141281d 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -47,6 +47,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. CASE io_dot->get_folder_logic( ). WHEN lcl_dot_abapgit=>c_folder_logic-full. rv_package = lv_new. + TRANSLATE rv_package USING '#/'. IF iv_top(1) = '$'. CONCATENATE '$' rv_package INTO rv_package. ENDIF. @@ -113,6 +114,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. lv_path = lv_path+1. ENDIF. + TRANSLATE lv_path USING '/#'. TRANSLATE lv_path TO LOWER CASE. CONCATENATE lv_path '/' INTO lv_path. @@ -128,6 +130,55 @@ CLASS lcl_folder_logic IMPLEMENTATION. ENDCLASS. +CLASS ltcl_folder_logic_helper DEFINITION FOR TESTING FINAL. + + PUBLIC SECTION. + CLASS-METHODS: test + IMPORTING + iv_starting TYPE string + iv_top TYPE devclass + iv_logic TYPE string + iv_package TYPE devclass + iv_path TYPE string + RAISING lcx_exception. + +ENDCLASS. + +CLASS ltcl_folder_logic_helper IMPLEMENTATION. + + METHOD test. + + DATA: lv_path TYPE string, + lv_package TYPE devclass, + lo_dot TYPE REF TO lcl_dot_abapgit. + + + lo_dot = lcl_dot_abapgit=>build_default( sy-langu ). + lo_dot->set_starting_folder( iv_starting ). + lo_dot->set_folder_logic( iv_logic ). + + lv_package = lcl_folder_logic=>path_to_package( + iv_top = iv_top + io_dot = lo_dot + iv_path = iv_path ). + + lv_path = lcl_folder_logic=>package_to_path( + iv_top = iv_top + io_dot = lo_dot + iv_package = iv_package ). + + cl_abap_unit_assert=>assert_equals( + act = lv_package + exp = iv_package ). + + cl_abap_unit_assert=>assert_equals( + act = lv_path + exp = iv_path ). + + ENDMETHOD. + +ENDCLASS. + CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. PUBLIC SECTION. @@ -140,12 +191,6 @@ CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHOR METHODS: setup, teardown, - test - IMPORTING - iv_logic TYPE string - iv_package TYPE devclass - iv_path TYPE string - RAISING lcx_exception, prefix1 FOR TESTING RAISING lcx_exception, prefix2 FOR TESTING RAISING lcx_exception, prefix_error1 FOR TESTING RAISING lcx_exception, @@ -157,9 +202,11 @@ ENDCLASS. "ltcl_convert DEFINITION CLASS ltcl_folder_logic IMPLEMENTATION. METHOD lif_sap_package~list_subpackages. + RETURN. ENDMETHOD. METHOD lif_sap_package~list_superpackages. + RETURN. ENDMETHOD. METHOD lif_sap_package~read_parent. @@ -167,6 +214,7 @@ CLASS ltcl_folder_logic IMPLEMENTATION. ENDMETHOD. METHOD lif_sap_package~create_child. + RETURN. ENDMETHOD. METHOD lif_sap_package~exists. @@ -196,69 +244,154 @@ CLASS ltcl_folder_logic IMPLEMENTATION. ENDMETHOD. METHOD prefix1. - test( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix - iv_package = lc_top - iv_path = lc_src ). + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = lc_top + iv_path = lc_src ). ENDMETHOD. METHOD prefix2. - test( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix - iv_package = '$TOP_FOO' - iv_path = '/src/foo/' ). + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = '$TOP_FOO' + iv_path = '/src/foo/' ). ENDMETHOD. METHOD prefix_error1. * PREFIX mode, top package is $TOP, so all subpackages should be named $TOP_something TRY. - test( iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix - iv_package = '$FOOBAR' - iv_path = '/src/' ). + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = '$FOOBAR' + iv_path = '/src/' ). cl_abap_unit_assert=>fail( 'Error expected' ). CATCH lcx_exception. ENDTRY. ENDMETHOD. METHOD full1. - test( iv_logic = lcl_dot_abapgit=>c_folder_logic-full - iv_package = lc_top - iv_path = lc_src ). + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = lcl_dot_abapgit=>c_folder_logic-full + iv_package = lc_top + iv_path = lc_src ). ENDMETHOD. METHOD full2. - test( iv_logic = lcl_dot_abapgit=>c_folder_logic-full - iv_package = '$TOP_FOO' - iv_path = '/src/top_foo/' ). - ENDMETHOD. - - METHOD test. - - DATA: lv_path TYPE string, - lv_package TYPE devclass, - lo_dot TYPE REF TO lcl_dot_abapgit. - - - lo_dot = lcl_dot_abapgit=>build_default( sy-langu ). - lo_dot->set_starting_folder( lc_src ). - lo_dot->set_folder_logic( iv_logic ). - - lv_package = lcl_folder_logic=>path_to_package( - iv_top = lc_top - io_dot = lo_dot - iv_path = iv_path ). - - lv_path = lcl_folder_logic=>package_to_path( - iv_top = lc_top - io_dot = lo_dot - iv_package = iv_package ). - - cl_abap_unit_assert=>assert_equals( - act = lv_package - exp = iv_package ). - - cl_abap_unit_assert=>assert_equals( - act = lv_path - exp = iv_path ). - + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = lcl_dot_abapgit=>c_folder_logic-full + iv_package = '$TOP_FOO' + iv_path = '/src/top_foo/' ). + ENDMETHOD. + +ENDCLASS. + +CLASS ltcl_folder_logic_namespaces DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. + + PUBLIC SECTION. + INTERFACES: lif_sap_package. + + PRIVATE SECTION. + CONSTANTS: lc_top TYPE devclass VALUE '/TEST/TOOLS', + lc_src TYPE string VALUE '/src/'. + + METHODS: + setup, + teardown, + prefix1 FOR TESTING RAISING lcx_exception, + prefix2 FOR TESTING RAISING lcx_exception, + full1 FOR TESTING RAISING lcx_exception, + full2 FOR TESTING RAISING lcx_exception. + +ENDCLASS. "ltcl_convert DEFINITION + +CLASS ltcl_folder_logic_namespaces IMPLEMENTATION. + + METHOD lif_sap_package~list_subpackages. + RETURN. + ENDMETHOD. + + METHOD lif_sap_package~list_superpackages. + RETURN. + ENDMETHOD. + + METHOD lif_sap_package~read_parent. + rv_parentcl = lc_top. + ENDMETHOD. + + METHOD lif_sap_package~create_child. + RETURN. + ENDMETHOD. + + METHOD lif_sap_package~exists. + rv_bool = abap_true. + ENDMETHOD. + + METHOD setup. + FIELD-SYMBOLS: LIKE LINE OF lcl_sap_package=>gt_injected. + + CLEAR lcl_sap_package=>gt_injected. + + APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + -package = '/TEST/TOOLS'. + -object = me. + + APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + -package = '/TEST/T1'. + -object = me. + + APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + -package = '/TEST/TOOLS_T1'. + -object = me. + ENDMETHOD. + + METHOD teardown. + CLEAR lcl_sap_package=>gt_injected. + ENDMETHOD. + + METHOD prefix1. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = lc_top + iv_path = lc_src ). + ENDMETHOD. + + METHOD prefix2. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = lcl_dot_abapgit=>c_folder_logic-prefix + iv_package = '/TEST/TOOLS_T1' + iv_path = '/src/t1/' ). + ENDMETHOD. + + METHOD full1. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = lcl_dot_abapgit=>c_folder_logic-full + iv_package = lc_top + iv_path = lc_src ). + ENDMETHOD. + + METHOD full2. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = lcl_dot_abapgit=>c_folder_logic-full + iv_package = '/TEST/T1' + iv_path = '/src/#test#t1/' ). ENDMETHOD. ENDCLASS. diff --git a/src/zabapgit_sap_package.prog.abap b/src/zabapgit_sap_package.prog.abap index 78d987071..b5b6b4d68 100644 --- a/src/zabapgit_sap_package.prog.abap +++ b/src/zabapgit_sap_package.prog.abap @@ -22,6 +22,7 @@ INTERFACE lif_sap_package. ENDINTERFACE. CLASS ltcl_folder_logic DEFINITION DEFERRED. +CLASS ltcl_folder_logic_namespaces DEFINITION DEFERRED. *----------------------------------------------------------------------* * CLASS lcl_package DEFINITION @@ -29,7 +30,9 @@ CLASS ltcl_folder_logic DEFINITION DEFERRED. * *----------------------------------------------------------------------* CLASS lcl_sap_package DEFINITION FINAL CREATE PRIVATE - FRIENDS ltcl_folder_logic. + FRIENDS + ltcl_folder_logic + ltcl_folder_logic_namespaces. PUBLIC SECTION. CLASS-METHODS: