diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap
index a903ad17e..91ba955f2 100644
--- a/src/zabapgit_git.prog.abap
+++ b/src/zabapgit_git.prog.abap
@@ -307,8 +307,12 @@ CLASS lcl_git_transport IMPLEMENTATION.
METHOD acquire_login_details.
DATA:
- lv_user TYPE string,
- lv_pass TYPE string.
+ lv_default_user TYPE string,
+ lv_user TYPE string,
+ lv_pass TYPE string.
+
+ lv_default_user = lcl_app=>user( )->get_repo_username( iv_url = iv_url ).
+ lv_user = lv_default_user.
lcl_password_dialog=>popup(
EXPORTING
@@ -321,6 +325,10 @@ CLASS lcl_git_transport IMPLEMENTATION.
lcx_exception=>raise( 'HTTP 401, unauthorized' ).
ENDIF.
+ IF lv_user <> lv_default_user.
+ lcl_app=>user( )->set_repo_username( iv_url = iv_url iv_username = lv_user ).
+ ENDIF.
+
ii_client->authenticate(
username = lv_user
password = lv_pass ).
diff --git a/src/zabapgit_page_commit.prog.abap b/src/zabapgit_page_commit.prog.abap
index 97b972e3b..1e04d19ee 100644
--- a/src/zabapgit_page_commit.prog.abap
+++ b/src/zabapgit_page_commit.prog.abap
@@ -80,7 +80,7 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
DATA: lo_user TYPE REF TO lcl_persistence_user,
lv_user TYPE string,
- lv_key TYPE string,
+ lv_key TYPE lcl_persistence_db=>ty_value,
lv_email TYPE string.
* see https://git-scm.com/book/ch5-2.html
@@ -88,10 +88,18 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
* body should wrap at 72 characters
lo_user = lcl_app=>user( ).
- lv_user = lo_user->get_username( ).
- lv_email = lo_user->get_email( ).
lv_key = mo_repo->get_key( ).
+ lv_user = lo_user->get_repo_username( mo_repo->get_url( ) ).
+ IF lv_user IS INITIAL.
+ lv_user = lo_user->get_username( ).
+ ENDIF.
+
+ lv_email = lo_user->get_repo_email( mo_repo->get_url( ) ).
+ IF lv_email IS INITIAL.
+ lv_email = lo_user->get_email( ).
+ ENDIF.
+
CREATE OBJECT ro_html.
ro_html->add( '
' ).
@@ -245,8 +253,8 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
ls_fields = lcl_html_action_utils=>parse_commit_request( it_postdata ).
lo_user = lcl_app=>user( ).
- lo_user->set_username( ls_fields-username ).
- lo_user->set_email( ls_fields-email ).
+ lo_user->set_repo_username( iv_url = mo_repo->get_url( ) iv_username = ls_fields-username ).
+ lo_user->set_repo_email( iv_url = mo_repo->get_url( ) iv_email = ls_fields-email ).
IF ls_fields-username IS INITIAL.
lcx_exception=>raise( 'empty username' ).
diff --git a/src/zabapgit_password_dialog.prog.abap b/src/zabapgit_password_dialog.prog.abap
index 5914fa801..46a09e151 100644
--- a/src/zabapgit_password_dialog.prog.abap
+++ b/src/zabapgit_password_dialog.prog.abap
@@ -100,6 +100,10 @@ CLASS lcl_password_dialog IMPLEMENTATION.
EXPORTING p_status = sy-pfkey
TABLES p_exclude = lt_ucomm.
+ IF p_user IS NOT INITIAL.
+ SET CURSOR FIELD 'P_PASS'.
+ ENDIF.
+
ENDMETHOD. "on_screen_output
METHOD on_screen_event.
diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap
index 05fa30cec..981578907 100644
--- a/src/zabapgit_persistence.prog.abap
+++ b/src/zabapgit_persistence.prog.abap
@@ -706,6 +706,26 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
RETURNING VALUE(rv_key) TYPE lcl_persistence_repo=>ty_repo-key
RAISING lcx_exception.
+ METHODS set_repo_username
+ IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url
+ iv_username TYPE string
+ RAISING lcx_exception.
+
+ METHODS get_repo_username
+ IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url
+ RETURNING VALUE(rv_username) TYPE string
+ RAISING lcx_exception.
+
+ METHODS set_repo_email
+ IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url
+ iv_email TYPE string
+ RAISING lcx_exception.
+
+ METHODS get_repo_email
+ IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url
+ RETURNING VALUE(rv_email) TYPE string
+ RAISING lcx_exception.
+
PRIVATE SECTION.
CONSTANTS c_type_user TYPE lcl_persistence_db=>ty_type VALUE 'USER'.
@@ -716,10 +736,18 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
TYPE STANDARD TABLE OF lcl_persistence_repo=>ty_repo-key
WITH DEFAULT KEY.
- TYPES: BEGIN OF ty_user,
+ TYPES: BEGIN OF ty_repo_config,
+ url TYPE lcl_persistence_repo=>ty_repo-url,
username TYPE string,
email TYPE string,
- repo_show TYPE lcl_persistence_repo=>ty_repo-key,
+ END OF ty_repo_config.
+ TYPES: ty_repo_config_tt TYPE STANDARD TABLE OF ty_repo_config WITH DEFAULT KEY.
+
+ TYPES: BEGIN OF ty_user,
+ username TYPE string,
+ email TYPE string,
+ repo_show TYPE lcl_persistence_repo=>ty_repo-key,
+ repo_config TYPE ty_repo_config_tt,
END OF ty_user.
METHODS constructor
@@ -742,6 +770,16 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
IMPORTING is_user TYPE ty_user
RAISING lcx_exception.
+ METHODS read_repo_config
+ IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url
+ RETURNING VALUE(rs_repo_config) TYPE ty_repo_config
+ RAISING lcx_exception.
+
+ METHODS update_repo_config
+ IMPORTING iv_url TYPE lcl_persistence_repo=>ty_repo-url
+ is_repo_config TYPE ty_repo_config
+ RAISING lcx_exception.
+
ENDCLASS. "lcl_persistence_user DEFINITION
*----------------------------------------------------------------------*
@@ -1059,6 +1097,67 @@ CLASS lcl_persistence_user IMPLEMENTATION.
ENDMETHOD.
+ METHOD read_repo_config.
+ DATA: lt_repo_config TYPE ty_repo_config_tt,
+ lv_key TYPE string.
+
+ lv_key = to_lower( iv_url ).
+ lt_repo_config = read( )-repo_config.
+ READ TABLE lt_repo_config INTO rs_repo_config WITH KEY url = lv_key.
+
+ ENDMETHOD. "read_repo_config
+
+ METHOD update_repo_config.
+ DATA: ls_user TYPE ty_user,
+ lv_key TYPE string.
+ FIELD-SYMBOLS TYPE ty_repo_config.
+
+ ls_user = read( ).
+ lv_key = to_lower( iv_url ).
+
+ READ TABLE ls_user-repo_config ASSIGNING WITH KEY url = lv_key.
+ IF sy-subrc IS NOT INITIAL.
+ APPEND INITIAL LINE TO ls_user-repo_config ASSIGNING .
+ ENDIF.
+ = is_repo_config.
+ -url = lv_key.
+
+ update( ls_user ).
+
+ ENDMETHOD. "update_repo_config
+
+ METHOD set_repo_username.
+
+ DATA: ls_repo_config TYPE ty_repo_config.
+
+ ls_repo_config = read_repo_config( iv_url ).
+ ls_repo_config-username = iv_username.
+ update_repo_config( iv_url = iv_url is_repo_config = ls_repo_config ).
+
+ ENDMETHOD. "set_repo_username
+
+ METHOD get_repo_username.
+
+ rv_username = read_repo_config( iv_url )-username.
+
+ ENDMETHOD. "get_repo_username
+
+ METHOD set_repo_email.
+
+ DATA: ls_repo_config TYPE ty_repo_config.
+
+ ls_repo_config = read_repo_config( iv_url ).
+ ls_repo_config-email = iv_email.
+ update_repo_config( iv_url = iv_url is_repo_config = ls_repo_config ).
+
+ ENDMETHOD. "set_repo_email
+
+ METHOD get_repo_email.
+
+ rv_email = read_repo_config( iv_url )-email.
+
+ ENDMETHOD. "get_repo_email
+
ENDCLASS.
CLASS lcl_persistence_db IMPLEMENTATION.