Merge pull request #4 from larshp/master

sync
This commit is contained in:
Johannes Konings 2018-07-07 17:33:47 +02:00 committed by GitHub
commit 7bea09ac10
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
238 changed files with 9791 additions and 2273 deletions

View File

@ -16,33 +16,8 @@ A good bug report should not leave others needing to chase you up for more infor
## Development Guidelines
a. Make sure there is an open issue for the stuff that you want to work on. When starting the development add a comment in the issue. This will allow for discussing possible solutions, and avoid having multiple people look into the same issue.
b. Keep the commits/PR as small as possible, try not to fix multiple issues in one commit/PR if possible. Smaller changes are easier to review, and are more likely to be accepted.
c. Variables are prefixed using the standard setting in Code Inspector check "Extended Naming Conventions for Programs"
d. abapGit is targeted for version 702, so the code should only contain expressions/statements that works on 702
e. commit often, whenever something is working, and is a step in the right direction do a commit or PR. This way other contributors can see the changes, and it will minimize the risk of merge conflicts.
f. Use pretty printer, keywords upper case + indentation
External Links:
https://guides.github.com/activities/contributing-to-open-source/
http://docs.abapgit.org/development/guidelines.html
## Building/Creating a PR
1: Install the development version of abapGit by cloning the repository using an online repository, or downloading the zip file and installing it using an offline repository.
2: The abapGit report installed in your system will now consist of multiple includes
3: Do the required changes to includes and/or main program
4: Create the pull request with the changes to the includes
5: After the pull request is merged, abapmerge will automatically run to build the non-include version of abapGit.
Every time a commit is pushed to the master branch, https://travis-ci.org/ will be triggered to perform the build. It will use [abapmerge](https://github.com/larshp/abapmerge) to merge all the includes into a single file, the build can be downloaded from https://raw.githubusercontent.com/abapGit/build/master/zabapgit.abap
Alternatively, use the GitHub webinterface to change the files and submit a pull request.
http://docs.abapgit.org/development/contributing.html

View File

@ -8,6 +8,83 @@ Legend
+ : added
- : removed
2018-07-06 v1.71.0
------------------
* validate sub and super packages when installing
! delete empty packages
+ UI for editing requirements
! track user which created repo
+ new repository overview page
* delete PARA after DTEL
* TABL, check existence before SELECTing
2018-06-28 v1.70.0
------------------
+ possibility to run code inspector before staging
* WAPA better delta handling
+ Block pull if any of deserialized object is locked
+ CHAR support
2018-06-17 v1.69.1
------------------
+ new exit: change_tadir
* fix objects outside of repo
* started dependency injection for unit testing
* DDLS fix dump
* handle repair transports
* SSFO catch exception
* SEO_CS_CACHE downport
* TABL consider DD12L in changed_by
2018-06-09 v1.69.0
------------------
! FORM serialization, filenames changed
* fix gui show changes only
* fix checkout annotated tags
* set new remote: supply remote SHA1
2018-06-06 v1.68.3
------------------
* fix dump when objects are moved
* abapGit news feature now works in more cases
* FUGR force update of where-used
* tag page redesigned
* TABL, clear field RESERVEDTE
* http agent changed
2018-06-04 v1.68.2
------------------
* CLAS ignore deltion of non-existent objects
* ENHO implement changed by
* fix TOBJ diffs
* fix error in XML syntax highlighter
* ECATT remove empty attributes
* evaluate 2FA implementations alphabetically
2018-06-03 v1.68.1
------------------
* XSLT fix changed_by
* Fix dump in XML syntax highlighter
* Delivery class of database table changed
2018-05-27 v1.68.0
------------------
+ Resolve conflicts functionallity/UI (beta)
+ Annotated tags
* Locking problems fixed(?)
2018-05-19 v1.67.0
------------------
+ IDOC support
+ IEXT support
* DOMA deletion downport
* ALV popup
* DDLS downport
! default starting folder changed to "/src/"
* Author regex fixed in branch overview
! DDLS clear additional fields
! Moving an object outside main package shows up as deletion
2018-05-11 v1.66.0
------------------
! Clone without pull, user has to choose pull after creating online repo

View File

@ -1,8 +1,15 @@
title: abapGit documentation
highlighter: rouge
collections_dir: collections
collections:
development:
output: true
defaults:
-
scope:
path: "" # an empty string here means all files in the project
- scope:
path: ""
values:
layout: "default"
- scope:
path: "_development"
values:
layout: "development"

View File

