diff --git a/src/ui/zcl_abapgit_gui_view_repo.clas.abap b/src/ui/zcl_abapgit_gui_view_repo.clas.abap
index 46697a918..da73a3b4e 100644
--- a/src/ui/zcl_abapgit_gui_view_repo.clas.abap
+++ b/src/ui/zcl_abapgit_gui_view_repo.clas.abap
@@ -84,7 +84,10 @@ CLASS zcl_abapgit_gui_view_repo DEFINITION
RETURNING VALUE(rv_html) TYPE string,
build_inactive_object_code
IMPORTING is_item TYPE zif_abapgit_definitions=>ty_repo_item
- RETURNING VALUE(rv_inactive_html_code) TYPE string.
+ RETURNING VALUE(rv_inactive_html_code) TYPE string,
+ open_in_master_language
+ RAISING zcx_abapgit_exception.
+
ENDCLASS.
@@ -220,6 +223,11 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
iv_act = |{ zif_abapgit_definitions=>c_action-repo_refresh_checksums }?{ lv_key }|
iv_opt = lv_crossout ).
+ IF mo_repo->get_dot_abapgit( )->get_master_language( ) <> cl_abap_syst=>get_logon_language( ).
+ lo_tb_advanced->add( iv_txt = 'Open in master language'
+ iv_act = |{ zif_abapgit_definitions=>c_action-repo_open_in_master_lang }?{ lv_key }| ).
+ ENDIF.
+
lo_tb_advanced->add( iv_txt = 'Remove'
iv_act = |{ zif_abapgit_definitions=>c_action-repo_remove }?{ lv_key }| ).
@@ -360,6 +368,61 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
ENDMETHOD.
+ METHOD open_in_master_language.
+
+ CONSTANTS:
+ lc_abapgit_tcode TYPE tcode VALUE `ZABAPGIT` ##NO_TEXT.
+
+ DATA:
+ lv_master_language TYPE spras,
+ lt_spagpa TYPE STANDARD TABLE OF rfc_spagpa,
+ ls_spagpa LIKE LINE OF lt_spagpa,
+ ls_item TYPE zif_abapgit_definitions=>ty_item.
+
+ " https://blogs.sap.com/2017/01/13/logon-language-sy-langu-and-rfc/
+
+ lv_master_language = mo_repo->get_dot_abapgit( )->get_master_language( ).
+
+ IF lv_master_language = cl_abap_syst=>get_logon_language( ).
+ zcx_abapgit_exception=>raise( |Repo already opened in master language| ).
+ ENDIF.
+
+ ls_item-obj_name = lc_abapgit_tcode.
+ ls_item-obj_type = |TRAN|.
+
+ IF zcl_abapgit_objects=>exists( ls_item ) = abap_false.
+ zcx_abapgit_exception=>raise( |Please install the abapGit repository| ).
+ ENDIF.
+
+ SET LOCALE LANGUAGE lv_master_language.
+
+ ls_spagpa-parid = zif_abapgit_definitions=>c_spagpa_param_repo_key.
+ ls_spagpa-parval = mo_repo->get_key( ).
+ INSERT ls_spagpa INTO TABLE lt_spagpa.
+
+ CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
+ DESTINATION 'NONE'
+ STARTING NEW TASK 'ABAPGIT'
+ EXPORTING
+ tcode = lc_abapgit_tcode
+ TABLES
+ spagpa_tab = lt_spagpa
+ EXCEPTIONS
+ call_transaction_denied = 1
+ tcode_invalid = 2
+ communication_failure = 3
+ system_failure = 4
+ OTHERS = 5.
+
+ IF sy-subrc <> 0.
+ zcx_abapgit_exception=>raise( |Error from ABAP4_CALL_TRANSACTION. Subrc = { sy-subrc }| ).
+ ENDIF.
+
+ MESSAGE |Repository opened in a new window| TYPE 'S'.
+
+ ENDMETHOD.
+
+
METHOD render_empty_package.
DATA: lv_text TYPE string.
@@ -527,20 +590,6 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
ENDMETHOD.
- METHOD render_parent_dir.
-
- CREATE OBJECT ro_html.
-
- ro_html->add( '
' ).
- ro_html->add( |{ zcl_abapgit_html=>icon( 'dir' ) } | | ).
- ro_html->add( |{ build_dir_jump_link( '..' ) } | | ).
- IF mo_repo->is_offline( ) = abap_false.
- ro_html->add( | | | ). " Dummy for online
- ENDIF.
- ro_html->add( '
' ).
-
- ENDMETHOD.
-
METHOD render_item_lock_column.
DATA: li_cts_api TYPE REF TO zif_abapgit_cts_api,
lv_transport TYPE trkorr,
@@ -574,6 +623,21 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
ENDMETHOD.
+ METHOD render_parent_dir.
+
+ CREATE OBJECT ro_html.
+
+ ro_html->add( '' ).
+ ro_html->add( |{ zcl_abapgit_html=>icon( 'dir' ) } | | ).
+ ro_html->add( |{ build_dir_jump_link( '..' ) } | | ).
+ IF mo_repo->is_offline( ) = abap_false.
+ ro_html->add( | | | ). " Dummy for online
+ ENDIF.
+ ro_html->add( '
' ).
+
+ ENDMETHOD.
+
+
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
ENDMETHOD.
@@ -601,6 +665,9 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
WHEN c_actions-display_more. " Increase MAX lines limit
mv_max_lines = mv_max_lines + mv_max_setting.
ev_state = zif_abapgit_definitions=>c_event_state-re_render.
+ WHEN zif_abapgit_definitions=>c_action-repo_open_in_master_lang.
+ open_in_master_language( ).
+ ev_state = zif_abapgit_definitions=>c_event_state-re_render.
ENDCASE.
ENDMETHOD.
diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap
index 012670cee..3b503fb03 100644
--- a/src/zabapgit_forms.prog.abap
+++ b/src/zabapgit_forms.prog.abap
@@ -31,11 +31,18 @@ ENDFORM. "run
FORM open_gui RAISING zcx_abapgit_exception.
+ DATA: lv_repo_key TYPE zif_abapgit_persistence=>ty_value.
+
IF sy-batch = abap_true.
zcl_abapgit_background=>run( ).
ELSE.
- IF zcl_abapgit_persist_settings=>get_instance( )->read( )->get_show_default_repo( ) = abap_false.
+ GET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD lv_repo_key.
+
+ IF lv_repo_key IS NOT INITIAL.
+ SET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD ''.
+ zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lv_repo_key ).
+ ELSEIF zcl_abapgit_persist_settings=>get_instance( )->read( )->get_show_default_repo( ) = abap_false.
" Don't show the last seen repo at startup
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( || ).
ENDIF.
diff --git a/src/zcl_abapgit_repo.clas.abap b/src/zcl_abapgit_repo.clas.abap
index 89e5470be..2b6726ca5 100644
--- a/src/zcl_abapgit_repo.clas.abap
+++ b/src/zcl_abapgit_repo.clas.abap
@@ -169,11 +169,16 @@ CLASS zcl_abapgit_repo DEFINITION
METHODS update_last_deserialize
RAISING
zcx_abapgit_exception .
+ METHODS conversion_exit_isola_output
+ IMPORTING
+ iv_spras TYPE spras
+ RETURNING
+ VALUE(rv_spras) TYPE laiso.
ENDCLASS.
-CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
+CLASS zcl_abapgit_repo IMPLEMENTATION.
METHOD apply_filter.
@@ -284,15 +289,23 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
METHOD deserialize_checks.
- DATA: lt_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt.
+ DATA: lt_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt,
+ lv_master_language TYPE spras,
+ lv_logon_language TYPE spras.
find_remote_dot_abapgit( ).
+ lv_master_language = get_dot_abapgit( )->get_master_language( ).
+ lv_logon_language = cl_abap_syst=>get_logon_language( ).
+
IF get_local_settings( )-write_protected = abap_true.
zcx_abapgit_exception=>raise( 'Cannot deserialize. Local code is write-protected by repo config' ).
- ELSEIF get_dot_abapgit( )->get_master_language( ) <> sy-langu.
- zcx_abapgit_exception=>raise( 'Current login language does not match master language' ).
+ ELSEIF lv_master_language <> lv_logon_language.
+ zcx_abapgit_exception=>raise( |Current login language |
+ && |'{ conversion_exit_isola_output( lv_logon_language ) }'|
+ && | does not match master language |
+ && |'{ conversion_exit_isola_output( lv_master_language ) }'| ).
ENDIF.
rs_checks = zcl_abapgit_objects=>deserialize_checks( me ).
@@ -760,4 +773,15 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
set( it_checksums = lt_checksums ).
ENDMETHOD.
+
+ METHOD conversion_exit_isola_output.
+
+ CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
+ EXPORTING
+ input = iv_spras
+ IMPORTING
+ output = rv_spras.
+
+ ENDMETHOD.
+
ENDCLASS.
diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap
index 1d12acc64..254f82f64 100644
--- a/src/zif_abapgit_definitions.intf.abap
+++ b/src/zif_abapgit_definitions.intf.abap
@@ -438,6 +438,7 @@ INTERFACE zif_abapgit_definitions PUBLIC.
repo_transport_to_branch TYPE string VALUE 'repo_transport_to_branch',
repo_syntax_check TYPE string VALUE 'repo_syntax_check',
repo_code_inspector TYPE string VALUE 'repo_code_inspector',
+ repo_open_in_master_lang TYPE string VALUE 'repo_open_in_master_lang',
abapgit_home TYPE string VALUE 'abapgit_home',
abapgit_install TYPE string VALUE 'abapgit_install',
@@ -491,5 +492,6 @@ INTERFACE zif_abapgit_definitions PUBLIC.
inactive TYPE r3state VALUE 'I',
END OF c_version .
CONSTANTS c_tag_prefix TYPE string VALUE 'refs/tags/' ##NO_TEXT.
+ CONSTANTS c_spagpa_param_repo_key TYPE char20 VALUE 'REPO_KEY'.
ENDINTERFACE.