' ).
+ ro_html->add( '' ).
+ ro_html->add( zcl_abapgit_gui_chunk_lib=>render_item_state(
+ iv_lstate = -status-lstate
+ iv_rstate = -status-rstate ) ).
+ ro_html->add( ' | ' ).
ro_html->add( '' ).
- ro_html->add( zcl_abapgit_stage=>method_description( -method ) ).
+ ro_html->add( |{ zcl_abapgit_stage=>method_description( -method ) }| ).
ro_html->add( ' | ' ).
ro_html->add( '' ).
ro_html->add( -file-path && -file-filename ).
diff --git a/src/ui/zcl_abapgit_gui_page_stage.clas.abap b/src/ui/zcl_abapgit_gui_page_stage.clas.abap
index 2642ce080..c79bc02ba 100644
--- a/src/ui/zcl_abapgit_gui_page_stage.clas.abap
+++ b/src/ui/zcl_abapgit_gui_page_stage.clas.abap
@@ -65,6 +65,7 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION
!iv_context TYPE string
!is_file TYPE zif_abapgit_definitions=>ty_file
!is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !is_status TYPE zif_abapgit_definitions=>ty_result
!iv_changed_by TYPE xubname OPTIONAL
!iv_transport TYPE trkorr OPTIONAL
RETURNING
@@ -234,6 +235,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
ls_file TYPE zif_abapgit_definitions=>ty_file.
FIELD-SYMBOLS: LIKE LINE OF ms_files-local,
+ LIKE LINE OF ms_files-status,
LIKE LINE OF lt_fields.
CONCATENATE LINES OF it_postdata INTO lv_string.
@@ -252,6 +254,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
ev_path = ls_file-path
ev_filename = ls_file-filename ).
+ READ TABLE ms_files-status ASSIGNING
+ WITH TABLE KEY
+ path = ls_file-path
+ filename = ls_file-filename.
+ ASSERT sy-subrc = 0.
+
CASE -value.
WHEN zcl_abapgit_stage=>c_method-add.
READ TABLE ms_files-local ASSIGNING
@@ -264,12 +272,14 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
io_stage->add( iv_path = -file-path
iv_filename = -file-filename
+ is_status =
iv_data = -file-data ).
WHEN zcl_abapgit_stage=>c_method-ignore.
io_stage->ignore( iv_path = ls_file-path
iv_filename = ls_file-filename ).
WHEN zcl_abapgit_stage=>c_method-rm.
io_stage->rm( iv_path = ls_file-path
+ is_status =
iv_filename = ls_file-filename ).
WHEN zcl_abapgit_stage=>c_method-skip.
" Do nothing
@@ -374,6 +384,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
REPLACE ALL OCCURRENCES OF ` ` IN lv_filename WITH ' '.
ro_html->add( || ).
+ ro_html->add( '' ).
+ ro_html->add( zcl_abapgit_gui_chunk_lib=>render_item_state(
+ iv_lstate = is_status-lstate
+ iv_rstate = is_status-rstate ) ).
+ ro_html->add( ' | ' ).
CASE iv_context.
WHEN 'local'.
@@ -417,6 +432,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
ls_transport LIKE LINE OF lt_transports.
FIELD-SYMBOLS: LIKE LINE OF ms_files-remote,
+ LIKE LINE OF ms_files-status,
LIKE LINE OF ms_files-local.
CREATE OBJECT ro_html.
@@ -430,6 +446,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
LOOP AT ms_files-local ASSIGNING .
AT FIRST.
ro_html->add( '' ).
+ ro_html->add( ' | ' ). " Diff state
ro_html->add( 'Type | ' ).
ro_html->add( 'Files to add (click to see diff) | ' ).
ro_html->add( 'Changed by | ' ).
@@ -444,11 +461,17 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
READ TABLE lt_changed_by INTO ls_changed_by WITH KEY item = -item. "#EC CI_SUBRC
READ TABLE lt_transports INTO ls_transport WITH KEY item = -item. "#EC CI_SUBRC
+ READ TABLE ms_files-status ASSIGNING
+ WITH TABLE KEY
+ path = -file-path
+ filename = -file-filename.
+ ASSERT sy-subrc = 0.
ro_html->add( render_file(
iv_context = 'local'
is_file = -file
is_item = -item
+ is_status =
iv_changed_by = ls_changed_by-name
iv_transport = ls_transport-transport ) ).
@@ -463,6 +486,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
LOOP AT ms_files-remote ASSIGNING .
AT FIRST.
ro_html->add( '' ).
+ ro_html->add( ' | ' ). " Diff state
ro_html->add( ' | ' ). " Type
ro_html->add( 'Files to remove or non-code | ' ).
ro_html->add( ' | ' ). " Status
@@ -473,8 +497,15 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
ro_html->add( ' ' ).
ENDAT.
+ READ TABLE ms_files-status ASSIGNING
+ WITH TABLE KEY
+ path = -file-path
+ filename = -file-filename.
+ ASSERT sy-subrc = 0.
+
ro_html->add( render_file(
iv_context = 'remote'
+ is_status =
is_file = ) ).
AT LAST.
@@ -534,6 +565,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS: LIKE LINE OF ms_files-local.
+ FIELD-SYMBOLS: LIKE LINE OF ms_files-status.
CREATE OBJECT lo_stage.
@@ -544,9 +576,17 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
WHEN c_action-stage_all.
LOOP AT ms_files-local ASSIGNING .
- lo_stage->add( iv_path = -file-path
- iv_filename = -file-filename
- iv_data = -file-data ).
+ READ TABLE ms_files-status ASSIGNING
+ WITH TABLE KEY
+ path = -file-path
+ filename = -file-filename.
+ ASSERT sy-subrc = 0.
+
+ lo_stage->add(
+ iv_path = -file-path
+ iv_filename = -file-filename
+ is_status =
+ iv_data = -file-data ).
ENDLOOP.
CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_commit
@@ -559,7 +599,9 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
WHEN c_action-stage_commit.
- process_stage_list( it_postdata = it_postdata io_stage = lo_stage ).
+ process_stage_list(
+ it_postdata = it_postdata
+ io_stage = lo_stage ).
CREATE OBJECT ei_page TYPE zcl_abapgit_gui_page_commit
EXPORTING
diff --git a/src/ui/zcl_abapgit_gui_view_repo.clas.abap b/src/ui/zcl_abapgit_gui_view_repo.clas.abap
index 36983c381..1854f1eab 100644
--- a/src/ui/zcl_abapgit_gui_view_repo.clas.abap
+++ b/src/ui/zcl_abapgit_gui_view_repo.clas.abap
@@ -129,7 +129,61 @@ ENDCLASS.
-CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
+CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
+
+
+ METHOD apply_order_by.
+
+ DATA:
+ lt_sort TYPE abap_sortorder_tab,
+ ls_sort LIKE LINE OF lt_sort,
+ lt_non_code_and_metadata_items LIKE ct_repo_items,
+ lt_code_items LIKE ct_repo_items,
+ lt_diff_items LIKE ct_repo_items.
+
+ FIELD-SYMBOLS:
+ TYPE zif_abapgit_definitions=>ty_repo_item.
+
+ IF mv_order_by IS INITIAL.
+ RETURN.
+ ENDIF.
+
+ " we want to preserve non-code and metadata files at the top,
+ " so we isolate them and and sort only the code artifacts
+ LOOP AT ct_repo_items ASSIGNING .
+
+ IF -obj_type IS INITIAL AND -is_dir = abap_false.
+ INSERT INTO TABLE lt_non_code_and_metadata_items.
+ ELSE.
+ INSERT INTO TABLE lt_code_items.
+ ENDIF.
+
+ ENDLOOP.
+
+ IF mv_diff_first = abap_true.
+ " fix diffs on the top, right after non-code and metadata
+ LOOP AT lt_code_items ASSIGNING
+ WHERE changes > 0.
+ INSERT INTO TABLE lt_diff_items.
+ ENDLOOP.
+
+ DELETE lt_code_items WHERE changes > 0.
+ ENDIF.
+
+ CLEAR: ct_repo_items.
+
+ ls_sort-name = mv_order_by.
+ ls_sort-descending = mv_order_descending.
+ ls_sort-astext = abap_true.
+ INSERT ls_sort INTO TABLE lt_sort.
+ SORT lt_code_items BY (lt_sort).
+ SORT lt_diff_items BY (lt_sort).
+
+ INSERT LINES OF lt_non_code_and_metadata_items INTO TABLE ct_repo_items.
+ INSERT LINES OF lt_diff_items INTO TABLE ct_repo_items.
+ INSERT LINES OF lt_code_items INTO TABLE ct_repo_items.
+
+ ENDMETHOD.
METHOD build_advanced_dropdown.
@@ -654,8 +708,9 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
ro_html->add( '' ).
ro_html->add( |{ is_item-changes } changes| ).
- ro_html->add( zcl_abapgit_gui_chunk_lib=>render_item_state( iv_lstate = is_item-lstate
- iv_rstate = is_item-rstate ) ).
+ ro_html->add( zcl_abapgit_gui_chunk_lib=>render_item_state(
+ iv_lstate = is_item-lstate
+ iv_rstate = is_item-rstate ) ).
ro_html->add( ' ' ).
ELSEIF is_item-changes > 0.
@@ -748,6 +803,62 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
ENDMETHOD.
+ METHOD render_order_by.
+
+ DATA:
+ lt_col_spec TYPE zif_abapgit_definitions=>tty_col_spec,
+ lv_icon TYPE string,
+ lv_html TYPE string.
+ FIELD-SYMBOLS LIKE LINE OF lt_col_spec.
+
+ DEFINE _add_col.
+ APPEND INITIAL LINE TO lt_col_spec ASSIGNING .
+ -tech_name = &1.
+ -display_name = &2.
+ -css_class = &3.
+ -add_tz = &4.
+ -title = &5.
+ END-OF-DEFINITION.
+
+ CREATE OBJECT ro_html.
+
+ " technical name display name css class add timezone title
+ _add_col '' '' '' '' ''.
+ IF mv_are_changes_recorded_in_tr = abap_true.
+ _add_col '' '' '' '' ''.
+ ENDIF.
+ _add_col 'OBJ_TYPE' 'Type' '' '' ''.
+ _add_col 'OBJ_NAME' 'Name' '' '' ''.
+ _add_col 'PATH' 'Path' '' '' ''.
+
+ ro_html->add( || ).
+ ro_html->add( || ).
+
+ ro_html->add( zcl_abapgit_gui_chunk_lib=>render_order_by_header_cells(
+ it_col_spec = lt_col_spec
+ iv_order_by = mv_order_by
+ iv_order_descending = mv_order_descending ) ).
+
+ IF mv_diff_first = abap_true.
+ lv_icon = 'check/blue'.
+ ELSE.
+ lv_icon = 'check/grey'.
+ ENDIF.
+
+ lv_html = ||
+ && zcl_abapgit_html=>icon( lv_icon )
+ && zcl_abapgit_html=>a(
+ iv_txt = |diffs first|
+ iv_act = c_actions-toggle_diff_first ).
+
+ ro_html->add( lv_html ).
+
+ ro_html->add( ' | ' ).
+ ro_html->add( '' ).
+
+ ENDMETHOD.
+
+
METHOD render_parent_dir.
CREATE OBJECT ro_html.
@@ -926,115 +1037,4 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
ENDTRY.
ENDMETHOD.
-
-
- METHOD render_order_by.
-
- DATA:
- lt_col_spec TYPE zif_abapgit_definitions=>tty_col_spec,
- lv_icon TYPE string,
- lv_html TYPE string.
- FIELD-SYMBOLS LIKE LINE OF lt_col_spec.
-
- DEFINE _add_col.
- APPEND INITIAL LINE TO lt_col_spec ASSIGNING .
- -tech_name = &1.
- -display_name = &2.
- -css_class = &3.
- -add_tz = &4.
- -title = &5.
- END-OF-DEFINITION.
-
- CREATE OBJECT ro_html.
-
- " technical name display name css class add timezone title
- _add_col '' '' '' '' ''.
- IF mv_are_changes_recorded_in_tr = abap_true.
- _add_col '' '' '' '' ''.
- ENDIF.
- _add_col 'OBJ_TYPE' 'Type' '' '' ''.
- _add_col 'OBJ_NAME' 'Name' '' '' ''.
- _add_col 'PATH' 'Path' '' '' ''.
-
- ro_html->add( || ).
- ro_html->add( || ).
-
- ro_html->add( zcl_abapgit_gui_chunk_lib=>render_order_by_header_cells(
- it_col_spec = lt_col_spec
- iv_order_by = mv_order_by
- iv_order_descending = mv_order_descending ) ).
-
- IF mv_diff_first = abap_true.
- lv_icon = 'check/blue'.
- ELSE.
- lv_icon = 'check/grey'.
- ENDIF.
-
- lv_html = ||
- && zcl_abapgit_html=>icon( lv_icon )
- && zcl_abapgit_html=>a(
- iv_txt = |diffs first|
- iv_act = c_actions-toggle_diff_first ).
-
- ro_html->add( lv_html ).
-
- ro_html->add( ' | ' ).
- ro_html->add( '' ).
-
- ENDMETHOD.
-
-
- METHOD apply_order_by.
-
- DATA:
- lt_sort TYPE abap_sortorder_tab,
- ls_sort LIKE LINE OF lt_sort,
- lt_non_code_and_metadata_items LIKE ct_repo_items,
- lt_code_items LIKE ct_repo_items,
- lt_diff_items LIKE ct_repo_items.
-
- FIELD-SYMBOLS:
- TYPE zif_abapgit_definitions=>ty_repo_item.
-
- IF mv_order_by IS INITIAL.
- RETURN.
- ENDIF.
-
- " we want to preserve non-code and metadata files at the top,
- " so we isolate them and and sort only the code artifacts
- LOOP AT ct_repo_items ASSIGNING .
-
- IF -obj_type IS INITIAL AND -is_dir = abap_false.
- INSERT INTO TABLE lt_non_code_and_metadata_items.
- ELSE.
- INSERT INTO TABLE lt_code_items.
- ENDIF.
-
- ENDLOOP.
-
- IF mv_diff_first = abap_true.
- " fix diffs on the top, right after non-code and metadata
- LOOP AT lt_code_items ASSIGNING
- WHERE changes > 0.
- INSERT INTO TABLE lt_diff_items.
- ENDLOOP.
-
- DELETE lt_code_items WHERE changes > 0.
- ENDIF.
-
- CLEAR: ct_repo_items.
-
- ls_sort-name = mv_order_by.
- ls_sort-descending = mv_order_descending.
- ls_sort-astext = abap_true.
- INSERT ls_sort INTO TABLE lt_sort.
- SORT lt_code_items BY (lt_sort).
- SORT lt_diff_items BY (lt_sort).
-
- INSERT LINES OF lt_non_code_and_metadata_items INTO TABLE ct_repo_items.
- INSERT LINES OF lt_diff_items INTO TABLE ct_repo_items.
- INSERT LINES OF lt_code_items INTO TABLE ct_repo_items.
-
- ENDMETHOD.
-
ENDCLASS.
diff --git a/src/zcl_abapgit_stage.clas.abap b/src/zcl_abapgit_stage.clas.abap
index 489f9a8b4..058aa0ce1 100644
--- a/src/zcl_abapgit_stage.clas.abap
+++ b/src/zcl_abapgit_stage.clas.abap
@@ -10,6 +10,7 @@ CLASS zcl_abapgit_stage DEFINITION
BEGIN OF ty_stage,
file TYPE zif_abapgit_definitions=>ty_file,
method TYPE ty_method,
+ status TYPE zif_abapgit_definitions=>ty_result,
END OF ty_stage .
TYPES:
ty_stage_tt TYPE SORTED TABLE OF ty_stage
@@ -38,6 +39,7 @@ CLASS zcl_abapgit_stage DEFINITION
!iv_path TYPE zif_abapgit_definitions=>ty_file-path
!iv_filename TYPE zif_abapgit_definitions=>ty_file-filename
!iv_data TYPE xstring
+ !is_status TYPE zif_abapgit_definitions=>ty_result OPTIONAL
RAISING
zcx_abapgit_exception .
METHODS reset
@@ -50,6 +52,7 @@ CLASS zcl_abapgit_stage DEFINITION
IMPORTING
!iv_path TYPE zif_abapgit_definitions=>ty_file-path
!iv_filename TYPE zif_abapgit_definitions=>ty_file-filename
+ !is_status TYPE zif_abapgit_definitions=>ty_result OPTIONAL
RAISING
zcx_abapgit_exception .
METHODS ignore
@@ -67,6 +70,7 @@ CLASS zcl_abapgit_stage DEFINITION
METHODS get_all
RETURNING
VALUE(rt_stage) TYPE ty_stage_tt .
+ PROTECTED SECTION.
PRIVATE SECTION.
DATA mt_stage TYPE ty_stage_tt .
@@ -77,6 +81,7 @@ CLASS zcl_abapgit_stage DEFINITION
!iv_path TYPE zif_abapgit_definitions=>ty_file-path
!iv_filename TYPE zif_abapgit_definitions=>ty_file-filename
!iv_method TYPE ty_method
+ !is_status TYPE zif_abapgit_definitions=>ty_result OPTIONAL
!iv_data TYPE xstring OPTIONAL
RAISING
zcx_abapgit_exception .
@@ -84,7 +89,7 @@ ENDCLASS.
-CLASS zcl_abapgit_stage IMPLEMENTATION.
+CLASS ZCL_ABAPGIT_STAGE IMPLEMENTATION.
METHOD add.
@@ -92,6 +97,7 @@ CLASS zcl_abapgit_stage IMPLEMENTATION.
append( iv_path = iv_path
iv_filename = iv_filename
iv_method = c_method-add
+ is_status = is_status
iv_data = iv_data ).
ENDMETHOD.
@@ -116,6 +122,7 @@ CLASS zcl_abapgit_stage IMPLEMENTATION.
ls_stage-file-filename = iv_filename.
ls_stage-file-data = iv_data.
ls_stage-method = iv_method.
+ ls_stage-status = is_status.
INSERT ls_stage INTO TABLE mt_stage.
ENDIF.
@@ -174,6 +181,7 @@ CLASS zcl_abapgit_stage IMPLEMENTATION.
METHOD rm.
append( iv_path = iv_path
iv_filename = iv_filename
+ is_status = is_status
iv_method = c_method-rm ).
ENDMETHOD.
ENDCLASS.
diff --git a/src/zcl_abapgit_stage_logic.clas.abap b/src/zcl_abapgit_stage_logic.clas.abap
index e5615667d..b62eefb13 100644
--- a/src/zcl_abapgit_stage_logic.clas.abap
+++ b/src/zcl_abapgit_stage_logic.clas.abap
@@ -89,6 +89,7 @@ CLASS ZCL_ABAPGIT_STAGE_LOGIC IMPLEMENTATION.
rs_files-local = io_repo->get_files_local( ).
rs_files-remote = io_repo->get_files_remote( ).
+ rs_files-status = io_repo->status( ).
remove_identical( CHANGING cs_files = rs_files ).
remove_ignored( EXPORTING io_repo = io_repo
CHANGING cs_files = rs_files ).
diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap
index 9398f10a1..b14ffd886 100644
--- a/src/zif_abapgit_definitions.intf.abap
+++ b/src/zif_abapgit_definitions.intf.abap
@@ -153,11 +153,6 @@ INTERFACE zif_abapgit_definitions
END OF ty_repo_file .
TYPES:
tt_repo_files TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY .
- TYPES:
- BEGIN OF ty_stage_files,
- local TYPE zif_abapgit_definitions=>ty_files_item_tt,
- remote TYPE zif_abapgit_definitions=>ty_files_tt,
- END OF ty_stage_files .
TYPES:
ty_chmod TYPE c LENGTH 6 .
TYPES:
@@ -199,6 +194,14 @@ INTERFACE zif_abapgit_definitions
END OF ty_result .
TYPES:
ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY .
+ TYPES:
+ ty_results_ts_path TYPE HASHED TABLE OF ty_result WITH UNIQUE KEY path filename .
+ TYPES:
+ BEGIN OF ty_stage_files,
+ local TYPE zif_abapgit_definitions=>ty_files_item_tt,
+ remote TYPE zif_abapgit_definitions=>ty_files_tt,
+ status TYPE zif_abapgit_definitions=>ty_results_ts_path,
+ END OF ty_stage_files .
TYPES:
ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY .
TYPES:
|