@ -1,8 +1,8 @@
<head>
<meta charset="utf-8">
<link rel="shortcut icon" type="image/png" href="favicon.png">
<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href="highlight.css">
<link rel="shortcut icon" type="image/png" href="/img/favicon.png">
<link rel="stylesheet" href="/assets/main.css">
<link rel="stylesheet" href="/assets/highlight.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/font/octicons.min.css">
<title>{% if page.title %}{{ site.title }} - {{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
<meta name="description" content="{% if page.title %}{{ site.title }} - {{ page.title }}{% else %}{{ site.title }} - Home{% endif %}" />

View File

@ -1,6 +1,6 @@
<div class="page-head">
<div class="wrap">
<a href="./"><img class="head-logo" src="img/logo.svg" height="40" alt="abapGit"></a>
<a href="/"><img class="head-logo" src="/img/logo.svg" height="40" alt="abapGit"></a>
<span class="head-title"> &#x25BA; documentation</span>
</div>
</div>

View File

@ -48,3 +48,5 @@
{% endif %}
{% endfor %}
</ul>
<a href="/development">Development</a>

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
{% include head.html %}
<body>
{% include header.html %}
<div class="container wrap">
<div class="nav">
<h3>Development</h3>
<ul>
{% assign pages = site.development | sort: 'order' %}
{% for doc in pages %}
{% if doc.title != "Development" %}
<li><a href="{{ doc.url }}">{{ doc.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
</div>
<div class="content">
<h1>{{ page.title }}</h1>
{{ content }}
</div>
</div>
{% include footer.html %}
</body>
</html>

View File

@ -1,6 +1,5 @@
---
title: abapGit API
category: other
title: API
order: 80
---

View File

@ -0,0 +1,20 @@
---
title: Contributing
order: 5
---
*******************************
1: Install the development version of abapGit by cloning the repository using an online repository, or downloading the zip file and installing it using an offline repository.
2: The abapGit report installed in your system will now consist of multiple classes
3: Do the required changes to classes and/or main program
4: Create the pull request with the changes
5: After the pull request is merged, abapmerge will automatically run to build the report version of abapGit.
Every time a commit is pushed to the master branch, [Travis CI](https://travis-ci.org/) will be triggered to perform the build. It will use [abapmerge](https://github.com/larshp/abapmerge) to merge all the includes into a single file, the build can be downloaded from [https://raw.githubusercontent.com/abapGit/build/master/zabapgit.abap](https://raw.githubusercontent.com/abapGit/build/master/zabapgit.abap)
Alternatively, use the GitHub webinterface to change the files and submit a pull request.

View File

@ -0,0 +1,13 @@
---
title: docs
order: 200
---
abapGit uses [github pages](https://help.github.com/articles/what-is-github-pages/) for documentation,
all pages are generated statically using [Jekyll](https://jekyllrb.com/)
Building /docs/ locally:
`bundle install`
`bundle exec jekyll serve --incremental --port $PORT --host $IP`

View File

@ -1,6 +1,5 @@
---
title: Object File Formats
category: other
order: 40
---

View File

@ -0,0 +1,27 @@
---
title: Development Guidelines
order: 10
---
### Practical
* For non-tivial changes make sure there is an open issue. When starting the development add a comment in the issue. This will allow for discussing possible solutions, and avoid having multiple people look into the same issue.
* Keep the commits/PR as small as possible, try not to fix multiple issues in one commit/PR if possible. Smaller changes are easier to review, and are more likely to be accepted.
* commit often, whenever something is working, and is a step in the right direction do a commit or PR. This way other contributors can see the changes, and it will minimize the risk of merge conflicts.
External Links:
[https://guides.github.com/activities/contributing-to-open-source/](https://guides.github.com/activities/contributing-to-open-source/)
### Conventions
#### Prefixing
Variables are prefixed using the standard setting in [abapOpenChecks Naming Conventions](http://docs.abapopenchecks.org/checks/69/)
#### Downport
abapGit is targeted for version 702, so the code should only contain expressions/statements that works on 702.
[abaplint](https://abaplint.org) will automatically check every PR for language syntax that is not available on 702.
#### Pretty Printer
Use pretty printer, keywords upper case + indentation, [abapOpenChecks](http://docs.abapopenchecks.org/checks/06/) can be used for checking this

View File

@ -0,0 +1,8 @@
---
title: Development
order: 10
---
*******************************
Development related information

View File

@ -1,6 +1,5 @@
---
title: Technical Links
category: other
order: 50
---

View File

@ -0,0 +1,10 @@
---
title: Unit Tests
order: 70
---
abapGit uses dependency lookup as an approach for writing unit tests, see example in ZCL_ABAPGIT_TADIR, ZCL_ABAPGIT_FACTORY, and ZCL_ABAPGIT_INJECTOR
Unit tests that create and delete objects in the system are categorized as dangerous, these tests can be enabled via Advanced -> Settings
Use organization https://github.com/abapGit-tests for storing serialization test cases

View File

@ -45,7 +45,7 @@ On [Feburary 22nd](https://githubengineering.com/crypto-removal-notice/), GitHub
See [SAP note 510007](https://launchpad.support.sap.com/#/notes/510007), section 7, for information on how to configure SSL.
Add parameters
Add profile parameters:
```
ssl/client_ciphersuites = 150:PFS:HIGH::EC_P256:EC_HIGH
ssl/ciphersuites = 135:PFS:HIGH::EC_P256:EC_HIGH

View File

Before

Width:  |  Height:  |  Size: 764 B

After

Width:  |  Height:  |  Size: 764 B

View File

@ -1,7 +1,6 @@
---
title: Welcome
---
abapGit is a git client for ABAP developed in ABAP. It requires SAP BASIS version 702 or higher.
Latest build: [zabapgit.abap](https://raw.githubusercontent.com/abapGit/build/master/zabapgit.abap)

View File

@ -78,3 +78,11 @@ SAP Teched Barcelona
[ABAP Code Reviews with abapGit](https://blogs.sap.com/2018/03/23/abap-code-reviews-with-abapgit/) -Eduardo Copat
[Get into Git!](https://blogs.sap.com/2018/04/13/get-into-git/) - Mike Pokraka
[ABAP The Special Snowflake](https://blogs.sap.com/2018/07/02/abap-the-special-snowflake/) - Nigel James
[Is SAPs ABAP a special snowflake or has a Git run it over?](https://diginomica.com/2018/07/03/is-saps-abap-a-special-snowflake-or-has-a-git-run-it-over/) - Den Howlett
[ORGANISIERE DEINE ARBEIT MIT ABAPGIT ](https://inspiricon.de/abapgit/) -Andra Atanasoaie
[Moderne ABAP Entwicklung mit abapGit](https://de.slideshare.net/ChristianGnter/moderne-abap-entwicklung-mit-abapgit) - Christian Günter

View File

@ -6,8 +6,7 @@ order: 45
abapGit uses a few external libraries, these are loaded via [cdnjs](https://cdnjs.com/about)
Library | License
:------------ | :------------
[octicons](https://github.com/primer/octicons) 4.4.0 | MIT
[jquery](https://github.com/jquery/jquery) 3.2.1 | MIT
[gitgraph](https://github.com/nicoespeon/gitgraph.js) 1.2.3 | MIT
Library | Version | License
:------------ | :------------ | :------------
[octicons](https://github.com/primer/octicons) | 4.4.0 | MIT
[gitgraph](https://github.com/nicoespeon/gitgraph.js) | 1.2.3 | MIT

View File

@ -11,21 +11,36 @@ REPORT zabapgit_test_ssl.
* See https://github.com/larshp/abapGit/
PARAMETERS: p_url TYPE swc_value DEFAULT 'https://github.com',
p_proxy TYPE string,
p_pxport TYPE string.
PARAMETERS: p_url1 TYPE swc_value DEFAULT 'https://github.com',
p_url2 TYPE swc_value DEFAULT 'https://api.github.com'.
* api.github.com is used when pushing code back to github
SELECTION-SCREEN BEGIN OF BLOCK proxy WITH FRAME.
* proxy settings, fill if your system is behind a proxy
PARAMETERS: p_proxy TYPE string,
p_pxport TYPE string,
p_puser TYPE string,
p_ppwd TYPE string.
SELECTION-SCREEN END OF BLOCK proxy.
START-OF-SELECTION.
PERFORM run.
PERFORM run USING p_url1.
WRITE: /, '----', /.
PERFORM run USING p_url2.
FORM run.
FORM run USING iv_url TYPE swc_value.
DATA: lv_code TYPE i,
lv_url TYPE string,
li_client TYPE REF TO if_http_client,
lt_errors TYPE TABLE OF string,
lv_error_message TYPE string.
lv_url = p_url.
IF iv_url IS INITIAL.
RETURN.
ENDIF.
lv_url = iv_url.
cl_http_client=>create_by_url(
EXPORTING
url = lv_url
@ -35,11 +50,12 @@ FORM run.
IMPORTING
client = li_client ).
* enter username and password for proxy authentication if needed
* li_client->authenticate(
* proxy_authentication = abap_true
* username = ''
* password = '' ).
IF NOT p_puser IS INITIAL.
li_client->authenticate(
proxy_authentication = abap_true
username = p_puser
password = p_ppwd ).
ENDIF.
li_client->send( ).
li_client->receive(
@ -49,12 +65,15 @@ FORM run.
http_processing_failed = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
WRITE: / 'Error Number', sy-subrc.
WRITE: / 'Error Number', sy-subrc, /.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
li_client->get_last_error(
IMPORTING
message = lv_error_message ).
WRITE: / `Error message: ` && lv_error_message.
SPLIT lv_error_message AT cl_abap_char_utilities=>newline INTO TABLE lt_errors.
LOOP AT lt_errors INTO lv_error_message.
WRITE: / lv_error_message.
ENDLOOP.
WRITE: / 'Also check transaction SMICM -> Goto -> Trace File -> Display End'.
RETURN.
ENDIF.
@ -65,7 +84,7 @@ FORM run.
IMPORTING
code = lv_code ).
IF lv_code = 200.
WRITE: / 'Success, it works'.
WRITE: / lv_url, ': ok'.
ELSE.
WRITE: / 'Error', lv_code.
ENDIF.

View File

@ -9,8 +9,12 @@ Type | Description | Supported
:------------ | :------------ | ------------:
ACID | Checkpoint Group | Yes
AOBJ | Archiving Object | [#804](https://github.com/larshp/abapGit/issues/804)
ASFC | Field Catalog | [#1578](https://github.com/larshp/abapGit/issues/1578)
ASIS | Archiving Information Structure | [#1579](https://github.com/larshp/abapGit/issues/1579)
AUTH | Authorization Check Fields | Yes
AVAS | Classification | [#1360](https://github.com/larshp/abapGit/issues/1360)
BOBF | BOPF: Business Object Model | [#165](https://github.com/larshp/abapGit/issues/165)
CHAR | Object characteristic | Yes
CHDO | Change Document Object | [#802](https://github.com/larshp/abapGit/issues/802)
CLAS | Class (ABAP Objects) | Yes
CMOD | Customer enhancement projects | [#151](https://github.com/larshp/abapGit/issues/151)
@ -44,19 +48,25 @@ IAMU | Language-Independent IAC Binary Data | Yes
IARP | Parameters of IAC Language Resource | Yes
IASP | Parameters of an IAC service | Yes
IATU | Language-Independent IAC Templates | Yes
IDOC | IDoc Type | Yes
IEXT | Enhancement | Yes
IWPR | Gateway Business Suite Enablement - Service Builder Project | [#75](https://github.com/larshp/abapGit/issues/75)
JOBD | Technical Job Definition | Yes
LPDC | Launchpad short texts | [#107](https://github.com/larshp/abapGit/issues/107)
MSAG | Message Class | Yes
NROB | Number Range Objects | Yes
OTGR | Object type group | [#1515](https://github.com/larshp/abapGit/issues/1515)
PARA | SPA/GPA Parameters | Yes
PDTS | Standard Task | [#153](https://github.com/larshp/abapGit/issues/153)
PDWS | Workflow templates | [#154](https://github.com/larshp/abapGit/issues/154)
PINF | Package interface | Yes
PRAG | Pragma in ABAP Source Code | Yes
PROG | Program | Yes
SAJC | Application job catalog entry | [#1580](https://github.com/larshp/abapGit/issues/1580)
SAJT | Application job template | [1581](https://github.com/larshp/abapGit/issues/1581)
SAMC | ABAP Messaging Channels | Yes
SAPC | ABAP Push Channels | Yes
SCP1 | BC Set or Customizing Profile | [#1004](https://github.com/larshp/abapGit/issues/1004)
SFBF | Business Function + Assignment | Yes
SFBS | Business Function Set + Assignment | Yes
SFPF | Form Object: Form | Yes
@ -72,6 +82,8 @@ SMIM | Info Object from the MIME Repository | Yes
SOTS | All Concepts (OTR) of a Package - Long Texts | [#792](https://github.com/larshp/abapGit/issues/792)
SPLO | Format Types | Yes
SPRX | Proxy Object | [#87](https://github.com/larshp/abapGit/issues/87)
SUCU | Authorization Groups (TBRG_AUTH) | [#1434](https://github.com/larshp/abapGit/issues/1434)
SUSH | Assignment: Service --> Authorization Objects | [#1582](https://github.com/larshp/abapGit/issues/1582)
SRFC | RFC Service | Yes
SSFO | SAP Smart Form | Yes
SSST | SAP Smart Style | Yes
@ -98,4 +110,6 @@ WEBI | Virtual End Point | Yes
XINX | Extension Index | Yes
XSLT | Transformation | Yes
Support for customizing planned, see [#1004](https://github.com/larshp/abapGit/issues/1004)
Also see [https://github.com/larshp/abapGit-Plugins](https://github.com/larshp/abapGit-Plugins)

View File

@ -30,7 +30,7 @@ CLASS zcl_abapgit_git_branch_list DEFINITION
zcx_abapgit_exception .
METHODS get_tags_only " For potential future use
RETURNING
VALUE(rt_branches) TYPE zif_abapgit_definitions=>ty_git_branch_list_tt
VALUE(rt_tags) TYPE zif_abapgit_definitions=>ty_git_branch_list_tt
RAISING
zcx_abapgit_exception.
CLASS-METHODS is_ignored
@ -46,6 +46,8 @@ CLASS zcl_abapgit_git_branch_list DEFINITION
CLASS-METHODS get_type
IMPORTING
!iv_branch_name TYPE clike
it_result TYPE stringtab OPTIONAL
iv_current_row_index TYPE sytabix OPTIONAL
RETURNING
VALUE(rv_type) TYPE zif_abapgit_definitions=>ty_git_branch_type .
CLASS-METHODS complete_heads_branch_name
@ -62,6 +64,13 @@ CLASS zcl_abapgit_git_branch_list DEFINITION
DATA mt_branches TYPE zif_abapgit_definitions=>ty_git_branch_list_tt .
DATA mv_head_symref TYPE string .
METHODS find_tag_by_name
IMPORTING
iv_branch_name TYPE string
RETURNING
VALUE(rs_branch) TYPE zif_abapgit_definitions=>ty_git_branch
RAISING
zcx_abapgit_exception.
CLASS-METHODS parse_branch_list
IMPORTING
@ -80,7 +89,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
METHOD complete_heads_branch_name.
@ -106,12 +115,18 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Branch name empty' ).
ENDIF.
IF iv_branch_name CP |refs/tags/*|.
rs_branch = find_tag_by_name( iv_branch_name ).
ELSE.
READ TABLE mt_branches INTO rs_branch
WITH KEY name = iv_branch_name.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Branch not found' ).
ENDIF.
ENDIF.
ENDMETHOD. "find_by_name
@ -157,15 +172,21 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
METHOD get_tags_only.
FIELD-SYMBOLS <ls_branch> LIKE LINE OF mt_branches.
LOOP AT mt_branches ASSIGNING <ls_branch>.
IF <ls_branch>-type = zif_abapgit_definitions=>c_git_branch_type-tag.
APPEND <ls_branch> TO rt_branches.
ENDIF.
LOOP AT mt_branches ASSIGNING <ls_branch>
WHERE type = zif_abapgit_definitions=>c_git_branch_type-lightweight_tag
OR type = zif_abapgit_definitions=>c_git_branch_type-annotated_tag.
APPEND <ls_branch> TO rt_tags.
ENDLOOP.
ENDMETHOD. "get_tags_only
METHOD get_type.
DATA: lv_annotated_tag_with_suffix TYPE string.
FIELD-SYMBOLS: <ls_result> TYPE LINE OF stringtab.
rv_type = zif_abapgit_definitions=>c_git_branch_type-other.
IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = zif_abapgit_definitions=>c_head_name.
@ -174,7 +195,17 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
ENDIF.
IF iv_branch_name CP 'refs/tags/*'.
rv_type = zif_abapgit_definitions=>c_git_branch_type-tag.
lv_annotated_tag_with_suffix = iv_branch_name && '^{}'.
READ TABLE it_result ASSIGNING <ls_result>
INDEX iv_current_row_index + 1.
IF sy-subrc = 0 AND <ls_result> CP '*' && lv_annotated_tag_with_suffix.
rv_type = zif_abapgit_definitions=>c_git_branch_type-annotated_tag.
ELSE.
rv_type = zif_abapgit_definitions=>c_git_branch_type-lightweight_tag.
ENDIF.
ENDIF.
ENDMETHOD. "get_type
@ -211,7 +242,8 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
lv_name TYPE string,
lv_head_params TYPE string,
lv_char TYPE c,
lv_data LIKE LINE OF lt_result.
lv_data LIKE LINE OF lt_result,
lv_current_row_index TYPE syst-tabix.
FIELD-SYMBOLS: <ls_branch> LIKE LINE OF et_list.
@ -220,6 +252,9 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
SPLIT iv_data AT zif_abapgit_definitions=>gc_newline INTO TABLE lt_result.
LOOP AT lt_result INTO lv_data.
lv_current_row_index = sy-tabix.
IF sy-tabix = 1.
CONTINUE. " current loop
ELSEIF sy-tabix = 2 AND strlen( lv_data ) > 49.
@ -245,7 +280,9 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
<ls_branch>-sha1 = lv_hash.
<ls_branch>-name = lv_name.
<ls_branch>-display_name = get_display_name( lv_name ).
<ls_branch>-type = get_type( lv_name ).
<ls_branch>-type = get_type( iv_branch_name = lv_name
it_result = lt_result
iv_current_row_index = lv_current_row_index ).
IF <ls_branch>-name = zif_abapgit_definitions=>c_head_name OR <ls_branch>-name = ev_head_symref.
<ls_branch>-is_head = abap_true.
ENDIF.
@ -266,4 +303,25 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
ENDIF.
ENDMETHOD. "parse_head_params
METHOD find_tag_by_name.
DATA: lv_branch_name TYPE string.
lv_branch_name = iv_branch_name && '^{}'.
READ TABLE mt_branches INTO rs_branch
WITH KEY name = lv_branch_name.
IF sy-subrc <> 0.
READ TABLE mt_branches INTO rs_branch
WITH KEY name = iv_branch_name.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Branch not found' ).
ENDIF.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -20,7 +20,16 @@ CLASS zcl_abapgit_git_pack DEFINITION
author TYPE string,
committer TYPE string,
body TYPE string,
END OF ty_commit .
END OF ty_commit,
BEGIN OF ty_tag,
object TYPE string,
type TYPE string,
tag TYPE string,
tagger_name TYPE string,
tagger_email TYPE string,
message TYPE string,
body TYPE string,
END OF ty_tag .
TYPES:
BEGIN OF ty_adler32,
sha1 TYPE zif_abapgit_definitions=>ty_sha1,
@ -48,6 +57,13 @@ CLASS zcl_abapgit_git_pack DEFINITION
VALUE(rs_commit) TYPE ty_commit
RAISING
zcx_abapgit_exception .
CLASS-METHODS decode_tag
IMPORTING
!iv_data TYPE xstring
RETURNING
VALUE(rs_tag) TYPE ty_tag
RAISING
zcx_abapgit_exception .
CLASS-METHODS encode
IMPORTING
!it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
@ -62,9 +78,16 @@ CLASS zcl_abapgit_git_pack DEFINITION
VALUE(rv_data) TYPE xstring .
CLASS-METHODS encode_commit
IMPORTING
!is_commit TYPE ty_commit
is_commit TYPE ty_commit
RETURNING
VALUE(rv_data) TYPE xstring .
CLASS-METHODS encode_tag
IMPORTING
is_tag TYPE zcl_abapgit_git_pack=>ty_tag
RETURNING
VALUE(rv_data) TYPE xstring
RAISING
zcx_abapgit_exception.
PRIVATE SECTION.
CONSTANTS:
@ -128,7 +151,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
CLASS zcl_abapgit_git_pack IMPLEMENTATION.
METHOD decode.
@ -336,6 +359,68 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
ENDMETHOD. "decode_deltas
METHOD decode_tag.
DATA: lv_string TYPE string,
lv_word TYPE string,
lv_length TYPE i,
lv_trash TYPE string ##NEEDED,
lt_string TYPE TABLE OF string.
FIELD-SYMBOLS: <lv_string> LIKE LINE OF lt_string.
lv_string = zcl_abapgit_convert=>xstring_to_string_utf8( iv_data ).
SPLIT lv_string AT zif_abapgit_definitions=>gc_newline INTO TABLE lt_string.
LOOP AT lt_string ASSIGNING <lv_string>.
SPLIT <lv_string> AT space INTO lv_word lv_trash.
CASE lv_word.
WHEN 'object'.
rs_tag-object = lv_trash.
WHEN 'type'.
rs_tag-type = lv_trash.
WHEN 'tag'.
rs_tag-tag = lv_trash.
WHEN 'tagger'.
FIND FIRST OCCURRENCE OF REGEX `(.*)<(.*)>`
IN lv_trash
SUBMATCHES rs_tag-tagger_name
rs_tag-tagger_email.
rs_tag-tagger_name = condense( rs_tag-tagger_name ).
WHEN ''.
" ignore blank lines
CONTINUE.
WHEN OTHERS.
" these are the non empty line which don't start with a key word
" the first one is the message, the rest are cumulated to the body
IF rs_tag-message IS INITIAL.
rs_tag-message = <lv_string>.
ELSE.
IF rs_tag-body IS NOT INITIAL.
rs_tag-body = rs_tag-body && zif_abapgit_definitions=>gc_newline.
ENDIF.
rs_tag-body = rs_tag-body && <lv_string>.
ENDIF.
ENDCASE.
ENDLOOP.
ENDMETHOD.
METHOD decode_tree.
CONSTANTS: lc_sha_length TYPE i VALUE 20,
@ -757,6 +842,8 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
lv_type = 32.
WHEN zif_abapgit_definitions=>gc_type-blob.
lv_type = 48.
WHEN zif_abapgit_definitions=>gc_type-tag.
lv_type = 64.
WHEN zif_abapgit_definitions=>gc_type-ref_d.
lv_type = 112.
WHEN OTHERS.
@ -839,4 +926,25 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Wrong Adler checksum' ).
ENDIF.
ENDMETHOD.
METHOD encode_tag.
DATA: lv_string TYPE string,
lv_tmp TYPE string,
lv_time TYPE zcl_abapgit_time=>ty_unixtime.
lv_time = zcl_abapgit_time=>get( ).
lv_string = |object { is_tag-object }{ zif_abapgit_definitions=>gc_newline }|
&& |type { is_tag-type }{ zif_abapgit_definitions=>gc_newline }|
&& |tag { zcl_abapgit_tag=>remove_tag_prefix( is_tag-tag ) }{ zif_abapgit_definitions=>gc_newline }|
&& |tagger { is_tag-tagger_name } <{ is_tag-tagger_email }> { lv_time }|
&& |{ zif_abapgit_definitions=>gc_newline }|
&& |{ zif_abapgit_definitions=>gc_newline }|
&& |{ is_tag-message }|.
rv_data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_string ).
ENDMETHOD.
ENDCLASS.

View File

@ -567,3 +567,60 @@ CLASS ltcl_git_pack_decode_commit IMPLEMENTATION.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_tag DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
decode_tag FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_tag IMPLEMENTATION.
METHOD decode_tag.
DATA: lv_test_data TYPE string,
lv_xstring TYPE xstring,
ls_tag TYPE zcl_abapgit_git_pack=>ty_tag.
lv_test_data = |object 175f9a21b15a9012c97a3dd15aea6d74d4204b6b\n|
&& |type commit\n|
&& |tag tag_1\n|
&& |tagger Christian Guenter <christianguenter@googlemail.com> 1526718052 +0000\n|
&& |\n|
&& |This is an annotated tag\n|.
lv_xstring = zcl_abapgit_convert=>string_to_xstring_utf8( lv_test_data ).
ls_tag = zcl_abapgit_git_pack=>decode_tag( lv_xstring ).
cl_abap_unit_assert=>assert_equals(
exp = |175f9a21b15a9012c97a3dd15aea6d74d4204b6b|
act = ls_tag-object ).
cl_abap_unit_assert=>assert_equals(
exp = 'commit'
act = ls_tag-type ).
cl_abap_unit_assert=>assert_equals(
exp = 'tag_1'
act = ls_tag-tag ).
cl_abap_unit_assert=>assert_equals(
exp = 'Christian Guenter'
act = ls_tag-tagger_name ).
cl_abap_unit_assert=>assert_equals(
exp = 'christianguenter@googlemail.com'
act = ls_tag-tagger_email ).
cl_abap_unit_assert=>assert_equals(
exp = 'This is an annotated tag'
act = ls_tag-message ).
ENDMETHOD.
ENDCLASS.

View File

@ -33,8 +33,7 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
CLASS-METHODS create_tag
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online
!iv_name TYPE string
!iv_from TYPE zif_abapgit_definitions=>ty_sha1
is_tag TYPE zif_abapgit_definitions=>ty_git_tag
RAISING
zcx_abapgit_exception .
CLASS-METHODS delete_branch
@ -46,7 +45,7 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
CLASS-METHODS delete_tag
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online
!is_tag TYPE zif_abapgit_definitions=>ty_git_branch
!is_tag TYPE zif_abapgit_definitions=>ty_git_tag
RAISING
zcx_abapgit_exception .
CLASS-METHODS full_tree
@ -57,8 +56,8 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
VALUE(rt_expanded) TYPE zif_abapgit_definitions=>ty_expanded_tt
RAISING
zcx_abapgit_exception.
PRIVATE SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF ty_tree,
path TYPE string,
data TYPE xstring,
@ -100,7 +99,7 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
RETURNING VALUE(rt_expanded) TYPE zif_abapgit_definitions=>ty_expanded_tt
RAISING zcx_abapgit_exception.
CLASS-METHODS receive_pack
CLASS-METHODS receive_pack_push
IMPORTING is_comment TYPE zif_abapgit_definitions=>ty_comment
io_repo TYPE REF TO zcl_abapgit_repo_online
it_trees TYPE ty_trees_tt
@ -108,11 +107,31 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
io_stage TYPE REF TO zcl_abapgit_stage
RETURNING VALUE(rv_branch) TYPE zif_abapgit_definitions=>ty_sha1
RAISING zcx_abapgit_exception.
CLASS-METHODS receive_pack_create_tag
IMPORTING is_tag TYPE zif_abapgit_definitions=>ty_git_tag
io_repo TYPE REF TO zcl_abapgit_repo_online
RAISING zcx_abapgit_exception.
CLASS-METHODS create_annotated_tag
IMPORTING
is_tag TYPE zif_abapgit_definitions=>ty_git_tag
io_repo TYPE REF TO zcl_abapgit_repo_online
RAISING
zcx_abapgit_exception.
CLASS-METHODS create_lightweight_tag
IMPORTING
is_tag TYPE zif_abapgit_definitions=>ty_git_tag
io_repo TYPE REF TO zcl_abapgit_repo_online
RAISING
zcx_abapgit_exception.
ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_PORCELAIN IMPLEMENTATION.
CLASS zcl_abapgit_git_porcelain IMPLEMENTATION.
METHOD build_trees.
@ -199,23 +218,28 @@ CLASS ZCL_ABAPGIT_GIT_PORCELAIN IMPLEMENTATION.
METHOD create_tag.
DATA: lt_objects TYPE zif_abapgit_definitions=>ty_objects_tt,
lv_pack TYPE xstring.
IF iv_name CS ` `.
IF is_tag-name CS ` `.
zcx_abapgit_exception=>raise( 'Tag name cannot contain blank spaces' ).
ENDIF.
* "client MUST send an empty packfile"
* https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514
lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ).
CASE is_tag-type.
WHEN zif_abapgit_definitions=>c_git_branch_type-annotated_tag.
zcl_abapgit_git_transport=>receive_pack(
iv_url = io_repo->get_url( )
iv_old = c_zero
iv_new = iv_from
iv_branch_name = iv_name
iv_pack = lv_pack ).
create_annotated_tag(
is_tag = is_tag
io_repo = io_repo ).
WHEN zif_abapgit_definitions=>c_git_branch_type-lightweight_tag.
create_lightweight_tag(
is_tag = is_tag
io_repo = io_repo ).
WHEN OTHERS.
zcx_abapgit_exception=>raise( |Invalid tag type: { is_tag-type }| ).
ENDCASE.
ENDMETHOD.
@ -435,7 +459,7 @@ CLASS ZCL_ABAPGIT_GIT_PORCELAIN IMPLEMENTATION.
lt_trees = build_trees( lt_expanded ).
ev_branch = receive_pack( is_comment = is_comment
ev_branch = receive_pack_push( is_comment = is_comment
io_repo = io_repo
it_trees = lt_trees
it_blobs = lt_blobs
@ -444,7 +468,51 @@ CLASS ZCL_ABAPGIT_GIT_PORCELAIN IMPLEMENTATION.
ENDMETHOD. "push
METHOD receive_pack.
METHOD receive_pack_create_tag.
DATA: lv_tag TYPE xstring,
lt_objects TYPE zif_abapgit_definitions=>ty_objects_tt,
lv_pack TYPE xstring,
ls_object LIKE LINE OF lt_objects,
ls_tag TYPE zcl_abapgit_git_pack=>ty_tag,
lv_new_tag_sha1 TYPE zif_abapgit_definitions=>ty_sha1.
* new tag
ls_tag-object = is_tag-sha1.
ls_tag-type = zif_abapgit_definitions=>gc_type-commit.
ls_tag-tag = is_tag-name.
ls_tag-tagger_name = is_tag-tagger_name.
ls_tag-tagger_email = is_tag-tagger_email.
ls_tag-message = is_tag-message
&& |{ zif_abapgit_definitions=>gc_newline }|
&& |{ zif_abapgit_definitions=>gc_newline }|
&& is_tag-body.
lv_tag = zcl_abapgit_git_pack=>encode_tag( ls_tag ).
lv_new_tag_sha1 = zcl_abapgit_hash=>sha1(
iv_type = zif_abapgit_definitions=>gc_type-tag
iv_data = lv_tag ).
CLEAR ls_object.
ls_object-sha1 = lv_new_tag_sha1.
ls_object-type = zif_abapgit_definitions=>gc_type-tag.
ls_object-data = lv_tag.
APPEND ls_object TO lt_objects.
lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ).
zcl_abapgit_git_transport=>receive_pack(
iv_url = io_repo->get_url( )
iv_old = c_zero
iv_new = lv_new_tag_sha1
iv_branch_name = is_tag-name
iv_pack = lv_pack ).
ENDMETHOD.
METHOD receive_pack_push.
DATA: lv_time TYPE zcl_abapgit_time=>ty_unixtime,
lv_commit TYPE xstring,
@ -630,4 +698,32 @@ CLASS ZCL_ABAPGIT_GIT_PORCELAIN IMPLEMENTATION.
ENDLOOP.
ENDMETHOD.
METHOD create_annotated_tag.
receive_pack_create_tag(
is_tag = is_tag
io_repo = io_repo ).
ENDMETHOD.
METHOD create_lightweight_tag.
DATA: lt_objects TYPE zif_abapgit_definitions=>ty_objects_tt,
lv_pack TYPE xstring.
* "client MUST send an empty packfile"
* https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514
lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ).
zcl_abapgit_git_transport=>receive_pack(
iv_url = io_repo->get_url( )
iv_old = c_zero
iv_new = io_repo->get_sha1_local( )
iv_branch_name = is_tag-name
iv_pack = lv_pack ).
ENDMETHOD.
ENDCLASS.

View File

@ -57,7 +57,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_TRANSPORT IMPLEMENTATION.
CLASS zcl_abapgit_git_transport IMPLEMENTATION.
METHOD branches.
@ -209,6 +209,8 @@ CLASS ZCL_ABAPGIT_GIT_TRANSPORT IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'funny refname' ).
ELSEIF lv_string CP '*failed to update ref*'.
zcx_abapgit_exception=>raise( 'failed to update ref' ).
ELSEIF lv_string CP '*missing necessary objects*'.
zcx_abapgit_exception=>raise( 'missing necessary objects' ).
ENDIF.
ENDMETHOD. "receive_pack

View File

@ -7,13 +7,13 @@ CLASS zcl_abapgit_tag DEFINITION
CLASS-METHODS:
add_tag_prefix
IMPORTING
!iv_text TYPE csequence
iv_text TYPE csequence
RETURNING
VALUE(rv_text) TYPE string,
remove_tag_prefix
IMPORTING
!iv_text TYPE string
iv_text TYPE string
RETURNING
VALUE(rv_text) TYPE string.
@ -21,7 +21,8 @@ ENDCLASS.
CLASS zcl_abapgit_tag IMPLEMENTATION.
CLASS ZCL_ABAPGIT_TAG IMPLEMENTATION.
METHOD add_tag_prefix.
@ -39,5 +40,4 @@ CLASS zcl_abapgit_tag IMPLEMENTATION.
WITH ''.
ENDMETHOD.
ENDCLASS.

View File

@ -62,6 +62,7 @@ CLASS ZCL_ABAPGIT_2FA_AUTH_REGISTRY IMPLEMENTATION.
TRY.
lo_class ?= cl_oo_class=>get_instance( 'ZCL_ABAPGIT_2FA_AUTH_BASE' ).
lt_sub = lo_class->get_subclasses( ).
SORT lt_sub BY clsname ASCENDING AS TEXT.
LOOP AT lt_sub INTO ls_sub.
CREATE OBJECT li_authenticator TYPE (ls_sub-clsname).
INSERT li_authenticator INTO TABLE gt_registered_authenticators.

View File

@ -60,7 +60,7 @@ ENDCLASS.
CLASS zcl_abapgit_2fa_github_auth IMPLEMENTATION.
CLASS ZCL_ABAPGIT_2FA_GITHUB_AUTH IMPLEMENTATION.
METHOD constructor.
@ -336,6 +336,8 @@ CLASS zcl_abapgit_2fa_github_auth IMPLEMENTATION.
li_client->receive( EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.
* if the code fails here with a SSL error, make sure STRUST is setup to
* work with https://api.github.com
raise_comm_error_from_sy( ).
ENDIF.

View File

@ -205,7 +205,8 @@ CLASS ZCL_ABAPGIT_HTTP IMPLEMENTATION.
METHOD get_agent.
* bitbucket require agent prefix = "git/"
rv_agent = 'git/abapGit-' && zif_abapgit_definitions=>gc_abap_version.
* also see https://github.com/larshp/abapGit/issues/1432
rv_agent = |git/2.0 (abapGit { zif_abapgit_definitions=>gc_abap_version })|.
ENDMETHOD.

View File

@ -28,7 +28,7 @@ ENDCLASS.
CLASS zcl_abapgit_ecatt_sp_upload IMPLEMENTATION.
CLASS ZCL_ABAPGIT_ECATT_SP_UPLOAD IMPLEMENTATION.
METHOD get_ecatt_sp.
@ -46,8 +46,7 @@ CLASS zcl_abapgit_ecatt_sp_upload IMPLEMENTATION.
FIELD-SYMBOLS: <ecatt_object> TYPE any.
TRY.
li_section = template_over_all->find_from_name_ns(
name = 'START_PROFILE' ).
li_section = template_over_all->find_from_name_ns( 'START_PROFILE' ).
IF NOT li_section IS INITIAL.
CLASS cl_ixml DEFINITION LOAD .
@ -107,7 +106,7 @@ CLASS zcl_abapgit_ecatt_sp_upload IMPLEMENTATION.
CHANGING
ch_object = ch_object ).
upload_data_from_stream( im_xml_file = ch_object-filename ).
upload_data_from_stream( ch_object-filename ).
CATCH cx_ecatt_apl INTO lx_ecatt.
IF template_over_all IS INITIAL.

View File

@ -46,7 +46,10 @@ CLASS zcl_abapgit_ecatt_val_obj_down DEFINITION
ENDCLASS.
CLASS zcl_abapgit_ecatt_val_obj_down IMPLEMENTATION.
CLASS ZCL_ABAPGIT_ECATT_VAL_OBJ_DOWN IMPLEMENTATION.
METHOD download.
@ -90,7 +93,7 @@ CLASS zcl_abapgit_ecatt_val_obj_down IMPLEMENTATION.
ENDIF.
ENDLOOP.
set_variants_to_dom( im_params = ecatt_vo->params ).
set_variants_to_dom( ecatt_vo->params ).
download_data( ).

View File

@ -47,7 +47,7 @@ ENDCLASS.
CLASS zcl_abapgit_ecatt_val_obj_upl IMPLEMENTATION.
CLASS ZCL_ABAPGIT_ECATT_VAL_OBJ_UPL IMPLEMENTATION.
METHOD get_business_msgs_from_dom.
@ -108,7 +108,7 @@ CLASS zcl_abapgit_ecatt_val_obj_upl IMPLEMENTATION.
FIELD-SYMBOLS: <ecatt_vo> TYPE any.
li_section = template_over_all->find_from_name_ns( name = 'IMPL_DET' ).
li_section = template_over_all->find_from_name_ns( 'IMPL_DET' ).
IF NOT li_section IS INITIAL.
CALL FUNCTION 'SDIXML_DOM_TO_DATA'
@ -244,7 +244,7 @@ CLASS zcl_abapgit_ecatt_val_obj_upl IMPLEMENTATION.
CHANGING
ch_object = ch_object ).
upload_data_from_stream( im_xml_file = ch_object-filename ).
upload_data_from_stream( ch_object-filename ).
CATCH cx_ecatt_apl INTO ex.
IF template_over_all IS INITIAL.
RAISE EXCEPTION ex.

View File

@ -139,4 +139,10 @@ CLASS zcl_abapgit_object_acid IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_acid IMPLEMENTATION

View File

@ -8,7 +8,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_AUTH IMPLEMENTATION.
CLASS zcl_abapgit_object_auth IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
@ -127,4 +127,11 @@ CLASS ZCL_ABAPGIT_OBJECT_AUTH IMPLEMENTATION.
ig_data = ls_authx ).
ENDMETHOD. "zif_abapgit_object~serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,254 @@
CLASS zcl_abapgit_object_char DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_objects_super
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_object .
PRIVATE SECTION.
TYPES:
BEGIN OF ty_char,
cls_attribute TYPE cls_attribute,
cls_attributet TYPE STANDARD TABLE OF cls_attributet WITH DEFAULT KEY,
cls_attr_value TYPE STANDARD TABLE OF cls_attr_value WITH DEFAULT KEY,
cls_attr_valuet TYPE STANDARD TABLE OF cls_attr_valuet WITH DEFAULT KEY,
END OF ty_char .
METHODS instantiate_char
IMPORTING
!iv_type_group TYPE cls_object_type_group
RETURNING
VALUE(ro_char) TYPE REF TO cl_cls_attribute
RAISING
zcx_abapgit_exception .
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION.
METHOD instantiate_char.
DATA: lv_new TYPE abap_bool,
lv_name TYPE cls_attribute_name.
SELECT SINGLE name FROM cls_attribute INTO lv_name WHERE name = ms_item-obj_name.
lv_new = boolc( sy-subrc <> 0 ).
lv_name = ms_item-obj_name.
TRY.
CREATE OBJECT ro_char
EXPORTING
im_name = lv_name
im_type_group = iv_type_group
im_new = lv_new.
CATCH cx_pak_invalid_data
cx_pak_not_authorized
cx_pak_invalid_state
cx_pak_wb_object_locked.
zcx_abapgit_exception=>raise( 'Error while instantiating CL_CLS_ATTRIBUTE' ).
ENDTRY.
IF lv_new = abap_false.
TRY.
ro_char->if_pak_wb_object~lock_and_refresh( ).
CATCH cx_pak_wb_object_locked.
zcx_abapgit_exception=>raise( |Could not aquire lock, CHAR { lv_name }| ).
ENDTRY.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
SELECT SINGLE changed_by FROM cls_attribute INTO rv_user
WHERE name = ms_item-obj_name
AND activation_state = 'A'.
IF rv_user IS INITIAL.
SELECT SINGLE created_by FROM cls_attribute INTO rv_user
WHERE name = ms_item-obj_name
AND activation_state = 'A'.
ENDIF.
IF rv_user IS INITIAL.
rv_user = c_user_unknown.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: lo_char TYPE REF TO cl_cls_attribute,
lv_type_group TYPE cls_attribute-type_group.
SELECT SINGLE type_group FROM cls_attribute INTO lv_type_group
WHERE name = ms_item-obj_name
AND activation_state = 'A'.
lo_char = instantiate_char( lv_type_group ).
lo_char->if_pak_wb_object~delete( ).
lo_char->if_pak_wb_object~save( ).
lo_char->if_pak_wb_object_internal~unlock( ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_char TYPE ty_char,
lv_request TYPE trkorr,
ls_description LIKE LINE OF ls_char-cls_attributet,
lo_char TYPE REF TO cl_cls_attribute.
io_xml->read( EXPORTING iv_name = 'CHAR'
CHANGING cg_data = ls_char ).
tadir_insert( iv_package ).
lo_char = instantiate_char( ls_char-cls_attribute-type_group ).
lo_char->if_cls_attribute~set_kind( ls_char-cls_attribute-kind ).
lo_char->if_cls_attribute~set_single_valued( ls_char-cls_attribute-is_single_valued ).
lo_char->if_cls_attribute~set_aspect(
im_aspect_for = ls_char-cls_attribute-is_aspect_for
im_aspect_value = ls_char-cls_attribute-aspect_value ).
lo_char->if_cls_attribute~set_default_flag( ls_char-cls_attribute-default_flag ).
lo_char->if_cls_attribute~set_default_value( ls_char-cls_attribute-default_value ).
lo_char->if_cls_attribute~set_sub_object_treatment( ls_char-cls_attribute-sub_obj_treatm ).
lo_char->if_cls_attribute~set_automatic_changes_allowed( ls_char-cls_attribute-automatic_change ).
lo_char->if_cls_attribute~set_manual_changes_allowed( ls_char-cls_attribute-manu_chag_allow ).
lo_char->if_cls_attribute~set_implicit_changes_allowed( ls_char-cls_attribute-implicit_change ).
lo_char->if_cls_attribute~set_expl_values_dominate_links( ls_char-cls_attribute-weak_links ).
lo_char->if_cls_attribute~set_assignment_package_rule( ls_char-cls_attribute-assignment_devc ).
lo_char->if_cls_attribute~set_hide_remark( ls_char-cls_attribute-hide_remark ).
lo_char->if_cls_attribute~set_visible_in_customer_system( ls_char-cls_attribute-visible_for_cust ).
lo_char->if_cls_attribute~set_value_table( ls_char-cls_attribute-value_table ).
lo_char->if_cls_attribute~set_vtable_field( ls_char-cls_attribute-vtable_field ).
lo_char->if_cls_attribute~set_vtable_icon_f( ls_char-cls_attribute-vtable_icon_f ).
lo_char->if_cls_attribute~set_vtext_langu_f( ls_char-cls_attribute-vtext_langu_f ).
lo_char->if_cls_attribute~set_vtext_table( ls_char-cls_attribute-vtext_table ).
lo_char->if_cls_attribute~set_vtext_text_f( ls_char-cls_attribute-vtext_text_f ).
lo_char->if_cls_attribute~set_vtext_value_f( ls_char-cls_attribute-vtext_value_f ).
lo_char->if_cls_attribute~set_existing_objects_only( ls_char-cls_attribute-existing_objects ).
lo_char->if_cls_attribute~set_objs_of_typegr( ls_char-cls_attribute-objs_of_typegr ).
lo_char->if_cls_attribute~set_obj_values_have_subtypes( ls_char-cls_attribute-objs_w_subtype ).
lo_char->if_cls_attribute~set_arbtry_val_type( ls_char-cls_attribute-arbtry_val_type ).
READ TABLE ls_char-cls_attributet INTO ls_description WITH KEY langu = sy-langu.
IF sy-subrc <> 0.
READ TABLE ls_char-cls_attributet INTO ls_description INDEX 1.
ENDIF.
lo_char->if_cls_attribute~set_description( ls_description-text ).
lo_char->if_cls_attribute~set_values(
im_values = ls_char-cls_attr_value
im_values_t = ls_char-cls_attr_valuet ).
* set default package, see function module RS_CORR_INSERT
SET PARAMETER ID 'EUK' FIELD iv_package.
lo_char->if_pak_wb_object~save( ).
SET PARAMETER ID 'EUK' FIELD ''.
lo_char->if_pak_wb_object~activate( ).
lo_char->if_pak_wb_object_internal~unlock( ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
rv_bool = cl_cls_attribute=>exists_object_attribute( ms_item-obj_name ).
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = ms_item-obj_type
EXCEPTIONS
not_executed = 1
invalid_object_type = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from RS_TOOL_ACCESS, CHAR| ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_char TYPE ty_char.
CONSTANTS: lc_active TYPE c LENGTH 1 VALUE 'A'.
SELECT SINGLE * FROM cls_attribute INTO ls_char-cls_attribute
WHERE name = ms_item-obj_name
AND activation_state = lc_active.
* todo, ASSIGNMENT_DEVC?
CLEAR: ls_char-cls_attribute-created_by,
ls_char-cls_attribute-created_on,
ls_char-cls_attribute-changed_by,
ls_char-cls_attribute-changed_on.
SELECT * FROM cls_attributet INTO TABLE ls_char-cls_attributet
WHERE name = ms_item-obj_name
AND activation_state = lc_active.
SELECT * FROM cls_attr_value INTO TABLE ls_char-cls_attr_value
WHERE name = ms_item-obj_name
AND activation_state = lc_active.
SELECT * FROM cls_attr_valuet INTO TABLE ls_char-cls_attr_valuet
WHERE name = ms_item-obj_name
AND activation_state = lc_active.
io_xml->add( iv_name = 'CHAR'
ig_data = ls_char ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,18 @@
<?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_OBJECT_CHAR</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSFINAL>X</CLSFINAL>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -30,12 +30,17 @@ CLASS zcl_abapgit_object_clas_old DEFINITION PUBLIC INHERITING FROM zcl_abapgit_
serialize_xml
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception.
PRIVATE SECTION.
METHODS:
is_class_locked
RETURNING VALUE(rv_is_class_locked) TYPE abap_bool
RAISING zcx_abapgit_exception.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
CLASS zcl_abapgit_object_clas_old IMPLEMENTATION.
METHOD constructor.
@ -114,7 +119,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'LINES'
CHANGING cg_data = lt_lines ).
IF lt_lines[] IS INITIAL.
IF lines( lt_lines ) = 0.
RETURN.
ENDIF.
@ -155,7 +160,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
CHANGING cg_data = lt_tpool_ext ).
lt_tpool = read_tpool( lt_tpool_ext ).
IF lt_tpool[] IS INITIAL.
IF lines( lt_tpool ) = 0.
RETURN.
ENDIF.
@ -186,7 +191,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
zcl_abapgit_language=>set_current_language( mv_language ).
TRY.
ls_vseoclass = mo_object_oriented_object_fct->get_class_properties( is_class_key = ls_clskey ).
ls_vseoclass = mo_object_oriented_object_fct->get_class_properties( ls_clskey ).
CLEANUP.
zcl_abapgit_language=>restore_login_language( ).
@ -308,7 +313,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
DATA: ls_class_key TYPE seoclskey.
ls_class_key-clsname = ms_item-obj_name.
rv_bool = mo_object_oriented_object_fct->exists( iv_object_name = ls_class_key ).
rv_bool = mo_object_oriented_object_fct->exists( ls_class_key ).
ENDMETHOD. "zif_abapgit_object~exists
@ -374,7 +379,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_locals_def ).
IF NOT lt_source[] IS INITIAL.
IF lines( lt_source ) > 0.
mo_files->add_abap( iv_extra = 'locals_def'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
@ -382,7 +387,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_locals_imp ).
IF NOT lt_source[] IS INITIAL.
IF lines( lt_source ) > 0.
mo_files->add_abap( iv_extra = 'locals_imp'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
@ -392,7 +397,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
iv_type = seop_ext_class_testclasses ).
mv_skip_testclass = mo_object_oriented_object_fct->get_skip_test_classes( ).
IF NOT lt_source[] IS INITIAL AND mv_skip_testclass = abap_false.
IF lines( lt_source ) > 0 AND mv_skip_testclass = abap_false.
mo_files->add_abap( iv_extra = 'testclasses'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
@ -400,7 +405,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_macros ).
IF NOT lt_source[] IS INITIAL.
IF lines( lt_source ) > 0.
mo_files->add_abap( iv_extra = 'macros'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
@ -408,4 +413,44 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
serialize_xml( io_xml ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
DATA: lv_classpool TYPE program.
lv_classpool = cl_oo_classname_service=>get_classpool_name( |{ ms_item-obj_name }| ).
IF is_class_locked( ) = abap_true
OR is_text_locked( lv_classpool ) = abap_true.
rv_is_locked = abap_true.
ENDIF.
ENDMETHOD.
METHOD is_class_locked.
DATA: lv_clsname TYPE seoclsenq-clsname.
lv_clsname = ms_item-obj_name.
OVERLAY lv_clsname WITH '=============================='.
CALL FUNCTION 'ENQUEUE_ESEOCLASS'
EXPORTING
clsname = lv_clsname
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
rv_is_class_locked = boolc( sy-subrc <> 0 ).
CALL FUNCTION 'DEQUEUE_ESEOCLASS'
EXPORTING
clsname = lv_clsname.
ENDMETHOD.
ENDCLASS.

View File

@ -214,6 +214,12 @@ CLASS ZCL_ABAPGIT_OBJECT_CMPT IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'CMPT not supported' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -140,4 +140,10 @@ CLASS zcl_abapgit_object_cus0 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_cus0 IMPLEMENTATION

View File

@ -152,4 +152,10 @@ CLASS zcl_abapgit_object_cus1 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_cus1 IMPLEMENTATION

View File

@ -145,4 +145,10 @@ CLASS zcl_abapgit_object_cus2 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_cus2 IMPLEMENTATION

View File

@ -8,7 +8,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DCLS IMPLEMENTATION.
CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
@ -194,4 +194,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DCLS IMPLEMENTATION.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'E_ACMDCLSRC'
iv_argument = |{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS.

View File

@ -238,8 +238,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
CASE lv_ddtypekind.
WHEN 'STOB'.
me->open_adt_stob( iv_ddls_name = ms_item-obj_name ).
me->open_adt_stob( ms_item-obj_name ).
WHEN OTHERS.
zcx_abapgit_exception=>raise( 'DDLS Jump Error' ).
ENDCASE.
@ -254,7 +253,8 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
lt_clr_comps TYPE STANDARD TABLE OF fieldname WITH DEFAULT KEY.
FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_field> TYPE any.
<lg_field> TYPE any,
<lv_comp> LIKE LINE OF lt_clr_comps.
CREATE DATA lr_data TYPE ('DDDDLSRCV').
@ -281,10 +281,11 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
APPEND 'ACTFLAG' TO lt_clr_comps.
APPEND 'CHGFLAG' TO lt_clr_comps.
LOOP AT lt_clr_comps ASSIGNING field-symbol(<lv_comp>).
LOOP AT lt_clr_comps ASSIGNING <lv_comp>.
ASSIGN COMPONENT <lv_comp> OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
IF sy-subrc = 0.
CLEAR <lg_field>.
ENDIF.
ENDLOOP.
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_field>.
@ -299,4 +300,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
ig_data = <lg_data> ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS.

View File

@ -28,7 +28,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
CLASS zcl_abapgit_object_ddlx IMPLEMENTATION.
METHOD clear_field.
@ -254,4 +254,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS.

View File

@ -20,7 +20,16 @@ CLASS zcl_abapgit_object_devc DEFINITION PUBLIC
RAISING zcx_abapgit_exception,
set_lock IMPORTING ii_package TYPE REF TO if_package
iv_lock TYPE abap_bool
RAISING zcx_abapgit_exception,
is_empty
IMPORTING iv_package_name TYPE devclass
RETURNING VALUE(rv_is_empty) TYPE abap_bool
RAISING zcx_abapgit_exception,
load_package
IMPORTING iv_package_name TYPE devclass
RETURNING VALUE(ri_package) TYPE REF TO if_package
RAISING zcx_abapgit_exception.
DATA:
mv_local_devclass TYPE devclass.
ENDCLASS.
@ -39,24 +48,7 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
METHOD get_package.
IF me->zif_abapgit_object~exists( ) = abap_true.
cl_package_factory=>load_package(
EXPORTING
i_package_name = mv_local_devclass
i_force_reload = abap_true
IMPORTING
e_package = ri_package
EXCEPTIONS
object_not_existing = 1
unexpected_error = 2
intern_err = 3
no_access = 4
object_locked_and_modified = 5
OTHERS = 6 ).
IF sy-subrc = 1.
RETURN.
ELSEIF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ri_package = load_package( mv_local_devclass ).
ENDIF.
ENDMETHOD.
@ -209,12 +201,83 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: li_package TYPE REF TO if_package,
lv_package TYPE devclass.
" Package deletion is a bit tricky. A package can only be deleted if there are no objects
" contained in it. This includes subpackages, so first the leaf packages need to be deleted.
" Unfortunately deleted objects that are still contained in an unreleased transport request
" also count towards the contained objects counter.
" -> Package deletion is currently not supported by abapGit
" -> Currently we delete only empty packages
"
" If objects are deleted, the TADIR entry is deleted when the transport request is released.
" So before we can delete the package, the transport which deletes the objects
" in the package has to be released.
lv_package = ms_item-obj_name.
IF is_empty( lv_package ) = abap_true.
li_package = load_package( lv_package ).
IF li_package IS NOT BOUND.
RETURN.
ENDIF.
li_package->set_changeable(
EXPORTING
i_changeable = abap_true
i_suppress_dialog = abap_true
EXCEPTIONS
object_locked_by_other_user = 1
permission_failure = 2
object_already_changeable = 3
object_already_unlocked = 4
object_just_created = 5
object_deleted = 6
object_modified = 7
object_not_existing = 8
object_invalid = 9
unexpected_error = 10
OTHERS = 11 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
li_package->delete(
EXPORTING
i_suppress_dialog = abap_true
EXCEPTIONS
object_not_empty = 1
object_not_changeable = 2
object_invalid = 3
intern_err = 4
OTHERS = 5 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
li_package->save(
EXPORTING
i_suppress_dialog = abap_true
EXCEPTIONS
object_invalid = 1
object_not_changeable = 2
cancelled_in_corr = 3
permission_failure = 4
unexpected_error = 5
intern_err = 6
OTHERS = 7 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDIF.
ENDMETHOD.
@ -544,4 +607,65 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
io_xml->add( iv_name = 'PERMISSION' ig_data = lt_usage_data ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
DATA: lv_object TYPE eqegraarg .
lv_object = |DV{ ms_item-obj_name }|.
OVERLAY lv_object WITH ' '.
lv_object = lv_object && '*'.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB'
iv_argument = lv_object ).
ENDMETHOD.
METHOD is_empty.
DATA: lv_object_name TYPE tadir-obj_name,
lt_subpackages TYPE zif_abapgit_sap_package=>ty_devclass_tt.
lt_subpackages = zcl_abapgit_factory=>get_sap_package( iv_package_name )->list_subpackages( ).
IF lines( lt_subpackages ) > 0.
rv_is_empty = abap_false.
RETURN.
ENDIF.
SELECT SINGLE obj_name
FROM tadir
INTO lv_object_name
WHERE pgmid = 'R3TR'
AND NOT ( object = 'DEVC' AND obj_name = iv_package_name )
AND devclass = iv_package_name.
rv_is_empty = boolc( sy-subrc <> 0 ).
ENDMETHOD.
METHOD load_package.
cl_package_factory=>load_package(
EXPORTING
i_package_name = iv_package_name
i_force_reload = abap_true
IMPORTING
e_package = ri_package
EXCEPTIONS
object_not_existing = 1
unexpected_error = 2
intern_err = 3
no_access = 4
object_locked_and_modified = 5
OTHERS = 6 ).
IF sy-subrc = 1.
RETURN.
ELSEIF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -206,4 +206,11 @@ CLASS ZCL_ABAPGIT_OBJECT_DIAL IMPLEMENTATION.
WHERE dnam = lv_dnam.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -191,4 +191,10 @@ CLASS zcl_abapgit_object_doct IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_msag IMPLEMENTATION

View File

@ -153,4 +153,10 @@ CLASS zcl_abapgit_object_docv IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_msag IMPLEMENTATION

View File

@ -36,7 +36,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DOMA IMPLEMENTATION.
CLASS zcl_abapgit_object_doma IMPLEMENTATION.
METHOD deserialize_texts.
@ -205,6 +205,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DOMA IMPLEMENTATION.
lv_objname = ms_item-obj_name.
TRY.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
@ -220,6 +221,25 @@ CLASS ZCL_ABAPGIT_OBJECT_DOMA IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, DOMA' ).
ENDIF.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'D'
* no_ask_delete_append = abap_true parameter not available in lower NW versions
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, DOMA' ).
ENDIF.
ENDTRY.
ENDMETHOD. "delete
@ -369,4 +389,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DOMA IMPLEMENTATION.
serialize_texts( io_xml ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS.

View File

@ -162,4 +162,10 @@ CLASS zcl_abapgit_object_dsys IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_dsys IMPLEMENTATION

View File

@ -29,7 +29,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DTEL IMPLEMENTATION.
CLASS zcl_abapgit_object_dtel IMPLEMENTATION.
METHOD deserialize_texts.
@ -334,4 +334,13 @@ CLASS ZCL_ABAPGIT_OBJECT_DTEL IMPLEMENTATION.
serialize_texts( io_xml ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ecat DEFINITION
METHODS:
get_object_type REDEFINITION,
get_upload REDEFINITION,
get_download REDEFINITION.
get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS.
@ -51,4 +52,10 @@ CLASS zcl_abapgit_object_ecat IMPLEMENTATION.
ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT'.
ENDMETHOD.
ENDCLASS.

View File

@ -28,7 +28,11 @@ CLASS zcl_abapgit_object_ecatt_super DEFINITION
get_download ABSTRACT
RETURNING
VALUE(ro_download) TYPE REF TO cl_apl_ecatt_download.
VALUE(ro_download) TYPE REF TO cl_apl_ecatt_download,
get_lock_object ABSTRACT
RETURNING
VALUE(rv_lock_object) TYPE eqeobj.
PRIVATE SECTION.
TYPES:
@ -144,12 +148,9 @@ CLASS zcl_abapgit_object_ecatt_super IMPLEMENTATION.
lv_object_type = get_object_type( ).
lo_element = ci_document->find_from_name( |{ lv_object_type }| ).
lo_element->set_attribute( name = |SAPRL|
value = || ).
lo_element->set_attribute( name = |DOWNLOADDATE|
value = || ).
lo_element->set_attribute( name = |DOWNLOADTIME|
value = || ).
lo_element->remove_attribute( |SAPRL| ).
lo_element->remove_attribute( |DOWNLOADDATE| ).
lo_element->remove_attribute( |DOWNLOADTIME| ).
ENDMETHOD.
@ -631,5 +632,18 @@ CLASS zcl_abapgit_object_ecatt_super IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
DATA: lv_object TYPE seqg3-garg.
lv_object = ms_item-obj_name.
OVERLAY lv_object WITH ' '.
lv_object = lv_object && '*'.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = get_lock_object( )
iv_argument = lv_object ).
ENDMETHOD.
ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ecsd DEFINITION
METHODS:
get_object_type REDEFINITION,
get_upload REDEFINITION,
get_download REDEFINITION.
get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS.
@ -51,4 +52,10 @@ CLASS zcl_abapgit_object_ecsd IMPLEMENTATION.
ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_SD'.
ENDMETHOD.
ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ecsp DEFINITION
METHODS:
get_object_type REDEFINITION,
get_upload REDEFINITION,
get_download REDEFINITION.
get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS.
@ -53,4 +54,10 @@ CLASS zcl_abapgit_object_ecsp IMPLEMENTATION.
ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_SP'.
ENDMETHOD.
ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ectc DEFINITION
METHODS:
get_object_type REDEFINITION,
get_upload REDEFINITION,
get_download REDEFINITION.
get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS.
@ -51,4 +52,10 @@ CLASS zcl_abapgit_object_ectc IMPLEMENTATION.
ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_TC'.
ENDMETHOD.
ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ectd DEFINITION
METHODS:
get_object_type REDEFINITION,
get_upload REDEFINITION,
get_download REDEFINITION.
get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS.
@ -50,4 +51,10 @@ CLASS zcl_abapgit_object_ectd IMPLEMENTATION.
ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_TD'.
ENDMETHOD.
ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ecvo DEFINITION
METHODS:
get_object_type REDEFINITION,
get_upload REDEFINITION,
get_download REDEFINITION.
get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS.
@ -53,4 +54,10 @@ CLASS zcl_abapgit_object_ecvo IMPLEMENTATION.
ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_TD'.
ENDMETHOD.
ENDCLASS.

View File

@ -28,8 +28,43 @@ CLASS zcl_abapgit_object_enho IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown. " todo
ENDMETHOD. "zif_abapgit_object~changed_by
DATA: lv_enh_id TYPE enhname,
li_enho TYPE REF TO zif_abapgit_object_enho,
lt_log TYPE enh_log_it,
li_log_obj TYPE REF TO if_enh_log,
ls_enhlog TYPE enhlog,
lv_lines TYPE i,
lt_enhlog TYPE STANDARD TABLE OF enhlog WITH DEFAULT KEY,
li_enh_tool TYPE REF TO if_enh_tool.
lv_enh_id = ms_item-obj_name.
TRY.
li_enh_tool = cl_enh_factory=>get_enhancement(
enhancement_id = lv_enh_id
bypassing_buffer = abap_true ).
CATCH cx_enh_root.
rv_user = c_user_unknown.
RETURN.
ENDTRY.
lt_log = li_enh_tool->get_log( ).
LOOP AT lt_log INTO li_log_obj.
ls_enhlog = li_log_obj->get_enhlog( ).
APPEND ls_enhlog TO lt_enhlog.
ENDLOOP.
lv_lines = lines( lt_enhlog ).
READ TABLE lt_enhlog INTO ls_enhlog INDEX lv_lines.
IF sy-subrc = 0.
rv_user = ls_enhlog-loguser.
ELSE.
rv_user = c_user_unknown.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
@ -176,4 +211,10 @@ CLASS zcl_abapgit_object_enho IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. "zif_abapgit_object~compare_to_remote_version
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_enho IMPLEMENTATION

View File

@ -179,4 +179,10 @@ CLASS zcl_abapgit_object_enhs IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_enhs

View File

@ -175,4 +175,10 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_enqu IMPLEMENTATION

View File

@ -187,4 +187,10 @@ CLASS zcl_abapgit_object_ensc IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_ensc

View File

@ -39,6 +39,12 @@ CLASS zcl_abapgit_object_form DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
RETURNING
VALUE(r_result) TYPE string.
METHODS _build_extra_from_header_old
IMPORTING
ls_header TYPE tys_form_header
RETURNING
VALUE(r_result) TYPE string.
METHODS _save_form
IMPORTING
it_lines TYPE zcl_abapgit_object_form=>tyt_lines
@ -254,6 +260,20 @@ CLASS zcl_abapgit_object_form IMPLEMENTATION.
ENDMETHOD.
METHOD _build_extra_from_header.
DATA: lv_tdspras type laiso.
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
EXPORTING
input = ls_header-tdspras
IMPORTING
output = lv_tdspras.
r_result = c_objectname_tdlines && '_' && lv_tdspras.
ENDMETHOD.
METHOD _build_extra_from_header_old.
r_result = c_objectname_tdlines && '_' && ls_header-tdspras.
ENDMETHOD.
@ -307,9 +327,17 @@ CLASS zcl_abapgit_object_form IMPLEMENTATION.
DATA lv_string TYPE string.
DATA lo_xml TYPE REF TO zcl_abapgit_xml_input.
TRY.
lv_string = mo_files->read_string( iv_extra =
_build_extra_from_header( is_form_data-form_header )
iv_ext = c_extension_xml ).
CATCH zcx_abapgit_exception.
lv_string = mo_files->read_string( iv_extra =
_build_extra_from_header_old( is_form_data-form_header )
iv_ext = c_extension_xml ).
ENDTRY.
CREATE OBJECT lo_xml EXPORTING iv_xml = lv_string.
lo_xml->read( EXPORTING iv_name = c_objectname_tdlines
@ -406,4 +434,10 @@ CLASS zcl_abapgit_object_form IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_FORM IMPLEMENTATION

View File

@ -5,9 +5,11 @@ CLASS zcl_abapgit_object_fugr DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ALIASES mo_files FOR zif_abapgit_object~mo_files.
PRIVATE SECTION.
TYPES: ty_rs38l_incl_tt TYPE STANDARD TABLE OF rs38l_incl WITH DEFAULT KEY.
TYPES: BEGIN OF ty_function,
TYPES:
ty_rs38l_incl_tt TYPE STANDARD TABLE OF rs38l_incl WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_function,
funcname TYPE rs38l_fnam,
global_flag TYPE rs38l-global,
remote_call TYPE rs38l-remote,
@ -22,56 +24,87 @@ CLASS zcl_abapgit_object_fugr DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
documentation TYPE STANDARD TABLE OF rsfdo WITH DEFAULT KEY,
exception_classes TYPE abap_bool,
END OF ty_function .
TYPES:
ty_function_tt TYPE STANDARD TABLE OF ty_function WITH DEFAULT KEY .
TYPES: ty_function_tt TYPE STANDARD TABLE OF ty_function WITH DEFAULT KEY.
METHODS update_where_used
IMPORTING
!it_includes TYPE rso_t_objnm .
METHODS main_name
RETURNING VALUE(rv_program) TYPE program
RAISING zcx_abapgit_exception.
RETURNING
VALUE(rv_program) TYPE program
RAISING
zcx_abapgit_exception .
METHODS functions
RETURNING VALUE(rt_functab) TYPE ty_rs38l_incl_tt
RAISING zcx_abapgit_exception.
RETURNING
VALUE(rt_functab) TYPE ty_rs38l_incl_tt
RAISING
zcx_abapgit_exception .
METHODS includes
RETURNING VALUE(rt_includes) TYPE rso_t_objnm
RAISING zcx_abapgit_exception.
RETURNING
VALUE(rt_includes) TYPE rso_t_objnm
RAISING
zcx_abapgit_exception .
METHODS serialize_functions
RETURNING VALUE(rt_functions) TYPE ty_function_tt
RAISING zcx_abapgit_exception.
RETURNING
VALUE(rt_functions) TYPE ty_function_tt
RAISING
zcx_abapgit_exception .
METHODS deserialize_functions
IMPORTING it_functions TYPE ty_function_tt
RAISING zcx_abapgit_exception.
IMPORTING
!it_functions TYPE ty_function_tt
RAISING
zcx_abapgit_exception .
METHODS serialize_xml
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception.
IMPORTING
!io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING
zcx_abapgit_exception .
METHODS deserialize_xml
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
iv_package TYPE devclass
RAISING zcx_abapgit_exception.
IMPORTING
!io_xml TYPE REF TO zcl_abapgit_xml_input
!iv_package TYPE devclass
RAISING
zcx_abapgit_exception .
METHODS serialize_includes
RAISING zcx_abapgit_exception.
RAISING
zcx_abapgit_exception .
METHODS deserialize_includes
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
iv_package TYPE devclass
RAISING zcx_abapgit_exception.
IMPORTING
!io_xml TYPE REF TO zcl_abapgit_xml_input
!iv_package TYPE devclass
RAISING
zcx_abapgit_exception .
METHODS are_exceptions_class_based
IMPORTING iv_function_name TYPE rs38l_fnam
RETURNING VALUE(rv_return) TYPE abap_bool
RAISING zcx_abapgit_exception.
IMPORTING
iv_function_name TYPE rs38l_fnam
RETURNING
VALUE(rv_return) TYPE abap_bool
RAISING
zcx_abapgit_exception .
METHODS is_function_group_locked
RETURNING
VALUE(rv_is_functions_group_locked) TYPE abap_bool
RAISING
zcx_abapgit_exception.
METHODS is_any_include_locked
RETURNING
VALUE(rv_is_any_include_locked) TYPE abap_bool
RAISING
zcx_abapgit_exception.
METHODS is_any_function_module_locked
RETURNING
VALUE(rv_any_function_module_locked) TYPE abap_bool
RAISING
zcx_abapgit_exception.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
METHOD are_exceptions_class_based.
@ -559,6 +592,29 @@ CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
ENDMETHOD. "serialize_xml
METHOD update_where_used.
* make extra sure the where-used list is updated after deletion
* Experienced some problems with the T00 include
* this method just tries to update everything
DATA: lv_include LIKE LINE OF it_includes,
lo_cross TYPE REF TO cl_wb_crossreference.
LOOP AT it_includes INTO lv_include.
CREATE OBJECT lo_cross
EXPORTING
p_name = lv_include
p_include = lv_include.
lo_cross->index_actualize( ).
ENDLOOP.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
TYPES: BEGIN OF ty_stamps,
@ -634,9 +690,12 @@ CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: lv_area TYPE rs38l-area.
DATA: lv_area TYPE rs38l-area,
lt_includes TYPE rso_t_objnm.
lt_includes = includes( ).
lv_area = ms_item-obj_name.
CALL FUNCTION 'RS_FUNCTION_POOL_DELETE'
@ -659,6 +718,8 @@ CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'error from RS_FUNCTION_POOL_DELETE' ).
ENDIF.
update_where_used( lt_includes ).
ENDMETHOD. "delete
@ -801,4 +862,87 @@ CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
ENDIF.
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
DATA: lv_program TYPE program.
lv_program = main_name( ).
IF is_function_group_locked( ) = abap_true
OR is_any_include_locked( ) = abap_true
OR is_any_function_module_locked( ) = abap_true
OR is_any_dynpro_locked( lv_program ) = abap_true
OR is_cua_locked( lv_program ) = abap_true
OR is_text_locked( lv_program ) = abap_true.
rv_is_locked = abap_true.
ENDIF.
ENDMETHOD.
METHOD is_function_group_locked.
DATA: lv_object TYPE eqegraarg .
lv_object = |FG{ ms_item-obj_name }|.
OVERLAY lv_object WITH ' '.
lv_object = lv_object && '*'.
rv_is_functions_group_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB'
iv_argument = lv_object ).
ENDMETHOD.
METHOD is_any_include_locked.
DATA: lt_includes TYPE rso_t_objnm.
FIELD-SYMBOLS: <lv_include> TYPE sobj_name.
TRY.
lt_includes = includes( ).
CATCH zcx_abapgit_exception.
RETURN.
ENDTRY.
LOOP AT lt_includes ASSIGNING <lv_include>.
IF exists_a_lock_entry_for( iv_lock_object = 'ESRDIRE'
iv_argument = |{ <lv_include> }| ) = abap_true.
rv_is_any_include_locked = abap_true.
EXIT.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD is_any_function_module_locked.
DATA: lt_functions TYPE zcl_abapgit_object_fugr=>ty_rs38l_incl_tt.
FIELD-SYMBOLS: <ls_function> TYPE rs38l_incl.
TRY.
lt_functions = functions( ).
CATCH zcx_abapgit_exception.
RETURN.
ENDTRY.
LOOP AT lt_functions ASSIGNING <ls_function>.
IF exists_a_lock_entry_for( iv_lock_object = 'ESFUNCTION'
iv_argument = |{ <ls_function>-funcname }| ) = abap_true.
rv_any_function_module_locked = abap_true.
EXIT.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

View File

@ -296,4 +296,10 @@ CLASS zcl_abapgit_object_iamu IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -184,4 +184,10 @@ CLASS zcl_abapgit_object_iarp IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_iarp IMPLEMENTATION

View File

@ -184,4 +184,10 @@ CLASS zcl_abapgit_object_iasp IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_iasp IMPLEMENTATION

View File

@ -201,4 +201,10 @@ CLASS zcl_abapgit_object_iatu IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_iatu IMPLEMENTATION

View File

@ -0,0 +1,235 @@
CLASS zcl_abapgit_object_idoc DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
ALIASES mo_files FOR zif_abapgit_object~mo_files.
METHODS:
constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
iv_language TYPE spras.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_idoc,
attributes TYPE edi_iapi01,
t_syntax TYPE STANDARD TABLE OF edi_iapi02 WITH NON-UNIQUE DEFAULT KEY,
END OF ty_idoc.
DATA:
mv_idoctyp TYPE edi_iapi00-idoctyp.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_IDOC IMPLEMENTATION.
METHOD constructor.
super->constructor( is_item = is_item
iv_language = iv_language ).
mv_idoctyp = ms_item-obj_name.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
DATA: ls_attributes TYPE edi_iapi01.
CALL FUNCTION 'IDOCTYPE_READ'
EXPORTING
pi_idoctyp = mv_idoctyp
IMPORTING
pe_attributes = ls_attributes
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
rv_user = ls_attributes-plast.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
CALL FUNCTION 'IDOCTYPE_DELETE'
EXPORTING
pi_idoctyp = mv_idoctyp
EXCEPTIONS
object_not_found = 1
lock_error = 2
action_not_possible = 3
transport_error = 4
db_error = 5
no_authority = 6
OTHERS = 7.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_idoc TYPE ty_idoc,
ls_attributes TYPE edi_iapi05.
io_xml->read(
EXPORTING
iv_name = 'IDOC'
CHANGING
cg_data = ls_idoc ).
MOVE-CORRESPONDING ls_idoc-attributes TO ls_attributes.
CALL FUNCTION 'IDOCTYPE_CREATE'
EXPORTING
pi_idoctyp = mv_idoctyp
pi_devclass = iv_package
pi_attributes = ls_attributes
TABLES
pt_syntax = ls_idoc-t_syntax
EXCEPTIONS
object_not_found = 1
object_exists = 2
action_not_possible = 3
syntax_error = 4
segment_error = 5
transport_error = 6
db_error = 7
no_authority = 8
OTHERS = 9.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
CALL FUNCTION 'IDOCTYPE_READ'
EXPORTING
pi_idoctyp = mv_idoctyp
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
DATA: lt_bdcdata TYPE TABLE OF bdcdata.
FIELD-SYMBOLS: <ls_bdcdata> LIKE LINE OF lt_bdcdata.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-program = 'SAPMSED5'.
<ls_bdcdata>-dynpro = '0010'.
<ls_bdcdata>-dynbegin = abap_true.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'SED5STRUC-OBJECT'.
<ls_bdcdata>-fval = ms_item-obj_name.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'SED5STRUC-SELECT_ORG'.
<ls_bdcdata>-fval = abap_true.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'BDC_OKCODE'.
<ls_bdcdata>-fval = '=DISP'.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
STARTING NEW TASK 'GIT'
EXPORTING
tcode = 'WE30'
mode_val = 'E'
TABLES
using_tab = lt_bdcdata
EXCEPTIONS
system_failure = 1
communication_failure = 2
resource_failure = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_idoc TYPE ty_idoc.
CALL FUNCTION 'IDOCTYPE_READ'
EXPORTING
pi_idoctyp = mv_idoctyp
IMPORTING
pe_attributes = ls_idoc-attributes
TABLES
pt_syntax = ls_idoc-t_syntax
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CLEAR: ls_idoc-attributes-devc,
ls_idoc-attributes-plast,
ls_idoc-attributes-credate,
ls_idoc-attributes-cretime,
ls_idoc-attributes-ldate,
ls_idoc-attributes-ltime.
io_xml->add( iv_name = 'IDOC'
ig_data = ls_idoc ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,18 @@
<?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_OBJECT_IDOC</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSFINAL>X</CLSFINAL>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,231 @@
CLASS zcl_abapgit_object_iext DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
ALIASES mo_files FOR zif_abapgit_object~mo_files.
METHODS:
constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
iv_language TYPE spras.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_extention,
attributes TYPE edi_iapi01,
t_syntax TYPE STANDARD TABLE OF edi_iapi03 WITH NON-UNIQUE DEFAULT KEY,
END OF ty_extention.
DATA:
mv_extension TYPE edi_cimtyp.
ENDCLASS.
CLASS zcl_abapgit_object_iext IMPLEMENTATION.
METHOD constructor.
super->constructor( is_item = is_item
iv_language = iv_language ).
mv_extension = ms_item-obj_name.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
DATA: ls_attributes TYPE edi_iapi01.
CALL FUNCTION 'EXTTYPE_READ'
EXPORTING
pi_cimtyp = mv_extension
IMPORTING
pe_attributes = ls_attributes
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
rv_user = ls_attributes-plast.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
CALL FUNCTION 'EXTTYPE_DELETE'
EXPORTING
pi_cimtyp = mv_extension
EXCEPTIONS
object_not_found = 1
lock_error = 2
action_not_possible = 3
transport_error = 4
db_error = 5
no_authority = 6
OTHERS = 7.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_extension TYPE ty_extention,
ls_attributes TYPE edi_iapi05.
io_xml->read(
EXPORTING
iv_name = 'IEXT'
CHANGING
cg_data = ls_extension ).
MOVE-CORRESPONDING ls_extension-attributes TO ls_attributes.
CALL FUNCTION 'EXTTYPE_CREATE'
EXPORTING
pi_cimtyp = mv_extension
pi_devclass = iv_package
pi_attributes = ls_attributes
TABLES
pt_syntax = ls_extension-t_syntax
EXCEPTIONS
object_not_found = 1
object_exists = 2
action_not_possible = 3
syntax_error = 4
segment_error = 5
transport_error = 6
db_error = 7
no_authority = 8
OTHERS = 9.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
CALL FUNCTION 'EXTTYPE_READ'
EXPORTING
pi_cimtyp = mv_extension
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
DATA: lt_bdcdata TYPE TABLE OF bdcdata.
FIELD-SYMBOLS: <ls_bdcdata> LIKE LINE OF lt_bdcdata.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-program = 'SAPMSED5'.
<ls_bdcdata>-dynpro = '0010'.
<ls_bdcdata>-dynbegin = abap_true.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'SED5STRUC-OBJECT'.
<ls_bdcdata>-fval = ms_item-obj_name.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'SED5STRUC-SELECT_EXT'.
<ls_bdcdata>-fval = abap_true.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'BDC_OKCODE'.
<ls_bdcdata>-fval = '=DISP'.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
STARTING NEW TASK 'GIT'
EXPORTING
tcode = 'WE30'
mode_val = 'E'
TABLES
using_tab = lt_bdcdata
EXCEPTIONS
system_failure = 1
communication_failure = 2
resource_failure = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_extension TYPE ty_extention.
CALL FUNCTION 'EXTTYPE_READ'
EXPORTING
pi_cimtyp = mv_extension
IMPORTING
pe_attributes = ls_extension-attributes
TABLES
pt_syntax = ls_extension-t_syntax
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CLEAR: ls_extension-attributes-devc,
ls_extension-attributes-plast,
ls_extension-attributes-credate,
ls_extension-attributes-cretime,
ls_extension-attributes-ldate,
ls_extension-attributes-ltime.
io_xml->add( iv_name = 'IEXT'
ig_data = ls_extension ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,18 @@
<?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_OBJECT_IEXT</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSFINAL>X</CLSFINAL>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -34,7 +34,7 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
super->constructor(
is_item = is_item
iv_language = iv_language ).
mo_object_oriented_object_fct = zcl_abapgit_oo_factory=>make( iv_object_type = ms_item-obj_type ).
mo_object_oriented_object_fct = zcl_abapgit_oo_factory=>make( ms_item-obj_type ).
ENDMETHOD.
@ -67,7 +67,7 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
is_key = ls_clskey
it_descriptions = lt_descriptions ).
mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ).
mo_object_oriented_object_fct->add_to_activation_list( ms_item ).
ENDMETHOD.
@ -79,7 +79,7 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'LINES'
CHANGING cg_data = lt_lines ).
IF lt_lines[] IS INITIAL.
IF lines( lt_lines ) = 0.
RETURN.
ENDIF.
@ -194,7 +194,7 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
ls_class_key-clsname = ms_item-obj_name.
rv_bool = mo_object_oriented_object_fct->exists( iv_object_name = ls_class_key ).
rv_bool = mo_object_oriented_object_fct->exists( ls_class_key ).
IF rv_bool = abap_true.
SELECT SINGLE category FROM seoclassdf INTO lv_category
@ -265,4 +265,18 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
serialize_xml( io_xml ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
DATA: lv_object TYPE eqegraarg.
lv_object = |{ ms_item-obj_name }|.
OVERLAY lv_object WITH '==============================P'.
lv_object = lv_object && '*'.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESEOCLASS'
iv_argument = lv_object ).
ENDMETHOD.
ENDCLASS.

View File

@ -205,4 +205,11 @@ CLASS ZCL_ABAPGIT_OBJECT_JOBD IMPLEMENTATION.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -288,4 +288,10 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_msag IMPLEMENTATION

View File

@ -274,4 +274,10 @@ CLASS zcl_abapgit_object_nrob IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_nrob IMPLEMENTATION

View File

@ -10,7 +10,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
* looks like "changed by user" is not stored in the database
@ -19,7 +19,9 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
* Data elements can refer to PARA objects
rs_metadata-ddic = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
@ -30,7 +32,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
WHERE paramid = ms_item-obj_name. "#EC CI_GENBUFF
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD. "zif_abapgit_object~exists
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
@ -53,7 +55,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
io_xml->add( iv_name = 'TPARAT'
ig_data = ls_tparat ).
ENDMETHOD. "serialize
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
* see fm RS_PARAMETER_ADD and RS_PARAMETER_EDIT
@ -99,7 +101,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
MODIFY tparat FROM ls_tparat. "#EC CI_SUBRC
ASSERT sy-subrc = 0.
ENDMETHOD. "deserialize
ENDMETHOD.
METHOD zif_abapgit_object~delete.
@ -117,7 +119,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'error from RS_PRAMETER_DELETE' ).
ENDIF.
ENDMETHOD. "delete
ENDMETHOD.
METHOD zif_abapgit_object~jump.
@ -128,10 +130,16 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
object_type = 'PARA'
in_new_window = abap_true.
ENDMETHOD. "jump
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_para IMPLEMENTATION
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -345,4 +345,10 @@ CLASS zcl_abapgit_object_pinf IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_PINF IMPLEMENTATION

View File

@ -182,4 +182,11 @@ CLASS ZCL_ABAPGIT_OBJECT_PRAG IMPLEMENTATION.
zcx_abapgit_exception=>raise( |Pragma { ms_item-obj_name } doesn't exist| ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -17,13 +17,18 @@ CLASS zcl_abapgit_object_prog DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
RAISING zcx_abapgit_exception,
deserialize_texts
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception.
RAISING zcx_abapgit_exception,
is_program_locked
RETURNING
VALUE(rv_is_program_locked) TYPE abap_bool
RAISING
zcx_abapgit_exception.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION.
CLASS zcl_abapgit_object_prog IMPLEMENTATION.
METHOD deserialize_texts.
@ -148,7 +153,7 @@ CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'DYNPROS'
CHANGING cg_data = lt_dynpros ).
deserialize_dynpros( it_dynpros = lt_dynpros ).
deserialize_dynpros( lt_dynpros ).
io_xml->read( EXPORTING iv_name = 'CUA'
CHANGING cg_data = ls_cua ).
@ -213,4 +218,26 @@ CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION.
serialize_texts( io_xml ).
ENDMETHOD. "zif_abapgit_serialize~serialize
METHOD zif_abapgit_object~is_locked.
IF is_program_locked( ) = abap_true
OR is_any_dynpro_locked( ms_item-obj_name ) = abap_true
OR is_cua_locked( ms_item-obj_name ) = abap_true
OR is_text_locked( ms_item-obj_name ) = abap_true.
rv_is_locked = abap_true.
ENDIF.
ENDMETHOD.
METHOD is_program_locked.
rv_is_program_locked = exists_a_lock_entry_for( iv_lock_object = 'ESRDIRE'
iv_argument = |{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS.

View File

@ -176,6 +176,13 @@ CLASS ZCL_ABAPGIT_OBJECT_SFBF IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'

View File

@ -224,4 +224,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SFBS IMPLEMENTATION.
iv_name = 'PARENT_BFS' ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -224,4 +224,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SFPF IMPLEMENTATION.
io_xml->set_raw( li_document->get_root_element( ) ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -157,4 +157,10 @@ CLASS zcl_abapgit_object_sfpi IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_doma IMPLEMENTATION

View File

@ -215,4 +215,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SFSW IMPLEMENTATION.
iv_name = 'CONFLICTS' ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -261,4 +261,10 @@ CLASS zcl_abapgit_object_shi3 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_shi3 IMPLEMENTATION

View File

@ -126,4 +126,10 @@ CLASS zcl_abapgit_object_shi5 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_shi5 IMPLEMENTATION

View File

@ -132,4 +132,10 @@ CLASS zcl_abapgit_object_shi8 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_shi8 IMPLEMENTATION

View File

@ -196,4 +196,10 @@ CLASS zcl_abapgit_object_shlp IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_shlp IMPLEMENTATION

View File

@ -266,4 +266,10 @@ CLASS zcl_abapgit_object_shma IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -572,4 +572,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SICF IMPLEMENTATION.
ig_data = lt_icfhandler ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -330,4 +330,10 @@ CLASS zcl_abapgit_object_smim IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_smim IMPLEMENTATION

View File

@ -109,4 +109,10 @@ CLASS zcl_abapgit_object_splo IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_splo IMPLEMENTATION

View File

@ -181,4 +181,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SRFC IMPLEMENTATION.
ig_data = <lg_srfc_data> ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -225,7 +225,9 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
lv_name TYPE string,
li_iterator TYPE REF TO if_ixml_node_iterator,
lo_sf TYPE REF TO cl_ssf_fb_smart_form,
lo_res TYPE REF TO cl_ssf_fb_smart_form.
lo_res TYPE REF TO cl_ssf_fb_smart_form,
lx_error TYPE REF TO cx_ssf_fb,
lv_text TYPE string.
CREATE OBJECT lo_sf.
@ -252,6 +254,8 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
tadir_insert( iv_package ).
lv_formname = ms_item-obj_name.
TRY.
lo_sf->enqueue( suppress_corr_check = space
master_language = mv_language
mode = 'INSERT'
@ -268,10 +272,22 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
lo_sf->dequeue( lv_formname ).
CATCH cx_ssf_fb INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( |{ ms_item-obj_type } { ms_item-obj_name }: { lv_text } | ).
ENDTRY.
ENDMETHOD. "deserialize
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'E_SMFORM'
iv_argument = |{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_ssfo IMPLEMENTATION

View File

@ -261,4 +261,12 @@ CLASS ZCL_ABAPGIT_OBJECT_SSST IMPLEMENTATION.
iv_name = 'STXSTAB' ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'E_SMSTYLE'
iv_argument = |{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS.

Some files were not shown because too many files have changed in this diff Show More