diff --git a/zabapgit.abap b/zabapgit.abap index c19b95ee0..52f06abeb 100644 --- a/zabapgit.abap +++ b/zabapgit.abap @@ -3,7 +3,7 @@ REPORT zabapgit. * See https://github.com/larshp/abapGit/ CONSTANTS: gc_xml_version TYPE string VALUE 'v0.2-alpha', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v0.66'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v0.67'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) @@ -91,6 +91,8 @@ TYPES: BEGIN OF st_result, obj_name TYPE tadir-obj_name, match TYPE sap_bool, filename TYPE string, + package TYPE devclass, + path TYPE string, END OF st_result. TYPES: tt_results TYPE STANDARD TABLE OF st_result WITH DEFAULT KEY. @@ -1558,6 +1560,120 @@ CLASS lcl_diff IMPLEMENTATION. ENDCLASS. "lcl_diff IMPLEMENTATION +CLASS lcl_package DEFINITION FINAL. + + PUBLIC SECTION. + CLASS-METHODS: + check IMPORTING it_results TYPE tt_results + iv_top TYPE devclass + RETURNING VALUE(rv_errors) TYPE string, + create. + + PRIVATE SECTION. + CLASS-METHODS: + class_to_path + IMPORTING + iv_top TYPE devclass + iv_package TYPE devclass + RETURNING + VALUE(rv_path) TYPE string. + +ENDCLASS. + +CLASS lcl_package IMPLEMENTATION. + + METHOD class_to_path. + + DATA: lv_len TYPE i, + lv_path TYPE string, + lv_parentcl TYPE tdevc-parentcl. + + + IF iv_top = iv_package. + rv_path = '/'. + ELSE. + SELECT SINGLE parentcl FROM tdevc INTO lv_parentcl + WHERE devclass = iv_package. + ASSERT sy-subrc = 0. + + IF lv_parentcl IS INITIAL. + rv_path = 'error'. + ELSE. + lv_len = strlen( lv_parentcl ). + lv_path = iv_package+lv_len. + IF lv_path(1) = '_'. + lv_path = lv_path+1. + ENDIF. + TRANSLATE lv_path TO LOWER CASE. + CONCATENATE lv_path '/' INTO lv_path. + + rv_path = class_to_path( iv_top = iv_top + iv_package = lv_parentcl ). + + CONCATENATE rv_path lv_path INTO rv_path. + + ENDIF. + + ENDIF. + + ENDMETHOD. + + METHOD check. + + DATA: lv_path TYPE string. + + FIELD-SYMBOLS: LIKE LINE OF it_results, + LIKE LINE OF it_results. + + +* check files for one object is in the same folder + LOOP AT it_results ASSIGNING + WHERE NOT obj_type IS INITIAL. + LOOP AT it_results ASSIGNING + WHERE obj_type = -obj_type + AND obj_name = -obj_name + AND path <> -path. + CONCATENATE rv_errors 'Files for object' + -obj_type -obj_name + 'are not placed in the same folder
' + INTO rv_errors SEPARATED BY space. "#EC NOTEXT + EXIT. + ENDLOOP. + ENDLOOP. + +* 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 = class_to_path( iv_top = iv_top + iv_package = -package ). + IF lv_path <> -path. + CONCATENATE rv_errors 'Package and path does not match for object,' + -obj_type -obj_name '
' + INTO rv_errors SEPARATED BY space. "#EC NOTEXT + ENDIF. + ENDLOOP. + +* check for multiple files with same filename + LOOP AT it_results ASSIGNING + WHERE NOT filename IS INITIAL. + LOOP AT it_results ASSIGNING + WHERE filename = -filename + AND path <> -path. + CONCATENATE rv_errors 'Multiple files with same filename,' + -filename '
' + INTO rv_errors SEPARATED BY space. "#EC NOTEXT + EXIT. + ENDLOOP. + ENDLOOP. + + ENDMETHOD. + + METHOD create. +* todo, see https://github.com/larshp/abapGit/issues/5 + ENDMETHOD. + +ENDCLASS. + *----------------------------------------------------------------------* * CLASS lcl_objects_common DEFINITION *----------------------------------------------------------------------* @@ -4395,9 +4511,7 @@ CLASS lcl_object_wdyn IMPLEMENTATION. ls_obj_new TYPE svrs2_versionable_object, ls_obj_old TYPE svrs2_versionable_object, lv_found TYPE abap_bool, - li_view TYPE REF TO if_wdy_md_abstract_view, - lt_psmodilog TYPE TABLE OF smodilog, - lt_psmodisrc TYPE TABLE OF smodisrc. + li_view TYPE REF TO if_wdy_md_abstract_view. FIELD-SYMBOLS: LIKE LINE OF ls_obj_old-wdyv-defin. @@ -4884,12 +4998,11 @@ CLASS lcl_object_wdca IMPLEMENTATION. METHOD read. - DATA: lo_cfg TYPE REF TO cl_wdr_cfg_persistence_appl, - ls_key TYPE wdy_config_key, - lt_messages TYPE cts_messages, - lv_exists TYPE abap_bool, - lx_err TYPE REF TO cx_wd_configuration, - lv_name TYPE wdy_md_object_name. + DATA: lo_cfg TYPE REF TO cl_wdr_cfg_persistence_appl, + ls_key TYPE wdy_config_key, + lv_exists TYPE abap_bool, + lx_err TYPE REF TO cx_wd_configuration, + lv_name TYPE wdy_md_object_name. ls_key = is_item-obj_name. @@ -8773,11 +8886,13 @@ CLASS lcl_objects IMPLEMENTATION. lv_type TYPE string, ls_item TYPE st_item, lt_tadir TYPE tt_tadir, + ls_tadir TYPE tadir, lv_ext TYPE string. - FIELD-SYMBOLS: LIKE LINE OF it_files, - LIKE LINE OF lt_tadir, - LIKE LINE OF lt_files. + FIELD-SYMBOLS: LIKE LINE OF it_files, + LIKE LINE OF lt_tadir, + LIKE LINE OF rt_results, + LIKE LINE OF lt_files. LOOP AT it_files ASSIGNING . @@ -8846,7 +8961,25 @@ CLASS lcl_objects IMPLEMENTATION. ENDLOOP. ENDIF. - SORT rt_results BY obj_type ASCENDING obj_name ASCENDING filename ASCENDING. +* add path information for files + LOOP AT it_files ASSIGNING . + READ TABLE rt_results ASSIGNING WITH KEY filename = -filename. + IF sy-subrc = 0. + -path = -path. + ENDIF. + ENDLOOP. + +* add package information + LOOP AT rt_results ASSIGNING WHERE NOT obj_type IS INITIAL. + ls_tadir = lcl_tadir=>read_single( iv_object = -obj_type + iv_obj_name = -obj_name ). + -package = ls_tadir-devclass. + ENDLOOP. + + SORT rt_results BY + obj_type ASCENDING + obj_name ASCENDING + filename ASCENDING. DELETE ADJACENT DUPLICATES FROM rt_results COMPARING obj_type obj_name filename. @@ -12567,6 +12700,7 @@ CLASS lcl_gui IMPLEMENTATION. lv_branch TYPE t_sha1, lv_link TYPE string, lv_status TYPE string, + lv_package TYPE string, lv_object TYPE string, lv_index LIKE sy-tabix, lv_span TYPE i, @@ -12621,7 +12755,8 @@ CLASS lcl_gui IMPLEMENTATION. rv_html = rv_html && '' && gc_newline && '' && gc_newline && '' && gc_newline && - '' && gc_newline && + '' && gc_newline && '' && gc_newline && '' && gc_newline && '' && gc_newline. @@ -12663,8 +12798,9 @@ CLASS lcl_gui IMPLEMENTATION. IF -obj_type IS INITIAL. lv_object = '' && - gc_newline. + '" valign="top"> '. + + lv_package = lv_object. ELSE. lv_object = ''. ENDIF. ELSE. CLEAR lv_object. + CLEAR lv_package. ENDIF. rv_html = rv_html && '' && gc_newline && - lv_object && - '' && gc_newline && + lv_object && gc_newline && + lv_package && gc_newline && + '' && gc_newline && '' && gc_newline && '' && gc_newline && '' && gc_newline. @@ -12701,7 +12845,9 @@ CLASS lcl_gui IMPLEMENTATION. && struct_encode( is_repo_persi ) && '">pull'. ENDCASE. - rv_html = rv_html && '


'. + lv_status = lcl_package=>check( it_results = lt_results + iv_top = is_repo_persi-package ). + rv_html = rv_html && lv_status && '


'. ENDMETHOD. "render_repo
Local object' && gc_newline && + 'PackagePathRemote file
 ' && + -package && + '
' && -match && '' && -path && '' && -filename && '' && lv_link && '