mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
Merge branch 'main' into hvam/web0704
This commit is contained in:
commit
69c9d2416a
|
@ -1,7 +1,6 @@
|
||||||
CLASS zcl_abapgit_code_inspector DEFINITION
|
CLASS zcl_abapgit_code_inspector DEFINITION
|
||||||
PUBLIC
|
PUBLIC
|
||||||
CREATE PROTECTED
|
CREATE PROTECTED.
|
||||||
GLOBAL FRIENDS zcl_abapgit_factory .
|
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
|
|
@ -390,10 +390,23 @@ CLASS zcl_abapgit_sap_package IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~read_description.
|
METHOD zif_abapgit_sap_package~read_description.
|
||||||
|
DATA li_package TYPE REF TO if_package.
|
||||||
|
|
||||||
SELECT SINGLE ctext FROM tdevct INTO rv_description
|
cl_package_factory=>load_package(
|
||||||
WHERE devclass = mv_package AND spras = sy-langu ##SUBRC_OK.
|
EXPORTING
|
||||||
|
i_package_name = mv_package
|
||||||
|
i_force_reload = abap_true
|
||||||
|
IMPORTING
|
||||||
|
e_package = li_package
|
||||||
|
EXCEPTIONS
|
||||||
|
object_not_existing = 1
|
||||||
|
unexpected_error = 2
|
||||||
|
intern_err = 3
|
||||||
|
no_access = 4
|
||||||
|
object_locked_and_modified = 5
|
||||||
|
OTHERS = 6 ).
|
||||||
|
|
||||||
|
rv_description = li_package->short_text.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -440,7 +440,7 @@ CLASS zcl_abapgit_gui IMPLEMENTATION.
|
||||||
FIELD-SYMBOLS <ls_asset> LIKE LINE OF lt_assets.
|
FIELD-SYMBOLS <ls_asset> LIKE LINE OF lt_assets.
|
||||||
|
|
||||||
|
|
||||||
mi_html_viewer = zcl_abapgit_ui_factory=>get_html_viewer( ).
|
mi_html_viewer = zcl_abapgit_ui_core_factory=>get_html_viewer( ).
|
||||||
|
|
||||||
IF mi_asset_man IS BOUND.
|
IF mi_asset_man IS BOUND.
|
||||||
lt_assets = mi_asset_man->get_all_assets( ).
|
lt_assets = mi_asset_man->get_all_assets( ).
|
||||||
|
|
38
src/ui/core/zcl_abapgit_ui_core_factory.clas.abap
Normal file
38
src/ui/core/zcl_abapgit_ui_core_factory.clas.abap
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
CLASS zcl_abapgit_ui_core_factory DEFINITION
|
||||||
|
PUBLIC
|
||||||
|
CREATE PRIVATE
|
||||||
|
GLOBAL FRIENDS zcl_abapgit_ui_core_injector .
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
CLASS-METHODS get_html_viewer
|
||||||
|
IMPORTING
|
||||||
|
!io_container TYPE REF TO cl_gui_container DEFAULT cl_gui_container=>screen0
|
||||||
|
!iv_disable_query_table TYPE abap_bool DEFAULT abap_true
|
||||||
|
RETURNING
|
||||||
|
VALUE(ri_viewer) TYPE REF TO zif_abapgit_html_viewer .
|
||||||
|
PROTECTED SECTION.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
CLASS-DATA gi_html_viewer TYPE REF TO zif_abapgit_html_viewer .
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CLASS zcl_abapgit_ui_core_factory IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_html_viewer.
|
||||||
|
|
||||||
|
IF gi_html_viewer IS NOT BOUND.
|
||||||
|
CREATE OBJECT gi_html_viewer TYPE zcl_abapgit_html_viewer_gui
|
||||||
|
EXPORTING
|
||||||
|
io_container = io_container
|
||||||
|
iv_disable_query_table = iv_disable_query_table.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ri_viewer = gi_html_viewer.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
16
src/ui/core/zcl_abapgit_ui_core_factory.clas.xml
Normal file
16
src/ui/core/zcl_abapgit_ui_core_factory.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_UI_CORE_FACTORY</CLSNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>abapGit - GUI Core Factory</DESCRIPT>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
25
src/ui/core/zcl_abapgit_ui_core_injector.clas.abap
Normal file
25
src/ui/core/zcl_abapgit_ui_core_injector.clas.abap
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
CLASS zcl_abapgit_ui_core_injector DEFINITION
|
||||||
|
PUBLIC
|
||||||
|
FOR TESTING
|
||||||
|
CREATE PRIVATE .
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
CLASS-METHODS set_html_viewer
|
||||||
|
IMPORTING
|
||||||
|
!ii_html_viewer TYPE REF TO zif_abapgit_html_viewer .
|
||||||
|
PROTECTED SECTION.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CLASS zcl_abapgit_ui_core_injector IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD set_html_viewer.
|
||||||
|
|
||||||
|
zcl_abapgit_ui_core_factory=>gi_html_viewer = ii_html_viewer.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
17
src/ui/core/zcl_abapgit_ui_core_injector.clas.xml
Normal file
17
src/ui/core/zcl_abapgit_ui_core_injector.clas.xml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_UI_CORE_INJECTOR</CLSNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>abapGit - GUI Core Injector</DESCRIPT>
|
||||||
|
<CATEGORY>05</CATEGORY>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
619
src/ui/flow/zcl_abapgit_flow_logic.clas.abap
Normal file
619
src/ui/flow/zcl_abapgit_flow_logic.clas.abap
Normal file
|
@ -0,0 +1,619 @@
|
||||||
|
CLASS zcl_abapgit_flow_logic DEFINITION PUBLIC.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
CLASS-METHODS get_information
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_features) TYPE zif_abapgit_gui_page_flow=>ty_features
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
CONSTANTS c_main TYPE string VALUE 'main'.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_transport,
|
||||||
|
trkorr TYPE trkorr,
|
||||||
|
title TYPE string,
|
||||||
|
object TYPE e071-object,
|
||||||
|
obj_name TYPE e071-obj_name,
|
||||||
|
devclass TYPE tadir-devclass,
|
||||||
|
END OF ty_transport.
|
||||||
|
|
||||||
|
TYPES ty_transports_tt TYPE STANDARD TABLE OF ty_transport WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
CLASS-METHODS build_repo_data
|
||||||
|
IMPORTING
|
||||||
|
io_online TYPE REF TO zif_abapgit_repo
|
||||||
|
RETURNING
|
||||||
|
VALUE(rs_data) TYPE zif_abapgit_gui_page_flow=>ty_feature-repo.
|
||||||
|
|
||||||
|
CLASS-METHODS map_files_to_objects
|
||||||
|
IMPORTING
|
||||||
|
it_files TYPE zif_abapgit_gui_page_flow=>ty_path_name_tt
|
||||||
|
io_online TYPE REF TO zcl_abapgit_repo_online
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_changed_objects) TYPE zif_abapgit_definitions=>ty_items_ts
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS find_changed_files_all
|
||||||
|
IMPORTING
|
||||||
|
io_online TYPE REF TO zcl_abapgit_repo_online
|
||||||
|
it_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
|
||||||
|
EXPORTING
|
||||||
|
et_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
||||||
|
CHANGING
|
||||||
|
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS try_matching_transports
|
||||||
|
IMPORTING
|
||||||
|
ii_repo TYPE REF TO zif_abapgit_repo
|
||||||
|
it_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
||||||
|
CHANGING
|
||||||
|
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
||||||
|
ct_transports TYPE ty_transports_tt
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS add_objects_and_files_from_tr
|
||||||
|
IMPORTING
|
||||||
|
iv_trkorr TYPE trkorr
|
||||||
|
ii_repo TYPE REF TO zif_abapgit_repo
|
||||||
|
it_transports TYPE ty_transports_tt
|
||||||
|
it_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
||||||
|
CHANGING
|
||||||
|
cs_feature TYPE zif_abapgit_gui_page_flow=>ty_feature
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS find_up_to_date
|
||||||
|
IMPORTING
|
||||||
|
iv_url TYPE string
|
||||||
|
it_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
|
||||||
|
CHANGING
|
||||||
|
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS find_prs
|
||||||
|
IMPORTING
|
||||||
|
iv_url TYPE string
|
||||||
|
CHANGING
|
||||||
|
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS add_local_status
|
||||||
|
IMPORTING
|
||||||
|
io_online TYPE REF TO zcl_abapgit_repo_online
|
||||||
|
CHANGING
|
||||||
|
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS find_open_transports
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_transports) TYPE ty_transports_tt
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS find_changed_files
|
||||||
|
IMPORTING
|
||||||
|
it_expanded1 TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
||||||
|
it_expanded2 TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_files) TYPE zif_abapgit_gui_page_flow=>ty_path_name_tt.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS zcl_abapgit_flow_logic IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD find_prs.
|
||||||
|
|
||||||
|
DATA lt_pulls TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests.
|
||||||
|
DATA ls_pull LIKE LINE OF lt_pulls.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_branch> LIKE LINE OF ct_features.
|
||||||
|
|
||||||
|
|
||||||
|
IF lines( ct_features ) = 0.
|
||||||
|
" only main branch
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_pulls = zcl_abapgit_pr_enumerator=>new( iv_url )->get_pulls( ).
|
||||||
|
|
||||||
|
LOOP AT ct_features ASSIGNING <ls_branch>.
|
||||||
|
READ TABLE lt_pulls INTO ls_pull WITH KEY head_branch = <ls_branch>-branch-display_name.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
<ls_branch>-pr-title = |{ ls_pull-title } #{ ls_pull-number }|.
|
||||||
|
<ls_branch>-pr-url = ls_pull-html_url.
|
||||||
|
<ls_branch>-pr-draft = ls_pull-draft.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD build_repo_data.
|
||||||
|
rs_data-name = io_online->get_name( ).
|
||||||
|
rs_data-key = io_online->get_key( ).
|
||||||
|
rs_data-package = io_online->get_package( ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_information.
|
||||||
|
|
||||||
|
DATA lt_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt.
|
||||||
|
DATA ls_branch LIKE LINE OF lt_branches.
|
||||||
|
DATA ls_result LIKE LINE OF rt_features.
|
||||||
|
DATA lt_favorites TYPE zif_abapgit_repo_srv=>ty_repo_list.
|
||||||
|
DATA li_favorite LIKE LINE OF lt_favorites.
|
||||||
|
DATA lo_online TYPE REF TO zcl_abapgit_repo_online.
|
||||||
|
DATA lt_features LIKE rt_features.
|
||||||
|
DATA lt_transports TYPE ty_transports_tt.
|
||||||
|
DATA lt_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_feature> LIKE LINE OF lt_features.
|
||||||
|
FIELD-SYMBOLS <ls_path_name> LIKE LINE OF <ls_feature>-changed_files.
|
||||||
|
|
||||||
|
lt_transports = find_open_transports( ).
|
||||||
|
|
||||||
|
* list branches on favorite + flow enabled + transported repos
|
||||||
|
lt_favorites = zcl_abapgit_repo_srv=>get_instance( )->list_favorites( abap_false ).
|
||||||
|
LOOP AT lt_favorites INTO li_favorite.
|
||||||
|
IF li_favorite->get_local_settings( )-flow = abap_false.
|
||||||
|
CONTINUE.
|
||||||
|
ELSEIF zcl_abapgit_factory=>get_sap_package( li_favorite->get_package( )
|
||||||
|
)->are_changes_recorded_in_tr_req( ) = abap_false.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lo_online ?= li_favorite.
|
||||||
|
|
||||||
|
lt_branches = zcl_abapgit_git_factory=>get_v2_porcelain( )->list_branches(
|
||||||
|
iv_url = lo_online->get_url( )
|
||||||
|
iv_prefix = 'refs/heads/' )->get_all( ).
|
||||||
|
|
||||||
|
CLEAR lt_features.
|
||||||
|
LOOP AT lt_branches INTO ls_branch WHERE display_name <> c_main.
|
||||||
|
ls_result-repo = build_repo_data( lo_online ).
|
||||||
|
ls_result-branch-display_name = ls_branch-display_name.
|
||||||
|
ls_result-branch-sha1 = ls_branch-sha1.
|
||||||
|
INSERT ls_result INTO TABLE lt_features.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
find_changed_files_all(
|
||||||
|
EXPORTING
|
||||||
|
io_online = lo_online
|
||||||
|
it_branches = lt_branches
|
||||||
|
IMPORTING
|
||||||
|
et_main_expanded = lt_main_expanded
|
||||||
|
CHANGING
|
||||||
|
ct_features = lt_features ).
|
||||||
|
|
||||||
|
try_matching_transports(
|
||||||
|
EXPORTING
|
||||||
|
ii_repo = li_favorite
|
||||||
|
it_main_expanded = lt_main_expanded
|
||||||
|
CHANGING
|
||||||
|
ct_transports = lt_transports
|
||||||
|
ct_features = lt_features ).
|
||||||
|
|
||||||
|
find_up_to_date(
|
||||||
|
EXPORTING
|
||||||
|
iv_url = lo_online->get_url( )
|
||||||
|
it_branches = lt_branches
|
||||||
|
CHANGING
|
||||||
|
ct_features = lt_features ).
|
||||||
|
|
||||||
|
find_prs(
|
||||||
|
EXPORTING
|
||||||
|
iv_url = lo_online->get_url( )
|
||||||
|
CHANGING
|
||||||
|
ct_features = lt_features ).
|
||||||
|
|
||||||
|
add_local_status(
|
||||||
|
EXPORTING
|
||||||
|
io_online = lo_online
|
||||||
|
CHANGING
|
||||||
|
ct_features = lt_features ).
|
||||||
|
|
||||||
|
LOOP AT lt_features ASSIGNING <ls_feature>.
|
||||||
|
<ls_feature>-full_match = abap_true.
|
||||||
|
LOOP AT <ls_feature>-changed_files ASSIGNING <ls_path_name>.
|
||||||
|
IF <ls_path_name>-remote_sha1 <> <ls_path_name>-local_sha1.
|
||||||
|
<ls_feature>-full_match = abap_false.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
INSERT LINES OF lt_features INTO TABLE rt_features.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
SORT rt_features BY full_match transport-trkorr DESCENDING.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD try_matching_transports.
|
||||||
|
|
||||||
|
DATA lt_trkorr LIKE ct_transports.
|
||||||
|
DATA ls_trkorr LIKE LINE OF lt_trkorr.
|
||||||
|
DATA ls_result LIKE LINE OF ct_features.
|
||||||
|
DATA lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt.
|
||||||
|
DATA lv_package LIKE LINE OF lt_packages.
|
||||||
|
DATA lv_found TYPE abap_bool.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_feature> LIKE LINE OF ct_features.
|
||||||
|
FIELD-SYMBOLS <ls_transport> LIKE LINE OF ct_transports.
|
||||||
|
FIELD-SYMBOLS <ls_changed> LIKE LINE OF <ls_feature>-changed_objects.
|
||||||
|
|
||||||
|
|
||||||
|
SORT ct_transports BY object obj_name.
|
||||||
|
|
||||||
|
LOOP AT ct_features ASSIGNING <ls_feature>.
|
||||||
|
LOOP AT <ls_feature>-changed_objects ASSIGNING <ls_changed>.
|
||||||
|
READ TABLE ct_transports ASSIGNING <ls_transport>
|
||||||
|
WITH KEY object = <ls_changed>-obj_type obj_name = <ls_changed>-obj_name BINARY SEARCH.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
<ls_feature>-transport-trkorr = <ls_transport>-trkorr.
|
||||||
|
<ls_feature>-transport-title = <ls_transport>-title.
|
||||||
|
|
||||||
|
add_objects_and_files_from_tr(
|
||||||
|
EXPORTING
|
||||||
|
iv_trkorr = <ls_transport>-trkorr
|
||||||
|
ii_repo = ii_repo
|
||||||
|
it_main_expanded = it_main_expanded
|
||||||
|
it_transports = ct_transports
|
||||||
|
CHANGING
|
||||||
|
cs_feature = <ls_feature> ).
|
||||||
|
|
||||||
|
DELETE ct_transports WHERE trkorr = <ls_transport>-trkorr.
|
||||||
|
EXIT.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
* unmatched transports
|
||||||
|
lt_trkorr = ct_transports.
|
||||||
|
SORT lt_trkorr BY trkorr.
|
||||||
|
DELETE ADJACENT DUPLICATES FROM lt_trkorr COMPARING trkorr.
|
||||||
|
|
||||||
|
lt_packages = zcl_abapgit_factory=>get_sap_package( ii_repo->get_package( ) )->list_subpackages( ).
|
||||||
|
INSERT ii_repo->get_package( ) INTO TABLE lt_packages.
|
||||||
|
|
||||||
|
LOOP AT lt_trkorr INTO ls_trkorr.
|
||||||
|
lv_found = abap_false.
|
||||||
|
LOOP AT lt_packages INTO lv_package.
|
||||||
|
READ TABLE ct_transports ASSIGNING <ls_transport> WITH KEY trkorr = ls_trkorr-trkorr devclass = lv_package.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
lv_found = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
IF lv_found = abap_false.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CLEAR ls_result.
|
||||||
|
ls_result-repo = build_repo_data( ii_repo ).
|
||||||
|
ls_result-transport-trkorr = <ls_transport>-trkorr.
|
||||||
|
ls_result-transport-title = <ls_transport>-title.
|
||||||
|
|
||||||
|
add_objects_and_files_from_tr(
|
||||||
|
EXPORTING
|
||||||
|
iv_trkorr = ls_trkorr-trkorr
|
||||||
|
ii_repo = ii_repo
|
||||||
|
it_main_expanded = it_main_expanded
|
||||||
|
it_transports = ct_transports
|
||||||
|
CHANGING
|
||||||
|
cs_feature = ls_result ).
|
||||||
|
|
||||||
|
INSERT ls_result INTO TABLE ct_features.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD add_objects_and_files_from_tr.
|
||||||
|
|
||||||
|
DATA ls_changed LIKE LINE OF cs_feature-changed_objects.
|
||||||
|
DATA lo_filter TYPE REF TO lcl_filter.
|
||||||
|
DATA lt_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||||
|
DATA lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt.
|
||||||
|
DATA ls_changed_file LIKE LINE OF cs_feature-changed_files.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_transport> LIKE LINE OF it_transports.
|
||||||
|
FIELD-SYMBOLS <ls_local> LIKE LINE OF lt_local.
|
||||||
|
FIELD-SYMBOLS <ls_filter> LIKE LINE OF lt_filter.
|
||||||
|
FIELD-SYMBOLS <ls_main_expanded> LIKE LINE OF it_main_expanded.
|
||||||
|
|
||||||
|
|
||||||
|
LOOP AT it_transports ASSIGNING <ls_transport> WHERE trkorr = iv_trkorr.
|
||||||
|
ls_changed-obj_type = <ls_transport>-object.
|
||||||
|
ls_changed-obj_name = <ls_transport>-obj_name.
|
||||||
|
INSERT ls_changed INTO TABLE cs_feature-changed_objects.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO lt_filter ASSIGNING <ls_filter>.
|
||||||
|
<ls_filter>-object = <ls_transport>-object.
|
||||||
|
<ls_filter>-obj_name = <ls_transport>-obj_name.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_filter EXPORTING it_filter = lt_filter.
|
||||||
|
lt_local = ii_repo->get_files_local_filtered( lo_filter ).
|
||||||
|
LOOP AT lt_local ASSIGNING <ls_local> WHERE file-filename <> zif_abapgit_definitions=>c_dot_abapgit.
|
||||||
|
ls_changed_file-path = <ls_local>-file-path.
|
||||||
|
ls_changed_file-filename = <ls_local>-file-filename.
|
||||||
|
ls_changed_file-local_sha1 = <ls_local>-file-sha1.
|
||||||
|
|
||||||
|
READ TABLE it_main_expanded ASSIGNING <ls_main_expanded>
|
||||||
|
WITH TABLE KEY path_name COMPONENTS
|
||||||
|
path = ls_changed_file-path
|
||||||
|
name = ls_changed_file-filename.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ls_changed_file-remote_sha1 = <ls_main_expanded>-sha1.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
INSERT ls_changed_file INTO TABLE cs_feature-changed_files.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD find_open_transports.
|
||||||
|
|
||||||
|
DATA lt_trkorr TYPE zif_abapgit_cts_api=>ty_trkorr_tt.
|
||||||
|
DATA lv_trkorr LIKE LINE OF lt_trkorr.
|
||||||
|
DATA ls_result LIKE LINE OF rt_transports.
|
||||||
|
DATA lt_objects TYPE zif_abapgit_cts_api=>ty_transport_obj_tt.
|
||||||
|
DATA lv_obj_name TYPE tadir-obj_name.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_object> LIKE LINE OF lt_objects.
|
||||||
|
|
||||||
|
|
||||||
|
lt_trkorr = zcl_abapgit_factory=>get_cts_api( )->list_open_requests_by_user( ).
|
||||||
|
|
||||||
|
LOOP AT lt_trkorr INTO lv_trkorr.
|
||||||
|
ls_result-trkorr = lv_trkorr.
|
||||||
|
ls_result-title = zcl_abapgit_factory=>get_cts_api( )->read_description( lv_trkorr ).
|
||||||
|
|
||||||
|
lt_objects = zcl_abapgit_factory=>get_cts_api( )->list_r3tr_by_request( lv_trkorr ).
|
||||||
|
LOOP AT lt_objects ASSIGNING <ls_object>.
|
||||||
|
ls_result-object = <ls_object>-object.
|
||||||
|
ls_result-obj_name = <ls_object>-obj_name.
|
||||||
|
|
||||||
|
lv_obj_name = <ls_object>-obj_name.
|
||||||
|
ls_result-devclass = zcl_abapgit_factory=>get_tadir( )->read_single(
|
||||||
|
iv_object = ls_result-object
|
||||||
|
iv_obj_name = lv_obj_name )-devclass.
|
||||||
|
INSERT ls_result INTO TABLE rt_transports.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD find_up_to_date.
|
||||||
|
|
||||||
|
DATA ls_branch LIKE LINE OF it_branches.
|
||||||
|
DATA lt_commits TYPE zif_abapgit_definitions=>ty_objects_tt.
|
||||||
|
DATA ls_main LIKE LINE OF it_branches.
|
||||||
|
DATA lv_current TYPE zif_abapgit_git_definitions=>ty_sha1.
|
||||||
|
DATA lt_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1_tt.
|
||||||
|
DATA lo_visit TYPE REF TO lcl_sha1_stack.
|
||||||
|
DATA ls_raw TYPE zcl_abapgit_git_pack=>ty_commit.
|
||||||
|
|
||||||
|
DATA lt_main_reachable TYPE HASHED TABLE OF zif_abapgit_git_definitions=>ty_sha1 WITH UNIQUE KEY table_line.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_branch> LIKE LINE OF ct_features.
|
||||||
|
FIELD-SYMBOLS <ls_commit> LIKE LINE OF lt_commits.
|
||||||
|
|
||||||
|
|
||||||
|
IF lines( it_branches ) = 1.
|
||||||
|
" only main branch
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE it_branches INTO ls_main WITH KEY display_name = c_main.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
|
||||||
|
LOOP AT it_branches INTO ls_branch WHERE is_head = abap_false.
|
||||||
|
APPEND ls_branch-sha1 TO lt_sha1.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
lt_commits = zcl_abapgit_git_factory=>get_v2_porcelain( )->commits_last_year(
|
||||||
|
iv_url = iv_url
|
||||||
|
it_sha1 = lt_sha1 ).
|
||||||
|
|
||||||
|
CREATE OBJECT lo_visit.
|
||||||
|
lo_visit->clear( )->push( ls_main-sha1 ).
|
||||||
|
WHILE lo_visit->size( ) > 0.
|
||||||
|
lv_current = lo_visit->pop( ).
|
||||||
|
INSERT lv_current INTO TABLE lt_main_reachable.
|
||||||
|
READ TABLE lt_commits ASSIGNING <ls_commit> WITH TABLE KEY sha COMPONENTS sha1 = lv_current.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ls_raw = zcl_abapgit_git_pack=>decode_commit( <ls_commit>-data ).
|
||||||
|
lo_visit->push( ls_raw-parent ).
|
||||||
|
IF ls_raw-parent2 IS NOT INITIAL.
|
||||||
|
lo_visit->push( ls_raw-parent2 ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
ENDWHILE.
|
||||||
|
|
||||||
|
LOOP AT ct_features ASSIGNING <ls_branch>.
|
||||||
|
<ls_branch>-branch-up_to_date = abap_undefined.
|
||||||
|
lo_visit->clear( )->push( <ls_branch>-branch-sha1 ).
|
||||||
|
|
||||||
|
WHILE lo_visit->size( ) > 0.
|
||||||
|
lv_current = lo_visit->pop( ).
|
||||||
|
IF lv_current = ls_main-sha1.
|
||||||
|
<ls_branch>-branch-up_to_date = abap_true.
|
||||||
|
EXIT.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_main_reachable WITH KEY table_line = lv_current TRANSPORTING NO FIELDS.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
<ls_branch>-branch-up_to_date = abap_false.
|
||||||
|
EXIT.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_commits ASSIGNING <ls_commit> WITH TABLE KEY sha COMPONENTS sha1 = lv_current.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ls_raw = zcl_abapgit_git_pack=>decode_commit( <ls_commit>-data ).
|
||||||
|
lo_visit->push( ls_raw-parent ).
|
||||||
|
IF ls_raw-parent2 IS NOT INITIAL.
|
||||||
|
lo_visit->push( ls_raw-parent2 ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
ENDWHILE.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD find_changed_files_all.
|
||||||
|
|
||||||
|
DATA ls_branch LIKE LINE OF it_branches.
|
||||||
|
DATA lt_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1_tt.
|
||||||
|
DATA lt_objects TYPE zif_abapgit_definitions=>ty_objects_tt.
|
||||||
|
DATA lv_starting_folder TYPE string.
|
||||||
|
DATA ls_main LIKE LINE OF it_branches.
|
||||||
|
DATA lt_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_branch> LIKE LINE OF ct_features.
|
||||||
|
|
||||||
|
|
||||||
|
LOOP AT it_branches INTO ls_branch WHERE is_head = abap_false.
|
||||||
|
APPEND ls_branch-sha1 TO lt_sha1.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
lt_objects = zcl_abapgit_git_factory=>get_v2_porcelain( )->list_no_blobs_multi(
|
||||||
|
iv_url = io_online->get_url( )
|
||||||
|
it_sha1 = lt_sha1 ).
|
||||||
|
|
||||||
|
lv_starting_folder = io_online->get_dot_abapgit( )->get_starting_folder( ) && '*'.
|
||||||
|
|
||||||
|
READ TABLE it_branches INTO ls_main WITH KEY display_name = c_main.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
|
||||||
|
et_main_expanded = zcl_abapgit_git_porcelain=>full_tree(
|
||||||
|
it_objects = lt_objects
|
||||||
|
iv_parent = ls_main-sha1 ).
|
||||||
|
DELETE et_main_expanded WHERE path NP lv_starting_folder.
|
||||||
|
|
||||||
|
LOOP AT ct_features ASSIGNING <ls_branch> WHERE branch-display_name <> c_main.
|
||||||
|
lt_expanded = zcl_abapgit_git_porcelain=>full_tree(
|
||||||
|
it_objects = lt_objects
|
||||||
|
iv_parent = <ls_branch>-branch-sha1 ).
|
||||||
|
DELETE lt_expanded WHERE path NP lv_starting_folder.
|
||||||
|
|
||||||
|
<ls_branch>-changed_files = find_changed_files(
|
||||||
|
it_expanded1 = lt_expanded
|
||||||
|
it_expanded2 = et_main_expanded ).
|
||||||
|
|
||||||
|
<ls_branch>-changed_objects = map_files_to_objects(
|
||||||
|
io_online = io_online
|
||||||
|
it_files = <ls_branch>-changed_files ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD add_local_status.
|
||||||
|
|
||||||
|
DATA lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt.
|
||||||
|
DATA lo_filter TYPE REF TO lcl_filter.
|
||||||
|
DATA lt_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_branch> LIKE LINE OF ct_features.
|
||||||
|
FIELD-SYMBOLS <ls_local> LIKE LINE OF lt_local.
|
||||||
|
FIELD-SYMBOLS <ls_changed_file> TYPE zif_abapgit_gui_page_flow=>ty_path_name.
|
||||||
|
FIELD-SYMBOLS <ls_filter> LIKE LINE OF lt_filter.
|
||||||
|
FIELD-SYMBOLS <ls_object> LIKE LINE OF <ls_branch>-changed_objects.
|
||||||
|
|
||||||
|
|
||||||
|
LOOP AT ct_features ASSIGNING <ls_branch>.
|
||||||
|
LOOP AT <ls_branch>-changed_objects ASSIGNING <ls_object>.
|
||||||
|
APPEND INITIAL LINE TO lt_filter ASSIGNING <ls_filter>.
|
||||||
|
<ls_filter>-object = <ls_object>-obj_type.
|
||||||
|
<ls_filter>-obj_name = <ls_object>-obj_name.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDLOOP.
|
||||||
|
SORT lt_filter BY object obj_name.
|
||||||
|
DELETE ADJACENT DUPLICATES FROM lt_filter COMPARING object obj_name.
|
||||||
|
|
||||||
|
IF lines( lt_filter ) = 0.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_filter EXPORTING it_filter = lt_filter.
|
||||||
|
lt_local = io_online->get_files_local_filtered( lo_filter ).
|
||||||
|
|
||||||
|
LOOP AT ct_features ASSIGNING <ls_branch>.
|
||||||
|
LOOP AT <ls_branch>-changed_files ASSIGNING <ls_changed_file>.
|
||||||
|
READ TABLE lt_local ASSIGNING <ls_local>
|
||||||
|
WITH KEY file-filename = <ls_changed_file>-filename
|
||||||
|
file-path = <ls_changed_file>-path.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
<ls_changed_file>-local_sha1 = <ls_local>-file-sha1.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD map_files_to_objects.
|
||||||
|
|
||||||
|
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_file> LIKE LINE OF it_files.
|
||||||
|
|
||||||
|
LOOP AT it_files ASSIGNING <ls_file>.
|
||||||
|
zcl_abapgit_filename_logic=>file_to_object(
|
||||||
|
EXPORTING
|
||||||
|
iv_filename = <ls_file>-filename
|
||||||
|
iv_path = <ls_file>-path
|
||||||
|
iv_devclass = io_online->get_package( )
|
||||||
|
io_dot = io_online->get_dot_abapgit( )
|
||||||
|
IMPORTING
|
||||||
|
es_item = ls_item ).
|
||||||
|
INSERT ls_item INTO TABLE rt_changed_objects.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD find_changed_files.
|
||||||
|
* don't care if its added or removed or changed, just remove identical
|
||||||
|
* also list identical moved files
|
||||||
|
|
||||||
|
DATA ls_path_name LIKE LINE OF rt_files.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_expanded1> LIKE LINE OF it_expanded1.
|
||||||
|
FIELD-SYMBOLS <ls_expanded2> LIKE LINE OF it_expanded1.
|
||||||
|
|
||||||
|
LOOP AT it_expanded1 ASSIGNING <ls_expanded1>.
|
||||||
|
READ TABLE it_expanded2 ASSIGNING <ls_expanded2>
|
||||||
|
WITH TABLE KEY path_name COMPONENTS
|
||||||
|
path = <ls_expanded1>-path
|
||||||
|
name = <ls_expanded1>-name.
|
||||||
|
IF sy-subrc = 0 AND <ls_expanded1>-sha1 = <ls_expanded2>-sha1.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
MOVE-CORRESPONDING <ls_expanded1> TO ls_path_name.
|
||||||
|
ls_path_name-filename = <ls_expanded1>-name.
|
||||||
|
ls_path_name-remote_sha1 = <ls_expanded1>-sha1.
|
||||||
|
INSERT ls_path_name INTO TABLE rt_files.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
LOOP AT it_expanded2 ASSIGNING <ls_expanded2>.
|
||||||
|
READ TABLE it_expanded1 ASSIGNING <ls_expanded1>
|
||||||
|
WITH TABLE KEY path_name COMPONENTS
|
||||||
|
path = <ls_expanded2>-path
|
||||||
|
name = <ls_expanded2>-name.
|
||||||
|
IF sy-subrc = 0 AND <ls_expanded1>-sha1 = <ls_expanded2>-sha1.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
MOVE-CORRESPONDING <ls_expanded2> TO ls_path_name.
|
||||||
|
ls_path_name-filename = <ls_expanded2>-name.
|
||||||
|
ls_path_name-remote_sha1 = <ls_expanded2>-sha1.
|
||||||
|
INSERT ls_path_name INTO TABLE rt_files.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
66
src/ui/flow/zcl_abapgit_flow_logic.clas.locals_imp.abap
Normal file
66
src/ui/flow/zcl_abapgit_flow_logic.clas.locals_imp.abap
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
CLASS lcl_sha1_stack DEFINITION.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS clear
|
||||||
|
RETURNING
|
||||||
|
VALUE(ro_stack) TYPE REF TO lcl_sha1_stack.
|
||||||
|
|
||||||
|
METHODS push
|
||||||
|
IMPORTING
|
||||||
|
iv_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1.
|
||||||
|
|
||||||
|
METHODS pop
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1.
|
||||||
|
|
||||||
|
METHODS size
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_size) TYPE i.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA mt_list TYPE STANDARD TABLE OF zif_abapgit_git_definitions=>ty_sha1 WITH DEFAULT KEY.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_sha1_stack IMPLEMENTATION.
|
||||||
|
METHOD clear.
|
||||||
|
CLEAR mt_list.
|
||||||
|
ro_stack = me.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD push.
|
||||||
|
INSERT iv_sha1 INTO mt_list INDEX 1.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD pop.
|
||||||
|
READ TABLE mt_list INDEX 1 INTO rv_sha1.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
DELETE mt_list INDEX 1.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD size.
|
||||||
|
rv_size = lines( mt_list ).
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
***************************************************
|
||||||
|
|
||||||
|
CLASS lcl_filter DEFINITION FINAL.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES zif_abapgit_object_filter.
|
||||||
|
|
||||||
|
METHODS constructor
|
||||||
|
IMPORTING
|
||||||
|
it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA mt_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_filter IMPLEMENTATION.
|
||||||
|
METHOD constructor.
|
||||||
|
mt_filter = it_filter.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object_filter~get_filter.
|
||||||
|
rt_filter = mt_filter.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
16
src/ui/flow/zcl_abapgit_flow_logic.clas.xml
Normal file
16
src/ui/flow/zcl_abapgit_flow_logic.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_FLOW_LOGIC</CLSNAME>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>abapGit - Flow logic</DESCRIPT>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -303,7 +303,7 @@ CLASS zcl_abapgit_gui_page_flow IMPLEMENTATION.
|
||||||
ri_html->add( '<div class="repo-overview">' ).
|
ri_html->add( '<div class="repo-overview">' ).
|
||||||
|
|
||||||
IF mt_features IS INITIAL.
|
IF mt_features IS INITIAL.
|
||||||
mt_features = lcl_helper=>get_information( ).
|
mt_features = zcl_abapgit_flow_logic=>get_information( ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
LOOP AT mt_features INTO ls_feature.
|
LOOP AT mt_features INTO ls_feature.
|
||||||
|
|
|
@ -1,47 +1,3 @@
|
||||||
CLASS lcl_sha1_stack DEFINITION.
|
|
||||||
PUBLIC SECTION.
|
|
||||||
METHODS clear
|
|
||||||
RETURNING
|
|
||||||
VALUE(ro_stack) TYPE REF TO lcl_sha1_stack.
|
|
||||||
|
|
||||||
METHODS push
|
|
||||||
IMPORTING
|
|
||||||
iv_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1.
|
|
||||||
|
|
||||||
METHODS pop
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1.
|
|
||||||
|
|
||||||
METHODS size
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_size) TYPE i.
|
|
||||||
PRIVATE SECTION.
|
|
||||||
DATA mt_list TYPE STANDARD TABLE OF zif_abapgit_git_definitions=>ty_sha1 WITH DEFAULT KEY.
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS lcl_sha1_stack IMPLEMENTATION.
|
|
||||||
METHOD clear.
|
|
||||||
CLEAR mt_list.
|
|
||||||
ro_stack = me.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD push.
|
|
||||||
INSERT iv_sha1 INTO mt_list INDEX 1.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD pop.
|
|
||||||
READ TABLE mt_list INDEX 1 INTO rv_sha1.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
DELETE mt_list INDEX 1.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD size.
|
|
||||||
rv_size = lines( mt_list ).
|
|
||||||
ENDMETHOD.
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
***************************************************
|
|
||||||
|
|
||||||
CLASS lcl_filter DEFINITION FINAL.
|
CLASS lcl_filter DEFINITION FINAL.
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
INTERFACES zif_abapgit_object_filter.
|
INTERFACES zif_abapgit_object_filter.
|
||||||
|
@ -63,625 +19,3 @@ CLASS lcl_filter IMPLEMENTATION.
|
||||||
rt_filter = mt_filter.
|
rt_filter = mt_filter.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
***************************************************
|
|
||||||
|
|
||||||
CLASS lcl_helper DEFINITION FINAL.
|
|
||||||
PUBLIC SECTION.
|
|
||||||
CLASS-METHODS get_information
|
|
||||||
RETURNING
|
|
||||||
VALUE(rt_features) TYPE zif_abapgit_gui_page_flow=>ty_features
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
|
||||||
CONSTANTS c_main TYPE string VALUE 'main'.
|
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_transport,
|
|
||||||
trkorr TYPE trkorr,
|
|
||||||
title TYPE string,
|
|
||||||
object TYPE e071-object,
|
|
||||||
obj_name TYPE e071-obj_name,
|
|
||||||
devclass TYPE tadir-devclass,
|
|
||||||
END OF ty_transport.
|
|
||||||
|
|
||||||
TYPES ty_transports_tt TYPE STANDARD TABLE OF ty_transport WITH DEFAULT KEY.
|
|
||||||
|
|
||||||
CLASS-METHODS build_repo_data
|
|
||||||
IMPORTING
|
|
||||||
io_online TYPE REF TO zif_abapgit_repo
|
|
||||||
RETURNING
|
|
||||||
VALUE(rs_data) TYPE zif_abapgit_gui_page_flow=>ty_feature-repo.
|
|
||||||
|
|
||||||
CLASS-METHODS map_files_to_objects
|
|
||||||
IMPORTING
|
|
||||||
it_files TYPE zif_abapgit_gui_page_flow=>ty_path_name_tt
|
|
||||||
io_online TYPE REF TO zcl_abapgit_repo_online
|
|
||||||
RETURNING
|
|
||||||
VALUE(rt_changed_objects) TYPE zif_abapgit_definitions=>ty_items_ts
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS find_changed_files_all
|
|
||||||
IMPORTING
|
|
||||||
io_online TYPE REF TO zcl_abapgit_repo_online
|
|
||||||
it_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
|
|
||||||
EXPORTING
|
|
||||||
et_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
|
||||||
CHANGING
|
|
||||||
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS try_matching_transports
|
|
||||||
IMPORTING
|
|
||||||
ii_repo TYPE REF TO zif_abapgit_repo
|
|
||||||
it_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
|
||||||
CHANGING
|
|
||||||
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
|
||||||
ct_transports TYPE ty_transports_tt
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS add_objects_and_files_from_tr
|
|
||||||
IMPORTING
|
|
||||||
iv_trkorr TYPE trkorr
|
|
||||||
ii_repo TYPE REF TO zif_abapgit_repo
|
|
||||||
it_transports TYPE ty_transports_tt
|
|
||||||
it_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
|
||||||
CHANGING
|
|
||||||
cs_feature TYPE zif_abapgit_gui_page_flow=>ty_feature
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS find_up_to_date
|
|
||||||
IMPORTING
|
|
||||||
iv_url TYPE string
|
|
||||||
it_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
|
|
||||||
CHANGING
|
|
||||||
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS find_prs
|
|
||||||
IMPORTING
|
|
||||||
iv_url TYPE string
|
|
||||||
CHANGING
|
|
||||||
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS add_local_status
|
|
||||||
IMPORTING
|
|
||||||
io_online TYPE REF TO zcl_abapgit_repo_online
|
|
||||||
CHANGING
|
|
||||||
ct_features TYPE zif_abapgit_gui_page_flow=>ty_features
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS find_open_transports
|
|
||||||
RETURNING
|
|
||||||
VALUE(rt_transports) TYPE ty_transports_tt
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
CLASS-METHODS find_changed_files
|
|
||||||
IMPORTING
|
|
||||||
it_expanded1 TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
|
||||||
it_expanded2 TYPE zif_abapgit_git_definitions=>ty_expanded_tt
|
|
||||||
RETURNING
|
|
||||||
VALUE(rt_files) TYPE zif_abapgit_gui_page_flow=>ty_path_name_tt.
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS lcl_helper IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD find_prs.
|
|
||||||
|
|
||||||
DATA lt_pulls TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests.
|
|
||||||
DATA ls_pull LIKE LINE OF lt_pulls.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_branch> LIKE LINE OF ct_features.
|
|
||||||
|
|
||||||
|
|
||||||
IF lines( ct_features ) = 0.
|
|
||||||
" only main branch
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lt_pulls = zcl_abapgit_pr_enumerator=>new( iv_url )->get_pulls( ).
|
|
||||||
|
|
||||||
LOOP AT ct_features ASSIGNING <ls_branch>.
|
|
||||||
READ TABLE lt_pulls INTO ls_pull WITH KEY head_branch = <ls_branch>-branch-display_name.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
<ls_branch>-pr-title = |{ ls_pull-title } #{ ls_pull-number }|.
|
|
||||||
<ls_branch>-pr-url = ls_pull-html_url.
|
|
||||||
<ls_branch>-pr-draft = ls_pull-draft.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD build_repo_data.
|
|
||||||
rs_data-name = io_online->get_name( ).
|
|
||||||
rs_data-key = io_online->get_key( ).
|
|
||||||
rs_data-package = io_online->get_package( ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD get_information.
|
|
||||||
|
|
||||||
DATA lt_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt.
|
|
||||||
DATA ls_branch LIKE LINE OF lt_branches.
|
|
||||||
DATA ls_result LIKE LINE OF rt_features.
|
|
||||||
DATA lt_favorites TYPE zif_abapgit_repo_srv=>ty_repo_list.
|
|
||||||
DATA li_favorite LIKE LINE OF lt_favorites.
|
|
||||||
DATA lo_online TYPE REF TO zcl_abapgit_repo_online.
|
|
||||||
DATA lt_features LIKE rt_features.
|
|
||||||
DATA lt_transports TYPE ty_transports_tt.
|
|
||||||
DATA lt_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_feature> LIKE LINE OF lt_features.
|
|
||||||
FIELD-SYMBOLS <ls_path_name> LIKE LINE OF <ls_feature>-changed_files.
|
|
||||||
|
|
||||||
lt_transports = find_open_transports( ).
|
|
||||||
|
|
||||||
* list branches on favorite + flow enabled + transported repos
|
|
||||||
lt_favorites = zcl_abapgit_repo_srv=>get_instance( )->list_favorites( abap_false ).
|
|
||||||
LOOP AT lt_favorites INTO li_favorite.
|
|
||||||
IF li_favorite->get_local_settings( )-flow = abap_false.
|
|
||||||
CONTINUE.
|
|
||||||
ELSEIF zcl_abapgit_factory=>get_sap_package( li_favorite->get_package( )
|
|
||||||
)->are_changes_recorded_in_tr_req( ) = abap_false.
|
|
||||||
CONTINUE.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lo_online ?= li_favorite.
|
|
||||||
|
|
||||||
lt_branches = zcl_abapgit_git_factory=>get_v2_porcelain( )->list_branches(
|
|
||||||
iv_url = lo_online->get_url( )
|
|
||||||
iv_prefix = 'refs/heads/' )->get_all( ).
|
|
||||||
|
|
||||||
CLEAR lt_features.
|
|
||||||
LOOP AT lt_branches INTO ls_branch WHERE display_name <> c_main.
|
|
||||||
ls_result-repo = build_repo_data( lo_online ).
|
|
||||||
ls_result-branch-display_name = ls_branch-display_name.
|
|
||||||
ls_result-branch-sha1 = ls_branch-sha1.
|
|
||||||
INSERT ls_result INTO TABLE lt_features.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
find_changed_files_all(
|
|
||||||
EXPORTING
|
|
||||||
io_online = lo_online
|
|
||||||
it_branches = lt_branches
|
|
||||||
IMPORTING
|
|
||||||
et_main_expanded = lt_main_expanded
|
|
||||||
CHANGING
|
|
||||||
ct_features = lt_features ).
|
|
||||||
|
|
||||||
try_matching_transports(
|
|
||||||
EXPORTING
|
|
||||||
ii_repo = li_favorite
|
|
||||||
it_main_expanded = lt_main_expanded
|
|
||||||
CHANGING
|
|
||||||
ct_transports = lt_transports
|
|
||||||
ct_features = lt_features ).
|
|
||||||
|
|
||||||
find_up_to_date(
|
|
||||||
EXPORTING
|
|
||||||
iv_url = lo_online->get_url( )
|
|
||||||
it_branches = lt_branches
|
|
||||||
CHANGING
|
|
||||||
ct_features = lt_features ).
|
|
||||||
|
|
||||||
find_prs(
|
|
||||||
EXPORTING
|
|
||||||
iv_url = lo_online->get_url( )
|
|
||||||
CHANGING
|
|
||||||
ct_features = lt_features ).
|
|
||||||
|
|
||||||
add_local_status(
|
|
||||||
EXPORTING
|
|
||||||
io_online = lo_online
|
|
||||||
CHANGING
|
|
||||||
ct_features = lt_features ).
|
|
||||||
|
|
||||||
LOOP AT lt_features ASSIGNING <ls_feature>.
|
|
||||||
<ls_feature>-full_match = abap_true.
|
|
||||||
LOOP AT <ls_feature>-changed_files ASSIGNING <ls_path_name>.
|
|
||||||
IF <ls_path_name>-remote_sha1 <> <ls_path_name>-local_sha1.
|
|
||||||
<ls_feature>-full_match = abap_false.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
INSERT LINES OF lt_features INTO TABLE rt_features.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
SORT rt_features BY full_match transport-trkorr DESCENDING.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD try_matching_transports.
|
|
||||||
|
|
||||||
DATA lt_trkorr LIKE ct_transports.
|
|
||||||
DATA ls_trkorr LIKE LINE OF lt_trkorr.
|
|
||||||
DATA ls_result LIKE LINE OF ct_features.
|
|
||||||
DATA lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt.
|
|
||||||
DATA lv_package LIKE LINE OF lt_packages.
|
|
||||||
DATA lv_found TYPE abap_bool.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_feature> LIKE LINE OF ct_features.
|
|
||||||
FIELD-SYMBOLS <ls_transport> LIKE LINE OF ct_transports.
|
|
||||||
FIELD-SYMBOLS <ls_changed> LIKE LINE OF <ls_feature>-changed_objects.
|
|
||||||
|
|
||||||
|
|
||||||
SORT ct_transports BY object obj_name.
|
|
||||||
|
|
||||||
LOOP AT ct_features ASSIGNING <ls_feature>.
|
|
||||||
LOOP AT <ls_feature>-changed_objects ASSIGNING <ls_changed>.
|
|
||||||
READ TABLE ct_transports ASSIGNING <ls_transport>
|
|
||||||
WITH KEY object = <ls_changed>-obj_type obj_name = <ls_changed>-obj_name BINARY SEARCH.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
<ls_feature>-transport-trkorr = <ls_transport>-trkorr.
|
|
||||||
<ls_feature>-transport-title = <ls_transport>-title.
|
|
||||||
|
|
||||||
add_objects_and_files_from_tr(
|
|
||||||
EXPORTING
|
|
||||||
iv_trkorr = <ls_transport>-trkorr
|
|
||||||
ii_repo = ii_repo
|
|
||||||
it_main_expanded = it_main_expanded
|
|
||||||
it_transports = ct_transports
|
|
||||||
CHANGING
|
|
||||||
cs_feature = <ls_feature> ).
|
|
||||||
|
|
||||||
DELETE ct_transports WHERE trkorr = <ls_transport>-trkorr.
|
|
||||||
EXIT.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
* unmatched transports
|
|
||||||
lt_trkorr = ct_transports.
|
|
||||||
SORT lt_trkorr BY trkorr.
|
|
||||||
DELETE ADJACENT DUPLICATES FROM lt_trkorr COMPARING trkorr.
|
|
||||||
|
|
||||||
lt_packages = zcl_abapgit_factory=>get_sap_package( ii_repo->get_package( ) )->list_subpackages( ).
|
|
||||||
INSERT ii_repo->get_package( ) INTO TABLE lt_packages.
|
|
||||||
|
|
||||||
LOOP AT lt_trkorr INTO ls_trkorr.
|
|
||||||
lv_found = abap_false.
|
|
||||||
LOOP AT lt_packages INTO lv_package.
|
|
||||||
READ TABLE ct_transports ASSIGNING <ls_transport> WITH KEY trkorr = ls_trkorr-trkorr devclass = lv_package.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
lv_found = abap_true.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
IF lv_found = abap_false.
|
|
||||||
CONTINUE.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CLEAR ls_result.
|
|
||||||
ls_result-repo = build_repo_data( ii_repo ).
|
|
||||||
ls_result-transport-trkorr = <ls_transport>-trkorr.
|
|
||||||
ls_result-transport-title = <ls_transport>-title.
|
|
||||||
|
|
||||||
add_objects_and_files_from_tr(
|
|
||||||
EXPORTING
|
|
||||||
iv_trkorr = ls_trkorr-trkorr
|
|
||||||
ii_repo = ii_repo
|
|
||||||
it_main_expanded = it_main_expanded
|
|
||||||
it_transports = ct_transports
|
|
||||||
CHANGING
|
|
||||||
cs_feature = ls_result ).
|
|
||||||
|
|
||||||
INSERT ls_result INTO TABLE ct_features.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD add_objects_and_files_from_tr.
|
|
||||||
|
|
||||||
DATA ls_changed LIKE LINE OF cs_feature-changed_objects.
|
|
||||||
DATA lo_filter TYPE REF TO lcl_filter.
|
|
||||||
DATA lt_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
|
||||||
DATA lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt.
|
|
||||||
DATA ls_changed_file LIKE LINE OF cs_feature-changed_files.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_transport> LIKE LINE OF it_transports.
|
|
||||||
FIELD-SYMBOLS <ls_local> LIKE LINE OF lt_local.
|
|
||||||
FIELD-SYMBOLS <ls_filter> LIKE LINE OF lt_filter.
|
|
||||||
FIELD-SYMBOLS <ls_main_expanded> LIKE LINE OF it_main_expanded.
|
|
||||||
|
|
||||||
|
|
||||||
LOOP AT it_transports ASSIGNING <ls_transport> WHERE trkorr = iv_trkorr.
|
|
||||||
ls_changed-obj_type = <ls_transport>-object.
|
|
||||||
ls_changed-obj_name = <ls_transport>-obj_name.
|
|
||||||
INSERT ls_changed INTO TABLE cs_feature-changed_objects.
|
|
||||||
|
|
||||||
APPEND INITIAL LINE TO lt_filter ASSIGNING <ls_filter>.
|
|
||||||
<ls_filter>-object = <ls_transport>-object.
|
|
||||||
<ls_filter>-obj_name = <ls_transport>-obj_name.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
CREATE OBJECT lo_filter EXPORTING it_filter = lt_filter.
|
|
||||||
lt_local = ii_repo->get_files_local_filtered( lo_filter ).
|
|
||||||
LOOP AT lt_local ASSIGNING <ls_local> WHERE file-filename <> zif_abapgit_definitions=>c_dot_abapgit.
|
|
||||||
ls_changed_file-path = <ls_local>-file-path.
|
|
||||||
ls_changed_file-filename = <ls_local>-file-filename.
|
|
||||||
ls_changed_file-local_sha1 = <ls_local>-file-sha1.
|
|
||||||
|
|
||||||
READ TABLE it_main_expanded ASSIGNING <ls_main_expanded>
|
|
||||||
WITH TABLE KEY path_name COMPONENTS
|
|
||||||
path = ls_changed_file-path
|
|
||||||
name = ls_changed_file-filename.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ls_changed_file-remote_sha1 = <ls_main_expanded>-sha1.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
INSERT ls_changed_file INTO TABLE cs_feature-changed_files.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD find_open_transports.
|
|
||||||
|
|
||||||
DATA lt_trkorr TYPE zif_abapgit_cts_api=>ty_trkorr_tt.
|
|
||||||
DATA lv_trkorr LIKE LINE OF lt_trkorr.
|
|
||||||
DATA ls_result LIKE LINE OF rt_transports.
|
|
||||||
DATA lt_objects TYPE zif_abapgit_cts_api=>ty_transport_obj_tt.
|
|
||||||
DATA lv_obj_name TYPE tadir-obj_name.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_object> LIKE LINE OF lt_objects.
|
|
||||||
|
|
||||||
|
|
||||||
lt_trkorr = zcl_abapgit_factory=>get_cts_api( )->list_open_requests_by_user( ).
|
|
||||||
|
|
||||||
LOOP AT lt_trkorr INTO lv_trkorr.
|
|
||||||
ls_result-trkorr = lv_trkorr.
|
|
||||||
ls_result-title = zcl_abapgit_factory=>get_cts_api( )->read_description( lv_trkorr ).
|
|
||||||
|
|
||||||
lt_objects = zcl_abapgit_factory=>get_cts_api( )->list_r3tr_by_request( lv_trkorr ).
|
|
||||||
LOOP AT lt_objects ASSIGNING <ls_object>.
|
|
||||||
ls_result-object = <ls_object>-object.
|
|
||||||
ls_result-obj_name = <ls_object>-obj_name.
|
|
||||||
|
|
||||||
lv_obj_name = <ls_object>-obj_name.
|
|
||||||
ls_result-devclass = zcl_abapgit_factory=>get_tadir( )->read_single(
|
|
||||||
iv_object = ls_result-object
|
|
||||||
iv_obj_name = lv_obj_name )-devclass.
|
|
||||||
INSERT ls_result INTO TABLE rt_transports.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD find_up_to_date.
|
|
||||||
|
|
||||||
DATA ls_branch LIKE LINE OF it_branches.
|
|
||||||
DATA lt_commits TYPE zif_abapgit_definitions=>ty_objects_tt.
|
|
||||||
DATA ls_main LIKE LINE OF it_branches.
|
|
||||||
DATA lv_current TYPE zif_abapgit_git_definitions=>ty_sha1.
|
|
||||||
DATA lt_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1_tt.
|
|
||||||
DATA lo_visit TYPE REF TO lcl_sha1_stack.
|
|
||||||
DATA ls_raw TYPE zcl_abapgit_git_pack=>ty_commit.
|
|
||||||
|
|
||||||
DATA lt_main_reachable TYPE HASHED TABLE OF zif_abapgit_git_definitions=>ty_sha1 WITH UNIQUE KEY table_line.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_branch> LIKE LINE OF ct_features.
|
|
||||||
FIELD-SYMBOLS <ls_commit> LIKE LINE OF lt_commits.
|
|
||||||
|
|
||||||
|
|
||||||
IF lines( it_branches ) = 1.
|
|
||||||
" only main branch
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE it_branches INTO ls_main WITH KEY display_name = c_main.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
|
|
||||||
LOOP AT it_branches INTO ls_branch WHERE is_head = abap_false.
|
|
||||||
APPEND ls_branch-sha1 TO lt_sha1.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
lt_commits = zcl_abapgit_git_factory=>get_v2_porcelain( )->commits_last_year(
|
|
||||||
iv_url = iv_url
|
|
||||||
it_sha1 = lt_sha1 ).
|
|
||||||
|
|
||||||
CREATE OBJECT lo_visit.
|
|
||||||
lo_visit->clear( )->push( ls_main-sha1 ).
|
|
||||||
WHILE lo_visit->size( ) > 0.
|
|
||||||
lv_current = lo_visit->pop( ).
|
|
||||||
INSERT lv_current INTO TABLE lt_main_reachable.
|
|
||||||
READ TABLE lt_commits ASSIGNING <ls_commit> WITH TABLE KEY sha COMPONENTS sha1 = lv_current.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ls_raw = zcl_abapgit_git_pack=>decode_commit( <ls_commit>-data ).
|
|
||||||
lo_visit->push( ls_raw-parent ).
|
|
||||||
IF ls_raw-parent2 IS NOT INITIAL.
|
|
||||||
lo_visit->push( ls_raw-parent2 ).
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
ENDWHILE.
|
|
||||||
|
|
||||||
LOOP AT ct_features ASSIGNING <ls_branch>.
|
|
||||||
<ls_branch>-branch-up_to_date = abap_undefined.
|
|
||||||
lo_visit->clear( )->push( <ls_branch>-branch-sha1 ).
|
|
||||||
|
|
||||||
WHILE lo_visit->size( ) > 0.
|
|
||||||
lv_current = lo_visit->pop( ).
|
|
||||||
IF lv_current = ls_main-sha1.
|
|
||||||
<ls_branch>-branch-up_to_date = abap_true.
|
|
||||||
EXIT.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_main_reachable WITH KEY table_line = lv_current TRANSPORTING NO FIELDS.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
<ls_branch>-branch-up_to_date = abap_false.
|
|
||||||
EXIT.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_commits ASSIGNING <ls_commit> WITH TABLE KEY sha COMPONENTS sha1 = lv_current.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ls_raw = zcl_abapgit_git_pack=>decode_commit( <ls_commit>-data ).
|
|
||||||
lo_visit->push( ls_raw-parent ).
|
|
||||||
IF ls_raw-parent2 IS NOT INITIAL.
|
|
||||||
lo_visit->push( ls_raw-parent2 ).
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
ENDWHILE.
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD find_changed_files_all.
|
|
||||||
|
|
||||||
DATA ls_branch LIKE LINE OF it_branches.
|
|
||||||
DATA lt_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1_tt.
|
|
||||||
DATA lt_objects TYPE zif_abapgit_definitions=>ty_objects_tt.
|
|
||||||
DATA lv_starting_folder TYPE string.
|
|
||||||
DATA ls_main LIKE LINE OF it_branches.
|
|
||||||
DATA lt_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_branch> LIKE LINE OF ct_features.
|
|
||||||
|
|
||||||
|
|
||||||
LOOP AT it_branches INTO ls_branch WHERE is_head = abap_false.
|
|
||||||
APPEND ls_branch-sha1 TO lt_sha1.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
lt_objects = zcl_abapgit_git_factory=>get_v2_porcelain( )->list_no_blobs_multi(
|
|
||||||
iv_url = io_online->get_url( )
|
|
||||||
it_sha1 = lt_sha1 ).
|
|
||||||
|
|
||||||
lv_starting_folder = io_online->get_dot_abapgit( )->get_starting_folder( ) && '*'.
|
|
||||||
|
|
||||||
READ TABLE it_branches INTO ls_main WITH KEY display_name = c_main.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
|
|
||||||
et_main_expanded = zcl_abapgit_git_porcelain=>full_tree(
|
|
||||||
it_objects = lt_objects
|
|
||||||
iv_parent = ls_main-sha1 ).
|
|
||||||
DELETE et_main_expanded WHERE path NP lv_starting_folder.
|
|
||||||
|
|
||||||
LOOP AT ct_features ASSIGNING <ls_branch> WHERE branch-display_name <> c_main.
|
|
||||||
lt_expanded = zcl_abapgit_git_porcelain=>full_tree(
|
|
||||||
it_objects = lt_objects
|
|
||||||
iv_parent = <ls_branch>-branch-sha1 ).
|
|
||||||
DELETE lt_expanded WHERE path NP lv_starting_folder.
|
|
||||||
|
|
||||||
<ls_branch>-changed_files = find_changed_files(
|
|
||||||
it_expanded1 = lt_expanded
|
|
||||||
it_expanded2 = et_main_expanded ).
|
|
||||||
|
|
||||||
<ls_branch>-changed_objects = map_files_to_objects(
|
|
||||||
io_online = io_online
|
|
||||||
it_files = <ls_branch>-changed_files ).
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD add_local_status.
|
|
||||||
|
|
||||||
DATA lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt.
|
|
||||||
DATA lo_filter TYPE REF TO lcl_filter.
|
|
||||||
DATA lt_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_branch> LIKE LINE OF ct_features.
|
|
||||||
FIELD-SYMBOLS <ls_local> LIKE LINE OF lt_local.
|
|
||||||
FIELD-SYMBOLS <ls_changed_file> TYPE zif_abapgit_gui_page_flow=>ty_path_name.
|
|
||||||
FIELD-SYMBOLS <ls_filter> LIKE LINE OF lt_filter.
|
|
||||||
FIELD-SYMBOLS <ls_object> LIKE LINE OF <ls_branch>-changed_objects.
|
|
||||||
|
|
||||||
|
|
||||||
LOOP AT ct_features ASSIGNING <ls_branch>.
|
|
||||||
LOOP AT <ls_branch>-changed_objects ASSIGNING <ls_object>.
|
|
||||||
APPEND INITIAL LINE TO lt_filter ASSIGNING <ls_filter>.
|
|
||||||
<ls_filter>-object = <ls_object>-obj_type.
|
|
||||||
<ls_filter>-obj_name = <ls_object>-obj_name.
|
|
||||||
ENDLOOP.
|
|
||||||
ENDLOOP.
|
|
||||||
SORT lt_filter BY object obj_name.
|
|
||||||
DELETE ADJACENT DUPLICATES FROM lt_filter COMPARING object obj_name.
|
|
||||||
|
|
||||||
IF lines( lt_filter ) = 0.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CREATE OBJECT lo_filter EXPORTING it_filter = lt_filter.
|
|
||||||
lt_local = io_online->get_files_local_filtered( lo_filter ).
|
|
||||||
|
|
||||||
LOOP AT ct_features ASSIGNING <ls_branch>.
|
|
||||||
LOOP AT <ls_branch>-changed_files ASSIGNING <ls_changed_file>.
|
|
||||||
READ TABLE lt_local ASSIGNING <ls_local>
|
|
||||||
WITH KEY file-filename = <ls_changed_file>-filename
|
|
||||||
file-path = <ls_changed_file>-path.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
<ls_changed_file>-local_sha1 = <ls_local>-file-sha1.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD map_files_to_objects.
|
|
||||||
|
|
||||||
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_file> LIKE LINE OF it_files.
|
|
||||||
|
|
||||||
LOOP AT it_files ASSIGNING <ls_file>.
|
|
||||||
zcl_abapgit_filename_logic=>file_to_object(
|
|
||||||
EXPORTING
|
|
||||||
iv_filename = <ls_file>-filename
|
|
||||||
iv_path = <ls_file>-path
|
|
||||||
iv_devclass = io_online->get_package( )
|
|
||||||
io_dot = io_online->get_dot_abapgit( )
|
|
||||||
IMPORTING
|
|
||||||
es_item = ls_item ).
|
|
||||||
INSERT ls_item INTO TABLE rt_changed_objects.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD find_changed_files.
|
|
||||||
* don't care if its added or removed or changed, just remove identical
|
|
||||||
* also list identical moved files
|
|
||||||
|
|
||||||
DATA ls_path_name LIKE LINE OF rt_files.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_expanded1> LIKE LINE OF it_expanded1.
|
|
||||||
FIELD-SYMBOLS <ls_expanded2> LIKE LINE OF it_expanded1.
|
|
||||||
|
|
||||||
LOOP AT it_expanded1 ASSIGNING <ls_expanded1>.
|
|
||||||
READ TABLE it_expanded2 ASSIGNING <ls_expanded2>
|
|
||||||
WITH TABLE KEY path_name COMPONENTS
|
|
||||||
path = <ls_expanded1>-path
|
|
||||||
name = <ls_expanded1>-name.
|
|
||||||
IF sy-subrc = 0 AND <ls_expanded1>-sha1 = <ls_expanded2>-sha1.
|
|
||||||
CONTINUE.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
MOVE-CORRESPONDING <ls_expanded1> TO ls_path_name.
|
|
||||||
ls_path_name-filename = <ls_expanded1>-name.
|
|
||||||
ls_path_name-remote_sha1 = <ls_expanded1>-sha1.
|
|
||||||
INSERT ls_path_name INTO TABLE rt_files.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
LOOP AT it_expanded2 ASSIGNING <ls_expanded2>.
|
|
||||||
READ TABLE it_expanded1 ASSIGNING <ls_expanded1>
|
|
||||||
WITH TABLE KEY path_name COMPONENTS
|
|
||||||
path = <ls_expanded2>-path
|
|
||||||
name = <ls_expanded2>-name.
|
|
||||||
IF sy-subrc = 0 AND <ls_expanded1>-sha1 = <ls_expanded2>-sha1.
|
|
||||||
CONTINUE.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
MOVE-CORRESPONDING <ls_expanded2> TO ls_path_name.
|
|
||||||
ls_path_name-filename = <ls_expanded2>-name.
|
|
||||||
ls_path_name-remote_sha1 = <ls_expanded2>-sha1.
|
|
||||||
INSERT ls_path_name INTO TABLE rt_files.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
|
@ -573,7 +573,7 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
|
||||||
lv_new_window = boolc( iv_new_window IS NOT INITIAL ).
|
lv_new_window = boolc( iv_new_window IS NOT INITIAL ).
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
li_html_viewer = zcl_abapgit_ui_factory=>get_html_viewer( ).
|
li_html_viewer = zcl_abapgit_ui_core_factory=>get_html_viewer( ).
|
||||||
|
|
||||||
" Hide HTML Viewer in dummy screen0 for direct CALL SCREEN to work
|
" Hide HTML Viewer in dummy screen0 for direct CALL SCREEN to work
|
||||||
li_html_viewer->set_visiblity( abap_false ).
|
li_html_viewer->set_visiblity( abap_false ).
|
||||||
|
|
|
@ -28,17 +28,11 @@ CLASS zcl_abapgit_ui_factory DEFINITION
|
||||||
!iv_disable_gui TYPE abap_bool DEFAULT abap_false
|
!iv_disable_gui TYPE abap_bool DEFAULT abap_false
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ri_fe_serv) TYPE REF TO zif_abapgit_frontend_services .
|
VALUE(ri_fe_serv) TYPE REF TO zif_abapgit_frontend_services .
|
||||||
CLASS-METHODS get_html_viewer
|
|
||||||
IMPORTING
|
|
||||||
!io_container TYPE REF TO cl_gui_container DEFAULT cl_gui_container=>screen0
|
|
||||||
!iv_disable_query_table TYPE abap_bool DEFAULT abap_true
|
|
||||||
RETURNING
|
|
||||||
VALUE(ri_viewer) TYPE REF TO zif_abapgit_html_viewer .
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
CLASS-DATA gi_popups TYPE REF TO zif_abapgit_popups .
|
CLASS-DATA gi_popups TYPE REF TO zif_abapgit_popups .
|
||||||
CLASS-DATA gi_html_viewer TYPE REF TO zif_abapgit_html_viewer .
|
|
||||||
CLASS-DATA go_gui TYPE REF TO zcl_abapgit_gui .
|
CLASS-DATA go_gui TYPE REF TO zcl_abapgit_gui .
|
||||||
CLASS-DATA gi_fe_services TYPE REF TO zif_abapgit_frontend_services .
|
CLASS-DATA gi_fe_services TYPE REF TO zif_abapgit_frontend_services .
|
||||||
CLASS-DATA gi_gui_services TYPE REF TO zif_abapgit_gui_services .
|
CLASS-DATA gi_gui_services TYPE REF TO zif_abapgit_gui_services .
|
||||||
|
@ -169,20 +163,6 @@ CLASS zcl_abapgit_ui_factory IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD get_html_viewer.
|
|
||||||
|
|
||||||
IF gi_html_viewer IS NOT BOUND.
|
|
||||||
CREATE OBJECT gi_html_viewer TYPE zcl_abapgit_html_viewer_gui
|
|
||||||
EXPORTING
|
|
||||||
io_container = io_container
|
|
||||||
iv_disable_query_table = iv_disable_query_table.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ri_viewer = gi_html_viewer.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD get_popups.
|
METHOD get_popups.
|
||||||
|
|
||||||
IF gi_popups IS INITIAL.
|
IF gi_popups IS INITIAL.
|
||||||
|
|
|
@ -17,9 +17,6 @@ CLASS zcl_abapgit_ui_injector DEFINITION
|
||||||
CLASS-METHODS get_dummy_gui_services
|
CLASS-METHODS get_dummy_gui_services
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ri_gui_services) TYPE REF TO zif_abapgit_gui_services .
|
VALUE(ri_gui_services) TYPE REF TO zif_abapgit_gui_services .
|
||||||
CLASS-METHODS set_html_viewer
|
|
||||||
IMPORTING
|
|
||||||
!ii_html_viewer TYPE REF TO zif_abapgit_html_viewer .
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
@ -50,13 +47,6 @@ CLASS zcl_abapgit_ui_injector IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD set_html_viewer.
|
|
||||||
|
|
||||||
zcl_abapgit_ui_factory=>gi_html_viewer = ii_html_viewer.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD set_popups.
|
METHOD set_popups.
|
||||||
|
|
||||||
zcl_abapgit_ui_factory=>gi_popups = ii_popups.
|
zcl_abapgit_ui_factory=>gi_popups = ii_popups.
|
||||||
|
|
|
@ -303,7 +303,7 @@ CLASS ltcl_convert IMPLEMENTATION.
|
||||||
DATA: lv_xstring TYPE xstring,
|
DATA: lv_xstring TYPE xstring,
|
||||||
lv_byte TYPE x,
|
lv_byte TYPE x,
|
||||||
lv_input TYPE i,
|
lv_input TYPE i,
|
||||||
lv_bitbyte TYPE zif_abapgit_git_definitions=>ty_bitbyte,
|
lv_bitbyte TYPE c LENGTH 8,
|
||||||
lv_byteint TYPE i,
|
lv_byteint TYPE i,
|
||||||
lv_xbyteint TYPE xstring,
|
lv_xbyteint TYPE xstring,
|
||||||
lv_xresult TYPE xstring,
|
lv_xresult TYPE xstring,
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
sdf
|
sdfsd
|
Loading…
Reference in New Issue
Block a user