Add option for "Only local objects", issue 1260 (#1268)

* refactor write protect and ignore subpackages

to local settings structure, this makes it a lot easier to exetend, plus adds structure

* delete method GET_MASTER_LANGUAGE

* add local settings to repo settings page

* add setting for only local objects #1260
This commit is contained in:
Lars Hvam 2018-03-26 12:23:01 +02:00 committed by GitHub
parent 303236dcbf
commit f17985b27e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 443 additions and 212 deletions

View File

@ -239,7 +239,7 @@ CLASS ZCL_ABAPGIT_SERVICES_GIT IMPLEMENTATION.
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
IF lo_repo->is_write_protected( ) = abap_true.
IF lo_repo->get_local_settings( )-write_protected = abap_true.
zcx_abapgit_exception=>raise( 'Cannot pull. Local code is write-protected by repo config' ).
ENDIF.
@ -261,7 +261,7 @@ CLASS ZCL_ABAPGIT_SERVICES_GIT IMPLEMENTATION.
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
IF lo_repo->is_write_protected( ) = abap_true.
IF lo_repo->get_local_settings( )-write_protected = abap_true.
zcx_abapgit_exception=>raise( 'Cannot reset. Local code is write-protected by repo config' ).
ENDIF.

View File

@ -3,86 +3,113 @@ CLASS zcl_abapgit_persistence_repo DEFINITION
CREATE PUBLIC .
PUBLIC SECTION.
METHODS constructor.
METHODS constructor .
METHODS list
RETURNING VALUE(rt_repos) TYPE zif_abapgit_persistence=>tt_repo
RAISING zcx_abapgit_exception.
RETURNING
VALUE(rt_repos) TYPE zif_abapgit_persistence=>tt_repo
RAISING
zcx_abapgit_exception .
METHODS update_sha1
IMPORTING iv_key TYPE zif_abapgit_persistence=>ty_repo-key
iv_branch_sha1 TYPE zif_abapgit_persistence=>ty_repo_xml-sha1
RAISING zcx_abapgit_exception.
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!iv_branch_sha1 TYPE zif_abapgit_persistence=>ty_repo_xml-sha1
RAISING
zcx_abapgit_exception .
METHODS update_local_checksums
IMPORTING iv_key TYPE zif_abapgit_persistence=>ty_repo-key
it_checksums TYPE zif_abapgit_persistence=>ty_repo_xml-local_checksums
RAISING zcx_abapgit_exception.
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!it_checksums TYPE zif_abapgit_persistence=>ty_repo_xml-local_checksums
RAISING
zcx_abapgit_exception .
METHODS update_url
IMPORTING iv_key TYPE zif_abapgit_persistence=>ty_repo-key
iv_url TYPE zif_abapgit_persistence=>ty_repo_xml-url
RAISING zcx_abapgit_exception.
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!iv_url TYPE zif_abapgit_persistence=>ty_repo_xml-url
RAISING
zcx_abapgit_exception .
METHODS update_branch_name
IMPORTING iv_key TYPE zif_abapgit_persistence=>ty_repo-key
iv_branch_name TYPE zif_abapgit_persistence=>ty_repo_xml-branch_name
RAISING zcx_abapgit_exception.
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!iv_branch_name TYPE zif_abapgit_persistence=>ty_repo_xml-branch_name
RAISING
zcx_abapgit_exception .
METHODS update_head_branch
IMPORTING iv_key TYPE zif_abapgit_persistence=>ty_repo-key
iv_head_branch TYPE zif_abapgit_persistence=>ty_repo_xml-head_branch
RAISING zcx_abapgit_exception.
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!iv_head_branch TYPE zif_abapgit_persistence=>ty_repo_xml-head_branch
RAISING
zcx_abapgit_exception .
METHODS update_offline
IMPORTING iv_key TYPE zif_abapgit_persistence=>ty_repo-key
iv_offline TYPE zif_abapgit_persistence=>ty_repo_xml-offline
RAISING zcx_abapgit_exception.
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!iv_offline TYPE zif_abapgit_persistence=>ty_repo_xml-offline
RAISING
zcx_abapgit_exception .
METHODS update_dot_abapgit
IMPORTING iv_key TYPE zif_abapgit_persistence=>ty_repo-key
is_dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit
RAISING zcx_abapgit_exception.
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!is_dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit
RAISING
zcx_abapgit_exception .
METHODS add
IMPORTING iv_url TYPE string
iv_branch_name TYPE string
iv_branch TYPE zif_abapgit_definitions=>ty_sha1 OPTIONAL
iv_package TYPE devclass
iv_offline TYPE sap_bool DEFAULT abap_false
is_dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit
RETURNING VALUE(rv_key) TYPE zif_abapgit_persistence=>ty_repo-key
RAISING zcx_abapgit_exception.
IMPORTING
!iv_url TYPE string
!iv_branch_name TYPE string
!iv_branch TYPE zif_abapgit_definitions=>ty_sha1 OPTIONAL
!iv_package TYPE devclass
!iv_offline TYPE sap_bool DEFAULT abap_false
!is_dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit
RETURNING
VALUE(rv_key) TYPE zif_abapgit_persistence=>ty_repo-key
RAISING
zcx_abapgit_exception .
METHODS delete
IMPORTING iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RAISING zcx_abapgit_exception.
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RAISING
zcx_abapgit_exception .
METHODS read
IMPORTING iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RETURNING VALUE(rs_repo) TYPE zif_abapgit_persistence=>ty_repo
RAISING zcx_abapgit_exception
zcx_abapgit_not_found.
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RETURNING
VALUE(rs_repo) TYPE zif_abapgit_persistence=>ty_repo
RAISING
zcx_abapgit_exception
zcx_abapgit_not_found .
METHODS lock
IMPORTING iv_mode TYPE enqmode
iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RAISING zcx_abapgit_exception.
IMPORTING
!iv_mode TYPE enqmode
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RAISING
zcx_abapgit_exception .
METHODS update_local_settings
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
!is_settings TYPE zif_abapgit_persistence=>ty_repo_xml-local_settings
RAISING
zcx_abapgit_exception .
PRIVATE SECTION.
DATA: mo_db TYPE REF TO zcl_abapgit_persistence_db.
DATA mo_db TYPE REF TO zcl_abapgit_persistence_db .
METHODS from_xml
IMPORTING iv_repo_xml_string TYPE string
RETURNING VALUE(rs_repo) TYPE zif_abapgit_persistence=>ty_repo_xml
RAISING zcx_abapgit_exception.
IMPORTING
!iv_repo_xml_string TYPE string
RETURNING
VALUE(rs_repo) TYPE zif_abapgit_persistence=>ty_repo_xml
RAISING
zcx_abapgit_exception .
METHODS to_xml
IMPORTING is_repo TYPE zif_abapgit_persistence=>ty_repo
RETURNING VALUE(rv_repo_xml_string) TYPE string.
IMPORTING
!is_repo TYPE zif_abapgit_persistence=>ty_repo
RETURNING
VALUE(rv_repo_xml_string) TYPE string .
METHODS get_next_id
RETURNING VALUE(rv_next_repo_id) TYPE zif_abapgit_persistence=>ty_content-value
RAISING zcx_abapgit_exception.
RETURNING
VALUE(rv_next_repo_id) TYPE zif_abapgit_persistence=>ty_content-value
RAISING
zcx_abapgit_exception .
ENDCLASS.
@ -147,6 +174,16 @@ CLASS ZCL_ABAPGIT_PERSISTENCE_REPO IMPLEMENTATION.
SOURCE XML lv_xml
RESULT repo = rs_repo ##NO_TEXT.
* automatic migration of old fields
FIND FIRST OCCURRENCE OF '</HEAD_BRANCH><WRITE_PROTECT>X</WRITE_PROTECT>' IN lv_xml.
IF sy-subrc = 0.
rs_repo-local_settings-write_protected = abap_true.
ENDIF.
FIND FIRST OCCURRENCE OF '<IGNORE_SUBPACKAGES>X</IGNORE_SUBPACKAGES></REPO>' IN lv_xml.
IF sy-subrc = 0.
rs_repo-local_settings-ignore_subpackages = abap_true.
ENDIF.
IF rs_repo IS INITIAL.
zcx_abapgit_exception=>raise( 'Inconsistent repo metadata' ).
ENDIF.
@ -336,6 +373,31 @@ CLASS ZCL_ABAPGIT_PERSISTENCE_REPO IMPLEMENTATION.
ENDMETHOD.
METHOD update_local_settings.
DATA: lt_content TYPE zif_abapgit_persistence=>tt_content,
ls_content LIKE LINE OF lt_content,
ls_repo TYPE zif_abapgit_persistence=>ty_repo.
ASSERT NOT iv_key IS INITIAL.
TRY.
ls_repo = read( iv_key ).
CATCH zcx_abapgit_not_found.
zcx_abapgit_exception=>raise( 'key not found' ).
ENDTRY.
ls_repo-local_settings = is_settings.
ls_content-data_str = to_xml( ls_repo ).
mo_db->update( iv_type = zcl_abapgit_persistence_db=>c_type_repo
iv_value = iv_key
iv_data = ls_content-data_str ).
ENDMETHOD.
METHOD update_offline.
DATA: lt_content TYPE zif_abapgit_persistence=>tt_content,

View File

@ -18,19 +18,25 @@ INTERFACE zif_abapgit_persistence PUBLIC.
files TYPE zif_abapgit_definitions=>ty_file_signatures_tt,
END OF ty_local_checksum.
TYPES:
BEGIN OF ty_local_settings,
ignore_subpackages TYPE abap_bool,
write_protected TYPE abap_bool,
only_local_objects TYPE abap_bool,
END OF ty_local_settings.
TYPES: ty_local_checksum_tt TYPE STANDARD TABLE OF ty_local_checksum WITH DEFAULT KEY.
TYPES: BEGIN OF ty_repo_xml,
url TYPE string,
branch_name TYPE string,
sha1 TYPE zif_abapgit_definitions=>ty_sha1,
package TYPE devclass,
offline TYPE sap_bool,
local_checksums TYPE ty_local_checksum_tt,
dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit,
head_branch TYPE string, " HEAD symref of the repo, master branch
write_protect TYPE sap_bool, " Deny destructive ops: pull, switch branch ...
ignore_subpackages TYPE sap_bool,
url TYPE string,
branch_name TYPE string,
sha1 TYPE zif_abapgit_definitions=>ty_sha1,
package TYPE devclass,
offline TYPE sap_bool,
local_checksums TYPE ty_local_checksum_tt,
dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit,
head_branch TYPE string, " HEAD symref of the repo, master branch
local_settings TYPE ty_local_settings,
END OF ty_repo_xml.
TYPES: BEGIN OF ty_repo,

View File

@ -273,7 +273,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
ENDIF.
" Write protect
IF io_repo->is_write_protected( ) = abap_true.
IF io_repo->get_local_settings( )-write_protected = abap_true.
ro_html->add_icon( iv_name = 'lock/darkgrey' iv_hint = 'Locked from pulls' ).
ENDIF.

View File

@ -9,21 +9,43 @@ CLASS zcl_abapgit_gui_page_repo_sett DEFINITION
zif_abapgit_gui_page~on_event REDEFINITION.
PROTECTED SECTION.
CONSTANTS:
BEGIN OF c_action,
save_settings TYPE string VALUE 'save_settings',
END OF c_action.
END OF c_action .
DATA mo_repo TYPE REF TO zcl_abapgit_repo .
DATA: mo_repo TYPE REF TO zcl_abapgit_repo.
METHODS:
render_content REDEFINITION,
parse_post
IMPORTING
it_postdata TYPE cnht_post_data_tab
RETURNING
VALUE(rt_post_fields) TYPE tihttpnvp.
METHODS render_dot_abapgit
IMPORTING
!io_html TYPE REF TO zcl_abapgit_html .
METHODS render_local_settings
IMPORTING
!io_html TYPE REF TO zcl_abapgit_html .
METHODS save
IMPORTING
!it_postdata TYPE cnht_post_data_tab
RAISING
zcx_abapgit_exception .
METHODS save_dot_abap
IMPORTING
!it_post_fields TYPE tihttpnvp
RAISING
zcx_abapgit_exception .
METHODS save_local_settings
IMPORTING
!it_post_fields TYPE tihttpnvp
RAISING
zcx_abapgit_exception .
METHODS parse_post
IMPORTING
!it_postdata TYPE cnht_post_data_tab
RETURNING
VALUE(rt_post_fields) TYPE tihttpnvp .
METHODS render_content
REDEFINITION .
PRIVATE SECTION.
ENDCLASS.
@ -50,11 +72,30 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
METHOD render_content.
CREATE OBJECT ro_html.
ro_html->add( '<div class="settings_container">' ).
ro_html->add( '<form id="settings_form" method="post" action="sapevent:' &&
c_action-save_settings && '">' ).
render_dot_abapgit( ro_html ).
render_local_settings( ro_html ).
ro_html->add( '<br><input type="submit" value="Save" class="submit">' ).
ro_html->add( '</form>' ).
ro_html->add( '</div>' ).
ENDMETHOD.
METHOD render_dot_abapgit.
DATA: ls_dot TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit,
lv_selected TYPE string,
lt_folder_logic TYPE stringtab.
FIELD-SYMBOLS: <lv_folder_logic> TYPE LINE OF stringtab.
ls_dot = mo_repo->get_dot_abapgit( )->get_data( ).
INSERT zif_abapgit_dot_abapgit=>c_folder_logic-full
@ -63,13 +104,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
INSERT zif_abapgit_dot_abapgit=>c_folder_logic-prefix
INTO TABLE lt_folder_logic.
CREATE OBJECT ro_html.
ro_html->add( '<div class="settings_container">' ).
ro_html->add( '<form id="settings_form" method="post" action="sapevent:' &&
c_action-save_settings && '">' ).
ro_html->add( '<br>' ).
ro_html->add( 'Folder logic: <select name="folder_logic">' ).
io_html->add( '<h2>.abapgit.xml</h2>' ).
io_html->add( 'Folder logic: <select name="folder_logic">' ).
LOOP AT lt_folder_logic ASSIGNING <lv_folder_logic>.
@ -79,49 +115,128 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
CLEAR: lv_selected.
ENDIF.
ro_html->add( |<option value="{ <lv_folder_logic> }" |
io_html->add( |<option value="{ <lv_folder_logic> }" |
&& |{ lv_selected }>|
&& |{ <lv_folder_logic> }</option>| ).
ENDLOOP.
ro_html->add( '</select>' ).
ro_html->add( '<br>' ).
io_html->add( '</select>' ).
io_html->add( '<br>' ).
ro_html->add( 'Starting folder: <input name="starting_folder" type="text" size="10" value="' &&
io_html->add( 'Starting folder: <input name="starting_folder" type="text" size="10" value="' &&
ls_dot-starting_folder && '">' ).
ro_html->add( '<br>' ).
ro_html->add( '<input type="submit" value="Save" class="submit">' ).
ro_html->add( '</form>' ).
ro_html->add( '</div>' ).
io_html->add( '<br>' ).
ENDMETHOD. "render_content
ENDMETHOD.
METHOD render_local_settings.
DATA: lv_checked TYPE string,
ls_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings.
ls_settings = mo_repo->get_local_settings( ).
io_html->add( '<h2>Local settings</h2>' ).
CLEAR lv_checked.
IF ls_settings-write_protected = abap_true.
lv_checked = | checked|.
ENDIF.
io_html->add( |Write protected <input name="write_protected" type="checkbox"{ lv_checked }><br>| ).
CLEAR lv_checked.
IF ls_settings-ignore_subpackages = abap_true.
lv_checked = | checked|.
ENDIF.
io_html->add( |Ignore subpackages <input name="ignore_subpackages" type="checkbox"{ lv_checked }><br>| ).
CLEAR lv_checked.
IF ls_settings-only_local_objects = abap_true.
lv_checked = | checked|.
ENDIF.
io_html->add( |Only local objects <input name="only_local_objects" type="checkbox"{ lv_checked }><br>| ).
ENDMETHOD.
METHOD save.
DATA: lt_post_fields TYPE tihttpnvp.
lt_post_fields = parse_post( it_postdata ).
save_dot_abap( lt_post_fields ).
save_local_settings( lt_post_fields ).
mo_repo->refresh( ).
ENDMETHOD.
METHOD save_dot_abap.
DATA: lo_dot TYPE REF TO zcl_abapgit_dot_abapgit,
ls_post_field LIKE LINE OF it_post_fields.
lo_dot = mo_repo->get_dot_abapgit( ).
READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'folder_logic'.
ASSERT sy-subrc = 0.
lo_dot->set_folder_logic( ls_post_field-value ).
READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'starting_folder'.
ASSERT sy-subrc = 0.
lo_dot->set_starting_folder( ls_post_field-value ).
mo_repo->set_dot_abapgit( lo_dot ).
ENDMETHOD.
METHOD save_local_settings.
DATA: ls_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings,
ls_post_field LIKE LINE OF it_post_fields.
ls_settings = mo_repo->get_local_settings( ).
READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'write_protected' value = 'on'.
IF sy-subrc = 0.
ls_settings-write_protected = abap_true.
ELSE.
ls_settings-write_protected = abap_false.
ENDIF.
READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'ignore_subpackages' value = 'on'.
IF sy-subrc = 0.
ls_settings-ignore_subpackages = abap_true.
ELSE.
ls_settings-ignore_subpackages = abap_false.
ENDIF.
READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'only_local_objects' value = 'on'.
IF sy-subrc = 0.
ls_settings-only_local_objects = abap_true.
ELSE.
ls_settings-only_local_objects = abap_false.
ENDIF.
mo_repo->set_local_settings( ls_settings ).
ENDMETHOD.
METHOD zif_abapgit_gui_page~on_event.
DATA: lt_post_fields TYPE tihttpnvp,
lo_dot TYPE REF TO zcl_abapgit_dot_abapgit,
ls_post_field LIKE LINE OF lt_post_fields.
CASE iv_action.
WHEN c_action-save_settings.
lt_post_fields = parse_post( it_postdata ).
lo_dot = mo_repo->get_dot_abapgit( ).
READ TABLE lt_post_fields INTO ls_post_field WITH KEY name = 'folder_logic'.
ASSERT sy-subrc = 0.
lo_dot->set_folder_logic( ls_post_field-value ).
READ TABLE lt_post_fields INTO ls_post_field WITH KEY name = 'starting_folder'.
ASSERT sy-subrc = 0.
lo_dot->set_starting_folder( ls_post_field-value ).
mo_repo->set_dot_abapgit( lo_dot ).
mo_repo->refresh( ).
save( it_postdata ).
ev_state = zif_abapgit_definitions=>gc_event_state-go_back.
ENDCASE.

View File

@ -140,7 +140,7 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
lv_key = mo_repo->get_key( ).
IF mo_repo->is_write_protected( ) = abap_true.
IF mo_repo->get_local_settings( )-write_protected = abap_true.
lv_wp_opt = zif_abapgit_definitions=>gc_html_opt-crossout.
lv_pull_opt = zif_abapgit_definitions=>gc_html_opt-crossout.
ELSE.
@ -200,7 +200,7 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
iv_act = |{ zif_abapgit_definitions=>gc_action-repo_remove }?{ lv_key }| ).
CLEAR lv_crossout.
IF mo_repo->is_write_protected( ) = abap_true
IF mo_repo->get_local_settings( )-write_protected = abap_true
OR zcl_abapgit_auth=>is_allowed( zif_abapgit_auth=>gc_authorization-uninstall ) = abap_false.
lv_crossout = zif_abapgit_definitions=>gc_html_opt-crossout.
ENDIF.

View File

@ -8,16 +8,18 @@ CLASS zcl_abapgit_migrations DEFINITION
RAISING zcx_abapgit_exception.
PRIVATE SECTION.
CLASS-METHODS rebuild_local_checksums_161112
RAISING zcx_abapgit_exception.
CLASS-METHODS local_dot_abapgit
RAISING zcx_abapgit_exception.
CLASS-METHODS rebuild_local_checksums_161112
RAISING
zcx_abapgit_exception .
CLASS-METHODS local_dot_abapgit
RAISING
zcx_abapgit_exception .
ENDCLASS.
CLASS zcl_abapgit_migrations IMPLEMENTATION.
CLASS ZCL_ABAPGIT_MIGRATIONS IMPLEMENTATION.
METHOD local_dot_abapgit.

View File

@ -130,7 +130,7 @@ ENDCLASS.
CLASS zcl_abapgit_objects IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
METHOD changed_by.
@ -411,7 +411,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
lo_xml = lo_files->read_xml( ).
li_obj = create_object( is_item = ls_item
iv_language = io_repo->get_master_language( )
iv_language = io_repo->get_dot_abapgit( )->get_master_language( )
is_metadata = lo_xml->get_metadata( ) ).
compare_remote_to_local(

View File

@ -2,6 +2,7 @@ CLASS zcl_abapgit_repo DEFINITION
PUBLIC
ABSTRACT
CREATE PUBLIC
GLOBAL FRIENDS zcl_abapgit_repo_srv .
PUBLIC SECTION.
@ -39,15 +40,6 @@ CLASS zcl_abapgit_repo DEFINITION
METHODS get_package
RETURNING
VALUE(rv_package) TYPE zif_abapgit_persistence=>ty_repo-package .
METHODS get_master_language
RETURNING
VALUE(rv_language) TYPE spras .
METHODS is_write_protected
RETURNING
VALUE(rv_yes) TYPE sap_bool .
METHODS ignore_subpackages
RETURNING
VALUE(rv_yes) TYPE sap_bool .
METHODS delete
RAISING
zcx_abapgit_exception .
@ -91,23 +83,35 @@ CLASS zcl_abapgit_repo DEFINITION
!it_files TYPE zif_abapgit_definitions=>ty_files_tt
RAISING
zcx_abapgit_exception .
METHODS get_local_settings
RETURNING
VALUE(rs_settings) TYPE zif_abapgit_persistence=>ty_repo-local_settings .
METHODS set_local_settings
IMPORTING
!is_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
DATA: mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt,
mt_remote TYPE zif_abapgit_definitions=>ty_files_tt,
mv_do_local_refresh TYPE abap_bool,
mv_last_serialization TYPE timestamp,
ms_data TYPE zif_abapgit_persistence=>ty_repo.
METHODS:
set
IMPORTING iv_sha1 TYPE zif_abapgit_definitions=>ty_sha1 OPTIONAL
it_checksums TYPE zif_abapgit_persistence=>ty_local_checksum_tt OPTIONAL
iv_url TYPE zif_abapgit_persistence=>ty_repo-url OPTIONAL
iv_branch_name TYPE zif_abapgit_persistence=>ty_repo-branch_name OPTIONAL
iv_head_branch TYPE zif_abapgit_persistence=>ty_repo-head_branch OPTIONAL
iv_offline TYPE zif_abapgit_persistence=>ty_repo-offline OPTIONAL
is_dot_abapgit TYPE zif_abapgit_persistence=>ty_repo-dot_abapgit OPTIONAL
RAISING zcx_abapgit_exception.
DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt .
DATA mt_remote TYPE zif_abapgit_definitions=>ty_files_tt .
DATA mv_do_local_refresh TYPE abap_bool .
DATA mv_last_serialization TYPE timestamp .
DATA ms_data TYPE zif_abapgit_persistence=>ty_repo .
METHODS set
IMPORTING
!iv_sha1 TYPE zif_abapgit_definitions=>ty_sha1 OPTIONAL
!it_checksums TYPE zif_abapgit_persistence=>ty_local_checksum_tt OPTIONAL
!iv_url TYPE zif_abapgit_persistence=>ty_repo-url OPTIONAL
!iv_branch_name TYPE zif_abapgit_persistence=>ty_repo-branch_name OPTIONAL
!iv_head_branch TYPE zif_abapgit_persistence=>ty_repo-head_branch OPTIONAL
!iv_offline TYPE zif_abapgit_persistence=>ty_repo-offline OPTIONAL
!is_dot_abapgit TYPE zif_abapgit_persistence=>ty_repo-dot_abapgit OPTIONAL
!is_local_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings OPTIONAL
RAISING
zcx_abapgit_exception .
PRIVATE SECTION.
ENDCLASS.
@ -232,7 +236,8 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
lt_cache = mt_local.
lt_tadir = zcl_abapgit_tadir=>read(
iv_package = get_package( )
iv_ignore_subpackages = ignore_subpackages( )
iv_ignore_subpackages = get_local_settings( )-ignore_subpackages
iv_only_local_objects = get_local_settings( )-only_local_objects
io_dot = get_dot_abapgit( )
io_log = io_log ).
@ -279,7 +284,7 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
lt_files = zcl_abapgit_objects=>serialize(
is_item = ls_item
iv_language = get_master_language( )
iv_language = get_dot_abapgit( )->get_master_language( )
io_log = io_log ).
LOOP AT lt_files ASSIGNING <ls_file>.
<ls_file>-path = <ls_tadir>-path.
@ -326,8 +331,10 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
ENDMETHOD.
METHOD get_master_language.
rv_language = ms_data-dot_abapgit-master_language.
METHOD get_local_settings.
rs_settings = ms_data-local_settings.
ENDMETHOD.
@ -348,21 +355,11 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
ENDMETHOD. "get_package
METHOD ignore_subpackages.
rv_yes = ms_data-ignore_subpackages.
ENDMETHOD.
METHOD is_offline.
rv_offline = ms_data-offline.
ENDMETHOD.
METHOD is_write_protected.
rv_yes = ms_data-write_protect.
ENDMETHOD. "is_write_protected
METHOD rebuild_local_checksums. "LOCAL (BASE)
DATA: lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt,
@ -418,6 +415,8 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
METHOD set.
* TODO: refactor
DATA: lo_persistence TYPE REF TO zcl_abapgit_persistence_repo.
@ -427,7 +426,8 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
OR iv_branch_name IS SUPPLIED
OR iv_head_branch IS SUPPLIED
OR iv_offline IS SUPPLIED
OR is_dot_abapgit IS SUPPLIED.
OR is_dot_abapgit IS SUPPLIED
OR is_local_settings IS SUPPLIED.
CREATE OBJECT lo_persistence.
@ -480,6 +480,13 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
ms_data-dot_abapgit = is_dot_abapgit.
ENDIF.
IF is_local_settings IS SUPPLIED.
lo_persistence->update_local_settings(
iv_key = ms_data-key
is_settings = is_local_settings ).
ms_data-local_settings = is_local_settings.
ENDIF.
ENDMETHOD.
@ -495,6 +502,13 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
ENDMETHOD.
METHOD set_local_settings.
set( is_local_settings = is_settings ).
ENDMETHOD.
METHOD update_local_checksums.
" ASSUMTION: SHA1 in param is actual and correct.

View File

@ -115,7 +115,7 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
METHOD deserialize.
IF ms_data-write_protect = abap_true.
IF ms_data-local_settings-write_protected = abap_true.
zcx_abapgit_exception=>raise( 'Cannot deserialize. Local code is write-protected by repo config' ).
ENDIF.
@ -409,7 +409,7 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
METHOD set_branch_name.
IF ms_data-write_protect = abap_true.
IF ms_data-local_settings-write_protected = abap_true.
zcx_abapgit_exception=>raise( 'Cannot switch branch. Local code is write-protected by repo config' ).
ENDIF.
@ -421,7 +421,7 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
METHOD set_new_remote.
IF ms_data-write_protect = abap_true.
IF ms_data-local_settings-write_protected = abap_true.
zcx_abapgit_exception=>raise( 'Cannot change remote. Local code is write-protected by repo config' ).
ENDIF.
@ -441,7 +441,7 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
METHOD set_url.
IF ms_data-write_protect = abap_true.
IF ms_data-local_settings-write_protected = abap_true.
zcx_abapgit_exception=>raise( 'Cannot change URL. Local code is write-protected by repo config' ).
ENDIF.

View File

@ -130,7 +130,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION.
lo_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
IF lo_repo->is_write_protected( ) = abap_true.
IF lo_repo->get_local_settings( )-write_protected = abap_true.
zcx_abapgit_exception=>raise( 'Cannot purge. Local code is write-protected by repo config' ).
ENDIF.

View File

@ -1,42 +1,60 @@
class ZCL_ABAPGIT_TADIR definition public final create public.
CLASS zcl_abapgit_tadir DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS:
read
IMPORTING iv_package TYPE tadir-devclass
iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
io_dot TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
io_log TYPE REF TO zcl_abapgit_log OPTIONAL
RETURNING VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING zcx_abapgit_exception,
read_single
IMPORTING iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
iv_object TYPE tadir-object
iv_obj_name TYPE tadir-obj_name
RETURNING VALUE(rs_tadir) TYPE tadir
RAISING zcx_abapgit_exception,
get_object_package
IMPORTING iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
iv_object TYPE tadir-object
iv_obj_name TYPE tadir-obj_name
RETURNING VALUE(rv_devclass) TYPE tadir-devclass
RAISING zcx_abapgit_exception.
CLASS-METHODS read
IMPORTING
!iv_package TYPE tadir-devclass
!iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
!iv_only_local_objects TYPE abap_bool DEFAULT abap_false
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
!io_log TYPE REF TO zcl_abapgit_log OPTIONAL
RETURNING
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
CLASS-METHODS read_single
IMPORTING
!iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object TYPE tadir-object
!iv_obj_name TYPE tadir-obj_name
RETURNING
VALUE(rs_tadir) TYPE tadir
RAISING
zcx_abapgit_exception .
CLASS-METHODS get_object_package
IMPORTING
!iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object TYPE tadir-object
!iv_obj_name TYPE tadir-obj_name
RETURNING
VALUE(rv_devclass) TYPE tadir-devclass
RAISING
zcx_abapgit_exception .
PRIVATE SECTION.
CLASS-METHODS:
check_exists
IMPORTING it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
RETURNING VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING zcx_abapgit_exception,
build
IMPORTING iv_package TYPE tadir-devclass
iv_top TYPE tadir-devclass
io_dot TYPE REF TO zcl_abapgit_dot_abapgit
iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
io_log TYPE REF TO zcl_abapgit_log OPTIONAL
RETURNING VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING zcx_abapgit_exception.
CLASS-METHODS check_exists
IMPORTING
!it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
RETURNING
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
CLASS-METHODS build
IMPORTING
!iv_package TYPE tadir-devclass
!iv_top TYPE tadir-devclass
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
!iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
!iv_only_local_objects TYPE abap_bool
!io_log TYPE REF TO zcl_abapgit_log OPTIONAL
RETURNING
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
ENDCLASS.
@ -51,11 +69,14 @@ CLASS ZCL_ABAPGIT_TADIR IMPLEMENTATION.
lv_path TYPE string,
lo_skip_objects TYPE REF TO zcl_abapgit_skip_objects,
lt_excludes TYPE RANGE OF trobjtype,
lt_srcsystem TYPE RANGE OF tadir-srcsystem,
ls_srcsystem LIKE LINE OF lt_srcsystem,
ls_exclude LIKE LINE OF lt_excludes.
FIELD-SYMBOLS: <ls_tdevc> LIKE LINE OF lt_tdevc,
<ls_tadir> LIKE LINE OF rt_tadir.
ls_exclude-sign = 'I'.
ls_exclude-option = 'EQ'.
@ -68,12 +89,20 @@ CLASS ZCL_ABAPGIT_TADIR IMPLEMENTATION.
ls_exclude-low = 'STOB'. " auto generated by core data services
APPEND ls_exclude TO lt_excludes.
IF iv_only_local_objects = abap_true.
ls_srcsystem-sign = 'I'.
ls_srcsystem-option = 'EQ'.
ls_srcsystem-low = sy-sysid.
APPEND ls_srcsystem TO lt_srcsystem.
ENDIF.
SELECT * FROM tadir
INTO CORRESPONDING FIELDS OF TABLE rt_tadir
WHERE devclass = iv_package
AND pgmid = 'R3TR'
AND object NOT IN lt_excludes
AND delflag = abap_false
AND srcsystem IN lt_srcsystem
ORDER BY PRIMARY KEY. "#EC CI_GENBUFF "#EC CI_SUBRC
CREATE OBJECT lo_skip_objects.
@ -115,10 +144,11 @@ CLASS ZCL_ABAPGIT_TADIR IMPLEMENTATION.
ENDIF.
LOOP AT lt_tdevc ASSIGNING <ls_tdevc>.
lt_tadir = build( iv_package = <ls_tdevc>-devclass
iv_top = iv_top
io_dot = io_dot
io_log = io_log ).
lt_tadir = build( iv_package = <ls_tdevc>-devclass
iv_only_local_objects = iv_only_local_objects
iv_top = iv_top
io_dot = io_dot
io_log = io_log ).
APPEND LINES OF lt_tadir TO rt_tadir.
ENDLOOP.
@ -189,6 +219,7 @@ CLASS ZCL_ABAPGIT_TADIR IMPLEMENTATION.
iv_top = iv_package
io_dot = io_dot
iv_ignore_subpackages = iv_ignore_subpackages
iv_only_local_objects = iv_only_local_objects
io_log = io_log ).
rt_tadir = check_exists( rt_tadir ).

View File

@ -379,4 +379,5 @@ INTERFACE zif_abapgit_definitions PUBLIC.
inactive TYPE r3state VALUE 'I',
END OF gc_version .
CONSTANTS gc_tag_prefix TYPE string VALUE 'refs/tags/' ##NO_TEXT.
ENDINTERFACE.